13d7df1dcSSatoshi Sahara<?php 23d7df1dcSSatoshi Sahara 33d7df1dcSSatoshi Saharanamespace dokuwiki\Ui; 43d7df1dcSSatoshi Sahara 53d7df1dcSSatoshi Saharause dokuwiki\ChangeLog\MediaChangeLog; 63d7df1dcSSatoshi Saharause dokuwiki\Extension\Event; 73d7df1dcSSatoshi Saharause dokuwiki\Form\Form; 83d7df1dcSSatoshi Sahara 93d7df1dcSSatoshi Sahara/** 103d7df1dcSSatoshi Sahara * DokuWiki Recent Insterface 113d7df1dcSSatoshi Sahara * 123d7df1dcSSatoshi Sahara * @package dokuwiki\Ui 133d7df1dcSSatoshi Sahara */ 143d7df1dcSSatoshi Saharaclass Recent extends Ui 153d7df1dcSSatoshi Sahara{ 163d7df1dcSSatoshi Sahara /** 173d7df1dcSSatoshi Sahara * Display recent changes 183d7df1dcSSatoshi Sahara * 193d7df1dcSSatoshi Sahara * @author Andreas Gohr <andi@splitbrain.org> 203d7df1dcSSatoshi Sahara * @author Matthias Grimm <matthiasgrimm@users.sourceforge.net> 213d7df1dcSSatoshi Sahara * @author Ben Coburn <btcoburn@silicodon.net> 223d7df1dcSSatoshi Sahara * @author Kate Arzamastseva <pshns@ukr.net> 233d7df1dcSSatoshi Sahara * 243d7df1dcSSatoshi Sahara * @triggers HTML_RECENTFORM_OUTPUT 253d7df1dcSSatoshi Sahara * @param int $first skip the first n changelog lines 263d7df1dcSSatoshi Sahara * @param string $show_changes 273d7df1dcSSatoshi Sahara * @return void 283d7df1dcSSatoshi Sahara */ 293d7df1dcSSatoshi Sahara public function show($first = 0, $show_changes = 'both') 303d7df1dcSSatoshi Sahara { 313d7df1dcSSatoshi Sahara global $conf; 323d7df1dcSSatoshi Sahara global $lang; 333d7df1dcSSatoshi Sahara global $ID; 343d7df1dcSSatoshi Sahara 353d7df1dcSSatoshi Sahara /* we need to get one additionally log entry to be able to 363d7df1dcSSatoshi Sahara * decide if this is the last page or is there another one. 373d7df1dcSSatoshi Sahara * This is the cheapest solution to get this information. 383d7df1dcSSatoshi Sahara */ 393d7df1dcSSatoshi Sahara $flags = 0; 403d7df1dcSSatoshi Sahara if ($show_changes == 'mediafiles' && $conf['mediarevisions']) { 413d7df1dcSSatoshi Sahara $flags = RECENTS_MEDIA_CHANGES; 423d7df1dcSSatoshi Sahara } elseif ($show_changes == 'pages') { 433d7df1dcSSatoshi Sahara $flags = 0; 443d7df1dcSSatoshi Sahara } elseif ($conf['mediarevisions']) { 453d7df1dcSSatoshi Sahara $show_changes = 'both'; 463d7df1dcSSatoshi Sahara $flags = RECENTS_MEDIA_PAGES_MIXED; 473d7df1dcSSatoshi Sahara } 483d7df1dcSSatoshi Sahara 493d7df1dcSSatoshi Sahara $recents = getRecents($first, $conf['recent'] + 1, getNS($ID), $flags); 503d7df1dcSSatoshi Sahara if (count($recents) == 0 && $first != 0) { 513d7df1dcSSatoshi Sahara $first = 0; 523d7df1dcSSatoshi Sahara $recents = getRecents($first, $conf['recent'] + 1, getNS($ID), $flags); 533d7df1dcSSatoshi Sahara } 543d7df1dcSSatoshi Sahara 553d7df1dcSSatoshi Sahara $hasNext = false; 563d7df1dcSSatoshi Sahara if (count($recents) > $conf['recent']) { 573d7df1dcSSatoshi Sahara $hasNext = true; 583d7df1dcSSatoshi Sahara array_pop($recents); // remove extra log entry 593d7df1dcSSatoshi Sahara } 603d7df1dcSSatoshi Sahara 613d7df1dcSSatoshi Sahara // print intro 623d7df1dcSSatoshi Sahara print p_locale_xhtml('recent'); 633d7df1dcSSatoshi Sahara 643d7df1dcSSatoshi Sahara if (getNS($ID) != '') { 653d7df1dcSSatoshi Sahara print '<div class="level1"><p>' 663d7df1dcSSatoshi Sahara . sprintf($lang['recent_global'], getNS($ID), wl('', 'do=recent')) 673d7df1dcSSatoshi Sahara .'</p></div>'; 683d7df1dcSSatoshi Sahara } 693d7df1dcSSatoshi Sahara 703d7df1dcSSatoshi Sahara // create the form 713d7df1dcSSatoshi Sahara $form = new Form(['id' => 'dw__recent', 'method' => 'GET', 'action'=>wl($ID)]); 723d7df1dcSSatoshi Sahara $form->addClass('changes'); 733d7df1dcSSatoshi Sahara $form->addTagOpen('div')->addClass('no'); 743d7df1dcSSatoshi Sahara $form->setHiddenField('sectok', null); 753d7df1dcSSatoshi Sahara $form->setHiddenField('do', 'recent'); 763d7df1dcSSatoshi Sahara $form->setHiddenField('id', $ID); 773d7df1dcSSatoshi Sahara 783d7df1dcSSatoshi Sahara // show dropdown selector, whether include not only recent pages but also recent media files? 793d7df1dcSSatoshi Sahara if ($conf['mediarevisions']) { 803d7df1dcSSatoshi Sahara $form->addTagOpen('div')->addClass('changeType'); 813d7df1dcSSatoshi Sahara $options = array( 823d7df1dcSSatoshi Sahara 'pages' => $lang['pages_changes'], 833d7df1dcSSatoshi Sahara 'mediafiles' => $lang['media_changes'], 843d7df1dcSSatoshi Sahara 'both' => $lang['both_changes'], 853d7df1dcSSatoshi Sahara ); 863d7df1dcSSatoshi Sahara $form->addDropdown('show_changes', $options, $lang['changes_type']) 873d7df1dcSSatoshi Sahara ->val($show_changes)->addClass('quickselect'); 883d7df1dcSSatoshi Sahara $form->addButton('do[recent]', $lang['btn_apply'])->attr('type','submit'); 893d7df1dcSSatoshi Sahara $form->addTagClose('div'); 903d7df1dcSSatoshi Sahara } 913d7df1dcSSatoshi Sahara 923d7df1dcSSatoshi Sahara // start listing 933d7df1dcSSatoshi Sahara $form->addTagOpen('ul'); 943d7df1dcSSatoshi Sahara 953d7df1dcSSatoshi Sahara foreach ($recents as $recent) { 963d7df1dcSSatoshi Sahara $date = dformat($recent['date']); 973d7df1dcSSatoshi Sahara $class = ($recent['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) ? 'minor': ''; 983d7df1dcSSatoshi Sahara 993d7df1dcSSatoshi Sahara $form->addTagOpen('li')->addClass($class); 1003d7df1dcSSatoshi Sahara $form->addTagOpen('div')->addClass('li'); 1013d7df1dcSSatoshi Sahara 1023d7df1dcSSatoshi Sahara if (!empty($recent['media'])) { 1033d7df1dcSSatoshi Sahara $form->addHTML(media_printicon($recent['id'])); 1043d7df1dcSSatoshi Sahara } else { 1053d7df1dcSSatoshi Sahara $form->addTag('img')->attrs([ 1063d7df1dcSSatoshi Sahara 'src' => DOKU_BASE .'lib/images/fileicons/file.png', 1073d7df1dcSSatoshi Sahara 'alt' => $recent['id'] 1083d7df1dcSSatoshi Sahara ])->addClass('icon'); 1093d7df1dcSSatoshi Sahara } 1103d7df1dcSSatoshi Sahara 1113d7df1dcSSatoshi Sahara $form->addTagOpen('span')->addClass('date'); 1123d7df1dcSSatoshi Sahara $form->addHTML($date); 1133d7df1dcSSatoshi Sahara $form->addTagClose('span'); 1143d7df1dcSSatoshi Sahara 1153d7df1dcSSatoshi Sahara $diff = false; 1163d7df1dcSSatoshi Sahara $href = ''; 1173d7df1dcSSatoshi Sahara 1183d7df1dcSSatoshi Sahara if (!empty($recent['media'])) { 1193d7df1dcSSatoshi Sahara $changelog = new MediaChangeLog($recent['id']); 1203d7df1dcSSatoshi Sahara $revs = $changelog->getRevisions(0, 1); 1213d7df1dcSSatoshi Sahara $diff = (count($revs) && file_exists(mediaFN($recent['id']))); 1223d7df1dcSSatoshi Sahara if ($diff) { 1233d7df1dcSSatoshi Sahara $href = media_managerURL( 1243d7df1dcSSatoshi Sahara array( 1253d7df1dcSSatoshi Sahara 'tab_details' => 'history', 1263d7df1dcSSatoshi Sahara 'mediado' => 'diff', 1273d7df1dcSSatoshi Sahara 'image' => $recent['id'], 1283d7df1dcSSatoshi Sahara 'ns' => getNS($recent['id']) 1293d7df1dcSSatoshi Sahara ), '&' 1303d7df1dcSSatoshi Sahara ); 1313d7df1dcSSatoshi Sahara } 1323d7df1dcSSatoshi Sahara } else { 1333d7df1dcSSatoshi Sahara $href = wl($recent['id'], "do=diff", false, '&'); 1343d7df1dcSSatoshi Sahara } 1353d7df1dcSSatoshi Sahara 1363d7df1dcSSatoshi Sahara if (!empty($recent['media']) && !$diff) { 1373d7df1dcSSatoshi Sahara $form->addTag('img')->attrs([ 1383d7df1dcSSatoshi Sahara 'src' => DOKU_BASE .'lib/images/blank.gif', 1393d7df1dcSSatoshi Sahara 'width' => 15, 1403d7df1dcSSatoshi Sahara 'height' => 11, 1413d7df1dcSSatoshi Sahara 'alt' => '', 1423d7df1dcSSatoshi Sahara ]); 1433d7df1dcSSatoshi Sahara } else { 1443d7df1dcSSatoshi Sahara $form->addTagOpen('a')->attr('href', $href)->addClass('diff_link'); 1453d7df1dcSSatoshi Sahara $form->addTag('img')->attrs([ 1463d7df1dcSSatoshi Sahara 'src' => DOKU_BASE .'lib/images/diff.png', 1473d7df1dcSSatoshi Sahara 'width' => 15, 1483d7df1dcSSatoshi Sahara 'height' => 11, 1493d7df1dcSSatoshi Sahara 'title' => $lang['diff'], 1503d7df1dcSSatoshi Sahara 'alt' => $lang['diff'], 1513d7df1dcSSatoshi Sahara ]); 1523d7df1dcSSatoshi Sahara $form->addTagClose('a'); 1533d7df1dcSSatoshi Sahara } 1543d7df1dcSSatoshi Sahara 1553d7df1dcSSatoshi Sahara if (!empty($recent['media'])) { 1563d7df1dcSSatoshi Sahara $href = media_managerURL( 1573d7df1dcSSatoshi Sahara array( 1583d7df1dcSSatoshi Sahara 'tab_details' => 'history', 1593d7df1dcSSatoshi Sahara 'image' => $recent['id'], 1603d7df1dcSSatoshi Sahara 'ns' => getNS($recent['id']) 1613d7df1dcSSatoshi Sahara ), '&' 1623d7df1dcSSatoshi Sahara ); 1633d7df1dcSSatoshi Sahara } else { 1643d7df1dcSSatoshi Sahara $href = wl($recent['id'], "do=revisions", false, '&'); 1653d7df1dcSSatoshi Sahara } 1663d7df1dcSSatoshi Sahara $form->addTagOpen('a')->attr('href', $href)->addClass('revisions_link'); 1673d7df1dcSSatoshi Sahara $form->addTag('img')->attrs([ 1683d7df1dcSSatoshi Sahara 'src' => DOKU_BASE .'lib/images/history.png', 1693d7df1dcSSatoshi Sahara 'width' => 12, 1703d7df1dcSSatoshi Sahara 'height' => 14, 1713d7df1dcSSatoshi Sahara 'title' => $lang['btn_revs'], 1723d7df1dcSSatoshi Sahara 'alt' => $lang['btn_revs'] 1733d7df1dcSSatoshi Sahara ]); 1743d7df1dcSSatoshi Sahara $form->addTagClose('a'); 1753d7df1dcSSatoshi Sahara 1763d7df1dcSSatoshi Sahara if (!empty($recent['media'])) { 1773d7df1dcSSatoshi Sahara $href = media_managerURL( 1783d7df1dcSSatoshi Sahara array( 1793d7df1dcSSatoshi Sahara 'tab_details' => 'view', 1803d7df1dcSSatoshi Sahara 'image' => $recent['id'], 1813d7df1dcSSatoshi Sahara 'ns' => getNS($recent['id']) 1823d7df1dcSSatoshi Sahara ), '&' 1833d7df1dcSSatoshi Sahara ); 1843d7df1dcSSatoshi Sahara $class = file_exists(mediaFN($recent['id'])) ? 'wikilink1' : 'wikilink2'; 1853d7df1dcSSatoshi Sahara $form->addTagOpen('a')->attr('href', $href)->addClass($class); 1863d7df1dcSSatoshi Sahara $form->addHTML($recent['id']); 1873d7df1dcSSatoshi Sahara $form->addTagClose('a'); 1883d7df1dcSSatoshi Sahara } else { 1893d7df1dcSSatoshi Sahara $form->addHTML(html_wikilink(':'. $recent['id'], useHeading('navigation') ? null : $recent['id'])); 1903d7df1dcSSatoshi Sahara } 1913d7df1dcSSatoshi Sahara $form->addTagOpen('span')->addClass('sum'); 1923d7df1dcSSatoshi Sahara $form->addHTML(' – '. hsc($recent['sum'])); 1933d7df1dcSSatoshi Sahara $form->addTagClose('span'); 1943d7df1dcSSatoshi Sahara 1953d7df1dcSSatoshi Sahara $form->addTagOPen('span')->addClass('user'); 1963d7df1dcSSatoshi Sahara if ($recent['user']) { 1973d7df1dcSSatoshi Sahara $form->addHTML('<bdi>'. editorinfo($recent['user']) .'</bdi>'); 1983d7df1dcSSatoshi Sahara if (auth_ismanager()) { 1993d7df1dcSSatoshi Sahara $form->addHTML(' <bdo dir="ltr">('. $recent['ip'] .')</bdo>'); 2003d7df1dcSSatoshi Sahara } 2013d7df1dcSSatoshi Sahara } else { 2023d7df1dcSSatoshi Sahara $form->addHTML('<bdo dir="ltr">'. $recent['ip'] .'</bdo>'); 2033d7df1dcSSatoshi Sahara } 2043d7df1dcSSatoshi Sahara $form->addTagClose('span'); 2053d7df1dcSSatoshi Sahara 2063d7df1dcSSatoshi Sahara html_sizechange($recent['sizechange'], $form); 2073d7df1dcSSatoshi Sahara 2083d7df1dcSSatoshi Sahara $form->addTagClose('div'); 2093d7df1dcSSatoshi Sahara $form->addTagClose('li'); 2103d7df1dcSSatoshi Sahara } 2113d7df1dcSSatoshi Sahara 2123d7df1dcSSatoshi Sahara $form->addTagClose('ul'); 2133d7df1dcSSatoshi Sahara 2143d7df1dcSSatoshi Sahara // provide navigation for pagenated cecent list (of pages and/or media files) 2153d7df1dcSSatoshi Sahara $form->addTagOpen('div')->addClass('pagenav'); 2163d7df1dcSSatoshi Sahara $last = $first + $conf['recent']; 2173d7df1dcSSatoshi Sahara if ($first > 0) { 218*6c9fde82SSatoshi Sahara $first = $first - $conf['recent']; 2193d7df1dcSSatoshi Sahara if ($first < 0) $first = 0; 2203d7df1dcSSatoshi Sahara $form->addTagOpen('div')->addClass('pagenav-prev'); 2213d7df1dcSSatoshi Sahara $form->addTagOpen('button')->attrs([ 2223d7df1dcSSatoshi Sahara 'type' => 'submit', 2233d7df1dcSSatoshi Sahara 'name' => 'first['. $first .']', 2243d7df1dcSSatoshi Sahara 'accesskey' => 'n', 2253d7df1dcSSatoshi Sahara 'title' => $lang['btn_newer'] .' [N]', 2263d7df1dcSSatoshi Sahara ])->addClass('button show'); 2273d7df1dcSSatoshi Sahara $form->addHTML($lang['btn_newer']); 2283d7df1dcSSatoshi Sahara $form->addTagClose('button'); 2293d7df1dcSSatoshi Sahara $form->addTagClose('div'); 2303d7df1dcSSatoshi Sahara } 2313d7df1dcSSatoshi Sahara if ($hasNext) { 2323d7df1dcSSatoshi Sahara $form->addTagOpen('div')->addClass('pagenav-next'); 2333d7df1dcSSatoshi Sahara $form->addTagOpen('button')->attrs([ 2343d7df1dcSSatoshi Sahara 'type' => 'submit', 2353d7df1dcSSatoshi Sahara 'name' => 'first['. $last .']', 2363d7df1dcSSatoshi Sahara 'accesskey' => 'p', 2373d7df1dcSSatoshi Sahara 'title' => $lang['btn_older'] .' [P]', 2383d7df1dcSSatoshi Sahara ])->addClass('button show'); 2393d7df1dcSSatoshi Sahara $form->addHTML($lang['btn_older']); 2403d7df1dcSSatoshi Sahara $form->addTagClose('button'); 2413d7df1dcSSatoshi Sahara $form->addTagClose('div'); 2423d7df1dcSSatoshi Sahara } 2433d7df1dcSSatoshi Sahara $form->addTagClose('div'); 2443d7df1dcSSatoshi Sahara 2453d7df1dcSSatoshi Sahara $form->addTagClose('div'); // close div class=no 2463d7df1dcSSatoshi Sahara 2473d7df1dcSSatoshi Sahara // emit HTML_CRECENTFORM_OUTPUT event, print the form 2483d7df1dcSSatoshi Sahara Event::createAndTrigger('HTML_RECENTFORM_OUTPUT', $form, 'html_form_output', false); 2493d7df1dcSSatoshi Sahara 2503d7df1dcSSatoshi Sahara print DOKU_LF; 2513d7df1dcSSatoshi Sahara } 2523d7df1dcSSatoshi Sahara 2533d7df1dcSSatoshi Sahara} 254