https://www.mediawiki.org/wiki/Special:Code/MediaWiki/114831
Revision: 114831
Author: yaron
Date: 2012-04-10 19:29:20 +0000 (Tue, 10 Apr 2012)
Log Message:
-----------
Added handling for new $egApprovedRevsSelfOwnedNamespaces global variable,
which lets the "owner" of a page, for certain namespaces, approve revisions,
even if they're not an administrator. Also some minor formatting and other
improvements.
Modified Paths:
--------------
trunk/extensions/ApprovedRevs/ApprovedRevs.hooks.php
trunk/extensions/ApprovedRevs/ApprovedRevs.php
Modified: trunk/extensions/ApprovedRevs/ApprovedRevs.hooks.php
===================================================================
--- trunk/extensions/ApprovedRevs/ApprovedRevs.hooks.php 2012-04-10
19:25:32 UTC (rev 114830)
+++ trunk/extensions/ApprovedRevs/ApprovedRevs.hooks.php 2012-04-10
19:29:20 UTC (rev 114831)
@@ -8,6 +8,7 @@
* @ingroup Extensions
*
* @author Yaron Koren
+ * @author Jeroen De Dauw
*/
class ApprovedRevsHooks {
@@ -15,7 +16,7 @@
static public function userRevsApprovedAutomatically( $title ) {
global $egApprovedRevsAutomaticApprovals;
- return ( $title->userCan( 'approverevisions' ) &&
$egApprovedRevsAutomaticApprovals );
+ return ( ApprovedRevs::userCanApprove( $title ) &&
$egApprovedRevsAutomaticApprovals );
}
/**
@@ -184,9 +185,9 @@
return true;
}
- // This looks extreme - disable the cache for every page,
- // if users aren't meant to see pages with no approved
- // revision, and this page has no approved revision - but
+ // Disable the cache for every page, if users aren't meant
+ // to see pages with no approved revision, and this page
+ // has no approved revision. This looks extreme - but
// there doesn't seem to be any other way to distinguish
// between a user looking at the main view of page, and a
// user specifically looking at the latest revision of the
@@ -210,10 +211,11 @@
* seeing is the approved revision of the page, remove the standard
* subtitle shown for all non-latest revisions, and replace it with
* either nothing or a message explaining the situation, depending
- * on the user's rights
+ * on the user's rights.
*/
static function setSubtitle( &$article, &$revisionID ) {
- if ( ! ApprovedRevs::hasApprovedRevision( $article->getTitle()
) ) {
+ $title = $article->getTitle();
+ if ( ! ApprovedRevs::hasApprovedRevision( $title ) ) {
return true;
}
@@ -231,7 +233,7 @@
return true;
}
- if ( ! $article->getTitle()->userCan( 'viewlinktolatest' ) ) {
+ if ( ! $title->userCan( 'viewlinktolatest' ) ) {
return false;
}
@@ -244,31 +246,31 @@
);
} else {
$text = wfMsgHtml( 'approvedrevs-notlatest' );
-
+
global $wgUser;
$sk = $wgUser->getSkin();
$text .= ' ' . $sk->link(
- $article->getTitle(),
+ $title,
wfMsgHtml( 'approvedrevs-viewlatestrev' ),
array(),
array( 'oldid' => $article->getLatest() ),
array( 'known', 'noclasses' )
);
-
+
$text = Xml::tags(
'span',
array( 'class' => 'notLatestMsg' ),
$text
);
}
-
+
global $wgOut;
if ( $wgOut->getSubtitle() != '' ) {
$wgOut->appendSubtitle( '<br />' . $text );
} else {
$wgOut->setSubtitle( $text );
}
-
+
return false;
}
@@ -296,7 +298,7 @@
/**
* Same as addWarningToEditPage(), but for the Semantic Foms
- * 'edit with form' tab
+ * 'edit with form' tab.
*/
public static function addWarningToSFForm( &$pageName, &$preFormHTML ) {
// The title could be obtained via $pageName in theory - the
@@ -363,13 +365,13 @@
if ( is_null( $article ) ) {
return true;
}
- // this will be null if there's no ID
+ // This will be null if there's no ID.
$approvedRevID = ApprovedRevs::getApprovedRevID(
$article->getTitle() );
$article->getTitle()->approvedRevID = $approvedRevID;
return true;
}
-
+
/**
* If the user is allowed to make revision approvals, add either an
* 'approve' or 'unapprove' link to the end of this row in the page
@@ -390,7 +392,7 @@
if ( $row->rev_id == $approvedRevID ) {
$s .= '★ ';
}
- if ( $title->userCan( 'approverevisions' ) ) {
+ if ( ApprovedRevs::userCanApprove( $title ) ) {
if ( $row->rev_id == $approvedRevID ) {
$url = $title->getLocalUrl(
array( 'action' => 'unapprove' )
@@ -410,15 +412,15 @@
}
return true;
}
-
+
/**
* Handle the 'approve' action, defined for ApprovedRevs -
* mark the revision as approved, log it, and show a message to
* the user.
*/
static function setAsApproved( $action, $article ) {
- // return "true" if the call failed (meaning, pass on handling
- // of the hook to others), and "false" otherwise
+ // Return "true" if the call failed (meaning, pass on handling
+ // of the hook to others), and "false" otherwise.
if ( $action != 'approve' ) {
return true;
}
@@ -426,23 +428,23 @@
if ( ! ApprovedRevs::pageIsApprovable( $title ) ) {
return true;
}
- if ( ! $title->userCan( 'approverevisions' ) ) {
+ if ( ! ApprovedRevs::userCanApprove( $title ) ) {
return true;
}
global $wgRequest;
if ( ! $wgRequest->getCheck( 'oldid' ) ) {
return true;
}
- $revision_id = $wgRequest->getVal( 'oldid' );
- ApprovedRevs::setApprovedRevID( $title, $revision_id );
+ $revisionID = $wgRequest->getVal( 'oldid' );
+ ApprovedRevs::setApprovedRevID( $title, $revisionID );
global $wgOut;
- $wgOut->addHTML( ' ' . Xml::element(
+ $wgOut->addHTML( "\t\t" . Xml::element(
'div',
array( 'class' => 'successbox' ),
wfMsg( 'approvedrevs-approvesuccess' )
) . "\n" );
- $wgOut->addHTML( ' ' . Xml::element(
+ $wgOut->addHTML( "\t\t" . Xml::element(
'p',
array( 'style' => 'clear: both' )
) . "\n" );
@@ -450,10 +452,10 @@
// show the revision, instead of the history page
$article->doPurge();
$article->view();
-
+
return false;
}
-
+
/**
* Handle the 'unapprove' action, defined for ApprovedRevs -
* unset the previously-approved revision, log the change, and show
@@ -466,7 +468,7 @@
return true;
}
$title = $article->getTitle();
- if ( ! $title->userCan( 'approverevisions' ) ) {
+ if ( ! ApprovedRevs::userCanApprove( $title ) ) {
return true;
}
@@ -482,12 +484,12 @@
}
global $wgOut;
- $wgOut->addHTML( ' ' . Xml::element(
+ $wgOut->addHTML( "\t\t" . Xml::element(
'div',
array( 'class' => 'successbox' ),
$successMsg
) . "\n" );
- $wgOut->addHTML( ' ' . Xml::element(
+ $wgOut->addHTML( "\t\t" . Xml::element(
'p',
array( 'style' => 'clear: both' )
) . "\n" );
@@ -495,7 +497,7 @@
// show the revision, instead of the history page
$article->doPurge();
$article->view();
-
+
return false;
}
@@ -504,9 +506,9 @@
* transcluded pages.
*/
static function setTranscludedPageRev( $parser, $title, &$skip, &$id ) {
- $revision_id = ApprovedRevs::getApprovedRevID( $title );
- if ( ! empty( $revision_id ) ) {
- $id = $revision_id;
+ $revisionID = ApprovedRevs::getApprovedRevID( $title );
+ if ( ! empty( $revisionID ) ) {
+ $id = $revisionID;
}
return true;
}
@@ -527,7 +529,7 @@
$magicWordVariableIDs[] = 'MAG_APPROVEDREVS';
return true;
}
-
+
/**
* Set values in the page_props table based on the presence of the
* 'APPROVEDREVS' magic word in a page
@@ -572,65 +574,85 @@
}
return true;
}
-
+
/**
- * Hook to insert things into article headers.
- *
+ * Display a message
+ *
* @since 0.5.6
- *
+ *
* @param Article &$article
* @param boolean $outputDone
* @param boolean $useParserCache
- *
+ *
* @return true
- */
+ */
public static function setArticleHeader( Article &$article,
&$outputDone, &$useParserCache ) {
global $wgOut, $wgRequest, $egApprovedRevsBlankIfUnapproved;
-
- if ( ApprovedRevs::pageIsApprovable( $article->getTitle() )
- && $article->getTitle()->userCan( 'approverevisions' )
) {
-
- $approvedId = ApprovedRevs::getApprovedRevID(
$article->getTitle() );
- if ( $egApprovedRevsBlankIfUnapproved &&
- ( empty( $approvedId ) || (
$wgRequest->getCheck( 'oldid' ) && $wgRequest->getInt( 'oldid' ) != $approvedId
) ) ) {
- // Disable caching, so that if it's a specific
- // ID being shown that happens to be the
- // latest, it doesn't show a blank page.
- $useParserCache = false;
- $wgOut->addHTML( '<span
style="margin-left:10.75px">' );
-
- if ( $wgRequest->getCheck( 'oldid' ) ) {
- $wgOut->addHTML( Xml::tags( 'span',
array( 'id' => 'contentSub2' ),
- Xml::element( 'a',
- array( 'href' =>
$article->getTitle()->getLocalUrl(
- array(
- 'action' =>
'approve',
- 'oldid' =>
$wgRequest->getInt( 'oldid' )
- )
- ) ),
- wfMsg(
'approvedrevs-approvethisrev' )
- ) ) );
+ // For now, we only set the header if "blank if unapproved"
+ // is set.
+ if ( ! $egApprovedRevsBlankIfUnapproved ) {
+ return true;
+ }
- }
- else {
- $wgOut->appendSubtitle(
- htmlspecialchars( wfMsg(
'approvedrevs-blankpageshown' ) ) . ' ' .
- Xml::element( 'a',
- array( 'href' =>
$article->getTitle()->getLocalUrl(
- array(
- 'oldid'
=> $article->getRevIdFetched()
- )
- ) ),
- wfMsg(
'approvedrevs-viewlatestrev' )
+ $title = $article->getTitle();
+ if ( ! ApprovedRevs::pageIsApprovable( $title ) ) {
+ return true;
+ }
+ if ( ! ApprovedRevs::userCanApprove( $title ) ) {
+ return true;
+ }
+
+ $approvedRevID = ApprovedRevs::getApprovedRevID( $title );
+ if ( ! empty( $approvedRevID ) &&
+ ! ( $wgRequest->getCheck( 'oldid' ) &&
+ $wgRequest->getInt( 'oldid' ) == $approvedRevID ) ) {
+ return true;
+ }
+
+ // Disable caching, so that if it's a specific ID being shown
+ // that happens to be the latest, it doesn't show a blank page.
+ $useParserCache = false;
+ $wgOut->addHTML( '<span style="margin-left: 10.75px">' );
+
+ if ( $wgRequest->getCheck( 'oldid' ) ) {
+ $wgOut->addHTML( Xml::tags( 'span', array( 'id' =>
'contentSub2' ),
+ Xml::element( 'a',
+ array( 'href' => $title->getLocalUrl(
+ array(
+ 'action' => 'approve',
+ 'oldid' => $wgRequest->getInt(
'oldid' )
+ )
+ ) ),
+ wfMsg( 'approvedrevs-approvethisrev' )
+ ) ) );
+
+ } else {
+ $wgOut->appendSubtitle(
+ htmlspecialchars( wfMsg(
'approvedrevs-blankpageshown' ) ) . ' ' .
+ Xml::element( 'a',
+ array( 'href' => $title->getLocalUrl(
+ array(
+ 'oldid' =>
$article->getRevIdFetched()
)
- );
- }
-
- $wgOut->addHTML( '</span>' );
- }
+ ) ),
+ wfMsg( 'approvedrevs-viewlatestrev' )
+ )
+ );
}
-
+
+ $wgOut->addHTML( '</span>' );
+
return true;
}
+
+ /**
+ * @TODO - this should ideally set the text that MediaWiki's search
+ * uses when searching the wiki, but I haven't been able to get it
+ * working. At the moment, it's not being called.
+ */
+ public static function setSearchText( $id, $namespace, $title, $text ) {
+ return true;
+ }
+
}
Modified: trunk/extensions/ApprovedRevs/ApprovedRevs.php
===================================================================
--- trunk/extensions/ApprovedRevs/ApprovedRevs.php 2012-04-10 19:25:32 UTC
(rev 114830)
+++ trunk/extensions/ApprovedRevs/ApprovedRevs.php 2012-04-10 19:29:20 UTC
(rev 114831)
@@ -24,7 +24,8 @@
// global variables
$egApprovedRevsIP = dirname( __FILE__ ) . '/';
$egApprovedRevsScriptPath = $wgScriptPath . '/extensions/ApprovedRevs';
-$egApprovedRevsNamespaces = array( NS_MAIN, NS_TEMPLATE, NS_HELP, NS_PROJECT );
+$egApprovedRevsNamespaces = array( NS_MAIN, NS_USER, NS_PROJECT, NS_TEMPLATE,
NS_HELP );
+$egApprovedRevsSelfOwnedNamespaces = array();
$egApprovedRevsBlankIfUnapproved = false;
$egApprovedRevsAutomaticApprovals = true;
$egApprovedRevsShowApproveLatest = false;
@@ -65,6 +66,7 @@
$wgHooks['EditPage::showEditForm:initial'][] =
'ApprovedRevsHooks::addWarningToEditPage';
$wgHooks['sfHTMLBeforeForm'][] = 'ApprovedRevsHooks::addWarningToSFForm';
$wgHooks['ArticleViewHeader'][] = 'ApprovedRevsHooks::setArticleHeader';
+//$wgHooks['SearchUpdate'] = 'ApprovedRevsHooks::setSearchText';
// logging
$wgLogTypes['approval'] = 'approval';
_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs