From 2eb2ad205748e33e81f2e67910d34a53d996e807 Mon Sep 17 00:00:00 2001 From: UltrasonicNXT Date: Sat, 8 Feb 2014 21:51:47 +0000 Subject: [PATCH] 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 --- Vote.php | 1 + VoteHooks.php | 62 ++++++++++++++++++++++++++++++++++++++++++- VoteNY.i18n.magic.php | 1 + 3 files changed, 63 insertions(+), 1 deletion(-) diff --git a/Vote.php b/Vote.php index 5a863c0..169d590 100644 --- a/Vote.php +++ b/Vote.php @@ -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+ diff --git a/VoteHooks.php b/VoteHooks.php index f028b57..2d7c35e 100644 --- a/VoteHooks.php +++ b/VoteHooks.php @@ -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:}} + * @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:}} + * @param Parser $parser + * @return boolean + */ + static function setupNumberOfVotesPageParser( &$parser ) { + $parser->setFunctionHook( 'NUMBEROFVOTESPAGE', 'VoteHooks::getNumberOfVotesPageParser', SFH_NO_HASH ); return true; } diff --git a/VoteNY.i18n.magic.php b/VoteNY.i18n.magic.php index fca243c..62676ec 100644 --- a/VoteNY.i18n.magic.php +++ b/VoteNY.i18n.magic.php @@ -7,4 +7,5 @@ $magicWords = array(); $magicWords['en'] = array( 'NUMBEROFVOTES' => array( 0, 'NUMBEROFVOTES' ), + 'NUMBEROFVOTESPAGE' => array( 0, 'NUMBEROFVOTESPAGE' ), );