/**
  * Return HTML for showing all the user with their recommendations
  */
 public function showUsers()
 {
     $dbr = wfGetDB(DB_SLAVE);
     $sql = "select user_id, user_name, page_title, page_id, ur_score, ur_deleted,count(urcl_id) as views, ur_date_used from user_recommendation join wiki_shared.user on ur_user=user_id join page on page_id=ur_page and page_namespace=0 left join user_recommendation_click_log on ur_user=urcl_user and ur_page=urcl_page group by user_id,page_id order by user_id,ur_score desc";
     $res = $dbr->query($sql, __METHOD__);
     $curUser = false;
     $outRows = array();
     $outRow = false;
     foreach ($res as $row) {
         if ($curUser != $row->user_id) {
             if ($outRow) {
                 $outRows[] = $outRow;
             }
             $outRow = array();
             $outRow['user_id'] = $row->user_id;
             $outRow['user_name'] = $row->user_name;
             $outRow['recommendations'] = array();
             $curUser = $row->user_id;
         }
         $outRow['recommendations'][] = array('title' => str_replace('-', ' ', $row->page_title), 'page_id' => $row->page_id, 'score' => $row->ur_score, 'views' => $row->views, 'date_used' => $row->ur_date_used);
     }
     if ($outRow) {
         $outRows[] = $outRow;
     }
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     $vars = array('rows' => $outRows);
     return EasyTemplate::html('UserRecs.tmpl.php', $vars);
 }
Example #2
0
 private function showAdminForm()
 {
     global $wgOut;
     EasyTemplate::set_path(dirname(__FILE__));
     $vars['ts'] = wfTimestampNow();
     $wgOut->addHtml(EasyTemplate::html('imagefeedback_admin'));
 }
 function execute()
 {
     global $wgOut, $wgRequest;
     require_once 'dedupQuery.php';
     $action = $wgRequest->getVal('act');
     if ($action == NULL) {
         EasyTemplate::set_path(dirname(__FILE__));
         $wgOut->addHTML(EasyTemplate::html('CommunityExpert.tmpl.php'));
     } elseif ($action == "get") {
         $url = $wgRequest->getVal('url');
         $query = $this->getQueryFromUrl($url);
         if ($query) {
             dedupQuery::addQuery($query);
             dedupQuery::matchQueries(array($query));
             $dbr = wfGetDB(DB_SLAVE);
             $sql = "select user_name,tq.tq_title as title, sum(ct) as score from firstedit join dedup.title_query tq on tq.tq_page_id=fe_page join dedup.query_match on tq.tq_query=query2 join wiki_shared.user on fe_user=user_id where query1=" . $dbr->addQuotes($query) . " group by fe_user order by score desc";
             $dbr = wfGetDB(DB_SLAVE);
             $res = $dbr->query($sql, __METHOD__);
             header("Content-Type: text/tsv");
             header('Content-Disposition: attachment; filename="Dedup.xls"');
             print "User page\tRelated title\n";
             foreach ($res as $row) {
                 print "http://www.wikihow.com/User:"******"\thttp://www.wikihow.com/" . str_replace(" ", "-", $row->title) . "\n";
             }
             exit;
         } else {
             print "NO URL";
             exit;
         }
     }
 }
 function execute($par)
 {
     global $wgUser, $wgOut, $wgRequest, $wgServer, $isDevServer;
     $userGroups = $wgUser->getGroups();
     if ($wgUser->isBlocked() || !in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     if ($wgRequest->wasPosted()) {
         $this->action = $wgRequest->getVal('a');
         $this->slowQuery = $wgRequest->getVal('alts') == 'true';
         $this->introOnly = $wgRequest->getVal('intonly') == 'true';
         switch ($this->action) {
             case 'cats':
                 $this->outputCategoryReport();
                 break;
             case 'articles':
                 $this->outputArticleReport();
                 break;
             case 'ids':
                 $this->outputArticleIdReport();
                 break;
         }
         return;
     }
     $this->action = empty($par) ? 'cats' : strtolower($par);
     $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('download.jQuery.js'), 'extensions/wikihow/common', false));
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     $vars = array();
     $this->setVars($vars);
     $html = EasyTemplate::html('ArticleData', $vars);
     $wgOut->setPageTitle('Article Stats');
     $wgOut->addHTML($html);
 }
 function execute($par)
 {
     global $wgUser, $wgOut, $wgRequest, $wgLang;
     $userGroups = $wgUser->getGroups();
     if ($wgUser->isBlocked() || !in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     if ($wgRequest->getVal("csv")) {
         $wgOut->disable();
         header('Content-type: application/force-download');
         header('Content-disposition: attachment; filename="views.csv"');
         $edits = $this->getEdits();
         print "user,url,date\n";
         foreach ($edits as $edit) {
             $time = $wgLang->timeanddate(wfTimestamp(TS_MW, $edit['log_timestamp']), true);
             $output = $edit['log_user_name'] . "," . $edit['title_url'] . "," . str_replace(",", "", $time);
             print "{$output}\n";
         }
         return;
     }
     $wgOut->setPageTitle('Method Editor Admin Page');
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     $this->ts = wfTimestamp(TS_MW, time() - 24 * 3600 * $wgRequest->getVal("days", 30));
     $this->printReport();
 }
 /**
  * Called when the user goes to an edit page
  * Override the functionality of the edit to require a URL to translate
  */
 static function onCustomEdit()
 {
     global $wgRequest, $wgOut;
     $draft = $wgRequest->getVal('draft', null);
     $target = $wgRequest->getVal('title', null);
     $action = $wgRequest->getVal('action', null);
     $section = $wgRequest->getVal('section', $wgRequest->getVal('wpSection', null));
     $save = $wgRequest->getVal('wpSave', null);
     $title = Title::newFromURL($target);
     // We have the dialog to enter the URL when we are adding a new article, and have no existing draft.
     if (self::isTranslatorUser()) {
         if ($draft == null && !$title->exists() && $action == 'edit') {
             EasyTemplate::set_path(dirname(__FILE__) . '/');
             // Templates to remove from tranlsation
             $remove_templates = array("{{FA}}", "\\[\\[Category:[^\\]]+\\]\\]");
             // Words or things to automatically translate
             $translations = array(array('from' => self::getSectionRegex('Steps'), 'to' => self::getSectionWikitext(wfMsg('Steps'))), array('from' => self::getSectionRegex('Tips'), 'to' => self::getSectionWikitext(wfMsg('Tips'))), array('from' => self::getSectionRegex('Warnings'), 'to' => self::getSectionWikitext(wfMsg('Warnings'))), array('from' => self::getSectionRegex('Ingredients'), 'to' => self::getSectionWikitext(wfMsg('Ingredients'))), array('from' => self::getSectionRegex("Things You'll need"), 'to' => self::getSectionWikitext(wfMsg('Thingsyoullneed'))), array('from' => self::getSectionRegex("Related wikiHows"), 'to' => self::getSectionWikitext(wfMsg('Related'))), array('from' => self::getSectionRegex("Sources and Citations"), 'to' => self::getSectionWikitext(wfMsg('Sources'))));
             $vars = array('title' => $target, 'checkForLL' => true, 'translateURL' => true, 'translations' => json_encode($translations), 'remove_templates' => array_map(preg_quote, $remove_templates));
             $html = EasyTemplate::html('TranslateEditor.tmpl.php', $vars);
             $wgOut->addHTML($html);
             QuickEdit::showEditForm($title);
             return false;
         } elseif ($section == null && $save == null) {
             EasyTemplate::set_path(dirname(__FILE__) . '/');
             $vars = array('title' => $target, 'checkForLL' => true, 'translateURL' => false);
             $html = EasyTemplate::html('TranslateEditor.tmpl.php', $vars);
             $wgOut->addHTML($html);
             QuickEdit::showEditForm($title);
             return false;
         }
     }
     return true;
 }
Example #7
0
 public function execute()
 {
     global $wgRequest, $wgOut, $wgUser;
     $userGroups = $wgUser->getGroups();
     if ($wgUser->isBlocked() || !in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->errorpage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     if ($wgRequest->wasPosted()) {
         $query = $wgRequest->getVal('query');
         ini_set('memory_limit', '1024M');
         //Take up to 4 minutes to download big queries
         set_time_limit(240);
         $this->getQuery();
     } else {
         EasyTemplate::set_path(dirname(__FILE__) . '/');
         $vars = array('fields' => $this->getFields());
         $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('download.jQuery.js'), 'extensions/wikihow/common', false));
         $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('jquery.sqlbuilder-0.06.js'), 'extensions/wikihow/titus', false));
         $html = EasyTemplate::html('flaviusquerytool.tmpl.php', $vars);
         $wgOut->addHTML($html);
     }
     return $html;
 }
 static function beforeHeaderDisplay($isMobile)
 {
     global $whEditRedirectSave, $wgOut, $wgRequest, $wgUser, $wgTitle;
     /*
      * We only want to display the edit redirect page on desktop after the first edit on a main namespace page. We check a bunch of criteria to ensure this is he case.
      * criteria to ensure this is indeed the first edit
      */
     if (!$isMobile && isset($_SESSION[self::OUR_SESSION_NAME]) && $_SESSION[self::OUR_SESSION_NAME] && Hydra::isEnabled(self::EXPERIMENT_NAME) || $wgRequest->getVal("abtest_test2") == "1") {
         // Turn off cache because this is a onetime thing
         $wgOut->enableClientCache(false);
         unset($_SESSION[self::OUR_SESSION_NAME]);
         $cats = $wgTitle->getParentCategories();
         if (sizeof($cats) == 0) {
             return true;
         }
         $catkeys = array_keys($cats);
         $cat = false;
         foreach ($catkeys as $k) {
             if (preg_match('@Category:(.+)@i', $k, $matches) && $matches[1] != 'Featured-Articles') {
                 $cat = $matches[1];
                 break;
             }
         }
         // We only display the edit redirect dialog for main namespace edits
         if ($wgTitle->getNamespace() == NS_MAIN && $wgRequest->getText('action', 'view') == 'view' && $cat) {
             EasyTemplate::set_path(dirname(__FILE__));
             $catText = str_replace('-', ' ', $cat);
             $vars = array('cat' => $cat, 'catText' => $catText);
             $tmpl = EasyTemplate::html("CatRedirect.tmpl.php", $vars);
             $wgOut->addScript($tmpl);
         }
     }
     return true;
 }
 function execute($par)
 {
     global $wgUser, $wgOut, $wgRequest;
     $userGroups = $wgUser->getGroups();
     if ($wgUser->isBlocked() || !in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     if ($wgRequest->wasPosted()) {
         $wgOut->disable();
         $result = array();
         $result['debug'][] = "posted to apiappadmin";
         if ($wgRequest->getVal("action") == "default") {
             $this->testQuery(&$result);
         } else {
             if ($wgRequest->getVal("action") == "getpage") {
                 //nothing yet
             }
         }
         echo json_encode($result);
         return;
     }
     $wgOut->setPageTitle('APIAppAdmin');
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     $vars['css'] = HtmlSnips::makeUrlTags('css', array('apiappadmin.css'), 'extensions/wikihow/apiappsupport', true);
     $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('apiappadmin.js'), 'extensions/wikihow/apiappsupport', true));
     $html = EasyTemplate::html('APIAppAdmin', $vars);
     $wgOut->addHTML($html);
 }
 public function execute()
 {
     global $wgOut;
     EasyTemplate::set_path(dirname(__FILE__));
     $wgOut->setPageTitle("Welcome to wikiHow!");
     $wgOut->addHTML(EasyTemplate::html('NewUserPage.tmpl.php'));
     return true;
 }
Example #11
0
 /**
  * Show the HTML template for adding images to URLs 
  */
 private function showTemplate()
 {
     global $wgOut, $wgActiveLangs;
     EasyTemplate::set_path(dirname(__FILE__));
     $tmpl = EasyTemplate::html("Alfredo.tmpl.php", array('langs' => $this->langs));
     $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('download.jQuery.js'), 'extensions/wikihow/common', false));
     $wgOut->addHTML($tmpl);
 }
Example #12
0
 public function execute()
 {
     require_once 'YBSuggestions.php';
     require_once 'KeywordIdeasCSV.php';
     global $wgOut, $wgRequest, $wgUser;
     if ($wgUser->isBlocked()) {
         throw new PermissionsError('Leonard');
     }
     $userGroups = $wgUser->getGroups();
     if (!in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     $csvFieldName = 'csvfile';
     $action = $wgRequest->getVal('act');
     $avg_gad_keyword_search_thresh = $wgRequest->getVal('thresh');
     if (empty($avg_gad_keyword_search_thresh)) {
         $avg_gad_keyword_search_thresh = self::AVG_GAD_KEYWORD_MONTHLY_SEARCH_THRESH;
     } else {
         $avg_gad_keyword_search_thresh = (int) $avg_gad_keyword_search_thresh;
     }
     $groupTitles = $wgRequest->getVal('groupTitles');
     $groupTitles = empty($groupTitles) ? false : true;
     $this->queriesR = $wgRequest->getVal('seed');
     $file = $wgRequest->getVal($csvFieldName);
     if ($action == NULL) {
         EasyTemplate::set_path(dirname(__FILE__));
         $wgOut->addHTML(EasyTemplate::html('Leonard.tmpl.php'));
     } elseif ($action == 'getTitles' && $_FILES && !empty($_FILES["csvfile"]["name"])) {
         list($err, $filename) = $this->uploadFile($csvFieldName, $this->allowedFileExts, $this->allowedCsvFileSize, $this->allowedFileTypes, true);
         if ($err) {
             $wgOut->addHTML($err);
         } else {
             list($err, $seed, $rows) = Yboss::fetchQueries($filename, $avg_gad_keyword_search_thresh, $groupTitles);
             unlink($filename);
             if ($err) {
                 $wgOut->addHTML($err);
             } else {
                 $xlsFileName = "";
                 if ($seed) {
                     $xlsFileName = $seed[KeywordIdeasCSV::KEY_KEYWORD];
                     if (!empty($xlsFileName)) {
                         $xlsFileName = str_replace(' ', '-', $xlsFileName);
                     }
                 }
                 $this->printCSVRows($rows, $xlsFileName);
             }
         }
     } elseif ($action == 'getTitles' && $this->queriesR) {
         $internalDedup = $wgRequest->getVal('internalDedup');
         if ($internalDedup) {
             $this->getTopMatchBatch();
         } else {
             $this->getBatch();
         }
     }
 }
 private function setTemplatePath($templateName)
 {
     $path = $this->config->getSystemUITemplatesLocation();
     $et = new EasyTemplate($path);
     // If there isn't a template that is system specific, template should exist in WAP templates
     if (!$et->template_exists($templateName)) {
         $path = $this->config->getWAPUITemplatesLocation();
     }
     EasyTemplate::set_path($path);
 }
Example #14
0
 function execute($par)
 {
     global $wgOut, $wgRequest, $wgUser, $wgParser;
     wfLoadExtensionMessages("TipsPatrol");
     if ($wgUser->isBlocked()) {
         $wgOut->blockedPage();
         return;
     }
     if ($wgUser->isAnon() || self::isBlockedFromTipsPatrol($wgUser)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->errorpage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     $this->skipTool = new ToolSkip("tiptool", "tipsandwarnings", "tw_checkout", "tw_checkout_user", "tw_id");
     if ($wgRequest->wasPosted()) {
         $wgOut->disable();
         $result = array();
         $tipId = $wgRequest->getVal('tipId');
         if ($wgRequest->getVal('coachTip')) {
             $this->coachResult($tipId, &$result);
         } elseif ($tipId != null && $wgRequest->getVal('skipTip')) {
             $this->logTip($tipId, self::TIP_ACTION_SKIP);
             $this->skipTool->skipItem($tipId);
             $this->skipTool->unUseItem($tipId);
         } elseif ($wgRequest->getVal('deleteTip')) {
             $articleId = $wgRequest->getVal('articleId');
             $tip = $wgRequest->getVal('tip');
             $this->deleteTip($tipId, $articleId, $tip);
         } elseif ($wgRequest->getVal('keepTip')) {
             //used to send to keepTip, but now we have an extra step: QG
             $articleId = $wgRequest->getVal('articleId');
             $tip = $wgRequest->getVal('tip');
             $this->logTip($tipId, self::TIP_ACTION_QG, '', $tip);
             $this->addToQG($tipId, $articleId, $tip, $result);
         }
         $this->getNextTip(&$result);
         echo json_encode($result);
         return;
     }
     $wgOut->setHTMLTitle(wfMsg('tipspatrol'));
     $wgOut->setPageTitle(wfMsg('tipspatrol'));
     $wgOut->addHTML(HtmlSnips::makeUrlTags('css', array('tipspatrol.css'), 'extensions/wikihow/tipsandwarnings', false));
     $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('tipspatrol.js'), 'extensions/wikihow/tipsandwarnings', false));
     $wgOut->addScript(HtmlSnips::makeUrlTags('js', array('mousetrap.min.js,jquery.cookie.js'), 'extensions/wikihow/common', false));
     EasyTemplate::set_path(dirname(__FILE__));
     $vars = array();
     $vars['tip_skip_title'] = wfMsg('tip_skip_title');
     $vars['tip_keep_title'] = wfMsg('tip_keep_title');
     $vars['tip_delete_title'] = wfMsg('tip_delete_title');
     $wgOut->addHTML(EasyTemplate::html('TipsPatrol.tmpl.php', $vars));
     $bubbleText = "Only publish this tip if you can make it helpful, clear, and grammatically correct. Most tips should get deleted.";
     InterfaceElements::addBubbleTipToElement('tip_tip', 'tptrl', $bubbleText);
     $this->displayLeaderboards();
 }
Example #15
0
 public function header($isUserAgentMobile)
 {
     global $wgUser;
     $sk = $wgUser->getSkin();
     if (NewLayout::isNewLayoutPage()) {
         EasyTemplate::set_path(dirname(__FILE__));
         $headerVars = array('form' => GoogSearch::getSearchBox("cse-search-box"));
         echo EasyTemplate::html('header_' . self::ARTICLE_LAYOUT . '.tmpl.php', $headerVars);
     }
     return true;
 }
 public static function parserFunction($parser, $arrowText, $grayText, $scrollText)
 {
     global $wgTitle, $wgContLang;
     $scrollText = self::prepareText($scrollText);
     $grayText = self::prepareText($grayText);
     $arrowText = self::prepareText($arrowText);
     $vars = array('arrowText' => $arrowText, 'grayText' => $grayText, 'scrollText' => $scrollText, 'id' => 'scrl-' . hash("md5", $scrollText . mt_rand(1, 1000)));
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     $html = EasyTemplate::html('textscroller', $vars);
     $html = preg_replace("@\n@", "", $html);
     return $parser->insertStripItem($html);
 }
Example #17
0
 public function execute()
 {
     global $wgRequest, $wgOut;
     $queries = $wgRequest->getVal('queries');
     $checkUrls = $wgRequest->getVal('checkUrls');
     if ($queries == NULL) {
         EasyTemplate::set_path(dirname(__FILE__));
         $wgOut->addHTML(EasyTemplate::html('QueryCat.tmpl.php'));
     } elseif ($checkUrls) {
         header("Content-Type: text/tsv");
         header('Content-Disposition: attachment; filename="Dedup.xls"');
         $urls = preg_split("@[\r\n]+@", $queries);
         foreach ($urls as $url) {
             if (preg_match("@http://www\\.wikihow\\.com/(.+)@", $url, $matches)) {
                 $t = Title::newFromText($matches[1]);
                 if (!$t) {
                     $t = Title::newFromText(urldecode($matches[1]));
                 }
                 if ($t) {
                     $cats = $t->getParentCategories();
                     $cats = array_keys($cats);
                     $sls = array();
                     foreach ($cats as $cat) {
                         $tree = $this->getCategoryTree($cat);
                         if (sizeof($tree) >= 2 && $tree[0] != "Category:WikiHow") {
                             $sls[str_replace('Category:', '', $tree[1])] = 1;
                         }
                     }
                     print $url;
                     foreach ($sls as $sl => $v) {
                         print "\t" . $sl;
                     }
                     print "\n";
                 }
             }
         }
         exit;
     } else {
         header("Content-Type: text/tsv");
         header('Content-Disposition: attachment; filename="Dedup.xls"');
         print "Query\tTop Level Match\t2nd level match\t3rd level matches\n";
         $queries = preg_split("@[\r\n]+@", $queries);
         foreach ($queries as $query) {
             print $query . "\t";
             self::printQueryLevelCat($query, 0, 1, false);
             self::printQueryLevelCat($query, 1, 1, false);
             self::printQueryLevelCat($query, 2, false, true);
             print "\n";
         }
         exit;
     }
 }
 function printResponse($testResult, $response)
 {
     global $wgOut, $wgUser;
     wfLoadExtensionMessages('RCTestGrader');
     $testResult['heading'] = wfMsg('rct_heading', $wgUser->getName());
     $testResult['intro'] = wfMsg('rct_intro');
     $testResult['img_class'] = $this->getImgClass($testResult, $response);
     $testResult['bg_class'] = $this->getBackgroundClass($testResult, $response);
     $testResult['response_heading'] = $this->getResponseHeading($testResult['correct'], $response);
     $testResult['response_txt'] = $this->getResponseText($testResult['ideal_responses'], $response, $testResult['correct']);
     $testResult['exp_heading'] = $testResult['correct'] ? wfMsg('rct_exp_heading_correct') : wfMsg('rct_exp_heading_wrong');
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     $html = EasyTemplate::html('RCTestGrader', $testResult);
     $wgOut->addHtml($html);
 }
Example #19
0
 public function execute($par)
 {
     global $wgRequest, $wgOut, $wgUser, $wgLang, $wgLanguageCode;
     if ($wgUser->isBlocked()) {
         $wgOut->blockedPage();
         return;
     }
     $userGroups = $wgUser->getGroups();
     if ($wgUser->getID() == 0 || !(in_array('sysop', $userGroups) || in_array('staff', $userGroups))) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     if (!$wgRequest->wasPosted()) {
         EasyTemplate::set_path(dirname(__FILE__));
         $tmpl = EasyTemplate::html("RevertTool.tmpl.php", array('msg' => wfMsg("mass-revert-message"), 'msgName' => "mass-revert-message"));
         $wgOut->addHTML($tmpl);
         return true;
     } else {
         set_time_limit(0);
         $list = $wgRequest->getVal('page-list');
         $revertUser = $wgRequest->getVal('revert-user');
         $list = explode("\n", $list);
         $urls = array();
         if ($wgLanguageCode != "en") {
             $pages = Misc::getPagesFromURLs($list);
             foreach ($pages as $page) {
                 if ($page['lang'] == $wgLanguageCode) {
                     $urls[] = Misc::getLangBaseURL($page['lang']) . '/' . $page['page_title'];
                 } else {
                     $links = TranslationLink::getLinksTo($page['lang'], $page['page_id']);
                     foreach ($links as $link) {
                         if ($link->toLang == $wgLanguageCode) {
                             $urls[] = $link->toURL;
                         }
                     }
                 }
             }
         } else {
             $urls = $list;
         }
         $results = $this->revertList($urls, $revertUser);
         $wgOut->setArticleBodyOnly(true);
         $wgOut->addHTML(json_encode($results));
         return true;
     }
 }
Example #20
0
 function execute($par)
 {
     global $wgUser, $wgOut, $wgRequest;
     $userGroups = $wgUser->getGroups();
     if ($wgUser->isBlocked() || !in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     if ($wgRequest->wasPosted()) {
         $wgOut->disable();
         $result = array();
         $result['debug'][] = "posted to tpcoachadmin";
         if ($wgRequest->getVal("action") == "newtest") {
             $this->addNewTest(&$result);
         } else {
             if ($wgRequest->getVal("action") == "unblockuser") {
                 $this->unBlockUser(&$result);
             } else {
                 if ($wgRequest->getVal("action") == "blockuser") {
                     $this->blockUser(&$result);
                 } else {
                     if ($wgRequest->getVal("action") == "reset") {
                         $this->resetState(&$result);
                     } else {
                         if ($wgRequest->getVal("action") == "tpc_toggle") {
                             $this->toggleTPCoach(&$result);
                         } else {
                             if ($wgRequest->getVal("action") == "delete_test") {
                                 $this->deleteTest(&$result);
                             }
                         }
                     }
                 }
             }
         }
         echo json_encode($result);
         return;
     }
     $wgOut->setPageTitle('TipsPatrol Coach Admin');
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     $this->ts = wfTimestamp(TS_MW, time() - 24 * 3600 * $wgRequest->getVal("days", 7));
     $this->printData();
 }
Example #21
0
 /**
  * Execute function
  */
 public function execute()
 {
     global $wgOut, $wgUser, $wgRequest, $wgSharedDB;
     // Only show for staff
     if ($wgUser->isBlocked()) {
         $wgOut->blockedPage();
         return;
     }
     $userGroups = $wgUser->getGroups();
     if ($wgUser->getID() == 0 || !in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     // Display the list of users in a trial
     $group = $wgRequest->getVal('group', NULL);
     $experiment = $wgRequest->getval('experiment', NULL);
     if ($group != NULL && $experiment != NULL) {
         $dbr = wfGetDB(DB_SLAVE);
         $sql = 'select user_name, hcu_main_edits from hydra_cohort_user' . ' JOIN ' . $wgSharedDB . '.user on user_id=hcu_user' . ' WHERE hcu_group=' . $dbr->addQuotes($group) . ' AND hcu_experiment=' . $dbr->addQuotes($experiment);
         $res = $dbr->query($sql, __METHOD__);
         $wgOut->addHTML("<table>");
         $wgOut->addHTML("<tr><td>User Name</td><td>Edit Count</td></tr>");
         foreach ($res as $row) {
             $wgOut->addHTML("<tr><td><a href=\"/User:"******"\">" . $row->user_name . "</a></td><td>" . $row->hcu_main_edits . "</td></tr>\n");
         }
         $wgOut->addHTML("</table>");
         return;
     }
     $dbr = wfGetDB(DB_SLAVE);
     // Get stats for edits by users in a trial group
     $sql = 'select hg_name, hcu_experiment as experiment_name, sum(hcu_main_edits >= ' . self::EDIT_GOAL . ') as success, sum(hcu_main_edits >= ' . self::EDIT_GOAL2 . ') as success2, count(hcu_user) as ct, avg(hcu_main_edits) as avg_edits, hg_id, ht_percent,ht_id from hydra_cohort_user ' . ' JOIN hydra_group on hg_id = hcu_group ' . ' LEFT JOIN hydra_trial on ht_group = hcu_group AND ht_experiment = hcu_experiment ' . ' JOIN ' . $wgSharedDB . '.user on user_id=hcu_user' . ' GROUP BY hcu_group, hcu_experiment';
     $res = $dbr->query($sql, __METHOD__);
     $trials = array();
     foreach ($res as $row) {
         $trials[$row->hg_name][] = array('experiment' => $row->experiment_name, 'group' => $row->hg_id, 'success' => $row->success, 'success2' => $row->success2, 'count' => $row->ct, 'avg_total' => round($row->avg_edits, 2), 'pct' => $row->ht_percent, 'trial' => $row->ht_id);
     }
     EasyTemplate::set_path(dirname(__FILE__));
     $vars = array('trials' => $trials);
     $tmpl = EasyTemplate::html("Hydra.experiments.tmpl.php", $vars);
     $wgOut->addHTML($tmpl);
 }
Example #22
0
 function execute($par)
 {
     global $wgUser, $wgOut, $wgRequest;
     $userGroups = $wgUser->getGroups();
     if ($wgUser->isBlocked() || !in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     $wgOut->setPageTitle('Patrol Coach Test Scores');
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     switch ($wgRequest->getVal("a", "report")) {
         case "report":
             $this->ts = wfTimestamp(TS_MW, time() - 24 * 3600 * $wgRequest->getVal("days", 7));
             $this->printReport();
             break;
         case "detail":
             $this->printDetail();
     }
 }
Example #23
0
 function execute($par)
 {
     global $wgOut, $wgRequest, $wgUser;
     $fname = 'CatSearchUI::execute';
     wfProfileIn($fname);
     $wgOut->setRobotpolicy('noindex,nofollow');
     if ($wgUser->getId() == 0) {
         $wgOut->errorpage('nosuchspecialpage', 'nospecialpagetext');
     }
     $js = HtmlSnips::makeUrlTags('js', array('catsearchui.js'), '/extensions/wikihow/catsearch?rev=' . WH_SITEREV, CATSEARCH_DEBUG);
     $css = HtmlSnips::makeUrlTags('css', array('catsearchui.css'), '/extensions/wikihow/catsearch?rev=' . WH_SITEREV, CATSEARCH_DEBUG);
     $vars = array('js' => $js, 'css' => $css, 'csui_search_label' => wfMsg('csui_search_label'), 'csui_interests_label' => wfMsg('csui_interests_label'), 'csui_suggested_label' => wfMsg('csui_suggested_label'), 'csui_no_interests' => wfMsg('csui_no_interests'));
     $this->getUserCategoriesHtml($vars);
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     $html = EasyTemplate::html('CatSearchUI', $vars);
     $embedded = intval($wgRequest->getVal('embed'));
     $wgOut->setArticleBodyOnly($embedded);
     $wgOut->addHtml($html);
     wfProfileOut($fname);
 }
Example #24
0
 function execute($par)
 {
     global $wgRequest, $wgOut, $wgUser;
     $target = isset($par) ? $par : $wgRequest->getVal('target');
     #if ($wgRequest->wasPosted() || true) {
     if ($wgRequest->getVal('interests')) {
         $wgOut->disable();
         $x = new LSearch();
         $interests = split("\n", $wgRequest->getVal('interests'));
         //$hits= $x->googleSearchResultTitles('"' . implode('" OR "', $interests) . '"');
         $result = array();
         $result['titles'] = array();
         /*foreach ($hits as $t) {
         			$result['titles'][] = $t->getText();	
         		}
         		*/
         $hits = array(Title::newFromText('French-Kiss'), Title::newFromText('Save-a-Wet-Cell-Phone'), Title::newFromText('Ollie-off-a-Kicker'));
         foreach ($hits as $t) {
             $dbr = wfGetDB(DB_SLAVE);
             $x = array();
             $x['url'] = $t->getFullURL();
             $x['title'] = $t->getText();
             $row = $dbr->selectRow('page', array('page_counter', 'page_touched', 'page_further_editing'), array('page_id' => $t->getArticleID()));
             $x['counter'] = number_format($row->page_counter, 0, "", ",");
             $x['touched'] = wfTimeAgo($row->page_touched);
             if ($row->page_further_editing) {
                 $x['morehelp'] = "yes";
             } else {
                 $x['morehelp'] = "no";
             }
             $result['titles'][] = $x;
         }
         echo json_encode($result);
         return;
     }
     EasyTemplate::set_path(dirname(__FILE__));
     $wgOut->addHTML(EasyTemplate::html('interests.tmpl.php'));
 }
 public function execute()
 {
     global $wgRequest, $wgOut, $wgUser;
     $userGroups = $wgUser->getGroups();
     if ($wgUser->isBlocked() || !in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     if ($wgRequest->wasPosted()) {
         $query = $wgRequest->getVal('query');
         ini_set('memory_limit', '1024M');
         //Take up to 4 minutes to download big queries
         set_time_limit(240);
         $this->getQuery();
     } else {
         EasyTemplate::set_path(dirname(__FILE__) . '/');
         $vars = array('fields' => $this->getFields());
         $html = EasyTemplate::html('flaviusquerytool.tmpl.php', $vars);
         $wgOut->addHTML($html);
     }
     return $html;
 }
 public function execute()
 {
     global $wgRequest, $wgOut, $wgUser;
     $userGroups = $wgUser->getGroups();
     if (!in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     $dbr = wfGetDB(DB_SLAVE);
     $pageId = $wgRequest->getVal('page_id', '');
     if (!is_int($pageId)) {
         $t = Title::newFromText($pageId);
         if ($t) {
             $pageId = $t->getArticleId();
         } else {
             $pageId = "";
         }
     }
     if ($pageId) {
         $t = Title::newFromID($pageId);
         $sql = "select page_title,r.rev_id, r.rev_comment, user_name, ec_bytes from dedup.edit_contributions join revision r on r.rev_id=ec_rev join revision r2 on r2.rev_id=ec_gr join page on page_id = r2.rev_page join wiki_shared.user on user_id=r.rev_user where page_id=" . $dbr->addQuotes($pageId);
         $res = $dbr->query($sql, __METHOD__);
         $contributions = array();
         foreach ($res as $row) {
             $contributions[] = array('page_title' => $row->page_title, 'rev_id' => $row->rev_id, 'user_name' => $row->user_name, 'bytes' => $row->ec_bytes, 'comment' => $row->rev_comment);
         }
         EasyTemplate::set_path(dirname(__FILE__) . '/');
         $vars = array('contributions' => $contributions);
         $wgOut->addHTML(EasyTemplate::html('EditContribution_results.tmpl.php', $vars));
     } else {
         EasyTemplate::set_path(dirname(__FILE__) . '/');
         $vars = array();
         $wgOut->addHTML(EasyTemplate::html('EditContribution_form.tmpl.php', $vars));
     }
 }
 function getToolHtml()
 {
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     $vars = array('dbfields' => $this->getTitusFields(), 'languages' => $this->languageInfo);
     return EasyTemplate::html('titusquerytool.tmpl.php', $vars);
 }
Example #28
0
<?php

define('WH_USE_BACKUP_DB', true);
require_once 'commandLine.inc';
$EXPERIMENT_NAME = 'after_rc_notify';
$dbr = wfGetDB(DB_SLAVE);
$sql = "select hcu_user, u.user_email, rc_title, pu.user_name, pu.user_id, rev.rev_id from recentchanges join hydra_cohort_user on hcu_user=rc_user join wiki_shared.user u on u.user_id=hcu_user join logging on log_timestamp > date_sub(now(), interval 3 day) AND log_type='patrol' AND log_params=rc_this_oldid join wiki_shared.user pu on pu.user_id=log_user join revision rev on rev_id=rc_this_oldid left join revision rev2 on rev.rev_page=rev2.rev_page AND rev2.rev_id > rev.rev_id AND (rev2.rev_comment like '%Reverted edits by [[Special:Contributions/%' or rev2.rev_comment like '%Copyviocheckbot has found a potential copyright violation%') left join nfd on nfd_page=rev.rev_page and nfd_status=0  where hcu_experiment=" . $dbr->addQuotes($EXPERIMENT_NAME) . " AND u.user_email is NOT NULL AND u.user_email <> '' AND u.user_email_authenticated is NOT NULL AND hcu_run=0 AND rc_patrolled=1 AND rc_namespace=0 AND nfd_page is NULL AND rev2.rev_page is NULL GROUP BY hcu_user";
$res = $dbr->query($sql, __METHOD__);
$emails = array();
foreach ($res as $row) {
    $email = array('from' => 'Krystle <*****@*****.**>', 'to' => $row->user_email, 'article' => $row->rc_title, 'username' => $row->user_name, 'user_id' => $row->hcu_user, 'revision' => $row->rev_id);
    print_r($email);
    $emails[] = $email;
}
global $wgOutputEncoding;
$dbw = wfGetDB(DB_MASTER);
foreach ($emails as $email) {
    $from = new MailAddress($email['from']);
    $to = new MailAddress($email['to']);
    $subject = 'Nice contribution on wikiHow!';
    EasyTemplate::set_path(dirname(__FILE__) . '/../extensions/wikihow/hydra/experiments');
    $body = EasyTemplate::html('RCPatrolEmail.tmpl.php', array('articleURL' => 'http://www.wikihow.com/' . $email['article'], 'articleName' => str_replace("-", " ", $email['article']), 'userURL' => 'http://www.wikihow.com/User:'******'username'], 'username' => $email['username']));
    $content_type = "text/html; charset={$wgOutputEncoding}";
    UserMailer::send($to, $from, $subject, $body, null, $content_type);
    $sql = "update hydra_cohort_user set hcu_run=1 WHERE hcu_user="******" AND hcu_experiment=" . $dbw->addQuotes($EXPERIMENT_NAME) . " LIMIT 1";
    $res = $dbw->query($sql, __METHOD__);
    $logTo = new MailAddress("elizabethwikihowtest@gmail.com, gershon@wikihow.com");
    UserMailer::send($logTo, $from, $to . ":" . $subject, $body, null, $content_type);
}
Example #29
0
 public static function getXPath(&$bodyHtml, &$r)
 {
     global $wgWikiHowSections, $IP, $wgTitle;
     $lang = MobileWikihow::getSiteLanguage();
     // munge steps first
     $opts = array('no-ads' => true);
     require_once "{$IP}/skins/WikiHowSkin.php";
     $oldTitle = $wgTitle;
     $wgTitle = $r->getTitle();
     $vars['bodyHtml'] = WikihowArticleHTML::postProcess($bodyHtml, $opts);
     $vars['lang'] = $lang;
     EasyTemplate::set_path(dirname(__FILE__) . '/');
     $html = EasyTemplate::html('thumb_html.tmpl.php', $vars);
     require_once "{$IP}/extensions/wikihow/mobile/JSLikeHTMLElement.php";
     $doc = new DOMDocument('1.0', 'utf-8');
     $doc->registerNodeClass('DOMElement', 'JSLikeHTMLElement');
     $doc->strictErrorChecking = false;
     $doc->recover = true;
     @$doc->loadHTML($html);
     $doc->normalizeDocument();
     $xpath = new DOMXPath($doc);
     $wgTitle = $oldTitle;
     return $xpath;
 }
 /**
  * Set html template path for StarterTool actions
  */
 public static function setTemplatePath()
 {
     EasyTemplate::set_path(dirname(__FILE__) . '/');
 }