/** * Return absolute URL to a page to be shared (uses wgTitle) * The path component of the URL is urlencoded to prevent confusion between sharing services * @return string URL to be shared */ protected function getURL() { $path = $this->title->getLocalUrl(); $paths = explode('/', $path); foreach ($paths as $index => $section) { $paths[$index] = urlencode($section); } return str_replace($path, implode('/', $paths), $this->title->getFullUrl()); }
public function notfound() { global $wgHubRssFeeds; $url = $this->currentTitle->getFullUrl(); $links = []; foreach ($wgHubRssFeeds as $feedName) { $links[] = $url . '/' . $feedName; } $this->setVal('links', $links); $this->wg->SupressPageSubtitle = true; }
/** * Check if the given local page title is a spam regex source. * @param Title $title * @return bool */ function isLocalSource($title) { global $wgDBname; if ($title->getNamespace() == NS_MEDIAWIKI) { $sources = array("Spam-blacklist", "Spam-whitelist"); if (in_array($title->getDBkey(), $sources)) { return true; } } $thisHttp = wfExpandUrl($title->getFullUrl('action=raw'), PROTO_HTTP); $thisHttpRegex = '/^' . preg_quote($thisHttp, '/') . '(?:&.*)?$/'; foreach ($this->files as $fileName) { $matches = array(); if (preg_match('/^DB: (\\w*) (.*)$/', $fileName, $matches)) { if ($wgDBname == $matches[1]) { if ($matches[2] == $title->getPrefixedDbKey()) { // Local DB fetch of this page... return true; } } } elseif (preg_match($thisHttpRegex, $fileName)) { // Raw view of this page return true; } } return false; }
/** * Show a read-only error * Parameters are the same as OutputPage:readOnlyPage() * Redirect to the article page if redlink=1 */ function readOnlyPage($source = null, $protected = false, $reasons = array(), $action = null) { global $wgRequest, $wgOut; if ($wgRequest->getBool('redlink')) { // The edit page was reached via a red link. // Redirect to the article page and let them click the edit tab if // they really want a permission error. $wgOut->redirect($this->mTitle->getFullUrl()); } else { $wgOut->readOnlyPage($source, $protected, $reasons, $action); } }
/** * editPage -- show edit form * * @access public * * @return String */ public function editPage() { global $wgStylePath; wfProfileIn(__METHOD__); $text = ''; $this->load(true); if ($this->canEdit()) { $vars = ['canEdit' => $this->canEdit(), 'comment' => htmlentities(ArticleCommentsAjax::getConvertedContent($this->mLastRevision->getText())), 'isReadOnly' => wfReadOnly(), 'isMiniEditorEnabled' => ArticleComment::isMiniEditorEnabled(), 'stylePath' => $wgStylePath, 'articleId' => $this->mTitle->getArticleId(), 'articleFullUrl' => $this->mTitle->getFullUrl()]; $text = F::app()->getView('ArticleComments', 'Edit', $vars)->render(); } wfProfileOut(__METHOD__); return $text; }
/** * Check if the given local page title is a spam regex source. * * @param Title $title * @return bool */ public static function isLocalSource( $title ) { global $wgDBname, $wgBlacklistSettings; if( $title->getNamespace() == NS_MEDIAWIKI ) { $sources = array(); foreach ( self::$blacklistTypes as $type => $class ) { $type = ucfirst( $type ); $sources += array( "$type-blacklist", "$type-whitelist" ); } if( in_array( $title->getDBkey(), $sources ) ) { return true; } } $thisHttp = wfExpandUrl( $title->getFullUrl( 'action=raw' ), PROTO_HTTP ); $thisHttpRegex = '/^' . preg_quote( $thisHttp, '/' ) . '(?:&.*)?$/'; $files = array(); foreach ( self::$blacklistTypes as $type => $class ) { if ( isset( $wgBlacklistSettings[$type]['files'] ) ) { $files += $wgBlacklistSettings[$type]['files']; } } foreach( $files as $fileName ) { $matches = array(); if ( preg_match( '/^DB: (\w*) (.*)$/', $fileName, $matches ) ) { if ( $wgDBname == $matches[1] ) { if( $matches[2] == $title->getPrefixedDbKey() ) { // Local DB fetch of this page... return true; } } } elseif( preg_match( $thisHttpRegex, $fileName ) ) { // Raw view of this page return true; } } return false; }
/** * Add a "return to" link pointing to a specified title * * @param Title $title Title to link */ public function addReturnTo($title) { global $wgUser; $this->addLink(array('rel' => 'next', 'href' => $title->getFullUrl())); $link = wfMsg('returnto', $wgUser->getSkin()->makeLinkObj($title)); $this->addHTML("<p>{$link}</p>\n"); }
/** * Generate the generic "this page has been changed" e-mail text. */ private function composeCommonMailtext() { $this->composedCommon = true; $action = strtolower($this->action); $subject = wfMessage('enotif_subject_' . $action)->inContentLanguage()->text(); if (wfEmptyMsg('enotif_subject_' . $action, $subject)) { $subject = wfMessage('enotif_subject')->inContentLanguage()->text(); } list($body, $bodyHTML) = wfMsgHTMLwithLanguageAndAlternative('enotif_body' . ($action == '' ? '' : '_' . $action), 'enotif_body', F::app()->wg->LanguageCode); # You as the WikiAdmin and Sysops can make use of plenty of # named variables when composing your notification emails while # simply editing the Meta pages $keys = []; $postTransformKeys = []; if ($this->isNewPage()) { // watchlist link tracking list($keys['$NEWPAGE'], $keys['$NEWPAGEHTML']) = wfMsgHTMLwithLanguageAndAlternative('enotif_lastvisited', 'enotif_lastvisited', F::app()->wg->LanguageCode, [], $this->title->getFullUrl('s=wldiff&diff=0&previousRevId=' . $this->previousRevId)); $keys['$OLDID'] = $this->previousRevId; $keys['$CHANGEDORCREATED'] = wfMessage('changed')->inContentLanguage()->plain(); } else { if ($action == '') { // no previousRevId + empty action = create edit, ok to use newpagetext $keys['$NEWPAGEHTML'] = $keys['$NEWPAGE'] = wfMessage('enotif_newpagetext')->inContentLanguage()->plain(); } else { // no previousRevId + action = event, dont show anything, confuses users $keys['$NEWPAGEHTML'] = $keys['$NEWPAGE'] = ''; } # clear $OLDID placeholder in the message template $keys['$OLDID'] = ''; $keys['$CHANGEDORCREATED'] = wfMessage('created')->inContentLanguage()->plain(); } $keys['$PAGETITLE'] = $this->title->getPrefixedText(); $keys['$PAGETITLE_URL'] = $this->title->getCanonicalUrl('s=wl'); $keys['$PAGEMINOREDIT'] = $this->minorEdit ? wfMessage('minoredit')->inContentLanguage()->plain() : ''; $keys['$UNWATCHURL'] = $this->title->getCanonicalUrl('action=unwatch'); $keys['$ACTION'] = $this->action; // Hook registered in FollowHelper -- used for blogposts and categoryAdd wfRunHooks('MailNotifyBuildKeys', [&$keys, $this->action, $this->otherParam]); if ($this->editor->isAnon()) { # real anon (user:xxx.xxx.xxx.xxx) $keys['$PAGEEDITOR'] = wfMessage('enotif_anon_editor', $this->editor->getName())->inContentLanguage()->plain(); $keys['$PAGEEDITOR_EMAIL'] = wfMessage('noemailtitle')->inContentLanguage()->plain(); } else { $keys['$PAGEEDITOR'] = F::app()->wg->EnotifUseRealName ? $this->editor->getRealName() : $this->editor->getName(); $emailPage = SpecialPage::getSafeTitleFor('Emailuser', $this->editor->getName()); $keys['$PAGEEDITOR_EMAIL'] = $emailPage->getCanonicalUrl(); } $keys['$PAGEEDITOR_WIKI'] = $this->editor->getUserPage()->getCanonicalUrl(); $summary = $this->summary == '' ? wfMessage('enotif_no_summary')->inContentLanguage()->plain() : '"' . $this->summary . '"'; $postTransformKeys['$PAGESUMMARY'] = $summary; // Now build message's subject and body // ArticleComment -- updates subject and $keys['$PAGEEDITOR'] if anon editor // EmailTemplatesHooksHelper -- updates subject if blogpost // TopListHelper -- updates subject if title is toplist wfRunHooks('ComposeCommonSubjectMail', [$this->title, &$keys, &$subject, $this->editor]); $subject = strtr($subject, $keys); $subject = MessageCache::singleton()->transform($subject, false, null, $this->title); $this->subject = strtr($subject, $postTransformKeys); // ArticleComment -- updates body and $keys['$PAGEEDITOR'] if anon editor // EmailTemplatesHooksHelper -- changes body to blog post. EmailTemplates only enabled on community and messaging so this tranforms // any watched page email coming from Community to a blog post (I think) // TopListHelper -- updates body if title is toplist wfRunHooks('ComposeCommonBodyMail', [$this->title, &$keys, &$body, $this->editor, &$bodyHTML, &$postTransformKeys]); $body = strtr($body, $keys); $body = MessageCache::singleton()->transform($body, false, null, $this->title); $this->body = wordwrap(strtr($body, $postTransformKeys), 72); if ($bodyHTML) { $bodyHTML = strtr($bodyHTML, $keys); $bodyHTML = MessageCache::singleton()->transform($bodyHTML, false, null, $this->title); $this->bodyHTML = strtr($bodyHTML, $postTransformKeys); } }
/** * Generates a diff link. Used when the full diff is not wanted for example * when $wgFeedDiffCutoff is 0. * * @param $title Title object: used to generate the diff URL * @param $newid Integer newid for this diff * @param $oldid Integer|null oldid for the diff. Null means it is a new article * @return string */ protected static function getDiffLink(Title $title, $newid, $oldid = null) { $queryParameters = $oldid == null ? "diff={$newid}" : "diff={$newid}&oldid={$oldid}"; $diffUrl = $title->getFullUrl($queryParameters); $diffLink = Html::element('a', array('href' => $diffUrl), wfMessage('showdiff')->inContentLanguage()->text()); return $diffLink; }
function __construct($index, Title $title = null, $invalidMarkup = null) { parent::__construct("Invalid Lite Semantics markup at index {$index}" . !empty($invalidMarkup) ? ": <pre>{$invalidMarkup}</pre>" : '' . $title instanceof Title ? ' (URL: ' . $title->getFullUrl() . ')' : ''); }
/** * Redirect to a given page * * @param object $title Title object */ private static function redirect(Title &$title) { global $wgOut; $wgOut->redirect($title->getFullUrl()); }
/** * Show a read-only error * Parameters are the same as OutputPage:readOnlyPage() * Redirect to the article page if redlink=1 * @deprecated in 1.19; use displayPermissionsError() instead */ function readOnlyPage($source = null, $protected = false, $reasons = array(), $action = null) { wfDeprecated(__METHOD__, '1.19'); global $wgRequest; // Wikia - start - @author: ADi - removed wgOut from global to allow injecting it // define wgOut $wgOut = !empty($this->customOutputPage) ? $this->customOutputPage : $GLOBALS['wgOut']; // Wikia - end if ($wgRequest->getBool('redlink')) { // The edit page was reached via a red link. // Redirect to the article page and let them click the edit tab if // they really want a permission error. $wgOut->redirect($this->mTitle->getFullUrl()); } else { $wgOut->readOnlyPage($source, $protected, $reasons, $action); } }
/** * @param string $page * @param string $queryString * @param string $extraQueryString * @param int $cbVal * @param Title $actualTitle * @param string $actualQueryString * * @dataProvider getRedirectUrlDataProvider */ public function testGetRedirectUrl($page, $queryString, $extraQueryString, $cbVal, Title $actualTitle, $actualQueryString) { $request = F::app()->wg->Request; $request->setVal('returnto', $page); $request->setVal('returntoquery', $queryString); $userLoginHelper = new UserLoginHelper(); $testUrl = $userLoginHelper->getRedirectUrl($extraQueryString, $cbVal); $actualUrl = $actualTitle->getFullUrl($actualQueryString); $this->assertEquals($testUrl, $actualUrl); }
/** * Generate the generic "this page has been changed" e-mail text. */ private function composeCommonMailtext() { global $wgPasswordSender, $wgPasswordSenderName, $wgNoReplyAddress; global $wgEnotifFromEditor, $wgEnotifRevealEditorAddress; global $wgEnotifImpersonal, $wgEnotifUseRealName; global $wgLanguageCode; $this->composed_common = true; # <Wikia> $action = strtolower($this->action); $subject = wfMsgForContent('enotif_subject_' . $action); if (wfEmptyMsg('enotif_subject_' . $action, $subject)) { $subject = wfMsgForContent('enotif_subject'); } list($body, $bodyHTML) = wfMsgHTMLwithLanguageAndAlternative('enotif_body' . ($action == '' ? '' : '_' . $action), 'enotif_body', $wgLanguageCode); # </Wikia> # You as the WikiAdmin and Sysops can make use of plenty of # named variables when composing your notification emails while # simply editing the Meta pages $keys = array(); $postTransformKeys = array(); if ($this->oldid) { if ($wgEnotifImpersonal) { // For impersonal mail, show a diff link to the last revision. $keys['$NEWPAGE'] = wfMsgForContent('enotif_lastdiff', $this->title->getCanonicalUrl('diff=next&oldid=' . $this->oldid)); } else { /* WIKIA change, watchlist link tracking, rt#33913 */ list($keys['$NEWPAGE'], $keys['$NEWPAGEHTML']) = wfMsgHTMLwithLanguageAndAlternative('enotif_lastvisited', 'enotif_lastvisited', $wgLanguageCode, array(), $this->title->getFullUrl('s=wldiff&diff=0&oldid=' . $this->oldid)); # </Wikia> } $keys['$OLDID'] = $this->oldid; $keys['$CHANGEDORCREATED'] = wfMsgForContent('changed'); } else { # <Wikia> if ($action == '') { //no oldid + empty action = create edit, ok to use newpagetext $keys['$NEWPAGEHTML'] = $keys['$NEWPAGE'] = wfMsgForContent('enotif_newpagetext'); } else { //no oldid + action = event, dont show anything, confuses users $keys['$NEWPAGEHTML'] = $keys['$NEWPAGE'] = ''; } # </Wikia> # clear $OLDID placeholder in the message template $keys['$OLDID'] = ''; $keys['$CHANGEDORCREATED'] = wfMsgForContent('created'); } $keys['$PAGETITLE'] = $this->title->getPrefixedText(); $keys['$PAGETITLE_URL'] = $this->title->getCanonicalUrl('s=wl'); $keys['$PAGEMINOREDIT'] = $this->minorEdit ? wfMsgForContent('minoredit') : ''; $keys['$UNWATCHURL'] = $this->title->getCanonicalUrl('action=unwatch'); # <Wikia> $keys['$ACTION'] = $this->action; wfRunHooks('MailNotifyBuildKeys', array(&$keys, $this->action, $this->other_param)); # </Wikia> if ($this->editor->isAnon()) { # real anon (user:xxx.xxx.xxx.xxx) $keys['$PAGEEDITOR'] = wfMsgForContent('enotif_anon_editor', $this->editor->getName()); $keys['$PAGEEDITOR_EMAIL'] = wfMsgForContent('noemailtitle'); } else { $keys['$PAGEEDITOR'] = $wgEnotifUseRealName ? $this->editor->getRealName() : $this->editor->getName(); $emailPage = SpecialPage::getSafeTitleFor('Emailuser', $this->editor->getName()); $keys['$PAGEEDITOR_EMAIL'] = $emailPage->getCanonicalUrl(); } $keys['$PAGEEDITOR_WIKI'] = $this->editor->getUserPage()->getCanonicalUrl(); # <Wikia> // RT #1294 Bartek 07.05.2009, use the language of the wiki $summary = $this->summary == '' ? wfMsgForContent('enotif_no_summary') : '"' . $this->summary . '"'; # </Wikia> # Replace this after transforming the message, bug 35019 $postTransformKeys['$PAGESUMMARY'] = $summary; # Now build message's subject and body # <Wikia> wfRunHooks('ComposeCommonSubjectMail', array($this->title, &$keys, &$subject, $this->editor)); # </Wikia> $subject = strtr($subject, $keys); $subject = MessageCache::singleton()->transform($subject, false, null, $this->title); $this->subject = strtr($subject, $postTransformKeys); wfRunHooks('ComposeCommonBodyMail', array($this->title, &$keys, &$body, $this->editor, &$bodyHTML, &$postTransformKeys)); $body = strtr($body, $keys); $body = MessageCache::singleton()->transform($body, false, null, $this->title); $this->body = wordwrap(strtr($body, $postTransformKeys), 72); # <Wikia> if ($bodyHTML) { $bodyHTML = strtr($bodyHTML, $keys); $bodyHTML = MessageCache::singleton()->transform($bodyHTML, false, null, $this->title); $this->bodyHTML = strtr($bodyHTML, $postTransformKeys); } # </Wikia> # Reveal the page editor's address as REPLY-TO address only if # the user has not opted-out and the option is enabled at the # global configuration level. $adminAddress = new MailAddress($wgPasswordSender, $wgPasswordSenderName); if ($wgEnotifRevealEditorAddress && $this->editor->getEmail() != '' && $this->editor->getOption('enotifrevealaddr')) { $editorAddress = new MailAddress($this->editor); if ($wgEnotifFromEditor) { $this->from = $editorAddress; } else { $this->from = $adminAddress; $this->replyto = $editorAddress; } } else { $this->from = $adminAddress; $this->replyto = new MailAddress($wgNoReplyAddress); } }