コード例 #1
0
 /**
  * Execute special page.  Only available to wikihow staff.
  */
 function execute()
 {
     global $wgRequest, $wgOut, $wgUser, $wgLang;
     $userGroups = $wgUser->getGroups();
     if ($wgUser->isBlocked() || !in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->errorpage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     if ($wgRequest->wasPosted()) {
         set_time_limit(0);
         $pageList = $wgRequest->getVal('pages-list', '');
         $wgOut->setArticleBodyOnly(true);
         if ($pageList) {
             $pageList = urldecode($pageList);
         }
         $pageList = preg_split('@[\\r\\n]+@', $pageList);
         $urls = array();
         $partials = array();
         foreach ($pageList as $url) {
             $url = trim($url);
             if (!empty($url)) {
                 $url = str_replace('%28', '(', $url);
                 $url = str_replace('%29', ')', $url);
                 $urls[] = $url;
                 if (preg_match('@^http://[^/]+/([^?]+)@', $url, $m)) {
                     $partials[$m[1]] = $url;
                 }
             }
         }
         $results = Misc::getPagesFromURLs($urls, array('page_id', 'page_is_redirect'), true);
         $lines = array();
         foreach ($results as $url => $result) {
             $details = 'Not a redirect';
             if ($result['page_is_redirect']) {
                 $redir = self::getIntlRedirect($result['lang'], $result['page_id']);
                 if ($redir) {
                     $details = $redir;
                 }
             }
             $lines[] = array($url, $result['page_id'], $result['page_is_redirect'], $details);
             unset($partials[$result['page_title']]);
         }
         foreach ($partials as $partial => $url) {
             $lines[] = array($url, '', 0, 'Not found');
         }
         self::httpDownloadHeaders();
         foreach ($lines as $line) {
             print join("\t", $line) . "\n";
         }
         return;
     }
     $wgOut->setHTMLTitle('Admin - Lookup Redirects - wikiHow');
     $tmpl = self::getGuts('AdminRedirects');
     $wgOut->addHTML($tmpl);
 }
コード例 #2
0
 function execute($par)
 {
     global $wgOut, $wgUser, $wgRequest;
     $userGroups = $wgUser->getGroups();
     if ($wgUser->isBlocked() || !in_array('staff', $userGroups)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     if ($wgRequest->wasPosted()) {
         $wgOut->setArticleBodyOnly(true);
         $urlList = $wgRequest->getVal("urls");
         $urlArray = explode("\n", $urlList);
         AdminImageRemoval::$imagesRemoved = array();
         $urlArray = array_map("urldecode", $urlArray);
         $pages = Misc::getPagesFromURLs($urlArray);
         foreach ($pages as $page) {
             if ($page['lang'] == "en") {
                 $this->removeImagesFromArticle($page['page_id']);
             }
         }
         $errors = array();
         foreach ($urlArray as $article) {
             if (!array_key_exists($article, $pages)) {
                 $errors[] = $article;
             }
         }
         if (count($errors) > 0) {
             $result['success'] = false;
             $result['errors'] = $errors;
         } else {
             $result['success'] = true;
         }
         echo json_encode($result);
         $filePath = "/tmp/images-removal-" . date('Ymd') . ".txt";
         $fo = fopen($filePath, 'a');
         foreach (AdminImageRemoval::$imagesRemoved as $fileName) {
             fwrite($fo, "Image:{$fileName}\n");
         }
         fclose($fo);
         return;
     }
     $wgOut->addJScode('airj');
     $s = Html::openElement('form', array('action' => '', 'id' => 'imageremoval')) . "\n";
     $s .= Html::element('p', array(''), 'Input full URLs (e.g. http://www.wikihow.com/Kiss) for articles that should have images removed from them.');
     $s .= Html::element('br');
     $s .= Html::element('textarea', array('id' => 'urls', 'cols' => 55, 'rows' => 5)) . "\n";
     $s .= Html::element('br');
     $s .= Html::element('input', array('type' => 'submit', 'class' => "button primary", 'value' => 'Process articles')) . "\n";
     $s .= Html::closeElement('form');
     $s .= Html::element('div', array('id' => 'imageremoval_results'));
     $wgOut->addHTML($s);
 }
コード例 #3
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;
     }
 }
コード例 #4
0
 /**
  * Add a bunch of URLs to the database for adding their images to various languages
  * @param urls New-line seperated list of URLs or Article ids from POST
  * @param langs Comma-seperated list of languages to add the images on
  */
 private function addImages($urls, $langs)
 {
     $urls = preg_split("@[\r\n]+@", Misc::getUrlDecodedData($urls));
     $langs = preg_split("@,@", urldecode($langs));
     $realUrls = array();
     $langIds = array();
     foreach ($urls as $url) {
         if (is_numeric($url)) {
             $langIds[] = array("lang" => "en", "id" => $url);
         } else {
             $realUrls[] = $url;
         }
     }
     $pagesA = Misc::getPagesFromURLs($realUrls, array('page_id', 'page_title'));
     $badURLs = array();
     $results = array();
     foreach ($realUrls as $url) {
         if (!isset($pagesA[$url])) {
             foreach ($langs as $lang) {
                 ImageTransfer::addBadURL($url, $lang, "URL not found");
             }
             $results[] = array('fromURL' => $url, 'toURL' => '', 'status' => 'Bad URL');
         }
     }
     $pagesB = Misc::getPagesFromLangIds($langIds, array('page_id', 'page_title'));
     $pages = array_merge($pagesA, $pagesB);
     $fromIDs = array();
     $urlLookup = array();
     foreach ($pages as $page) {
         $fromIDs[] = $page['page_id'];
         $urlLookup[$page['page_id']] = Misc::getLangBaseURL('en') . '/' . $page['page_title'];
     }
     if (sizeof($fromIDs) == 0) {
         return array();
     }
     // Fetch to cache the pages for later use in addImage
     $this->batchFetchPages("en", $fromIDs);
     $langTLs = array();
     foreach ($langs as $lang) {
         $langTLs[$lang] = TranslationLink::getLinks("en", $lang, array("tl_from_aid in (" . implode(',', $fromIDs) . ")"));
         $newFromIds = array_map(function ($m) {
             return $m->fromAID;
         }, $langTLs[$lang]);
         foreach ($fromIDs as $id) {
             //Add error links
             if (!in_array($id, $newFromIds)) {
                 $this->addImage($id, $lang, 0);
                 if (isset($urlLookup[$id])) {
                     $results[] = array('fromURL' => $urlLookup[$id], 'toURL' => '', 'status' => 'Could not find any translation link to ' . $lang);
                 }
             }
         }
         TranslationLink::batchPopulateURLs($langTLs[$lang]);
         // Cache the other language pages too in a batch
         $langIds = array();
         foreach ($langTLs[$lang] as $tl) {
             $langIds[] = $tls->toAID;
         }
         $this->batchFetchPages($lang, $langIds);
     }
     foreach ($langs as $lang) {
         foreach ($langTLs[$lang] as $tl) {
             if (!$this->addImage($tl->fromAID, $tl->toLang, $tl->toAID)) {
                 $results[] = array('fromURL' => $tl->fromURL, 'toURL' => $tl->toURL, 'status' => 'Queued');
             } else {
                 $results[] = array('fromURL' => $tl->fromURL, 'toURL' => $tl->toURL, 'status' => 'Failed to queue');
             }
         }
     }
     return $results;
 }
コード例 #5
0
 /** 
  * Check if URL exists and is not a redirect
  */
 static function checkUrl($url)
 {
     $pages = Misc::getPagesFromURLs(array($url));
     foreach ($pages as $u => $p) {
         if ($p['page_is_redirect'] == 0 && $p['page_namespace'] == NS_MAIN) {
             return true;
         }
     }
     return false;
 }
コード例 #6
0
 /**
  * EXECUTE
  **/
 function execute($par)
 {
     global $wgRequest, $wgOut, $wgUser, $wgLanguageCode, $isDevHost, $wgActiveLanguages;
     if ($wgUser->isBlocked()) {
         $wgOut->blockedPage();
         return;
     }
     $userGroups = $wgUser->getGroups();
     if ($wgUser->getID() == 0 || !(in_array('sysop', $userGroups) || in_array('staff', $userGroups)) || !(IS_SPARE_HOST || $isDevHost)) {
         $wgOut->setRobotpolicy('noindex,nofollow');
         $wgOut->showErrorPage('nosuchspecialpage', 'nospecialpagetext');
         return;
     }
     $action = $wgRequest->getVal('action', NULL);
     if ($wgRequest->wasPosted() && $_FILES['upload']) {
         ini_set('memory_limit', '2048M');
         $fileName = $_FILES['upload']['tmp_name'];
         $list = file_get_contents($fileName);
         set_time_limit(0);
         $lines = self::parseURLlist($list);
         self::httpDownloadHeaders();
         $urls = array();
         foreach ($lines as $line) {
             $urls[] = $line['url1'];
             $urls[] = $line['url2'];
         }
         $pageInfo = Misc::getPagesFromURLs($urls, array("page_title", "page_id"));
         $links = array();
         foreach ($lines as $line) {
             $link = new TranslationLink();
             $link->fromURL = $line['url1'];
             $link->toURL = $line['url2'];
             if (isset($pageInfo[$line['url1']]) && isset($pageInfo[$line['url2']])) {
                 $p1 = $pageInfo[$line['url1']];
                 $p2 = $pageInfo[$line['url2']];
                 $link->fromLang = $p1['lang'];
                 $link->fromAID = $p1['page_id'];
                 $link->toLang = $p2['lang'];
                 $link->toAID = $p2['page_id'];
             }
             $links[] = $link;
         }
         TranslationLink::batchUpdateTLStatus($links);
         TranslationLink::batchAddTranslationLinks($links);
         foreach ($links as $link) {
             if ($link->fromLang != NULL && $link->fromAID != NULL && $link->toLang != NULL && $link->toAID != NULL) {
                 TranslationLink::writeLog(TranslationLink::ACTION_SAVE, $link->fromLang, NULL, $link->fromAID, $link->getFromPage(), $link->toLang, $link->getToPage(), $link->toAID, "TRANSLATION_OVERRIDE");
             }
             if ($link->tlStatus == TranslationLink::TL_STATUS_SAVED) {
                 if ($link->oldTlStatus == TranslationLink::TL_STATUS_UPDATEABLE) {
                     $message = "Updated existing link";
                 } elseif ($link->oldTlStatus == TranslationLink::TL_STATUS_SAVED) {
                     $message = "Already saved";
                 } elseif ($link->oldTlStatus == TranslationLink::TL_STATUS_NEW) {
                     $message = "Saved Link";
                 } else {
                     $message = "Already saved";
                 }
             } elseif ($link->tlStatus == TranslationLink::TL_STATUS_NON_UPDATEABLE) {
                 $message = "Conflicting existings links, unable to save";
             } else {
                 $message = "Unable to save, URLs invalid or not found";
             }
             print $link->fromURL . "\t" . $link->toURL . "\t" . $message . "\n";
         }
         // Hack to override MediaWiki functionality
         exit;
         return true;
     } elseif ($action == null) {
         EasyTemplate::set_path(dirname(__FILE__));
         $tmpl = EasyTemplate::html("TranslationLinkOverride.tmpl.php");
         $wgOut->addHTML($tmpl);
         return true;
     } elseif ($action == "fetchlinks") {
         $id = $wgRequest->getVal('id', null);
         $lang = $wgRequest->getVal('lang', null);
         $this->fetchLinks($lang, $id);
         return true;
     } elseif ($action == "search") {
         EasyTemplate::set_path(dirname(__FILE__));
         $langs = $wgActiveLanguages;
         $langs[] = 'en';
         $tmpl = EasyTemplate::html("TranslationLinkOverride.delete.tmpl.php", array('langs' => $langs));
         $wgOut->addHTML($tmpl);
         return true;
     } elseif ($action == "dodelete") {
         $fromId = $wgRequest->getVal('fromId', null);
         $fromLang = $wgRequest->getVal('fromLang', null);
         $toId = $wgRequest->getVal('toId', null);
         $toLang = $wgRequest->getVal('toLang', null);
         $this->doDelete($fromLang, $fromId, $toLang, $toId);
     }
     return false;
 }
コード例 #7
0
ファイル: WAPDB.class.php プロジェクト: biribogos/wikihow-src
 public function processUrlListByLang(&$urlList, $langCode)
 {
     $excludedKey = $this->getWAPConfig()->getExludedArticlesKeyName();
     $excludeList = explode("\n", ConfigStorage::dbGetConfig($excludedKey));
     $urlList = Misc::getUrlDecodedData($urlList);
     $processedUrls = array(WAPArticle::STATE_INVALID => array(), WAPArticle::STATE_EXCLUDED => array(), WAPArticle::STATE_UNASSIGNED => array(), WAPArticle::STATE_ASSIGNED => array(), WAPArticle::STATE_COMPLETED => array(), WAPArticle::STATE_NEW => array());
     $urls = $this->parseURLlist($urlList, $langCode);
     foreach ($urls as $url) {
         // If it's in the system, put it in the right bucket
         $wa = $url['a'];
         if ($wa->exists()) {
             $url['aid'] = $aid = $wa->getArticleId();
             if (in_array($aid, $excludeList)) {
                 $processedUrls[WAPArticle::STATE_EXCLUDED][] = $url;
             } elseif ($wa->isCompleted()) {
                 $processedUrls[WAPArticle::STATE_COMPLETED][] = $url;
             } elseif ($wa->isAssigned()) {
                 $processedUrls[WAPArticle::STATE_ASSIGNED][] = $url;
             } elseif (!$wa->isAssigned()) {
                 $processedUrls[WAPArticle::STATE_UNASSIGNED][] = $url;
             } else {
                 throw new Exception("Bad url: {$url['url']} {$url['lang']}. Report to your trusty wikiHow engineer.");
             }
         } else {
             // If it's not in the system, see if it's even a valid title (exists and isn't a redirect)
             // If it is then check to see if it's excluded.
             // If it isn't excluded then it's considered a new article
             $page = Misc::getPagesFromURLs(array($url['url']), array('page_id', 'page_is_redirect'), true);
             $page = reset($page);
             if (!empty($page) && $page['page_is_redirect'] != 1) {
                 $aid = $page['page_id'];
                 $url['aid'] = $aid;
                 if (in_array($aid, $excludeList)) {
                     $processedUrls[WAPArticle::STATE_EXCLUDED][] = $url;
                 } else {
                     $processedUrls[WAPArticle::STATE_NEW][] = $url;
                 }
             } else {
                 $processedUrls[WAPArticle::STATE_INVALID][] = $url;
             }
         }
     }
     return $processedUrls;
 }
コード例 #8
0
 function addNewTitles($articles)
 {
     global $wgDBname;
     $dbw = wfGetDB(DB_MASTER);
     $errors = array();
     $articles = array_map("urldecode", $articles);
     $pages = Misc::getPagesFromURLs($articles);
     foreach ($pages as $page) {
         $languageCode = $page['lang'];
         if ($languageCode == "en") {
             //first add this article to the english db
             $this->addIntlArticle($dbw, "en", $page['page_id']);
             //now get all the translations
             self::processTranslations($dbw, $page['page_id']);
         } else {
             self::addIntlArticle($dbw, $languageCode, $page['page_id']);
         }
     }
     //Find ones that didn't work and tell user about them
     foreach ($articles as $article) {
         if (!array_key_exists($article, $pages)) {
             $errors[] = $article;
         }
     }
     $dbw->selectDB($wgDBname);
     //reset memcache since we just changed a lot of values
     wikihowAds::resetAllAdExclusionCaches();
     return $errors;
 }
コード例 #9
0
<?php

include_once 'commandLine.inc';
if (sizeof($argv) != 2) {
    print "Syntax: \n getLastFellow.php [input_file]";
    exit;
}
$f = fopen($argv[1], "r");
$urls = array();
while ($row = fgets($f)) {
    $urls[] = urldecode(chop($row));
}
$pages = Misc::getPagesFromURLs($urls, array('page_id'));
$dbr = wfGetDB(DB_SLAVE);
foreach ($urls as $url) {
    $fellows = explode("\n", trim(wfMsg('wikifellows')));
    $fellows = "'" . implode("','", $fellows) . "'";
    $lastEdit = $dbr->selectField('revision', array('rev_user_text'), array('rev_page' => $pages[$url]['page_id'], "rev_user_text IN ({$fellows})"), __METHOD__, array('ORDER BY rev_id DESC', "LIMIT" => 1));
    print "{$url}," . $lastEdit . "\n";
}