Exemplo n.º 1
0
 function __construct($title)
 {
     parent::__construct($title);
     $this->mQuizElement = WikiaQuizElement::newFromArticle($this);
 }
Exemplo n.º 2
0
 /**
  * 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();
     }
 }
Exemplo n.º 4
0
 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;
 }