| 
							- <?php
 - 
 - namespace dokuwiki\Ui;
 - 
 - use dokuwiki\ChangeLog\ChangeLog;
 - 
 - /**
 -  * DokuWiki Revisions Interface
 -  * parent class of PageRevisions and MediaRevisions
 -  *
 -  * Note: navigation starts from -1, not 0. This is because our Revision management starts old revisions at 0 and
 -  * will return the current revision only if the revisions starting at -1 are requested.
 -  *
 -  * @package dokuwiki\Ui
 -  */
 - abstract class Revisions extends Ui
 - {
 -     /* @var string */
 -     protected $id;   // page id or media id
 - 
 -     /* @var ChangeLog */
 -     protected $changelog; // PageChangeLog or MediaChangeLog object
 - 
 -     /**
 -      * Revisions Ui constructor
 -      *
 -      * @param string $id page id or media id
 -      */
 -     public function __construct($id)
 -     {
 -         $this->id = $id;
 -         $this->setChangeLog();
 -     }
 - 
 -     /**
 -      * set class property changelog
 -      */
 -     abstract protected function setChangeLog();
 - 
 -     /**
 -      * Get revisions, and set correct pagination parameters (first, hasNext)
 -      *
 -      * @param int $first
 -      * @param bool $hasNext
 -      * @return array  revisions to be shown in a paginated list
 -      * @see also https://www.dokuwiki.org/devel:changelog
 -      */
 -     protected function getRevisions(&$first, &$hasNext)
 -     {
 -         global $conf;
 - 
 -         $changelog =& $this->changelog;
 -         $revisions = [];
 - 
 -         $currentRevInfo = $changelog->getCurrentRevisionInfo();
 -         if (!$currentRevInfo) return $revisions;
 - 
 -         $num = $conf['recent'];
 - 
 -         /* we need to get one additional log entry to be able to
 -          * decide if this is the last page or is there another one.
 -          * see also Ui\Recent::getRecents()
 -          */
 -         $revlist = $changelog->getRevisions($first, $num + 1);
 -         if (count($revlist) == 0 && $first > -1) {
 -             // resets to zero if $first requested a too high number
 -             $first = -1;
 -             return $this->getRevisions($first, $hasNext);
 -         }
 - 
 -         // decide if this is the last page or is there another one
 -         $hasNext = false;
 -         if (count($revlist) > $num) {
 -             $hasNext = true;
 -             array_pop($revlist); // remove one additional log entry
 -         }
 - 
 -         // append each revision info array to the revisions
 -         foreach ($revlist as $rev) {
 -             $revisions[] = $changelog->getRevisionInfo($rev);
 -         }
 -         return $revisions;
 -     }
 - 
 -     /**
 -      * Navigation buttons for Pagination (prev/next)
 -      *
 -      * @param int $first
 -      * @param bool $hasNext
 -      * @param callable $callback returns array of hidden fields for the form button
 -      * @return string html
 -      */
 -     protected function navigation($first, $hasNext, $callback)
 -     {
 -         global $conf;
 - 
 -         $html = '<div class="pagenav">';
 -         $last = $first + $conf['recent'];
 -         if ($first > -1) {
 -             $first = max($first - $conf['recent'], -1);
 -             $html .= '<div class="pagenav-prev">';
 -             $html .= html_btn('newer', $this->id, "p", $callback($first));
 -             $html .= '</div>';
 -         }
 -         if ($hasNext) {
 -             $html .= '<div class="pagenav-next">';
 -             $html .= html_btn('older', $this->id, "n", $callback($last));
 -             $html .= '</div>';
 -         }
 -         $html .= '</div>';
 -         return $html;
 -     }
 - }
 
 
  |