163ab9afeSSatoshi Sahara<?php 263ab9afeSSatoshi Sahara 363ab9afeSSatoshi Saharanamespace dokuwiki\Ui; 463ab9afeSSatoshi Sahara 5cc5508feSSatoshi Saharause dokuwiki\ChangeLog\ChangeLog; 6cc5508feSSatoshi Sahara 763ab9afeSSatoshi Sahara/** 863ab9afeSSatoshi Sahara * DokuWiki Diff Interface 963ab9afeSSatoshi Sahara * parent class of PageDiff and MediaDiff 1063ab9afeSSatoshi Sahara * 1163ab9afeSSatoshi Sahara * @package dokuwiki\Ui 1263ab9afeSSatoshi Sahara */ 1363ab9afeSSatoshi Saharaabstract class Diff extends Ui 1463ab9afeSSatoshi Sahara{ 15edb50e6aSSatoshi Sahara /* @var string */ 16edb50e6aSSatoshi Sahara protected $id; // page id or media id 17edb50e6aSSatoshi Sahara 18*0ea1f71bSSatoshi Sahara /* @var int */ 19d1575179SSatoshi Sahara protected $oldRev; // timestamp of older revision 20*0ea1f71bSSatoshi Sahara protected $newRev; // timestamp of newer revision 21b4b4c5c6SSatoshi Sahara 22edb50e6aSSatoshi Sahara /* @var array */ 23edb50e6aSSatoshi Sahara protected $preference = []; 24edb50e6aSSatoshi Sahara 258068440fSSatoshi Sahara /* @var ChangeLog */ 268068440fSSatoshi Sahara protected $changelog; // PageChangeLog or MediaChangeLog object 278068440fSSatoshi Sahara 28edb50e6aSSatoshi Sahara /** 29edb50e6aSSatoshi Sahara * Diff Ui constructor 30edb50e6aSSatoshi Sahara * 31edb50e6aSSatoshi Sahara * @param string $id page id or media id 32edb50e6aSSatoshi Sahara */ 33edb50e6aSSatoshi Sahara public function __construct($id) 34edb50e6aSSatoshi Sahara { 35edb50e6aSSatoshi Sahara $this->id = $id; 368068440fSSatoshi Sahara $this->setChangeLog(); 370a475154SSatoshi Sahara // ensure to have valid changelog::currentRevision property 380a475154SSatoshi Sahara $this->changelog->getCurrentRevisionInfo(); 39edb50e6aSSatoshi Sahara } 40edb50e6aSSatoshi Sahara 41edb50e6aSSatoshi Sahara /** 428068440fSSatoshi Sahara * set class property changelog 438068440fSSatoshi Sahara */ 448068440fSSatoshi Sahara abstract protected function setChangeLog(); 458068440fSSatoshi Sahara 468068440fSSatoshi Sahara /** 47*0ea1f71bSSatoshi Sahara * Prepare revision info of comparison pair 48*0ea1f71bSSatoshi Sahara */ 49*0ea1f71bSSatoshi Sahara abstract protected function preProcess(); 50*0ea1f71bSSatoshi Sahara 51*0ea1f71bSSatoshi Sahara /** 52b4b4c5c6SSatoshi Sahara * Set a pair of revisions to be compared 53b4b4c5c6SSatoshi Sahara * 543d0f231eSSatoshi Sahara * @param int $oldRev 553d0f231eSSatoshi Sahara * @param int $newRev 56b4b4c5c6SSatoshi Sahara * @return $this 57b4b4c5c6SSatoshi Sahara */ 583d0f231eSSatoshi Sahara public function compare($oldRev, $newRev) 59b4b4c5c6SSatoshi Sahara { 60*0ea1f71bSSatoshi Sahara if ($oldRev < $newRev) { 61*0ea1f71bSSatoshi Sahara [$this->oldRev, $this->newRev] = [$oldRev, $newRev]; 62*0ea1f71bSSatoshi Sahara } else { 63*0ea1f71bSSatoshi Sahara [$this->oldRev, $this->newRev] = [$newRev, $oldRev]; 64*0ea1f71bSSatoshi Sahara } 65b4b4c5c6SSatoshi Sahara return $this; 66b4b4c5c6SSatoshi Sahara } 67b4b4c5c6SSatoshi Sahara 68b4b4c5c6SSatoshi Sahara /** 69edb50e6aSSatoshi Sahara * Gets or Sets preference of the Ui\Diff object 70edb50e6aSSatoshi Sahara * 71edb50e6aSSatoshi Sahara * @param string|array $prefs a key name or key-value pair(s) 72edb50e6aSSatoshi Sahara * @param mixed $value value used when the first args is string 73edb50e6aSSatoshi Sahara * @return array|$this 74edb50e6aSSatoshi Sahara */ 75edb50e6aSSatoshi Sahara public function preference($prefs = null, $value = null) 76edb50e6aSSatoshi Sahara { 77edb50e6aSSatoshi Sahara // set 78295564cdSSatoshi Sahara if (is_string($prefs) && isset($value)) { 79295564cdSSatoshi Sahara $this->preference[$prefs] = $value; 80295564cdSSatoshi Sahara return $this; 81295564cdSSatoshi Sahara } elseif (is_array($prefs)) { 82edb50e6aSSatoshi Sahara foreach ($prefs as $name => $value) { 83edb50e6aSSatoshi Sahara $this->preference[$name] = $value; 84edb50e6aSSatoshi Sahara } 85edb50e6aSSatoshi Sahara return $this; 86edb50e6aSSatoshi Sahara } 87edb50e6aSSatoshi Sahara // get 88edb50e6aSSatoshi Sahara return $this->preference; 89edb50e6aSSatoshi Sahara } 90edb50e6aSSatoshi Sahara 91b4b4c5c6SSatoshi Sahara /** 92*0ea1f71bSSatoshi Sahara * Handle requested revision(s) 93b4b4c5c6SSatoshi Sahara * 94b4b4c5c6SSatoshi Sahara * @return void 95b4b4c5c6SSatoshi Sahara */ 96*0ea1f71bSSatoshi Sahara protected function handle() 97b4b4c5c6SSatoshi Sahara { 98b4b4c5c6SSatoshi Sahara global $INPUT; 99b4b4c5c6SSatoshi Sahara 100b4b4c5c6SSatoshi Sahara // difflink icon click, eg. ?rev=123456789&do=diff 101b4b4c5c6SSatoshi Sahara if ($INPUT->has('rev')) { 1023d0f231eSSatoshi Sahara $this->oldRev = $INPUT->int('rev'); 103*0ea1f71bSSatoshi Sahara $this->newRev = $this->changelog->currentRevision(); 104b4b4c5c6SSatoshi Sahara } 105b4b4c5c6SSatoshi Sahara 106b4b4c5c6SSatoshi Sahara // submit button with two checked boxes 107b4b4c5c6SSatoshi Sahara $rev2 = $INPUT->arr('rev2', []); 108b4b4c5c6SSatoshi Sahara if (count($rev2) > 1) { 109*0ea1f71bSSatoshi Sahara if ($rev2[0] < $rev2[1]) { 1103d0f231eSSatoshi Sahara [$this->oldRev, $this->newRev] = [$rev2[0], $rev2[1]]; 111b4b4c5c6SSatoshi Sahara } else { 1123d0f231eSSatoshi Sahara [$this->oldRev, $this->newRev] = [$rev2[1], $rev2[0]]; 113b4b4c5c6SSatoshi Sahara } 114b4b4c5c6SSatoshi Sahara } 115b4b4c5c6SSatoshi Sahara } 116b4b4c5c6SSatoshi Sahara 117179b4660SSatoshi Sahara 118b4b4c5c6SSatoshi Sahara 119edb50e6aSSatoshi Sahara 12063ab9afeSSatoshi Sahara /** 121ec019cbfSSatoshi Sahara * Build header of diff HTML 12263ab9afeSSatoshi Sahara * 12363ab9afeSSatoshi Sahara * @param string $l_rev Left revisions 12463ab9afeSSatoshi Sahara * @param string $r_rev Right revision 12563ab9afeSSatoshi Sahara * @return string[] HTML snippets for diff header 126cb5998b4SSatoshi Sahara * @deprecated 2020-12-31 12763ab9afeSSatoshi Sahara */ 1288068440fSSatoshi Sahara public function buildDiffHead($l_rev, $r_rev) 12963ab9afeSSatoshi Sahara { 130cb5998b4SSatoshi Sahara dbg_deprecated('not used see '. \dokuwiki\Ui\PageDiff::class .'::show()'); 13163ab9afeSSatoshi Sahara } 13263ab9afeSSatoshi Sahara 13363ab9afeSSatoshi Sahara} 134