|
|
(23 intermediate revisions by 2 users not shown) |
Line 1: |
Line 1: |
− | <?
| + | {{legacy}} |
− | # Extension:TransformChanges{{php}}{{Category:Extensions|TransformChanges}}
| + | {{svn|extensions|TransformChanges/TransformChanges.php}} |
− | # - See http://www.mediawiki.org/Extension:TransformChanges for installation and usage details
| + | [[Category:Extensions]] |
− | # - Licenced under LGPL (http://www.gnu.org/copyleft/lesser.html)
| |
− | | |
− | if (!defined('MEDIAWIKI')) die('Not an entry point.');
| |
− |
| |
− | define('TRANSFORMCHANGES_VERSION','1.0.7, 2007-09-08');
| |
− |
| |
− | $wgExtensionCredits['other'][] = array(
| |
− | 'name' => 'TransformChanges',
| |
− | 'author' => '[http://www.organicdesign.co.nz/nad User:Nad]',
| |
− | 'description' => 'Makes recent-changes and watchlists render in nice columns for easier reading.',
| |
− | 'url' => 'http://www.organicdesign.co.nz/Extension:TransformChanges',
| |
− | 'version' => TRANSFORMCHANGES_VERSION
| |
− | );
| |
− |
| |
− | # Disable enhanced recent changes
| |
− | $wgExtensionFunctions[] = 'wfSetupTransformChanges';
| |
− | function wfSetupTransformChanges() {
| |
− | global $wgUser;
| |
− | $wgUser->setOption('usenewrc',false);
| |
− | }
| |
− | | |
− | $wgHooks['SpecialPageExecuteAfterPage'][] = 'wfTransformChanges';
| |
− | function wfTransformChanges() {
| |
− | global $wgOut;
| |
− | $title = $wgOut->getPageTitle();
| |
− | if ($title != wfMsgForContent('recentchanges') && $title != wfMsgForContent('watchlist')) return true;
| |
− | $text =& $wgOut->mBodytext;
| |
− | $text = preg_replace('|(</ul>\\s*)?<h4>(.+?)</h4>\\s*(<ul class="special">)<li>|s','$3<li $2>',$text);
| |
− | $text = preg_replace_callback('|<ul class="special">(.+?)</ul>|s','wfTransformChangesUL',$text);
| |
− | return true;
| |
− | }
| |
− | | |
− | function wfTransformChangesUL($match) {
| |
− | global $wgTransformChangesRow;
| |
− | $wgTransformChangesRow = 0;
| |
− | $rows = preg_replace_callback('|<li\\s*(.*?)>(.+?)</li>|s','wfTransformChangesLI',$match[1]);
| |
− | return "<table class=\"changes\">$rows</table>";
| |
− | }
| |
− | | |
− | function wfTransformChangesLI($match) {
| |
− | global $wgTransformChangesRow,$wgSimpleSecurity;
| |
− | $wgTransformChangesRow = $wgTransformChangesRow == 'even' ? 'odd' : 'even';
| |
− | list(,$date,$text) = $match;
| |
− | $cols = array('time','title','comment','user','talk','diff','info');
| |
− | $ncols = count($cols);
| |
− | $row = '';
| |
− | $error = '<td colspan="$ncols"><font color="red"><b>Error: match failed!</b></font></td>';
| |
− | if ($date) {
| |
− | $row = "<tr><td class=\"heading\" colspan=\"$ncols\">$date</td></tr>\n";
| |
− | $wgTransformChangesRow = 'even';
| |
− | }
| |
− | $row .= "<tr class=\"$wgTransformChangesRow\">";
| |
− | if (preg_match('|^(.*?); (\\d+:\\d+)(.+?)(<a.+?\\))\\s*(.*?)$|',$text,$m)) {
| |
− | list(,$diff,$time,$bytes,$user,$comment) = $m;
| |
− | if (preg_match('|^(.+\\)).*?\\. \\.\\s*(.*?)\\s*(<a.+)$|',$diff,$m)) list(,$diff,$info,$title) = $m; else $info = $title = '';
| |
− | if (preg_match('|(\\(.+?\\))|',$bytes,$m)) $info .= "<small>$m[1]</small>";
| |
− | if (preg_match('|(<a.+?</a>).+?(\\(.+?\\))|',$user,$m)) {
| |
− | # Remove talk for email or IP users and make user lowercase
| |
− | list(,$user,$talk) = $m;
| |
− | if (ereg('@',$user) || !eregi('[a-z]',$user)) { $talk = ''; $user = strtolower($user); }
| |
− | }
| |
− | if (preg_match('|\\((.+)\\)|',$comment,$m)) $comment = $m[1];
| |
− | $allowed = true;
| |
− | if (preg_match('|title="(.+?)"|',$title,$m) && is_object($wgSimpleSecurity)) {
| |
− | # Only show row if ok by SimpleSecurity extension
| |
− | $t = Title::newFromText($m[1]);
| |
− | $allowed = $wgSimpleSecurity->validateTitle('view',$t);
| |
− | }
| |
− | if ($allowed) foreach ($cols as $col) $row .= "<td class=\"$col\">{$$col}</td>";
| |
− | } else $row = $error;
| |
− | $row .= "</tr>\n";
| |
− | return $row;
| |
− | }
| |
− | ?>
| |