function __construct($title) { parent::__construct($title); $this->mQuizElement = WikiaQuizElement::newFromArticle($this); }
/** * Load quiz data (try to use cache layer) */ private function load($master = false) { global $wgMemc; wfProfileIn(__METHOD__); if (!$master) { $this->mData = $wgMemc->get($this->mMemcacheKey); } if (empty($this->mData)) { $article = Article::newFromID($this->mQuizId); // check quiz existence if (empty($article)) { wfDebug(__METHOD__ . ": quiz doesn't exist\n"); wfProfileOut(__METHOD__); return; } // get quiz's author and creation timestamp $title = $article->getTitle(); $firstRev = $title->getFirstRevision(); $titleText = $title->getText(); $titleScreenText = ''; $fbRecommendationText = ''; $images = array(); $imageShorts = array(); $moreInfoHeading = ''; $moreInfoLinks = array(); // parse wikitext containing quiz data $content = $article->getContent(); $lines = explode("\n", $content); foreach ($lines as $line) { if (startsWith($line, self::TITLESCREENTEXT_MARKER)) { $titleScreenText = trim(substr($line, strlen(self::TITLESCREENTEXT_MARKER))); } elseif (startsWith($line, self::FBRECOMMENDATIONTEXT_MARKER)) { $fbRecommendationText = trim(substr($line, strlen(self::FBRECOMMENDATIONTEXT_MARKER))); } elseif (startsWith($line, self::IMAGE_MARKER)) { $imageShort = trim(substr($line, strlen(self::IMAGE_MARKER))); $images[] = $this->getImageSrc($imageShort); $imageShorts[] = $imageShort; } elseif (startsWith($line, self::MOREINFOHEADING_MARKER)) { $moreInfoHeading = trim(substr($line, strlen(self::MOREINFOHEADING_MARKER))); } elseif (startsWith($line, self::MOREINFOLINK_MARKER)) { $moreInfo = substr($line, strlen(self::MOREINFOLINK_MARKER)); $moreInfoChunks = explode(self::MOREINFOLINK_TEXT_MARKER, $moreInfo); if (Http::isValidURI($moreInfoChunks[0])) { $moreInfoUrl = $moreInfoChunks[0]; } else { $title = Title::newFromText($moreInfoChunks[0]); $moreInfoUrl = $title->getFullUrl(); } $moreInfoLinks[] = array('article' => $moreInfoChunks[0], 'url' => $moreInfoUrl, 'text' => isset($moreInfoChunks[1]) ? $moreInfoChunks[1] : ''); } elseif (startsWith($line, self::REQUIRE_EMAIL_MARKER)) { $line = substr($line, strlen(self::REQUIRE_EMAIL_MARKER)); $requireEmail = $line == 'true'; } } // load quiz's elements if (empty($this->mCategory)) { $catName = self::QUIZ_CATEGORY_PREFIX . $titleText; $cat = Category::newFromName($catName); $this->mCategory = $cat; } $quizElements = array(); if (empty($this->mCategory) || !$this->mCategory->getID()) { wfDebug(__METHOD__ . ": quiz's category doesn't exist\n"); } else { // get quiz elements $quizIterator = $this->mCategory->getMembers(); while ($quizElementTitle = $quizIterator->current()) { $quizElement = WikiaQuizElement::newFromId($quizElementTitle->getArticleId()); $quizElements[] = $quizElement->getData(); $quizIterator->next(); } } $this->mData = array('id' => $this->mQuizId, 'name' => $titleText, 'requireEmail' => !empty($requireEmail), 'elements' => $quizElements, 'titlescreentext' => $titleScreenText, 'fbrecommendationtext' => $fbRecommendationText, 'images' => $images, 'imageShorts' => $imageShorts, 'moreinfoheading' => $moreInfoHeading, 'moreinfo' => $moreInfoLinks); wfDebug(__METHOD__ . ": loaded from scratch\n"); // store it in memcache $wgMemc->set($this->mMemcacheKey, $this->mData, self::CACHE_TTL); } else { wfDebug(__METHOD__ . ": loaded from memcache\n"); } $this->mExists = true; wfProfileOut(__METHOD__); return; }
public function executeEditQuizArticle($params) { $title = Title::newFromText($params['title'], NS_WIKIA_QUIZARTICLE); if (is_object($title) && $title->exists()) { $this->quizElement = WikiaQuizElement::NewFromTitle($title); $this->data = $this->quizElement->getData(); } }
private static function parseCreateEditQuizArticleRequest(WebRequest $request, WikiaQuizElement $quizElement, &$error) { if (!empty($quizElement)) { $title = $quizElement->getTitle(); $quiz = $quizElement->getQuizTitle(); $order = $quizElement->getOrder(); } else { $order = ''; $title = trim($request->getVal('question')); $quiz = trim($request->getVal('quiz')); } $image = trim($request->getVal('image')); $explanation = trim($request->getVal('explanation')); $video = trim($request->getVal('video')); $answers = $request->getArray('answer'); // array $correctAnswer = trim($request->getVal('correct')); $answerImages = $request->getArray('answer-image'); // array $content = ""; $content .= WikiaQuizElement::TITLE_MARKER . $title . "\n"; if ($image) { if (!self::isValidImage($image)) { $error = wfMsg('wikiaquiz-error-invalid-image', $image); return; } $content .= WikiaQuizElement::IMAGE_MARKER . $image . "\n"; } if ($video) { if (!self::isValidVideo($video)) { $error = wfMsg('wikiaquiz-error-invalid-video', $video); return; } $content .= WikiaQuizElement::VIDEO_MARKER . $video . "\n"; } if ($explanation) { $content .= WikiaQuizElement::EXPLANATION_MARKER . $explanation . "\n"; } if ($quiz) { $content .= self::getCategoryText($quiz, $order); } else { $error = wfMsg('wikiaquiz-error-invalid-quiz'); return; } $answerExists = false; $correctAnswerExists = false; foreach ($answers as $index => $answer) { $answer = trim($answer); if ($answer) { $answerExists = true; $correctAnswerContent = ""; if ($index == $correctAnswer) { if ($correctAnswerExists) { $error = wfMsg('wikiaquiz-error-invalid-correct-answer'); return; } else { $correctAnswerExists = true; } $correctAnswerContent .= WikiaQuizElement::CORRECT_ANSWER_MARKER . ' '; } $answerImageContent = ""; $answerImage = trim($answerImages[$index]); if ($answerImage) { if (!self::isValidImage($answerImage)) { $error = wfMsg('wikiaquiz-error-invalid-image', $answerImage); return; } $answerImageContent .= WikiaQuizElement::ANSWER_IMAGE_MARKER . $answerImages[$index]; } $content .= WikiaQuizElement::ANSWER_MARKER . "{$correctAnswerContent}{$answer}{$answerImageContent}\n"; } } if (!$answerExists) { $error = wfMsg('wikiaquiz-error-missing-answers'); return; } if (!$correctAnswerExists) { $error = wfMsg('wikiaquiz-error-invalid-correct-answer'); return; } return $content; }