|
- <?php
-
- use dokuwiki\Extension\AdminPlugin;
- use dokuwiki\ChangeLog\PageChangeLog;
-
- /**
- * All DokuWiki plugins to extend the admin function
- * need to inherit from this class
- */
- class admin_plugin_revert extends AdminPlugin
- {
- protected $cmd;
- // some vars which might need tuning later
- protected $max_lines = 800; // lines to read from changelog
- protected $max_revs = 20; // numer of old revisions to check
-
-
- /**
- * Constructor
- */
- public function __construct()
- {
- $this->setupLocale();
- }
-
- /**
- * access for managers
- */
- public function forAdminOnly()
- {
- return false;
- }
-
- /**
- * return sort order for position in admin menu
- */
- public function getMenuSort()
- {
- return 40;
- }
-
- /**
- * handle user request
- */
- public function handle()
- {
- }
-
- /**
- * output appropriate html
- */
- public function html()
- {
- global $INPUT;
-
- echo $this->locale_xhtml('intro');
-
- $this->printSearchForm();
-
- if (is_array($INPUT->param('revert')) && checkSecurityToken()) {
- $this->revertEdits($INPUT->arr('revert'), $INPUT->str('filter'));
- } elseif ($INPUT->has('filter')) {
- $this->listEdits($INPUT->str('filter'));
- }
- }
-
- /**
- * Display the form for searching spam pages
- */
- protected function printSearchForm()
- {
- global $lang, $INPUT;
- echo '<form action="" method="post"><div class="no">';
- echo '<label>' . $this->getLang('filter') . ': </label>';
- echo '<input type="text" name="filter" class="edit" value="' . hsc($INPUT->str('filter')) . '" /> ';
- echo '<button type="submit">' . $lang['btn_search'] . '</button> ';
- echo '<span>' . $this->getLang('note1') . '</span>';
- echo '</div></form><br /><br />';
- }
-
- /**
- * Start the reversion process
- */
- protected function revertEdits($revert, $filter)
- {
- echo '<hr /><br />';
- echo '<p>' . $this->getLang('revstart') . '</p>';
-
- echo '<ul>';
- foreach ($revert as $id) {
- global $REV;
-
- // find the last non-spammy revision
- $data = '';
- $pagelog = new PageChangeLog($id);
- $old = $pagelog->getRevisions(0, $this->max_revs);
- if ($old !== []) {
- foreach ($old as $REV) {
- $data = rawWiki($id, $REV);
- if (strpos($data, (string) $filter) === false) break;
- }
- }
-
- if ($data) {
- saveWikiText($id, $data, 'old revision restored', false);
- printf('<li><div class="li">' . $this->getLang('reverted') . '</div></li>', $id, $REV);
- } else {
- saveWikiText($id, '', '', false);
- printf('<li><div class="li">' . $this->getLang('removed') . '</div></li>', $id);
- }
- @set_time_limit(10);
- flush();
- }
- echo '</ul>';
-
- echo '<p>' . $this->getLang('revstop') . '</p>';
- }
-
- /**
- * List recent edits matching the given filter
- */
- protected function listEdits($filter)
- {
- global $conf;
- global $lang;
- echo '<hr /><br />';
- echo '<form action="" method="post"><div class="no">';
- echo '<input type="hidden" name="filter" value="' . hsc($filter) . '" />';
- formSecurityToken();
-
- $recents = getRecents(0, $this->max_lines);
- echo '<ul>';
-
- $cnt = 0;
- foreach ($recents as $recent) {
- if ($filter) {
- if (strpos(rawWiki($recent['id']), (string) $filter) === false) continue;
- }
-
- $cnt++;
- $date = dformat($recent['date']);
-
- echo ($recent['type'] === DOKU_CHANGE_TYPE_MINOR_EDIT) ? '<li class="minor">' : '<li>';
- echo '<div class="li">';
- echo '<input type="checkbox" name="revert[]" value="' . hsc($recent['id']) .
- '" checked="checked" id="revert__' . $cnt . '" />';
- echo ' <label for="revert__' . $cnt . '">' . $date . '</label> ';
-
- echo '<a href="' . wl($recent['id'], "do=diff") . '">';
- $p = [];
- $p['src'] = DOKU_BASE . 'lib/images/diff.png';
- $p['width'] = 15;
- $p['height'] = 11;
- $p['title'] = $lang['diff'];
- $p['alt'] = $lang['diff'];
- $att = buildAttributes($p);
- echo "<img $att />";
- echo '</a> ';
-
- echo '<a href="' . wl($recent['id'], "do=revisions") . '">';
- $p = [];
- $p['src'] = DOKU_BASE . 'lib/images/history.png';
- $p['width'] = 12;
- $p['height'] = 14;
- $p['title'] = $lang['btn_revs'];
- $p['alt'] = $lang['btn_revs'];
- $att = buildAttributes($p);
- echo "<img $att />";
- echo '</a> ';
-
- echo html_wikilink(':' . $recent['id'], (useHeading('navigation')) ? null : $recent['id']);
- echo ' – ' . htmlspecialchars($recent['sum']);
-
- echo ' <span class="user">';
- echo $recent['user'] . ' ' . $recent['ip'];
- echo '</span>';
-
- echo '</div>';
- echo '</li>';
-
- @set_time_limit(10);
- flush();
- }
- echo '</ul>';
-
- echo '<p>';
- echo '<button type="submit">' . $this->getLang('revert') . '</button> ';
- printf($this->getLang('note2'), hsc($filter));
- echo '</p>';
-
- echo '</div></form>';
- }
- }
- //Setup VIM: ex: et ts=4 :
|