diff options
author | Pierre Schmitz <pierre@archlinux.de> | 2010-09-18 13:57:31 +0200 |
---|---|---|
committer | Pierre Schmitz <pierre@archlinux.de> | 2010-09-18 13:57:31 +0200 |
commit | 1af011759fbfe2003273e859440e0d3bc211e528 (patch) | |
tree | 6b3afea29f336e33bc236257f8a902e0c55d87e9 /extensions/FunnyQuestion.php | |
parent | 91da036ca57d692fba4faad573aa4bca1435eda7 (diff) |
Update FunnyQuestion extension
* use MediaWiki hooks to add custom form entries on user creation
* make extension translatable
Diffstat (limited to 'extensions/FunnyQuestion.php')
-rw-r--r-- | extensions/FunnyQuestion.php | 121 |
1 files changed, 0 insertions, 121 deletions
diff --git a/extensions/FunnyQuestion.php b/extensions/FunnyQuestion.php deleted file mode 100644 index 62f196d6..00000000 --- a/extensions/FunnyQuestion.php +++ /dev/null @@ -1,121 +0,0 @@ -<?php - -$wgExtensionCredits['other'][] = array( - 'name' => 'FunnyQuestion', - 'version' => '1.0', - 'description' => 'Challenge-response authentication', - 'author' => 'Pierre Schmitz', - 'url' => 'https://www.archlinux.de' -); - -if ($wgGroupPermissions['*']['edit']) { - $wgHooks['EditPage::showEditForm:fields'][] = 'FunnyQuestion::addFunnyQuestionToEditPage'; - $wgHooks['EditFilter'][] = 'FunnyQuestion::checkFunnyQuestionOnEditPage'; -} - -if ($wgGroupPermissions['*']['createaccount'] && (empty($wgAuth) || $wgAuth->canCreateAccounts())) { - $wgHooks['UserCreateForm'][] = 'FunnyQuestion::addFunnyQuestionToUserCreateForm'; - $wgHooks['AbortNewAccount'][] = 'FunnyQuestion::checkFunnyQuestionOnAbortNewAccount'; -} - - -class FunnyQuestion { - -private static $defaultQuestion = array( - "What is the Ultimate Answer to the Ultimate Question of Life, The Universe, and Everything?" => "42"); - -private static function normalizeAnswer($answer) { - return preg_replace('/[^a-z0-9]/', '', strtolower($answer)); -} - -private static function getFunnyQuestion() { - global $IP, $wgFunnyQuestionHash, $wgFunnyQuestions; - - !isset($wgFunnyQuestions) && $wgFunnyQuestions = self::$defaultQuestion; - !isset($wgFunnyQuestionHash) && $wgFunnyQuestionHash = $IP; - $question = array_rand($wgFunnyQuestions); - $answer = self::normalizeAnswer($wgFunnyQuestions[$question]); - $time = time(); - # make sure the user is not able to tell us the question to answer - $hash = sha1($time.$question.$answer.$wgFunnyQuestionHash); - - return '<div> - <label for="FunnyAnswerField"><strong>'.$question.'</strong></label> - <input id="FunnyAnswerField" type="text" name="FunnyAnswer" size="'.strlen($answer).'" value="" /> - <input type="hidden" name="FunnyQuestionTime" value="'.$time.'" /> - <input type="hidden" name="FunnyQuestionHash" value="'.$hash.'" /> - </div>'; -} - -private static function checkFunnyQuestion() { - global $IP, $wgFunnyQuestionHash, $wgFunnyQuestions, $wgFunnyQuestionTimeout, $wgFunnyQuestionWait; - - # set some sane defaults - # can be overridden in LocalSettings.php - !isset($wgFunnyQuestions) && $wgFunnyQuestions = self::$defaultQuestion; - !isset($wgFunnyQuestionHash) && $wgFunnyQuestionHash = $IP; - !isset($wgFunnyQuestionTimeout) && $wgFunnyQuestionTimeout = 3600; - !isset($wgFunnyQuestionWait) && $wgFunnyQuestionWait = 2; - - if (!empty($_POST['FunnyQuestionTime']) - && !empty($_POST['FunnyQuestionHash']) - && !empty($_POST['FunnyAnswer'])) { - $now = time(); - $time = $_POST['FunnyQuestionTime']; - $hash = $_POST['FunnyQuestionHash']; - $answer = self::normalizeAnswer($_POST['FunnyAnswer']); - } else { - return false; - } - - if ($now - $time > $wgFunnyQuestionTimeout) { - return false; - } elseif ($now - $time < $wgFunnyQuestionWait) { - return false; - } - - foreach (array_keys($wgFunnyQuestions) as $question) { - if ($hash == sha1($time.$question.$answer.$wgFunnyQuestionHash)) { - return true; - } - } - - return false; -} - - -public static function addFunnyQuestionToEditPage($editpage, $output) { - global $wgUser; - - if (!$wgUser->isLoggedIn()) { - $editpage->editFormTextAfterWarn .= self::getFunnyQuestion(); - } - return true; -} - -public static function checkFunnyQuestionOnEditPage($editpage, $text, $section, $error) { - global $wgUser; - - if (!$wgUser->isLoggedIn() && !self::checkFunnyQuestion()) { - $error = '<div class="errorbox">Your answer was wrong!</div><br clear="all" />'; - } - return true; -} - -public static function addFunnyQuestionToUserCreateForm($template) { - $template->set('header', self::getFunnyQuestion()); - return true; -} - -public static function checkFunnyQuestionOnAbortNewAccount($user, $message) { - if (!self::checkFunnyQuestion()) { - $message = 'Your answer was wrong!'; - return false; - } else { - return true; - } -} - -} - -?> |