public function getTagListRows($rawTag, $offset, $rows = NUM_ROWS, $filter = null)
 {
     global $wgUser;
     $db = WAPDB::getInstance($this->dbType);
     $orderBy = 'ct_rank';
     $filter = intVal($filter);
     // Don't pass in a filter, will filter below
     $vars['articles'] = $db->getArticlesByTagName($rawTag, 0, self::MAX_NUM_ROWS, WAPArticleTagDB::ARTICLE_UNASSIGNED, '', $orderBy);
     if (!empty($filter)) {
         foreach ($vars['articles'] as $i => $a) {
             // bitwise filter by category
             if (!($a->getCatInfo() & $filter)) {
                 unset($vars['articles'][$i]);
             }
         }
     }
     $vars['u'] = BabelfishUser::newFromUserObject($wgUser, $this->dbType);
     $vars['numrows'] = $rows;
     $vars['tag'] = $rawTag;
     $config = WAPDB::getInstance($this->dbType)->getWAPConfig();
     $linkerClass = $config->getLinkerClassName();
     $vars['linker'] = new $linkerClass($this->dbType);
     $tmpl = new WAPTemplate($this->dbType);
     $html = $tmpl->getHtml('tag_list_pager_rows.tmpl.php', $vars);
     return $html;
 }
 public function getTagListRows($rawTag, $offset, $rows = NUM_ROWS, $filter = null)
 {
     $db = WAPDB::getInstance($this->dbType);
     $vars['articles'] = $db->getArticlesByTagName($rawTag, $offset, $rows, WAPArticleTagDB::ARTICLE_UNASSIGNED, $filter);
     $vars['numrows'] = $rows;
     $vars['tag'] = $rawTag;
     $config = WAPDB::getInstance($this->dbType)->getWAPConfig();
     $linkerClass = $config->getLinkerClassName();
     $vars['linker'] = new $linkerClass($this->dbType);
     $tmpl = new WAPTemplate($this->dbType);
     return $tmpl->getHtml('tag_list_pager_rows.tmpl.php', $vars);
 }
 function outputCompletedReportHtml()
 {
     global $wgOut;
     $wgOut->setPageTitle('Completed Report Generator');
     global $wgOut;
     $vars = $this->getDefaultVars($this->dbType);
     if ($this->cu->isAdmin()) {
         $vars['langs'][] = 'all';
     }
     $vars['buttonId'] = 'rpt_completed_articles_admin';
     $tmpl = new WAPTemplate($this->dbType);
     $wgOut->addHtml($tmpl->getHtml('completed_report.tmpl.php', $vars));
 }
 function articleDetails()
 {
     global $wgRequest, $wgOut;
     $url = Misc::getUrlDecodedData($wgRequest->getVal('url'));
     $msg = "";
     try {
         $langCode = $this->cu->getLanguageTag();
         // throws exception if no language tag set for user
         $processedUrls = $this->wapDB->processUrlListByLang($url, $langCode);
         $articleState = 'invalid';
         $articleClass = $this->config->getArticleClassName();
         $ca = $articleClass::newFromUrl($url, $langCode, $this->dbType);
         foreach ($processedUrls as $state => $urls) {
             if (!empty($urls)) {
                 $articleState = $state;
                 break;
             }
         }
         $msg = "Not a valid wikiHow Article.";
         $supportEmail = $this->config->getSupportEmailAddress();
         switch ($articleState) {
             case 'completed':
                 $msg = $this->cu->getId() == $ca->getUserId() ? " You have already completed this article" : "This article is already completed.";
                 break;
             case 'assigned':
                 $msg = $this->cu->getId() == $ca->getUserId() ? "You have already reserved this article." : "This article is reserved by another user.";
                 break;
             case 'excluded':
                 $msg = "This article is on the exclude list. It is permanently unavailable.";
                 break;
             case 'unassigned':
                 $t = Title::newFromId($urls[0]['aid']);
                 if (!$t || !$t->exists()) {
                     // Make sure it's still a valid wikiHow title. Edge case where articles are deleted
                     // before nightly maintenance script cleans those up
                     // If it isn't, stick with the default message
                 } else {
                     if (!$this->cu->canView($ca)) {
                         $msg = "This article is on a special list, please email {$supportEmail} for permission to reserve.";
                     } else {
                         // Show the article
                         $vars = $this->getDefaultVars();
                         $vars['a'] = $ca;
                         $vars['cu'] = $this->cu;
                         $tmpl = new WAPTemplate($this->dbType);
                         $msg = $tmpl->getHtml('article_details.tmpl.php', $vars);
                     }
                 }
                 break;
             case 'new':
                 $msg = $this->config->getNewArticleMessage($supportEmail);
                 break;
             case 'invalid':
                 // Stick with the default message
                 break;
         }
     } catch (Exception $e) {
         $msg = "No language tag set.  Please contact " . $this->config->getSupportEmailAddress();
     }
     $msg = "<h4>{$msg}</h4>";
     $wgOut->setArticleBodyOnly(true);
     $wgOut->addHtml($msg);
 }
 function articleDetails()
 {
     global $wgRequest, $wgOut;
     $wgOut->setArticleBodyOnly(true);
     $vars = $this->getDefaultVars($this->dbType);
     $articleClass = $this->config->getArticleClassName();
     $url = Misc::getUrlDecodedData($wgRequest->getVal('url'));
     $langs = $this->config->getSupportedLanguages();
     foreach ($langs as $lang) {
         $ca = $articleClass::newFromUrl($url, $lang, $this->dbType);
         $vars['lang'] = $lang;
         $vars['article'] = $ca;
         $vars['user'] = $ca->getUser();
         $vars['tags'] = $ca->getTags();
         $tmpl = new WAPTemplate($this->dbType);
         $wgOut->addHtml($tmpl->getHtml('article_details_admin.tmpl.php', $vars));
         $wgOut->addHtml($html);
     }
 }