https://www.mediawiki.org/wiki/Special:Code/MediaWiki/102199

Revision: 102199
Author:   cryptocoryne
Date:     2011-11-06 21:38:44 +0000 (Sun, 06 Nov 2011)
Log Message:
-----------
Followup r102139 -- some improves and fixes according to ashley's review

Modified Paths:
--------------
    trunk/extensions/Premoderation/Premoderation.class.php
    trunk/extensions/Premoderation/Premoderation.php
    trunk/extensions/Premoderation/SpecialPremoderation.php
    trunk/extensions/Premoderation/SpecialPremoderationWhiteList.php
    trunk/extensions/Premoderation/db_tables.sql

Removed Paths:
-------------
    trunk/extensions/Premoderation/install.php

Modified: trunk/extensions/Premoderation/Premoderation.class.php
===================================================================
--- trunk/extensions/Premoderation/Premoderation.class.php      2011-11-06 
21:31:52 UTC (rev 102198)
+++ trunk/extensions/Premoderation/Premoderation.class.php      2011-11-06 
21:38:44 UTC (rev 102199)
@@ -23,6 +23,7 @@
                }
                
                $wgHooks['ArticleEditUpdatesDeleteFromRecentchanges'][] = 
'Premoderation::deleteOldQueueEntries';
+               $wgHooks['LoadExtensionSchemaUpdates'][] = 
'Premoderation::updateDBSchema';
                
                return true;
        }
@@ -172,4 +173,10 @@
                }
                return true;
        }
+       
+       public static function updateDBSchema( $updater ) {
+               $updater->addExtensionUpdate( array( 'addTable', 'pm_queue',
+                       dirname( __FILE__ ) . '/db_tables.sql', true ) );
+               return true;
+       }
 }
\ No newline at end of file

Modified: trunk/extensions/Premoderation/Premoderation.php
===================================================================
--- trunk/extensions/Premoderation/Premoderation.php    2011-11-06 21:31:52 UTC 
(rev 102198)
+++ trunk/extensions/Premoderation/Premoderation.php    2011-11-06 21:38:44 UTC 
(rev 102199)
@@ -47,10 +47,16 @@
 $wgLogRestrictions['prem-private'] = 'premoderation-log';
 $wgLogRestrictions['prem-whitelist'] = 'premoderation-wlist';
 
-// 'all' or 'abusefilter'
+// Handler: 'all' or 'abusefilter'
 $wgPremoderationType = 'all';
+
+// Disable approved revision in pages with new published revisions
 $wgPremoderationStrict = false;
+
+// Disable editing of pages with unapproved revisions in moderation queue
 $wgPremoderationLockPages = false;
+
+// Lifetime of revisions in moderation queue
 $wgPremoderationDeclinedPurge = 86400 * 3;
 $wgPremoderationNewPurge = 86400 * 14;
 

Modified: trunk/extensions/Premoderation/SpecialPremoderation.php
===================================================================
--- trunk/extensions/Premoderation/SpecialPremoderation.php     2011-11-06 
21:31:52 UTC (rev 102198)
+++ trunk/extensions/Premoderation/SpecialPremoderation.php     2011-11-06 
21:38:44 UTC (rev 102199)
@@ -22,19 +22,17 @@
                if( !$wgUser->isAllowed( 'premoderation' ) ) {
                        $this->displayRestrictionError();
                        return;
+               } elseif( wfReadOnly() ) {
+                       $wgOut->readOnlyPage();
+                       return;
+               } elseif( $wgUser->isBlocked() ) {
+                       $wgOut->blockedPage();
+                       return;
                }
                
-               $allowedActions = array( '', 'list', 'status' );
-               
                $params = array_values( explode( '/', $subpage ) );
                $action = array_shift( &$params );
                
-               if( !in_array( $action, $allowedActions ) ) {
-                       $wgOut->setPageTitle( wfMsg( 
'premoderation-manager-invalidaction' ) );
-                       $wgOut->addWikiMsg( 'premoderation-invalidaction' );
-                       return;
-               }
-               
                if( $action == '' ) {
                        $action = 'list';
                } elseif( isset( $params ) ) {
@@ -49,6 +47,10 @@
                        case 'status':
                                ( $this->mPosted ) ? $this->performChanges() : 
$this->statusInterface();
                                break;
+                               
+                       default:
+                               $wgOut->setPageTitle( wfMsg( 
'premoderation-manager-invalidaction' ) );
+                               $wgOut->addWikiMsg( 
'premoderation-invalidaction' );
                }
        }
        
@@ -61,9 +63,13 @@
                $dbr = wfGetDB( DB_SLAVE );
                $res = $dbr->select(
                        'pm_queue',
-                       array( 'pmq_id', 'pmq_page_ns', 'pmq_page_title', 
'pmq_user', 'pmq_user_text', 'pmq_timestamp',
-                               'pmq_minor', 'pmq_summary', 'pmq_len', 
'pmq_status', 'pmq_updated', 'pmq_updated_user_text' ),
-                       '', __METHOD__,
+                       array(
+                               'pmq_id', 'pmq_page_ns', 'pmq_page_title', 
'pmq_user', 'pmq_user_text',
+                               'pmq_timestamp', 'pmq_minor', 'pmq_summary', 
'pmq_len', 'pmq_status',
+                               'pmq_updated', 'pmq_updated_user_text'
+                       ),
+                       '',
+                       __METHOD__,
                        array( 'ORDER BY' => 'pmq_timestamp DESC', 'LIMIT' => 
100 )
                );
                
@@ -101,7 +107,8 @@
        }
        
        protected function getListTableHeader( $type ) {
-               return Xml::openElement( 'table', array( 'id' => 'prem-table-' 
. $type, 'class' => 'wikitable', 'style' => 'width: 90%' ) ) .
+               return Xml::openElement( 'table', array( 'id' => 'prem-table-' 
. $type,
+                       'class' => 'wikitable', 'style' => 'width: 90%' ) ) .
                        '<tr><th>' . wfMsg( 'premoderation-table-list-time' ) . 
'</th>' .
                        '<th>' . wfMsg( 'premoderation-table-list-user' ) . 
'</th>' .
                        '<th colspan="2">' . wfMsg( 
'premoderation-table-list-title' ) . '</th>' .
@@ -119,7 +126,8 @@
                        '</td><td>' . ( $row['pmq_minor'] == 0 ? '' : ' ' . 
wfMsg( 'minoreditletter' ) ) . '</td>' .
                        '<td>' . $row['pmq_summary'] . '</td><td>' . '<a 
href="' . $articlePath .
                        'Special:Premoderation/status/id/' . $row['pmq_id'] . 
'">' .
-                       wfMessage( 'premoderation-status-' . $row['pmq_status'] 
. ( $row['pmq_updated_user_text'] ? '-changed' : '-added' ),
+                       wfMessage( 'premoderation-status-' . $row['pmq_status'] 
.
+                               ( $row['pmq_updated_user_text'] ? '-changed' : 
'-added' ),
                                array( $row['pmq_updated_user_text'] ) ) .
                        '</a></td></tr>';
        }
@@ -139,7 +147,8 @@
                $res = $dbr->select(
                        'pm_queue',
                        '*',
-                       "pmq_id = '$id'", __METHOD__,
+                       "pmq_id = '$id'",
+                       __METHOD__,
                        array( 'LIMIT' => 1 )
                );
                $row = $dbr->fetchRow( $res );
@@ -153,7 +162,8 @@
                $wgOut->addWikiMsg( 'premoderation-status-intro' );
                
                $wgOut->addHTML( '<h2>' . wfMsg( 'premoderation-status-info' ) 
. '</h2>' .
-                       $this->getListTableHeader( 'status' ) . 
$this->formatListTableRow( $row ) . Xml::closeElement( 'table' ) );
+                       $this->getListTableHeader( 'status' ) . 
$this->formatListTableRow( $row ) .
+                       Xml::closeElement( 'table' ) );
                
                if( $wgUser->isAllowed( 'premoderation-viewip' ) ) {
                        $wgOut->addHTML( wfMsg( 'premoderation-private-ip' ) . 
' ' . $row['pmq_ip'] );
@@ -162,7 +172,9 @@
                $rev = Revision::newFromID( $row['pmq_page_last_id'] );
                $diff = new DifferenceEngine();
                $diff->showDiffStyle();
-               $formattedDiff = $diff->generateDiffBody( isset( $rev ) ? 
$rev->getText() : '', $row['pmq_text'] );
+               $formattedDiff = $diff->generateDiffBody(
+                       isset( $rev ) ? $rev->getText() : '', $row['pmq_text']
+               );
                
                $wgOut->addHTML( '<h2>' . wfMsg( 'premoderation-diff-h2' ) . 
'</h2>' .
                        "<table class='mw-abusefilter-diff-multiline'><col 
class='diff-marker' />" .
@@ -188,7 +200,8 @@
                
                $final = Xml::fieldset( wfMsg( 'premoderation-status-fieldset' 
) ) .
                        Xml::openElement( 'form', array( 'id' => 
'prem-status-form', 'method' => 'post' ) ) .
-                       $this->getStatusForm( $row['pmq_status'] ) . '<input 
type="hidden" name="id" value="' . $id . '" />' .
+                       $this->getStatusForm( $row['pmq_status'] ) .
+                       '<input type="hidden" name="id" value="' . $id . '" />' 
.
                        Xml::closeElement( 'form' ) . Xml::closeElement( 
'fieldset' );
                        
                $wgOut->addHTML( $final );
@@ -208,7 +221,15 @@
                        $db->addQuotes( $page ) . ' AND pmq_id != ' . $id . ' 
AND pmq_status != "approved"';
                
                $res = $db->select(
-                       'pm_queue', '*', $conds, __METHOD__,
+                       'pm_queue',
+                       '*',
+                       array(
+                               'pmq_page_ns' => $ns,
+                               'pmq_page_title' => $page,
+                               "pmq_id <> $id",
+                               'pmq_status <> "approved"'
+                       ),
+                       __METHOD__,
                        array( 'ORDER BY' => 'pmq_timestamp DESC', 'LIMIT' => 
20 )
                );
                
@@ -294,7 +315,9 @@
        
        protected function approveRevision( $id ) {
                $dbw = wfGetDB( DB_MASTER );
-               $res = $dbw->fetchRow( $dbw->select( 'pm_queue', '*', "pmq_id = 
'$id'", __METHOD__ ) );
+               $res = $dbw->fetchRow(
+                       $dbw->select( 'pm_queue', '*', "pmq_id = '$id'", 
__METHOD__ )
+               );
                
                $title = Title::newFromText( $res['pmq_page_title'], 
$res['pmq_page_ns'] );
                $user = User::newFromName( $res['pmq_user_text'] );
@@ -321,44 +344,59 @@
                                $pageId = $wikipage->insertOn( $dbw );
                                $cond = array( 'page_id' => $pageId );
                                $actionType = 'create';
+                               
+                               $dbw->update(
+                                       'revision',
+                                       array( 'rev_page' => $pageId ),
+                                       array( 'rev_id' => $revId ),
+                                       __METHOD__
+                               );
                        } else {
                                $wikipage->updateRevisionOn( $dbw, $rev );
                                $cond = array( 'page_latest' => 
$res['pmq_page_last_id'] );
                                $actionType = 'update';
                                
                                $dbw->update(
-                                       'revision', array( 'rev_page' => 
$title->getArticleID(), 'rev_parent_id' => $title->getLatestRevID() ),
+                                       'revision',
+                                       array(
+                                               'rev_page' => 
$title->getArticleID(),
+                                               'rev_parent_id' => 
$title->getLatestRevID()
+                                       ),
                                        array( 'rev_id' => $revId ), __METHOD__
                                );
                        }
                        
                        $dbw->update(
-                               'page', array( 'page_latest' => $revId, 
'page_len' => $rev->getSize() ),
-                               $cond, __METHOD__
+                               'page',
+                               array( 'page_latest' => $revId, 'page_len' => 
$rev->getSize() ),
+                               $cond,
+                               __METHOD__
                        );
                } else {
                        $actionType = 'updateold';
                        
                        $latestRevId = intval( $title->getLatestRevID() );
-                       $res = $dbw->fetchRow( $dbw->select( 'revision', 
'rev_parent_id', "rev_id = '$latestRevId'", __METHOD__ ) );
+                       $res = $dbw->fetchRow(
+                               $dbw->select( 'revision', 'rev_parent_id', 
"rev_id = '$latestRevId'", __METHOD__ )
+                       );
                        
                        $dbw->update(
-                               'revision', array( 'rev_page' => 
$title->getArticleID(), 'rev_parent_id' => $res['rev_parent_id'] ),
-                               array( 'rev_id' => $revId ), __METHOD__
+                               'revision',
+                               array( 
+                                       'rev_page' => $title->getArticleID(),
+                                       'rev_parent_id' => $res['rev_parent_id']
+                               ),
+                               array( 'rev_id' => $revId ),
+                               __METHOD__
                        );
                        $dbw->update(
-                               'revision', array( 'rev_parent_id' => $revId ),
-                               array( 'rev_id' => $latestRevId ), __METHOD__
+                               'revision',
+                               array( 'rev_parent_id' => $revId ),
+                               array( 'rev_id' => $latestRevId ),
+                               __METHOD__
                        );
                }
                
-               if( isset( $pageId ) ) {
-                       $dbw->update(
-                               'revision', array( 'rev_page' => $pageId ),
-                               array( 'rev_id' => $revId ), __METHOD__
-                       );
-               }
-               
                $dbw->commit();
                $ok = $this->addLogEntry( $actionType, array( 
$title->getDBkey(), $revId ), 'public' );
                

Modified: trunk/extensions/Premoderation/SpecialPremoderationWhiteList.php
===================================================================
--- trunk/extensions/Premoderation/SpecialPremoderationWhiteList.php    
2011-11-06 21:31:52 UTC (rev 102198)
+++ trunk/extensions/Premoderation/SpecialPremoderationWhiteList.php    
2011-11-06 21:38:44 UTC (rev 102199)
@@ -20,6 +20,12 @@
                if( !$wgUser->isAllowed( 'premoderation-wlist' ) ) {
                        $this->displayRestrictionError();
                        return;
+               } elseif( wfReadOnly() ) {
+                       $wgOut->readOnlyPage();
+                       return;
+               } elseif( $wgUser->isBlocked() ) {
+                       $wgOut->blockedPage();
+                       return;
                }
                
                $wgOut->setPageTitle( wfMsg( 'premoderationwhitelist' ) );
@@ -50,7 +56,8 @@
                        $output = '<table class="wikitable"><tr><th>' . wfMsg( 
'premoderation-table-list-ip' ) .
                                '</th><th>' . wfMsg( 
'premoderation-table-list-delete' ) . '</th></tr>';
                        foreach( $whiteList as $ip ) {
-                               $output .= '<tr><td>' . $ip . '</td><td>' . 
$this->getDeletionButton( $ip ) . '</td></tr>';
+                               $output .= '<tr><td>' . $ip . '</td>' .
+                                       '<td>' . $this->getDeletionButton( $ip 
) . '</td></tr>';
                        }
                        $output .= '</table>';
                        $wgOut->addHTML( $output );
@@ -61,18 +68,21 @@
        
        protected function getAddForm() {
                return Xml::fieldset( wfMsg( 'premoderation-wl-addip-fieldset' 
) ) .
-                       Xml::openElement( 'form', array( 'id' => 
'prem-wl-form', 'method' => 'post' ) ) . '<table><tr><td>' .
-                       wfMsg( 'premoderation-private-ip' ) . '</td><td>' . 
Xml::input( 'ip', 50, '', array( 'id' => 'prem-whitelist-addip' ) ) .
-                       '</td></tr><tr><td>' . wfMsg( 'summary' ) . '</td><td>' 
. Xml::input( 'summary', 50, '',
-                       array( 'id' => 'prem-summary' ) ) . '</td></tr><tr>' . 
'<td>' . Xml::submitButton( wfMsg( 'htmlform-submit' ),
-                       array( 'id' => 'prem-wl-submit' ) ) . '<input 
type="hidden" name="action" value="add" />' .
-                       '</td></tr></table>' . Xml::closeElement( 'form' ) . 
Xml::closeElement( 'fieldset' );
+                       Xml::openElement( 'form', array( 'id' => 
'prem-wl-form', 'method' => 'post' ) ) .
+                       '<table><tr><td>' .     wfMsg( 
'premoderation-private-ip' ) . '</td><td>' .
+                       Xml::input( 'ip', 50, '', array( 'id' => 
'prem-whitelist-addip' ) ) . '</td></tr>' .
+                       '<tr><td>' . wfMsg( 'summary' ) . '</td><td>' . 
Xml::input( 'summary', 50, '',
+                       array( 'id' => 'prem-summary' ) ) . '</td></tr><tr>' . 
'<td>' .
+                       Xml::submitButton( wfMsg( 'htmlform-submit' ), array( 
'id' => 'prem-wl-submit' ) ) .
+                       '<input type="hidden" name="action" value="add" 
/></td></tr></table>' .
+                       Xml::closeElement( 'form' ) . Xml::closeElement( 
'fieldset' );
        }
        
        protected function getDeletionButton( $ip ) {
                return Xml::openElement( 'form', array( 'id' => 
'prem-wl-delete' . $ip, 'method' => 'post' ) ) .
                        Xml::submitButton( wfMsg( 
'premoderation-table-list-delete' ) ) .
-                       '<input type="hidden" name="action" value="delete" 
/><input type="hidden" name="ip" value="' . $ip . '" />' .
+                       '<input type="hidden" name="action" value="delete" />' .
+                       '<input type="hidden" name="ip" value="' . $ip . '" />' 
.
                        Xml::closeElement( 'form' );
        }
        

Modified: trunk/extensions/Premoderation/db_tables.sql
===================================================================
--- trunk/extensions/Premoderation/db_tables.sql        2011-11-06 21:31:52 UTC 
(rev 102198)
+++ trunk/extensions/Premoderation/db_tables.sql        2011-11-06 21:38:44 UTC 
(rev 102199)
@@ -1,5 +1,5 @@
-CREATE TABLE /*$wgDBprefix*/pm_queue (
-       pmq_id BIGINT unsigned NOT NULL AUTO_INCREMENT,
+CREATE TABLE /*_*/pm_queue (
+       pmq_id BIGINT unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
        pmq_page_last_id INT unsigned NOT NULL,
        pmq_page_ns INT NOT NULL,
        pmq_page_title VARCHAR(255) BINARY NOT NULL,
@@ -15,14 +15,10 @@
        pmq_updated BINARY(14) DEFAULT NULL,
        pmq_updated_user INT unsigned DEFAULT NULL,
        pmq_updated_user_text VARCHAR(255) BINARY DEFAULT NULL,
-       pmq_status VARBINARY(40) NOT NULL DEFAULT '',
-       
-       PRIMARY KEY (pmq_id),
-       KEY (pmq_user)
+       pmq_status VARBINARY(40) NOT NULL DEFAULT ''
 ) /*$wgDBTableOptions*/;
+CREATE INDEX /*i*/pmq_user ON /*_*/pm_queue (pmq_user);
 
-CREATE TABLE /*$wgDBprefix*/pm_whitelist (
-       pmw_ip VARBINARY(40) NOT NULL DEFAULT '',
-
-       PRIMARY KEY (pmw_ip)
+CREATE TABLE /*_*/pm_whitelist (
+       pmw_ip VARBINARY(40) NOT NULL PRIMARY KEY DEFAULT '',
 ) /*$wgDBTableOptions*/;
\ No newline at end of file

Deleted: trunk/extensions/Premoderation/install.php
===================================================================
--- trunk/extensions/Premoderation/install.php  2011-11-06 21:31:52 UTC (rev 
102198)
+++ trunk/extensions/Premoderation/install.php  2011-11-06 21:38:44 UTC (rev 
102199)
@@ -1,10 +0,0 @@
-<?php
-/*
- * Script for creating new database tables
- */
-
-$dir = dirname( __FILE__ );
-require_once ( $dir . '/../../maintenance/commandLine.inc' );
-
-$dbw = wfGetDB( DB_MASTER );
-$dbw->sourceFile( $dir . '/db_tables.sql' );
\ No newline at end of file


_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to