Add {{NUMBEROFVOTESPAGE}}

With an optional parameter for the page to check the number of votes for.
Partially copied from the {{NUMBEROFVOTES}} and Comments'
{{NUMBEROFCOMMENTSPAGE}}

Change-Id: Ia19f63fe5894a407ad5826720199b9e24d141951
This commit is contained in:
UltrasonicNXT 2014-02-08 21:51:47 +00:00
parent 8126bf0ce3
commit 2eb2ad2057
3 changed files with 63 additions and 1 deletions

View file

@ -59,6 +59,7 @@ $wgHooks['ParserFirstCallInit'][] = 'VoteHooks::registerParserHook';
$wgHooks['RenameUserSQL'][] = 'VoteHooks::onUserRename';
$wgHooks['ParserGetVariableValueSwitch'][] = 'VoteHooks::assignValueToMagicWord';
$wgHooks['MagicWordwgVariableIDs'][] = 'VoteHooks::registerVariableId';
$wgHooks['ParserFirstCallInit'][] = 'VoteHooks::setupNumberOfVotesPageParser';
$wgHooks['LoadExtensionSchemaUpdates'][] = 'VoteHooks::addTable';
// ResourceLoader support for MediaWiki 1.17+

View file

@ -126,18 +126,78 @@ class VoteHooks {
// ...and return the value to the user
$ret = $voteCount;
}
} elseif ( $magicWordId == 'NUMBEROFVOTESPAGE' ) {
$ret = VoteHooks::getNumberOfVotesPage( $parser->getTitle() );
}
return true;
}
/**
* Register the magic word ID for {{NUMBEROFVOTES}}.
* Main function to get the number of votes for a specific page
* @param Title $title: page to get votes for
* @return integer: number of votes for the given page
*/
public static function getNumberOfVotesPage( Title $title ) {
global $wgMemc;
$id = $title->getArticleID();
$key = wfMemcKey( 'vote', 'magic-word-page', $id );
$data = $wgMemc->get( $key );
if ( $data ) {
return $data;
} else {
$dbr = wfGetDB( DB_SLAVE );
$voteCount = (int)$dbr->selectField(
'Vote',
'COUNT(*) AS count',
array( 'vote_page_id' => $id ),
__METHOD__
);
$wgMemc->set( $key, $voteCount, 3600 );
return $voteCount;
}
}
/**
* Hook for parser function {{NUMBEROFVOTESPAGE:<page>}}
* @param Parser $parser
* @param string $pagename
* @return integer
*/
static function getNumberOfVotesPageParser( $parser, $pagename ) {
$title = Title::newFromText( $pagename );
if ( !$title instanceof Title ) {
$title = $parser->getTitle();
}
return VoteHooks::getNumberOfVotesPage( $title );
}
/**
* Register the magic word ID for {{NUMBEROFVOTES}} and {{NUMBEROFVOTESPAGE}}
*
* @param $variableIds Array: array of pre-existing variable IDs
* @return Boolean: true
*/
public static function registerVariableId( &$variableIds ) {
$variableIds[] = 'NUMBEROFVOTES';
$variableIds[] = 'NUMBEROFVOTESPAGE';
return true;
}
/**
* Hook to setup parser function {{NUMBEROFVOTESPAGE:<page>}}
* @param Parser $parser
* @return boolean
*/
static function setupNumberOfVotesPageParser( &$parser ) {
$parser->setFunctionHook( 'NUMBEROFVOTESPAGE', 'VoteHooks::getNumberOfVotesPageParser', SFH_NO_HASH );
return true;
}

View file

@ -7,4 +7,5 @@ $magicWords = array();
$magicWords['en'] = array(
'NUMBEROFVOTES' => array( 0, 'NUMBEROFVOTES' ),
'NUMBEROFVOTESPAGE' => array( 0, 'NUMBEROFVOTESPAGE' ),
);