diff options
author | ahriman <ahriman@falte.red> | 2018-12-03 19:22:25 -0500 |
---|---|---|
committer | ahriman <ahriman@falte.red> | 2018-12-03 19:22:25 -0500 |
commit | 0ae8cbf5c0b1a198b963490985b7738392ebcb97 (patch) | |
tree | b2c77ae72c6b717e2b97492065196ac5ffb2d9e2 /wiki/lib/plugins/revert/admin.php | |
parent | f57f6cc5a2d159f90168d292437dc4bd8cd7f934 (diff) | |
download | site-0ae8cbf5c0b1a198b963490985b7738392ebcb97.tar.gz |
installed dokuwiki, added to navbar, updated news
Diffstat (limited to 'wiki/lib/plugins/revert/admin.php')
-rw-r--r-- | wiki/lib/plugins/revert/admin.php | 184 |
1 files changed, 184 insertions, 0 deletions
diff --git a/wiki/lib/plugins/revert/admin.php b/wiki/lib/plugins/revert/admin.php new file mode 100644 index 0000000..1a03005 --- /dev/null +++ b/wiki/lib/plugins/revert/admin.php @@ -0,0 +1,184 @@ +<?php +// must be run within Dokuwiki +if(!defined('DOKU_INC')) die(); + +/** + * All DokuWiki plugins to extend the admin function + * need to inherit from this class + */ +class admin_plugin_revert extends DokuWiki_Admin_Plugin { + var $cmd; + // some vars which might need tuning later + var $max_lines = 800; // lines to read from changelog + var $max_revs = 20; // numer of old revisions to check + + + /** + * Constructor + */ + function __construct(){ + $this->setupLocale(); + } + + /** + * access for managers + */ + function forAdminOnly(){ + return false; + } + + /** + * return sort order for position in admin menu + */ + function getMenuSort() { + return 40; + } + + /** + * handle user request + */ + function handle() { + } + + /** + * output appropriate html + */ + function html() { + global $INPUT; + + echo $this->locale_xhtml('intro'); + + $this->_searchform(); + + if(is_array($INPUT->param('revert')) && checkSecurityToken()){ + $this->_revert($INPUT->arr('revert'),$INPUT->str('filter')); + }elseif($INPUT->has('filter')){ + $this->_list($INPUT->str('filter')); + } + } + + /** + * Display the form for searching spam pages + */ + function _searchform(){ + 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 + */ + function _revert($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(count($old)){ + foreach($old as $REV){ + $data = rawWiki($id,$REV); + if(strpos($data,$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 + */ + function _list($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']),$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 = array(); + $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 = array(); + $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 : |