163ab9afeSSatoshi Sahara<?php 263ab9afeSSatoshi Sahara 363ab9afeSSatoshi Saharanamespace dokuwiki\Ui; 463ab9afeSSatoshi Sahara 563ab9afeSSatoshi Saharause dokuwiki\ChangeLog\PageChangeLog; 663ab9afeSSatoshi Saharause dokuwiki\ChangeLog\MediaChangeLog; 763ab9afeSSatoshi Sahara 863ab9afeSSatoshi Sahara/** 963ab9afeSSatoshi Sahara * DokuWiki Diff Interface 1063ab9afeSSatoshi Sahara * parent class of PageDiff and MediaDiff 1163ab9afeSSatoshi Sahara * 1263ab9afeSSatoshi Sahara * @package dokuwiki\Ui 1363ab9afeSSatoshi Sahara */ 1463ab9afeSSatoshi Saharaabstract class Diff extends Ui 1563ab9afeSSatoshi Sahara{ 16*edb50e6aSSatoshi Sahara /* @var string */ 17*edb50e6aSSatoshi Sahara protected $id; // page id or media id 18*edb50e6aSSatoshi Sahara 19*edb50e6aSSatoshi Sahara /* @var array */ 20*edb50e6aSSatoshi Sahara protected $preference = []; 21*edb50e6aSSatoshi Sahara 22*edb50e6aSSatoshi Sahara /** 23*edb50e6aSSatoshi Sahara * Diff Ui constructor 24*edb50e6aSSatoshi Sahara * 25*edb50e6aSSatoshi Sahara * @param string $id page id or media id 26*edb50e6aSSatoshi Sahara */ 27*edb50e6aSSatoshi Sahara public function __construct($id) 28*edb50e6aSSatoshi Sahara { 29*edb50e6aSSatoshi Sahara $this->id = $id; 30*edb50e6aSSatoshi Sahara } 31*edb50e6aSSatoshi Sahara 32*edb50e6aSSatoshi Sahara /** 33*edb50e6aSSatoshi Sahara * Gets or Sets preference of the Ui\Diff object 34*edb50e6aSSatoshi Sahara * 35*edb50e6aSSatoshi Sahara * @param string|array $prefs a key name or key-value pair(s) 36*edb50e6aSSatoshi Sahara * @param mixed $value value used when the first args is string 37*edb50e6aSSatoshi Sahara * @return array|$this 38*edb50e6aSSatoshi Sahara */ 39*edb50e6aSSatoshi Sahara public function preference($prefs = null, $value = null) 40*edb50e6aSSatoshi Sahara { 41*edb50e6aSSatoshi Sahara // set 42*edb50e6aSSatoshi Sahara if (is_array($prefs)) { 43*edb50e6aSSatoshi Sahara foreach ($prefs as $name => $value) { 44*edb50e6aSSatoshi Sahara $this->preference[$name] = $value; 45*edb50e6aSSatoshi Sahara } 46*edb50e6aSSatoshi Sahara return $this; 47*edb50e6aSSatoshi Sahara } elseif (is_string($prefs) && isset($value)) { 48*edb50e6aSSatoshi Sahara $this->preference[$prefs] = $value; 49*edb50e6aSSatoshi Sahara return $this; 50*edb50e6aSSatoshi Sahara } 51*edb50e6aSSatoshi Sahara // get 52*edb50e6aSSatoshi Sahara return $this->preference; 53*edb50e6aSSatoshi Sahara } 54*edb50e6aSSatoshi Sahara 55*edb50e6aSSatoshi Sahara 5663ab9afeSSatoshi Sahara /** 5763ab9afeSSatoshi Sahara * Get header of diff HTML 5863ab9afeSSatoshi Sahara * 59*edb50e6aSSatoshi Sahara * @param ChangeLog $changelog PageChangeLog or MediaChangeLog object 6063ab9afeSSatoshi Sahara * @param string $l_rev Left revisions 6163ab9afeSSatoshi Sahara * @param string $r_rev Right revision 62*edb50e6aSSatoshi Sahara * @param string $id Page id, if null $ID is used // クラスプロパティを使用するべき 63*edb50e6aSSatoshi Sahara * @param bool $media If it is for media files // changelog object を渡せばよいのは? 64*edb50e6aSSatoshi Sahara * @param bool $inline Return the header on a single line // クラスプロパティを使用するべき 6563ab9afeSSatoshi Sahara * @return string[] HTML snippets for diff header 6663ab9afeSSatoshi Sahara */ 67*edb50e6aSSatoshi Sahara public function diffHead($changelog, $l_rev, $r_rev) 6863ab9afeSSatoshi Sahara { 6963ab9afeSSatoshi Sahara global $lang; 70*edb50e6aSSatoshi Sahara 71*edb50e6aSSatoshi Sahara // detect PageDiff or MediaDiff 72*edb50e6aSSatoshi Sahara switch (get_class($changelog)) { 73*edb50e6aSSatoshi Sahara case PageChangeLog::class : 74*edb50e6aSSatoshi Sahara $media_or_wikiFN = 'wikiFN'; 75*edb50e6aSSatoshi Sahara $ml_or_wl = 'wl'; 76*edb50e6aSSatoshi Sahara $media = false; 77*edb50e6aSSatoshi Sahara break; 78*edb50e6aSSatoshi Sahara case MediaChangeLog::class : 79*edb50e6aSSatoshi Sahara $media_or_wikiFN = 'mediaFN'; 80*edb50e6aSSatoshi Sahara $ml_or_wl = 'ml'; 81*edb50e6aSSatoshi Sahara $media = true; 82*edb50e6aSSatoshi Sahara break; 8363ab9afeSSatoshi Sahara } 84*edb50e6aSSatoshi Sahara 85*edb50e6aSSatoshi Sahara $head_separator = ($this->preference['difftype'] === 'inline') ? ' ' : '<br />'; 8663ab9afeSSatoshi Sahara $l_minor = $r_minor = ''; 8763ab9afeSSatoshi Sahara 88*edb50e6aSSatoshi Sahara // left side 8963ab9afeSSatoshi Sahara if (!$l_rev) { 9063ab9afeSSatoshi Sahara $l_head = '—'; 9163ab9afeSSatoshi Sahara } else { 9263ab9afeSSatoshi Sahara $l_info = $changelog->getRevisionInfo($l_rev); 9363ab9afeSSatoshi Sahara if ($l_info['user']) { 9463ab9afeSSatoshi Sahara $l_user = '<bdi>'.editorinfo($l_info['user']).'</bdi>'; 9563ab9afeSSatoshi Sahara if (auth_ismanager()) $l_user .= ' <bdo dir="ltr">('.$l_info['ip'].')</bdo>'; 9663ab9afeSSatoshi Sahara } else { 9763ab9afeSSatoshi Sahara $l_user = '<bdo dir="ltr">'.$l_info['ip'].'</bdo>'; 9863ab9afeSSatoshi Sahara } 9963ab9afeSSatoshi Sahara $l_user = '<span class="user">'.$l_user.'</span>'; 10063ab9afeSSatoshi Sahara $l_sum = ($l_info['sum']) ? '<span class="sum"><bdi>'.hsc($l_info['sum']).'</bdi></span>' : ''; 10163ab9afeSSatoshi Sahara if ($l_info['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) $l_minor = 'class="minor"'; 10263ab9afeSSatoshi Sahara 103*edb50e6aSSatoshi Sahara $l_head_title = ($media) ? dformat($l_rev) : $this->id.' ['.dformat($l_rev).']'; 104*edb50e6aSSatoshi Sahara $l_head = '<bdi><a class="wikilink1" href="'.$ml_or_wl($this->id,"rev=$l_rev").'">' 10563ab9afeSSatoshi Sahara . $l_head_title.'</a></bdi>'.$head_separator.$l_user.' '.$l_sum; 10663ab9afeSSatoshi Sahara } 10763ab9afeSSatoshi Sahara 108*edb50e6aSSatoshi Sahara // right side 10963ab9afeSSatoshi Sahara if ($r_rev) { 11063ab9afeSSatoshi Sahara $r_info = $changelog->getRevisionInfo($r_rev); 11163ab9afeSSatoshi Sahara if ($r_info['user']) { 11263ab9afeSSatoshi Sahara $r_user = '<bdi>'.editorinfo($r_info['user']).'</bdi>'; 11363ab9afeSSatoshi Sahara if (auth_ismanager()) $r_user .= ' <bdo dir="ltr">('.$r_info['ip'].')</bdo>'; 11463ab9afeSSatoshi Sahara } else { 11563ab9afeSSatoshi Sahara $r_user = '<bdo dir="ltr">'.$r_info['ip'].'</bdo>'; 11663ab9afeSSatoshi Sahara } 11763ab9afeSSatoshi Sahara $r_user = '<span class="user">'.$r_user.'</span>'; 11863ab9afeSSatoshi Sahara $r_sum = ($r_info['sum']) ? '<span class="sum"><bdi>'.hsc($r_info['sum']).'</bdi></span>' : ''; 11963ab9afeSSatoshi Sahara if ($r_info['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"'; 12063ab9afeSSatoshi Sahara 121*edb50e6aSSatoshi Sahara $r_head_title = ($media) ? dformat($r_rev) : $this->id.' ['.dformat($r_rev).']'; 122*edb50e6aSSatoshi Sahara $r_head = '<bdi><a class="wikilink1" href="'.$ml_or_wl($this->id,"rev=$r_rev").'">' 12363ab9afeSSatoshi Sahara . $r_head_title.'</a></bdi>'.$head_separator.$r_user.' '.$r_sum; 124*edb50e6aSSatoshi Sahara } elseif ($_rev = @filemtime($media_or_wikiFN($this->id))) { 12563ab9afeSSatoshi Sahara $_info = $changelog->getRevisionInfo($_rev); 12663ab9afeSSatoshi Sahara if ($_info['user']) { 12763ab9afeSSatoshi Sahara $_user = '<bdi>'.editorinfo($_info['user']).'</bdi>'; 12863ab9afeSSatoshi Sahara if (auth_ismanager()) $_user .= ' <bdo dir="ltr">('.$_info['ip'].')</bdo>'; 12963ab9afeSSatoshi Sahara } else { 13063ab9afeSSatoshi Sahara $_user = '<bdo dir="ltr">'.$_info['ip'].'</bdo>'; 13163ab9afeSSatoshi Sahara } 13263ab9afeSSatoshi Sahara $_user = '<span class="user">'.$_user.'</span>'; 13363ab9afeSSatoshi Sahara $_sum = ($_info['sum']) ? '<span class="sum"><bdi>'.hsc($_info['sum']).'</span></bdi>' : ''; 13463ab9afeSSatoshi Sahara if ($_info['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) $r_minor = 'class="minor"'; 13563ab9afeSSatoshi Sahara 136*edb50e6aSSatoshi Sahara $r_head_title = ($media) ? dformat($_rev) : $this->id.' ['.dformat($_rev).']'; 137*edb50e6aSSatoshi Sahara $r_head = '<bdi><a class="wikilink1" href="'.$ml_or_wl($this->id).'">' 13863ab9afeSSatoshi Sahara . $r_head_title.'</a></bdi> '.'('.$lang['current'].')'.$head_separator.$_user.' '.$_sum; 13963ab9afeSSatoshi Sahara }else{ 14063ab9afeSSatoshi Sahara $r_head = '— ('.$lang['current'].')'; 14163ab9afeSSatoshi Sahara } 14263ab9afeSSatoshi Sahara 14363ab9afeSSatoshi Sahara return array($l_head, $r_head, $l_minor, $r_minor); 14463ab9afeSSatoshi Sahara } 14563ab9afeSSatoshi Sahara 14663ab9afeSSatoshi Sahara} 147