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