public function getDefinitions() { $groups = MessageGroups::getAllGroups(); $keys = array(); /** * @var $g MessageGroup */ foreach ($groups as $g) { $states = $g->getMessageGroupStates()->getStates(); foreach (array_keys($states) as $state) { $keys["Translate-workflow-state-{$state}"] = $state; } } $defs = TranslateUtils::getContents(array_keys($keys), $this->getNamespace()); foreach ($keys as $key => $state) { if (!isset($defs[$key])) { // @todo Use jobqueue $title = Title::makeTitleSafe($this->getNamespace(), $key); $page = new WikiPage($title); $content = ContentHandler::makeContent($state, $title); $page->doEditContent($content, wfMessage('translate-workflow-autocreated-summary', $state)->inContentLanguage()->text(), 0, false, FuzzyBot::getUser()); } else { // Use the wiki translation as definition if available. // getContents returns array( content, last author ) list($content, ) = $defs[$key]; $keys[$key] = $content; } } return $keys; }
function formatResult(&$skin, $row) { global $wgContLang; $title = Title::makeTitleSafe(NS_IMAGE, $row->title); $label = htmlspecialchars($wgContLang->convert($title->getText())); return $skin->makeKnownLinkObj($title, $label); }
public function testUpdate_iwlinks() { list($t, $po) = $this->makeTitleAndParserOutput("Testing", 111); $target = Title::makeTitleSafe(NS_MAIN, "Foo", '', 'linksupdatetest'); $po->addInterwikiLink($target); $this->assertLinksUpdate($t, $po, 'iwlinks', 'iwl_prefix, iwl_title', 'iwl_from = 111', array(array('linksupdatetest', 'Foo'))); }
/** * Create category. * * @param $category String: Name of category to create. * @param $code String: Code of language that the category is for. * @param $level String: Level that the category is for. */ public static function create($category, $code, $level = null) { $category = strip_tags($category); $title = Title::makeTitleSafe(NS_CATEGORY, $category); if ($title === null || $title->exists()) { return; } global $wgLanguageCode; $language = BabelLanguageCodes::getName($code, $wgLanguageCode); if ($level === null) { $text = wfMsgForContent('babel-autocreate-text-main', $language, $code); } else { $text = wfMsgForContent('babel-autocreate-text-levels', $level, $language, $code); } $user = self::user(); # Do not add a message if the username is invalid or if the account that adds it, is blocked if (!$user || $user->isBlocked()) { return; } if (!$title->quickUserCan('create', $user)) { return; # The Babel AutoCreate account is not allowed to create the page } /* $article->doEdit will call $wgParser->parse. * Calling Parser::parse recursively is baaaadd... (bug 29245) * @todo FIXME: surely there is a better way? */ global $wgParser, $wgParserConf; $oldParser = $wgParser; $parserClass = $wgParserConf['class']; $wgParser = new $parserClass($wgParserConf); $article = new Article($title, 0); $article->doEdit($text, wfMsgForContent('babel-autocreate-reason', wfMsgForContent('babel-url')), EDIT_FORCE_BOT, false, $user); $wgParser = $oldParser; }
public function execute() { $params = $this->extractRequestParams(); global $wgFeed, $wgFeedClasses, $wgSitename, $wgLanguageCode; if (!$wgFeed) { $this->dieUsage('Syndication feeds are not available', 'feed-unavailable'); } if (!isset($wgFeedClasses[$params['feedformat']])) { $this->dieUsage('Invalid subscription feed type', 'feed-invalid'); } global $wgMiserMode; if ($params['showsizediff'] && $wgMiserMode) { $this->dieUsage('Size difference is disabled in Miser Mode', 'sizediffdisabled'); } $msg = wfMessage('Contributions')->inContentLanguage()->text(); $feedTitle = $wgSitename . ' - ' . $msg . ' [' . $wgLanguageCode . ']'; $feedUrl = SpecialPage::getTitleFor('Contributions', $params['user'])->getFullURL(); $target = $params['user'] == 'newbies' ? 'newbies' : Title::makeTitleSafe(NS_USER, $params['user'])->getText(); $feed = new $wgFeedClasses[$params['feedformat']]($feedTitle, htmlspecialchars($msg), $feedUrl); $pager = new ContribsPager($this->getContext(), array('target' => $target, 'namespace' => $params['namespace'], 'year' => $params['year'], 'month' => $params['month'], 'tagFilter' => $params['tagfilter'], 'deletedOnly' => $params['deletedonly'], 'topOnly' => $params['toponly'], 'showSizeDiff' => $params['showsizediff'])); $feedItems = array(); if ($pager->getNumRows() > 0) { foreach ($pager->mResult as $row) { $feedItems[] = $this->feedItem($row); } } ApiFormatFeedWrapper::setResult($this->getResult(), $feed, $feedItems); }
function setTypeAndPossibleValues() { $proptitle = Title::makeTitleSafe(SMW_NS_PROPERTY, $this->mSemanticProperty); if ($proptitle === null) { return; } $store = smwfGetStore(); // this returns an array of objects $allowed_values = SFUtils::getSMWPropertyValues($store, $proptitle, "Allows value"); $label_formats = SFUtils::getSMWPropertyValues($store, $proptitle, "Has field label format"); $propValue = SMWDIProperty::newFromUserLabel($this->mSemanticProperty); $this->mPropertyType = $propValue->findPropertyTypeID(); foreach ($allowed_values as $allowed_value) { // HTML-unencode each value $this->mPossibleValues[] = html_entity_decode($allowed_value); if (count($label_formats) > 0) { $label_format = $label_formats[0]; $prop_instance = SMWDataValueFactory::findTypeID($this->mPropertyType); $label_value = SMWDataValueFactory::newTypeIDValue($prop_instance, $wiki_value); $label_value->setOutputFormat($label_format); $this->mValueLabels[$wiki_value] = html_entity_decode($label_value->getWikiValue()); } } // HACK - if there were any possible values, set the property // type to be 'enumeration', regardless of what the actual type is if (count($this->mPossibleValues) > 0) { $this->mPropertyType = 'enumeration'; } }
/** * @param $context ResourceLoaderContext * @return array */ protected function getPages(ResourceLoaderContext $context) { $username = $context->getUser(); if ($username === null) { return array(); } // Get the normalized title of the user's user page $userpageTitle = Title::makeTitleSafe(NS_USER, $username); if (!$userpageTitle instanceof Title) { return array(); } $userpage = $userpageTitle->getPrefixedDBkey(); // Needed so $excludepages works $pages = array("{$userpage}/common.js" => array('type' => 'script'), "{$userpage}/" . $context->getSkin() . '.js' => array('type' => 'script'), "{$userpage}/common.css" => array('type' => 'style'), "{$userpage}/" . $context->getSkin() . '.css' => array('type' => 'style')); // Hack for bug 26283: if we're on a preview page for a CSS/JS page, // we need to exclude that page from this module. In that case, the excludepage // parameter will be set to the name of the page we need to exclude. $excludepage = $context->getRequest()->getVal('excludepage'); if (isset($pages[$excludepage])) { // This works because $excludepage is generated with getPrefixedDBkey(), // just like the keys in $pages[] above unset($pages[$excludepage]); } return $pages; }
public function execute() { global $wgUser; $username = $this->getOption('username', false); if ($username === false) { $user = User::newSystemUser('ScriptImporter', ['steal' => true]); } else { $user = User::newFromName($username); } $wgUser = $user; $baseUrl = $this->getArg(1); $pageList = $this->fetchScriptList(); $this->output('Importing ' . count($pageList) . " pages\n"); foreach ($pageList as $page) { $title = Title::makeTitleSafe(NS_MEDIAWIKI, $page); if (!$title) { $this->error("{$page} is an invalid title; it will not be imported\n"); continue; } $this->output("Importing {$page}\n"); $url = wfAppendQuery($baseUrl, ['action' => 'raw', 'title' => "MediaWiki:{$page}"]); $text = Http::get($url, [], __METHOD__); $wikiPage = WikiPage::factory($title); $content = ContentHandler::makeContent($text, $wikiPage->getTitle()); $wikiPage->doEditContent($content, "Importing from {$url}", 0, false, $user); } }
function execute() { global $wgOut; $this->limit = min($this->request->getInt('limit', 50), 5000); if ($this->limit <= 0) { $this->limit = 50; } $this->from = $this->request->getInt('from'); $this->back = $this->request->getInt('back'); $targetString = isset($this->par) ? $this->par : $this->request->getVal('target'); if (is_null($targetString)) { $wgOut->addHTML($this->whatlinkshereForm()); return; } $this->target = Title::newFromURL($targetString); if (!$this->target) { $wgOut->addHTML($this->whatlinkshereForm()); return; } $this->selfTitle = Title::makeTitleSafe(NS_SPECIAL, 'Whatlinkshere/' . $this->target->getPrefixedDBkey()); $wgOut->setPageTitle(wfMsg('whatlinkshere-title', $this->target->getPrefixedText())); $wgOut->setSubtitle(wfMsg('linklistsub')); $wgOut->addHTML(wfMsgExt('whatlinkshere-barrow', array('escapenoentities')) . ' ' . $this->skin->makeLinkObj($this->target, '', 'redirect=no') . "<br />\n"); $this->showIndirectLinks(0, $this->target, $this->limit, $this->from, $this->back); }
function ifcategory(&$parser, $category = '', $then = '', $else = '', $pagename = '') { if ($category === '') { return $then; } if ($pagename === '') { $title = $parser->getTitle(); $page = $title->getDBkey(); $ns = $title->getNamespace(); } else { $title = Title::newFromText($pagename); if (!$title instanceof Title || !$title->exists()) { return $else; } $page = $title->getDBkey(); $ns = $title->getNamespace(); } $cattitle = Title::makeTitleSafe(NS_CATEGORY, $category); if (!$cattitle instanceof Title) { return $else; } $catkey = $cattitle->getDBkey(); $db = wfGetDB(DB_SLAVE); $res = $db->select(array('page', 'categorylinks'), 'cl_from', array('page_id=cl_from', 'page_namespace' => $ns, 'page_title' => $page, 'cl_to' => $catkey), __METHOD__, array('LIMIT' => 1)); if ($db->numRows($res) == 0) { return $else; } return $then; }
function formatValue($name, $value) { global $wgLang, $wgContLang; static $linker = null; if (empty($linker)) { $linker = class_exists('DummyLinker') ? new DummyLinker() : new Linker(); } $row = $this->mCurrentRow; $ns = $row->page_namespace; $title = $row->page_title; if (is_null($ns)) { $ns = $row->thread_article_namespace; $title = $row->thread_article_title; } switch ($name) { case 'thread_subject': $title = Title::makeTitleSafe($ns, $title); $link = $linker->link($title, $value, array(), array(), array('known')); return Html::rawElement('div', array('dir' => $wgContLang->getDir()), $link); case 'th_timestamp': $formatted = $wgLang->timeanddate($value); $title = Title::makeTitleSafe($ns, $title); return $linker->link($title, $formatted, array(), array('lqt_oldid' => $row->th_id)); default: return parent::formatValue($name, $value); } }
function execute($par) { global $wgRequest, $wgOut; $this->setHeaders(); $this->outputHeader(); $file = !is_null($par) ? $par : $wgRequest->getText('file'); $title = Title::makeTitleSafe(NS_FILE, $file); if (!$title instanceof Title || $title->getNamespace() != NS_FILE) { $this->showForm($title); } else { $file = wfFindFile($title); if ($file && $file->exists()) { $url = $file->getURL(); $width = $wgRequest->getInt('width', -1); $height = $wgRequest->getInt('height', -1); if ($width != -1) { $mto = $file->transform(array('width' => $width, 'height' => $height)); if ($mto && !$mto->isError()) { $url = $mto->getURL(); } } $wgOut->redirect($url); } else { $wgOut->setStatusCode(404); $this->showForm($title); } } }
/** * @param $username string * @return CollaborationListContent */ public static function makeMemberList($username, $initialDescription) { $linkToUserpage = Title::makeTitleSafe(NS_USER, $username)->getPrefixedText(); $newMemberList = ["displaymode" => "members", "columns" => [["items" => [["title" => $linkToUserpage]]]], "options" => ["mode" => "normal"], "description" => "{$initialDescription}"]; $newMemberListJson = FormatJson::encode($newMemberList, "\t", FormatJson::ALL_OK); return new CollaborationListContent($newMemberListJson); }
function setTypeAndPossibleValues() { // The presence of "-" at the beginning of a property name // (which happens if SF tries to parse an inverse query) // leads to an error in SMW - just exit if that's the case. if (strpos($this->mSemanticProperty, '-') === 0) { return; } $proptitle = Title::makeTitleSafe(SMW_NS_PROPERTY, $this->mSemanticProperty); if ($proptitle === null) { return; } $store = SFUtils::getSMWStore(); // this returns an array of objects $allowed_values = SFUtils::getSMWPropertyValues($store, $proptitle, "Allows value"); $label_formats = SFUtils::getSMWPropertyValues($store, $proptitle, "Has field label format"); $propValue = SMWDIProperty::newFromUserLabel($this->mSemanticProperty); $this->mPropertyType = $propValue->findPropertyTypeID(); foreach ($allowed_values as $allowed_value) { // HTML-unencode each value $this->mPossibleValues[] = html_entity_decode($allowed_value); if (count($label_formats) > 0) { $label_format = $label_formats[0]; $prop_instance = SMWDataValueFactory::findTypeID($this->mPropertyType); $label_value = SMWDataValueFactory::newTypeIDValue($prop_instance, $wiki_value); $label_value->setOutputFormat($label_format); $this->mValueLabels[$wiki_value] = html_entity_decode($label_value->getWikiValue()); } } // HACK - if there were any possible values, set the property // type to be 'enumeration', regardless of what the actual type is if (count($this->mPossibleValues) > 0) { $this->mPropertyType = 'enumeration'; } }
/** * The category list template. Used by article pages on view and edit save. */ public function categories() { wfProfileIn(__METHOD__); $categories = $this->request->getVal('categories', array()); $data = array(); // Because $out->getCategoryLinks doesn't maintain the order of the stored category data, // we have to build this information ourselves manually. This is essentially the same // code from $out->addCategoryLinks() but it results in a different data format. foreach ($categories as $category) { // Support category name or category data object $name = is_array($category) ? $category['name'] : $category; $originalName = $name; $title = Title::makeTitleSafe(NS_CATEGORY, $name); if ($title != null) { $this->wg->ContLang->findVariantLink($name, $title, true); if ($name != $originalName && array_key_exists($name, $data)) { continue; } $text = $this->wg->ContLang->convertHtml($title->getText()); $data[$name] = array('link' => Linker::link($title, $text), 'name' => $text, 'type' => CategoryHelper::getCategoryType($originalName)); } else { \Wikia\Logger\WikiaLogger::instance()->warning("Unsafe category provided", ['name' => $name]); } } $this->response->setVal('categories', $data); wfProfileOut(__METHOD__); }
/** * Main execution point * @param $par Namespace to select the redirect from */ function wfSpecialRandomredirect($par = NULL) { global $wgOut, $wgExtraRandompageSQL, $wgContLang; $fname = 'wfSpecialRandomredirect'; # Validate the namespace $namespace = $wgContLang->getNsIndex($par); if ($namespace === false || $namespace < NS_MAIN) { $namespace = NS_MAIN; } # Same logic as RandomPage $randstr = wfRandom(); $dbr =& wfGetDB(DB_SLAVE); $use_index = $dbr->useIndexClause('page_random'); $page = $dbr->tableName('page'); $extra = $wgExtraRandompageSQL ? "AND ({$wgExtraRandompageSQL})" : ''; $sql = "SELECT page_id,page_title\n\t\tFROM {$page} {$use_index}\n\t\tWHERE page_namespace = {$namespace} AND page_is_redirect = 1 {$extra}\n\t\tAND page_random > {$randstr}\n\t\tORDER BY page_random"; $sql = $dbr->limitResult($sql, 1, 0); $res = $dbr->query($sql, $fname); $title = NULL; if ($row = $dbr->fetchObject($res)) { $title = Title::makeTitleSafe($namespace, $row->page_title); } # Catch dud titles and return to the main page if (is_null($title)) { $title = Title::newMainPage(); } $wgOut->reportTime(); $wgOut->redirect($title->getFullUrl('redirect=no')); }
public function testUpdateUserParams() { $p = FRUserCounters::getUserParams(-1); # Assumes (main) IN content namespace $title = Title::makeTitleSafe(0, 'helloworld'); $article = new Article($title); $copyP = $p; FRUserCounters::updateUserParams($copyP, $article, "Manual edit comment"); $this->assertEquals($p['editComments'] + 1, $copyP['editComments'], "Manual summary"); $copyP = $p; FRUserCounters::updateUserParams($copyP, $article, "/* section */"); $this->assertEquals($p['editComments'], $copyP['editComments'], "Auto summary"); $copyP = $p; FRUserCounters::updateUserParams($copyP, $article, "edit summary"); $this->assertEquals($p['totalContentEdits'] + 1, $copyP['totalContentEdits'], "Content edit count on content edit"); $expected = $p['uniqueContentPages']; $expected[] = 0; $this->assertEquals($expected, $copyP['uniqueContentPages'], "Unique content pages on content edit"); # Assumes (user) NOT IN content namespace $title = Title::makeTitleSafe(NS_USER, 'helloworld'); $article = new Article($title); $copyP = $p; FRUserCounters::updateUserParams($copyP, $article, "Manual edit comment"); $this->assertEquals($p['editComments'] + 1, $copyP['editComments'], "Manual summary"); $copyP = $p; FRUserCounters::updateUserParams($copyP, $article, "/* section */"); $this->assertEquals($p['editComments'], $copyP['editComments'], "Auto summary"); $title = Title::makeTitleSafe(NS_USER, 'helloworld'); $article = new Article($title); $copyP = $p; FRUserCounters::updateUserParams($copyP, $article, "edit summary"); $this->assertEquals($p['totalContentEdits'], $copyP['totalContentEdits'], "Content edit count on non-content edit"); $this->assertEquals($p['uniqueContentPages'], $copyP['uniqueContentPages'], "Unique content pages on non-content edit"); }
function getSQL() { $dbr = wfGetDB(DB_SLAVE); $dMsgText = wfMsgForContent('disambiguationspage'); $linkBatch = new LinkBatch(); # If the text can be treated as a title, use it verbatim. # Otherwise, pull the titles from the links table $dp = Title::newFromText($dMsgText); if ($dp) { if ($dp->getNamespace() != NS_TEMPLATE) { # FIXME we assume the disambiguation message is a template but # the page can potentially be from another namespace :/ wfDebug("Mediawiki:disambiguationspage message does not refer to a template!\n"); } $linkBatch->addObj($dp); } else { # Get all the templates linked from the Mediawiki:Disambiguationspage $disPageObj = Title::makeTitleSafe(NS_MEDIAWIKI, 'disambiguationspage'); $res = $dbr->select(array('pagelinks', 'page'), 'pl_title', array('page_id = pl_from', 'pl_namespace' => NS_TEMPLATE, 'page_namespace' => $disPageObj->getNamespace(), 'page_title' => $disPageObj->getDBkey()), __METHOD__); while ($row = $dbr->fetchObject($res)) { $linkBatch->addObj(Title::makeTitle(NS_TEMPLATE, $row->pl_title)); } $dbr->freeResult($res); } $set = $linkBatch->constructSet('lb.tl', $dbr); if ($set === false) { # We must always return a valid sql query, but this way DB will always quicly return an empty result $set = 'FALSE'; wfDebug("Mediawiki:disambiguationspage message does not link to any templates!\n"); } list($page, $pagelinks, $templatelinks) = $dbr->tableNamesN('page', 'pagelinks', 'templatelinks'); $sql = "SELECT 'Disambiguations' AS \"type\", pb.page_namespace AS namespace," . " pb.page_title AS title, la.pl_from AS value" . " FROM {$templatelinks} AS lb, {$page} AS pb, {$pagelinks} AS la, {$page} AS pa" . " WHERE {$set}" . ' AND pa.page_id = la.pl_from' . ' AND pa.page_namespace = ' . NS_MAIN . ' AND pb.page_id = lb.tl_from' . ' AND pb.page_namespace = la.pl_namespace' . ' AND pb.page_title = la.pl_title' . ' ORDER BY lb.tl_namespace, lb.tl_title'; return $sql; }
function execute() { global $wgOut; $this->limit = min($this->request->getInt('limit', 50), 5000); if ($this->limit <= 0) { $this->limit = 50; } $this->from = $this->request->getInt('from'); $this->dir = $this->request->getText('dir', 'next'); if ($this->dir != 'prev') { $this->dir = 'next'; } $targetString = isset($this->par) ? $this->par : $this->request->getVal('target'); if (is_null($targetString)) { $wgOut->showErrorPage('notargettitle', 'notargettext'); return; } $this->target = Title::newFromURL($targetString); if (!$this->target) { $wgOut->showErrorPage('notargettitle', 'notargettext'); return; } $this->selfTitle = Title::makeTitleSafe(NS_SPECIAL, 'Whatlinkshere/' . $this->target->getPrefixedDBkey()); $wgOut->setPagetitle($this->target->getPrefixedText()); $wgOut->setSubtitle(wfMsg('linklistsub')); $wgOut->addHTML(wfMsg('whatlinkshere-barrow') . ' ' . $this->skin->makeLinkObj($this->target, '', 'redirect=no') . "<br />\n"); $this->showIndirectLinks(0, $this->target, $this->limit, $this->from, $this->dir); }
/** * Callback function to output a restriction */ function formatRow($row) { global $wgUser, $wgLang, $wgContLang; wfProfileIn(__METHOD__); static $skin = null; if (is_null($skin)) { $skin = $wgUser->getSkin(); } $title = Title::makeTitleSafe($row->page_namespace, $row->page_title); $link = $skin->makeLinkObj($title); $description_items = array(); $protType = wfMsgHtml('restriction-level-' . $row->pr_level); $description_items[] = $protType; if ($row->pr_cascade) { $description_items[] = wfMsg('protect-summary-cascade'); } $expiry_description = ''; $stxt = ''; if ($row->pr_expiry != 'infinity' && strlen($row->pr_expiry)) { $expiry = Block::decodeExpiry($row->pr_expiry); $expiry_description = wfMsgForContent('protect-expiring', $wgLang->timeanddate($expiry)); $description_items[] = $expiry_description; } if (!is_null($size = $row->page_len)) { if ($size == 0) { $stxt = ' <small>' . wfMsgHtml('historyempty') . '</small>'; } else { $stxt = ' <small>' . wfMsgHtml('historysize', $wgLang->formatNum($size)) . '</small>'; } $stxt = $wgContLang->getDirMark() . $stxt; } wfProfileOut(__METHOD__); return '<li>' . wfSpecialList($link . $stxt, implode($description_items, ', ')) . "</li>\n"; }
/** * Main execution function * @param $par Parameters passed to the page */ function execute($par) { global $wgOut, $wgUser; wfLoadExtensionMessages('Gadgets'); $skin = $wgUser->getSkin(); $this->setHeaders(); $wgOut->setPagetitle(wfMsg("gadgets-title")); $wgOut->addWikiText(wfMsg("gadgets-pagetext")); $gadgets = wfLoadGadgetsStructured(); if (!$gadgets) { return; } $listOpen = false; $msgOpt = array('parseinline', 'parsemag'); foreach ($gadgets as $section => $entries) { if ($section !== false && $section !== '') { $t = Title::makeTitleSafe(NS_MEDIAWIKI, "Gadget-section-{$section}"); $lnk = $t ? $skin->makeLinkObj($t, wfMsgHTML("edit")) : htmlspecialchars($section); $ttext = wfMsgExt("gadget-section-{$section}", $msgOpt); if ($listOpen) { $wgOut->addHTML('</ul>'); $listOpen = false; } $wgOut->addHTML("\n<h2>{$ttext} [{$lnk}]</h2>\n"); } foreach ($entries as $gname => $code) { $t = Title::makeTitleSafe(NS_MEDIAWIKI, "Gadget-{$gname}"); if (!$t) { continue; } $lnk = $skin->makeLinkObj($t, wfMsgHTML("edit")); $ttext = wfMsgExt("gadget-{$gname}", $msgOpt); if (!$listOpen) { $listOpen = true; $wgOut->addHTML('<ul>'); } $wgOut->addHTML("<li>"); $wgOut->addHTML("{$ttext} [{$lnk}]<br/>"); $wgOut->addHTML(wfMsgHTML("gadgets-uses") . ": "); $first = true; foreach ($code as $codePage) { $t = Title::makeTitleSafe(NS_MEDIAWIKI, "Gadget-{$codePage}"); if (!$t) { continue; } if ($first) { $first = false; } else { $wgOut->addHTML(", "); } $lnk = $skin->makeLinkObj($t, htmlspecialchars($t->getText())); $wgOut->addHTML($lnk); } $wgOut->addHtml("</li>"); } } if ($listOpen) { $wgOut->addHTML('</ul>'); } }
protected function getMessageParameters() { $params = parent::getMessageParameters(); /* Current format: * 1,2,3: normal logformatter params * 4: old username * (legaciest doesn't have this at all, all in comment) * (legacier uses this as new name and stores old name in target) * 5: new username * 6: number of edits the user had at the time * (not available except in newest log entries) * Note that the arrays are zero-indexed, while message parameters * start from 1, so substract one to get array entries below. */ if (!isset($params[3])) { // The oldest format return $params; } elseif (!isset($params[4])) { // See comments above $params[4] = $params[3]; $params[3] = $this->entry->getTarget()->getText(); } // Nice link to old user page $title = Title::makeTitleSafe(NS_USER, $params[3]); $link = $this->myPageLink($title, $params[3]); $params[3] = Message::rawParam($link); // Nice link to new user page $title = Title::makeTitleSafe(NS_USER, $params[4]); $link = $this->myPageLink($title, $params[4]); $params[4] = Message::rawParam($link); return $params; }
function getQueryInfo() { $dbr = wfGetDB(DB_SLAVE); $dMsgText = wfMsgForContent('disambiguationspage'); $linkBatch = new LinkBatch(); # If the text can be treated as a title, use it verbatim. # Otherwise, pull the titles from the links table $dp = Title::newFromText($dMsgText); if ($dp) { if ($dp->getNamespace() != NS_TEMPLATE) { # @todo FIXME: We assume the disambiguation message is a template but # the page can potentially be from another namespace :/ wfDebug("Mediawiki:disambiguationspage message does not refer to a template!\n"); } $linkBatch->addObj($dp); } else { # Get all the templates linked from the Mediawiki:Disambiguationspage $disPageObj = Title::makeTitleSafe(NS_MEDIAWIKI, 'disambiguationspage'); $res = $dbr->select(array('pagelinks', 'page'), 'pl_title', array('page_id = pl_from', 'pl_namespace' => NS_TEMPLATE, 'page_namespace' => $disPageObj->getNamespace(), 'page_title' => $disPageObj->getDBkey()), __METHOD__); foreach ($res as $row) { $linkBatch->addObj(Title::makeTitle(NS_TEMPLATE, $row->pl_title)); } } $set = $linkBatch->constructSet('tl', $dbr); if ($set === false) { # We must always return a valid SQL query, but this way # the DB will always quickly return an empty result $set = 'FALSE'; wfDebug("Mediawiki:disambiguationspage message does not link to any templates!\n"); } // @todo FIXME: What are pagelinks and p2 doing here? return array('tables' => array('templatelinks', 'p1' => 'page', 'pagelinks', 'p2' => 'page'), 'fields' => array('p1.page_namespace AS namespace', 'p1.page_title AS title', 'pl_from AS value'), 'conds' => array($set, 'p1.page_id = tl_from', 'pl_namespace = p1.page_namespace', 'pl_title = p1.page_title', 'p2.page_id = pl_from', 'p2.page_namespace' => MWNamespace::getContentNamespaces())); }
function formatImageLink($imageName, $linkTarget, $altText) { if (preg_match('/^(http|ftp)/', $imageName)) { $imageUrl = $imageName; $sizeAttrs = ""; } else { $imageTitle = Title::makeTitleSafe(NS_IMAGE, $imageName); if (is_null($imageTitle)) { return "(invalid image name)"; } $image = wfFindFile($imageTitle); if (is_null($image)) { return "(invalid image)"; } $imageUrl = $image->getViewURL(); $sizeAttrs = 'width="' . IntVal($image->getWidth()) . '" height="' . IntVal($image->getHeight()) . '"'; } if (preg_match('/^(http|ftp)/', $linkTarget)) { $linkUrl = $linkTarget; } else { $linkTitle = Title::newFromText($linkTarget); if (is_null($linkTitle)) { return "(invalid link target)"; } $linkUrl = $linkTitle->getLocalUrl(); } return '<a href="' . htmlspecialchars($linkUrl) . '"><img src="' . htmlspecialchars($imageUrl) . '" ' . $sizeAttrs . ' alt="' . htmlspecialchars($altText) . '" title="' . htmlspecialchars($altText) . '" /></a>'; }
/** * @param IContextSource $context * @param array $par (Default null) * @param bool $including Whether this page is being transcluded in * another page */ function __construct(IContextSource $context = null, $par = null, $including = null) { if ($context) { $this->setContext($context); } $request = $this->getRequest(); $par = $par !== null ? $par : ''; $parms = explode('/', $par); $symsForAll = array('*', 'user'); if ($parms[0] != '' && (in_array($par, User::getAllGroups()) || in_array($par, $symsForAll))) { $this->requestedGroup = $par; $un = $request->getText('username'); } elseif (count($parms) == 2) { $this->requestedGroup = $parms[0]; $un = $parms[1]; } else { $this->requestedGroup = $request->getVal('group'); $un = $par != '' ? $par : $request->getText('username'); } if (in_array($this->requestedGroup, $symsForAll)) { $this->requestedGroup = ''; } $this->editsOnly = $request->getBool('editsOnly'); $this->creationSort = $request->getBool('creationSort'); $this->including = $including; $this->mDefaultDirection = $request->getBool('desc') ? IndexPager::DIR_DESCENDING : IndexPager::DIR_ASCENDING; $this->requestedUser = ''; if ($un != '') { $username = Title::makeTitleSafe(NS_USER, $un); if (!is_null($username)) { $this->requestedUser = $username->getText(); } } parent::__construct(); }
/** * Callback function to output a restriction * * @param object $row Database row * @return string */ function formatRow($row) { wfProfileIn(__METHOD__); static $infinity = null; if (is_null($infinity)) { $infinity = wfGetDB(DB_SLAVE)->getInfinity(); } $title = Title::makeTitleSafe($row->pt_namespace, $row->pt_title); if (!$title) { wfProfileOut(__METHOD__); return Html::rawElement('li', array(), Html::element('span', array('class' => 'mw-invalidtitle'), Linker::getInvalidTitleDescription($this->getContext(), $row->pt_namespace, $row->pt_title))) . "\n"; } $link = Linker::link($title); $description_items = array(); $protType = $this->msg('restriction-level-' . $row->pt_create_perm)->escaped(); $description_items[] = $protType; $lang = $this->getLanguage(); $expiry = strlen($row->pt_expiry) ? $lang->formatExpiry($row->pt_expiry, TS_MW) : $infinity; if ($expiry != $infinity) { $user = $this->getUser(); $description_items[] = $this->msg('protect-expiring-local', $lang->userTimeAndDate($expiry, $user), $lang->userDate($expiry, $user), $lang->userTime($expiry, $user))->escaped(); } wfProfileOut(__METHOD__); // @todo i18n: This should use a comma separator instead of a hard coded comma, right? return '<li>' . $lang->specialList($link, implode($description_items, ', ')) . "</li>\n"; }
/** * @param $skin Skin * @param $result * @return string */ function formatResult($skin, $result) { $title = Title::makeTitleSafe($result->namespace, $result->title); $count = $this->msg('ncategories')->numParams($result->value)->escaped(); $link = Linker::link($title); return $this->getLanguage()->specialList($link, $count); }
function trySubmit() { global $wgOut, $wgUser; $errors = array(); $ip = $this->mUnblockIP; if (!IP::isIPAddress($ip) && strlen($ip)) { $errors[] = array('globalblocking-unblock-ipinvalid', $ip); $ip = ''; } if (0 == ($id = GlobalBlocking::getGlobalBlockId($ip))) { $errors[] = array('globalblocking-notblocked', $ip); } if (count($errors) > 0) { return $errors; } $dbw = GlobalBlocking::getGlobalBlockingMaster(); $dbw->delete('globalblocks', array('gb_id' => $id), __METHOD__); $page = new LogPage('gblblock'); $page->addEntry('gunblock', Title::makeTitleSafe(NS_USER, $ip), $this->mReason); $successmsg = wfMsgExt('globalblocking-unblock-unblocked', array('parse'), $ip, $id); $wgOut->addHTML($successmsg); $link = $wgUser->getSkin()->makeKnownLinkObj(SpecialPage::getTitleFor('GlobalBlockList'), wfMsg('globalblocking-return')); $wgOut->addHTML($link); $wgOut->setSubtitle(wfMsg('globalblocking-unblock-successsub')); return array(); }
/** * @param $user User * @param $output OutputPage */ protected function showLogFragment($user, $output) { $pageTitle = Title::makeTitleSafe(NS_USER, $user->getName()); $logPage = new LogPage('gblrights'); $output->addHTML(Xml::element('h2', null, $logPage->getName()->text() . "\n")); LogEventsList::showLogExtract($output, 'gblrights', $pageTitle->getPrefixedText()); }
/** * Callback function to output a restriction * @param $row object Protected title * @return string Formatted <li> element */ public function formatRow($row) { wfProfileIn(__METHOD__); static $infinity = null; if (is_null($infinity)) { $infinity = wfGetDB(DB_SLAVE)->getInfinity(); } $title = Title::makeTitleSafe($row->page_namespace, $row->page_title); $link = Linker::link($title); $description_items = array(); $protType = wfMsgHtml('restriction-level-' . $row->pr_level); $description_items[] = $protType; if ($row->pr_cascade) { $description_items[] = wfMsg('protect-summary-cascade'); } $stxt = ''; $lang = $this->getLanguage(); $expiry = $lang->formatExpiry($row->pr_expiry, TS_MW); if ($expiry != $infinity) { $expiry_description = wfMsg('protect-expiring-local', $lang->timeanddate($expiry, true), $lang->date($expiry, true), $lang->time($expiry, true)); $description_items[] = htmlspecialchars($expiry_description); } if (!is_null($size = $row->page_len)) { $stxt = $lang->getDirMark() . ' ' . Linker::formatRevisionSize($size); } # Show a link to the change protection form for allowed users otherwise a link to the protection log if ($this->getUser()->isAllowed('protect')) { $changeProtection = ' (' . Linker::linkKnown($title, wfMsgHtml('protect_change'), array(), array('action' => 'unprotect')) . ')'; } else { $ltitle = SpecialPage::getTitleFor('Log'); $changeProtection = ' (' . Linker::linkKnown($ltitle, wfMsgHtml('protectlogpage'), array(), array('type' => 'protect', 'page' => $title->getPrefixedText())) . ')'; } wfProfileOut(__METHOD__); return Html::rawElement('li', array(), $lang->specialList($link . $stxt, $lang->commaList($description_items), false) . $changeProtection) . "\n"; }