本文整理汇总了PHP中RequestContext::getOutput方法的典型用法代码示例。如果您正苦于以下问题:PHP RequestContext::getOutput方法的具体用法?PHP RequestContext::getOutput怎么用?PHP RequestContext::getOutput使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类RequestContext
的用法示例。
在下文中一共展示了RequestContext::getOutput方法的11个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: testPreferences
function testPreferences()
{
global $wgUser, $wgOut, $wgTitle;
// This test makes call to the parser which requires valids Outputpage
// and Title objects. Set them up there, they will be released at the
// end of the test.
$old_wgOut = $wgOut;
$old_wgTitle = $wgTitle;
$wgTitle = Title::newFromText('Parser test for Gadgets extension');
// Proceed with test setup:
$prefs = array();
$context = new RequestContext();
$wgOut = $context->getOutput();
$wgOut->setTitle(Title::newFromText('test'));
Gadget::loadStructuredList('* foo | foo.js
==keep-section1==
* bar| bar.js
==remove-section==
* baz [rights=embezzle] |baz.js
==keep-section2==
* quux [rights=read] | quux.js');
$this->assertTrue(GadgetHooks::getPreferences($wgUser, $prefs), 'GetPrefences hook should return true');
$options = $prefs['gadgets']['options'];
$this->assertFalse(isset($options['<gadget-section-remove-section>']), 'Must not show empty sections');
$this->assertTrue(isset($options['<gadget-section-keep-section1>']));
$this->assertTrue(isset($options['<gadget-section-keep-section2>']));
// Restore globals
$wgOut = $old_wgOut;
$wgTitle = $old_wgTitle;
}
示例2: setUp
function setUp()
{
global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc, $wgDeferredUpdateList, $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory, $wgEnableParserCache, $wgNamespaceAliases, $wgNamespaceProtection, $wgLocalFileRepo, $parserMemc, $wgThumbnailScriptPath, $wgScriptPath, $wgArticlePath, $wgStyleSheetPath, $wgScript, $wgStylePath;
$wgScript = '/index.php';
$wgScriptPath = '/';
$wgArticlePath = '/wiki/$1';
$wgStyleSheetPath = '/skins';
$wgStylePath = '/skins';
$wgThumbnailScriptPath = false;
$wgLocalFileRepo = array('class' => 'LocalRepo', 'name' => 'local', 'directory' => wfTempDir() . '/test-repo', 'url' => 'http://example.com/images', 'deletedDir' => wfTempDir() . '/test-repo/delete', 'hashLevels' => 2, 'transformVia404' => false);
$wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface';
$wgNamespaceAliases['Image'] = NS_FILE;
$wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
$wgEnableParserCache = false;
$wgDeferredUpdateList = array();
$wgMemc = wfGetMainCache();
$messageMemc = wfGetMessageCacheStorage();
$parserMemc = wfGetParserCacheStorage();
// $wgContLang = new StubContLang;
$wgUser = new User();
$context = new RequestContext();
$wgLang = $context->getLang();
$wgOut = $context->getOutput();
$wgParser = new StubObject('wgParser', $wgParserConf['class'], array($wgParserConf));
$wgRequest = new WebRequest();
if ($wgStyleDirectory === false) {
$wgStyleDirectory = "{$IP}/skins";
}
}
示例3: setUp
function setUp()
{
global $wgParser, $wgParserConf, $IP, $messageMemc, $wgMemc, $wgUser, $wgLang, $wgOut, $wgRequest, $wgStyleDirectory, $wgEnableParserCache, $wgNamespaceAliases, $wgNamespaceProtection, $parserMemc;
$tmpGlobals = array();
$tmpGlobals['wgScript'] = '/index.php';
$tmpGlobals['wgScriptPath'] = '/';
$tmpGlobals['wgArticlePath'] = '/wiki/$1';
$tmpGlobals['wgStyleSheetPath'] = '/skins';
$tmpGlobals['wgStylePath'] = '/skins';
$tmpGlobals['wgThumbnailScriptPath'] = false;
$tmpGlobals['wgLocalFileRepo'] = array('class' => 'LocalRepo', 'name' => 'local', 'url' => 'http://example.com/images', 'hashLevels' => 2, 'transformVia404' => false, 'backend' => new FSFileBackend(array('name' => 'local-backend', 'lockManager' => 'fsLockManager', 'containerPaths' => array('local-public' => wfTempDir() . '/test-repo/public', 'local-thumb' => wfTempDir() . '/test-repo/thumb', 'local-temp' => wfTempDir() . '/test-repo/temp', 'local-deleted' => wfTempDir() . '/test-repo/delete'))));
foreach ($tmpGlobals as $var => $val) {
if (array_key_exists($var, $GLOBALS)) {
$this->savedGlobals[$var] = $GLOBALS[$var];
}
$GLOBALS[$var] = $val;
}
$wgNamespaceProtection[NS_MEDIAWIKI] = 'editinterface';
$wgNamespaceAliases['Image'] = NS_FILE;
$wgNamespaceAliases['Image_talk'] = NS_FILE_TALK;
$wgEnableParserCache = false;
DeferredUpdates::clearPendingUpdates();
$wgMemc = wfGetMainCache();
$messageMemc = wfGetMessageCacheStorage();
$parserMemc = wfGetParserCacheStorage();
// $wgContLang = new StubContLang;
$wgUser = new User();
$context = new RequestContext();
$wgLang = $context->getLanguage();
$wgOut = $context->getOutput();
$wgParser = new StubObject('wgParser', $wgParserConf['class'], array($wgParserConf));
$wgRequest = $context->getRequest();
if ($wgStyleDirectory === false) {
$wgStyleDirectory = "{$IP}/skins";
}
RepoGroup::destroySingleton();
FileBackendGroup::destroySingleton();
}
示例4: getInlineEditForm
static function getInlineEditForm($talkpage, $method, $operand, $fuck)
{
$req = new RequestContext();
$output = $req->getOutput();
$request = new FauxRequest(array());
// Workaround for loss of session data when using FauxRequest
global $wgRequest;
self::fixFauxRequestSession($request);
$title = null;
if ($talkpage) {
$title = $talkpage->getTitle();
} elseif ($operand) {
$thread = Threads::withId($operand);
if ($thread) {
$talkpage = $thread->article();
$title = $talkpage->getTitle();
} else {
throw new Exception("Cannot get title");
}
}
$output->setTitle($title);
$request->setVal('lqt_method', $method);
$request->setVal('lqt_operand', $operand);
//HJ : fuck 설정을 여기서?
$request->setVal('lqt_fuck', $fuck);
global $wgUser;
$view = new LqtView($output, $talkpage, $title, $wgUser, $request);
$view->doInlineEditForm();
foreach ($request->getSessionArray() as $k => $v) {
$wgRequest->setSessionData($k, $v);
}
return $output->getHTML();
}
示例5: setupGlobals
/**
* Set up the global variables for a consistent environment for each test.
* Ideally this should replace the global configuration entirely.
* @param array $opts
* @param string $config
* @return RequestContext
*/
protected function setupGlobals($opts = array(), $config = '')
{
global $wgFileBackends;
# Find out values for some special options.
$lang = self::getOptionValue('language', $opts, 'en');
$variant = self::getOptionValue('variant', $opts, false);
$maxtoclevel = self::getOptionValue('wgMaxTocLevel', $opts, 999);
$linkHolderBatchSize = self::getOptionValue('wgLinkHolderBatchSize', $opts, 1000);
$uploadDir = $this->getUploadDir();
if ($this->getCliArg('use-filebackend')) {
if (self::$backendToUse) {
$backend = self::$backendToUse;
} else {
$name = $this->getCliArg('use-filebackend');
$useConfig = array();
foreach ($wgFileBackends as $conf) {
if ($conf['name'] == $name) {
$useConfig = $conf;
}
}
$useConfig['name'] = 'local-backend';
// swap name
unset($useConfig['lockManager']);
unset($useConfig['fileJournal']);
$class = $useConfig['class'];
self::$backendToUse = new $class($useConfig);
$backend = self::$backendToUse;
}
} else {
# Replace with a mock. We do not care about generating real
# files on the filesystem, just need to expose the file
# informations.
$backend = new MockFileBackend(array('name' => 'local-backend', 'wikiId' => wfWikiId()));
}
$settings = array('wgLocalFileRepo' => array('class' => 'LocalRepo', 'name' => 'local', 'url' => 'http://example.com/images', 'hashLevels' => 2, 'transformVia404' => false, 'backend' => $backend), 'wgEnableUploads' => self::getOptionValue('wgEnableUploads', $opts, true), 'wgLanguageCode' => $lang, 'wgDBprefix' => $this->db->getType() != 'oracle' ? 'unittest_' : 'ut_', 'wgRawHtml' => self::getOptionValue('wgRawHtml', $opts, false), 'wgNamespacesWithSubpages' => array(NS_MAIN => isset($opts['subpage'])), 'wgAllowExternalImages' => self::getOptionValue('wgAllowExternalImages', $opts, true), 'wgThumbLimits' => array(self::getOptionValue('thumbsize', $opts, 180)), 'wgMaxTocLevel' => $maxtoclevel, 'wgUseTeX' => isset($opts['math']) || isset($opts['texvc']), 'wgMathDirectory' => $uploadDir . '/math', 'wgDefaultLanguageVariant' => $variant, 'wgLinkHolderBatchSize' => $linkHolderBatchSize, 'wgUseTidy' => isset($opts['tidy']));
if ($config) {
$configLines = explode("\n", $config);
foreach ($configLines as $line) {
list($var, $value) = explode('=', $line, 2);
$settings[$var] = eval("return {$value};");
// ???
}
}
$this->savedGlobals = array();
/** @since 1.20 */
Hooks::run('ParserTestGlobals', array(&$settings));
$langObj = Language::factory($lang);
$settings['wgContLang'] = $langObj;
$settings['wgLang'] = $langObj;
$context = new RequestContext();
$settings['wgOut'] = $context->getOutput();
$settings['wgUser'] = $context->getUser();
$settings['wgRequest'] = $context->getRequest();
// We (re)set $wgThumbLimits to a single-element array above.
$context->getUser()->setOption('thumbsize', 0);
foreach ($settings as $var => $val) {
if (array_key_exists($var, $GLOBALS)) {
$this->savedGlobals[$var] = $GLOBALS[$var];
}
$GLOBALS[$var] = $val;
}
MWTidy::destroySingleton();
MagicWord::clearCache();
# The entries saved into RepoGroup cache with previous globals will be wrong.
RepoGroup::destroySingleton();
FileBackendGroup::destroySingleton();
# Create dummy files in storage
$this->setupUploads();
# Publish the articles after we have the final language set
$this->publishTestArticles();
MessageCache::destroyInstance();
return $context;
}
示例6: setupGlobals
/**
* Set up the global variables for a consistent environment for each test.
* Ideally this should replace the global configuration entirely.
*/
protected function setupGlobals($opts = '', $config = '')
{
global $wgFileBackends;
# Find out values for some special options.
$lang = self::getOptionValue('language', $opts, 'en');
$variant = self::getOptionValue('variant', $opts, false);
$maxtoclevel = self::getOptionValue('wgMaxTocLevel', $opts, 999);
$linkHolderBatchSize = self::getOptionValue('wgLinkHolderBatchSize', $opts, 1000);
$uploadDir = $this->getUploadDir();
if ($this->getCliArg('use-filebackend=')) {
if (self::$backendToUse) {
$backend = self::$backendToUse;
} else {
$name = $this->getCliArg('use-filebackend=');
$useConfig = array();
foreach ($wgFileBackends as $conf) {
if ($conf['name'] == $name) {
$useConfig = $conf;
}
}
$useConfig['name'] = 'local-backend';
// swap name
$class = $conf['class'];
self::$backendToUse = new $class($useConfig);
$backend = self::$backendToUse;
}
} else {
$backend = new FSFileBackend(array('name' => 'local-backend', 'lockManager' => 'nullLockManager', 'containerPaths' => array('local-public' => "{$uploadDir}", 'local-thumb' => "{$uploadDir}/thumb")));
}
$settings = array('wgServer' => 'http://Britney-Spears', 'wgScript' => '/index.php', 'wgScriptPath' => '/', 'wgArticlePath' => '/wiki/$1', 'wgExtensionAssetsPath' => '/extensions', 'wgActionPaths' => array(), 'wgLocalFileRepo' => array('class' => 'LocalRepo', 'name' => 'local', 'url' => 'http://example.com/images', 'hashLevels' => 2, 'transformVia404' => false, 'backend' => $backend), 'wgEnableUploads' => self::getOptionValue('wgEnableUploads', $opts, true), 'wgStylePath' => '/skins', 'wgStyleSheetPath' => '/skins', 'wgSitename' => 'MediaWiki', 'wgLanguageCode' => $lang, 'wgDBprefix' => $this->db->getType() != 'oracle' ? 'unittest_' : 'ut_', 'wgRawHtml' => isset($opts['rawhtml']), 'wgLang' => null, 'wgContLang' => null, 'wgNamespacesWithSubpages' => array(0 => isset($opts['subpage'])), 'wgMaxTocLevel' => $maxtoclevel, 'wgCapitalLinks' => true, 'wgNoFollowLinks' => true, 'wgNoFollowDomainExceptions' => array(), 'wgThumbnailScriptPath' => false, 'wgUseImageResize' => false, 'wgUseTeX' => isset($opts['math']), 'wgMathDirectory' => $uploadDir . '/math', 'wgLocaltimezone' => 'UTC', 'wgAllowExternalImages' => true, 'wgUseTidy' => false, 'wgDefaultLanguageVariant' => $variant, 'wgVariantArticlePath' => false, 'wgGroupPermissions' => array('*' => array('createaccount' => true, 'read' => true, 'edit' => true, 'createpage' => true, 'createtalk' => true)), 'wgNamespaceProtection' => array(NS_MEDIAWIKI => 'editinterface'), 'wgDefaultExternalStore' => array(), 'wgForeignFileRepos' => array(), 'wgLinkHolderBatchSize' => $linkHolderBatchSize, 'wgExperimentalHtmlIds' => false, 'wgExternalLinkTarget' => false, 'wgAlwaysUseTidy' => false, 'wgHtml5' => true, 'wgCleanupPresentationalAttributes' => true, 'wgWellFormedXml' => true, 'wgAllowMicrodataAttributes' => true, 'wgAdaptiveMessageCache' => true, 'wgUseDatabaseMessages' => true);
if ($config) {
$configLines = explode("\n", $config);
foreach ($configLines as $line) {
list($var, $value) = explode('=', $line, 2);
$settings[$var] = eval("return {$value};");
//???
}
}
$this->savedGlobals = array();
foreach ($settings as $var => $val) {
if (array_key_exists($var, $GLOBALS)) {
$this->savedGlobals[$var] = $GLOBALS[$var];
}
$GLOBALS[$var] = $val;
}
$langObj = Language::factory($lang);
$GLOBALS['wgContLang'] = $langObj;
$context = new RequestContext();
$GLOBALS['wgLang'] = $context->getLanguage();
$GLOBALS['wgMemc'] = new EmptyBagOStuff();
$GLOBALS['wgOut'] = $context->getOutput();
$GLOBALS['wgUser'] = $context->getUser();
global $wgHooks;
$wgHooks['ParserTestParser'][] = 'ParserTestParserHook::setup';
$wgHooks['ParserGetVariableValueTs'][] = 'ParserTest::getFakeTimestamp';
MagicWord::clearCache();
RepoGroup::destroySingleton();
FileBackendGroup::destroySingleton();
# Create dummy files in storage
$this->setupUploads();
# Publish the articles after we have the final language set
$this->publishTestArticles();
# The entries saved into RepoGroup cache with previous globals will be wrong.
RepoGroup::destroySingleton();
FileBackendGroup::destroySingleton();
MessageCache::singleton()->destroyInstance();
return $context;
}
示例7: sourceExport
public static function sourceExport(RequestContext $context, TranslateTask $task = null, MessageGroup $group, array $options)
{
if ($task || $options['taction'] !== 'export' || !$group instanceof WikiPageMessageGroup) {
return true;
}
$page = TranslatablePage::newFromTitle($group->getTitle());
$collection = $group->initCollection($options['language']);
$collection->loadTranslations(DB_MASTER);
$text = $page->getParse()->getTranslationPageText($collection);
$display = $page->getPageDisplayTitle($options['language']);
if ($display) {
$text = "{{DISPLAYTITLE:{$display}}}{$text}";
}
$output = Html::element('textarea', array('rows' => 25), $text);
$context->getOutput()->addHtml($output);
return false;
}
示例8: execute
//.........这里部分代码省略.........
if ($params['pst'] || $params['onlypst']) {
$this->pstText = $wgParser->preSaveTransform($this->text, $titleObj, $wgUser, $popts);
}
if ($params['onlypst']) {
// Build a result and bail out
$result_array['text'] = array();
$result->setContent($result_array['text'], $this->pstText);
if (isset($prop['wikitext'])) {
$result_array['wikitext'] = array();
$result->setContent($result_array['wikitext'], $this->text);
}
$result->addValue(null, $this->getModuleName(), $result_array);
return;
}
$p_result = $wgParser->parse($params['pst'] ? $this->pstText : $this->text, $titleObj, $popts);
}
$result_array = array();
$result_array['title'] = $titleObj->getPrefixedText();
if (!is_null($oldid)) {
$result_array['revid'] = intval($oldid);
}
if ($params['redirects'] && !is_null($redirValues)) {
$result_array['redirects'] = $redirValues;
}
if (isset($prop['text'])) {
$result_array['text'] = array();
$result->setContent($result_array['text'], $p_result->getText());
}
if (!is_null($params['summary'])) {
$result_array['parsedsummary'] = array();
$result->setContent($result_array['parsedsummary'], $wgUser->getSkin()->formatComment($params['summary'], $titleObj));
}
if (isset($prop['langlinks'])) {
$result_array['langlinks'] = $this->formatLangLinks($p_result->getLanguageLinks());
}
if (isset($prop['languageshtml'])) {
$languagesHtml = $this->languagesHtml($p_result->getLanguageLinks());
$result_array['languageshtml'] = array();
$result->setContent($result_array['languageshtml'], $languagesHtml);
}
if (isset($prop['categories'])) {
$result_array['categories'] = $this->formatCategoryLinks($p_result->getCategories());
}
if (isset($prop['categorieshtml'])) {
$categoriesHtml = $this->categoriesHtml($p_result->getCategories());
$result_array['categorieshtml'] = array();
$result->setContent($result_array['categorieshtml'], $categoriesHtml);
}
if (isset($prop['links'])) {
$result_array['links'] = $this->formatLinks($p_result->getLinks());
}
if (isset($prop['templates'])) {
$result_array['templates'] = $this->formatLinks($p_result->getTemplates());
}
if (isset($prop['images'])) {
$result_array['images'] = array_keys($p_result->getImages());
}
if (isset($prop['externallinks'])) {
$result_array['externallinks'] = array_keys($p_result->getExternalLinks());
}
if (isset($prop['sections'])) {
$result_array['sections'] = $p_result->getSections();
}
if (isset($prop['displaytitle'])) {
$result_array['displaytitle'] = $p_result->getDisplayTitle() ? $p_result->getDisplayTitle() : $titleObj->getPrefixedText();
}
if (isset($prop['headitems']) || isset($prop['headhtml'])) {
$context = new RequestContext();
$context->getOutput()->addParserOutputNoText($p_result);
if (isset($prop['headitems'])) {
$headItems = $this->formatHeadItems($p_result->getHeadItems());
$context->getSkin()->setupUserCss($context->getOutput());
$css = $this->formatCss($context->getOutput()->buildCssLinksArray());
$scripts = array($context->getOutput()->getHeadScripts($context->getSkin()));
$result_array['headitems'] = array_merge($headItems, $css, $scripts);
}
if (isset($prop['headhtml'])) {
$result_array['headhtml'] = array();
$result->setContent($result_array['headhtml'], $context->getOutput()->headElement($context->getSkin()));
}
}
if (isset($prop['iwlinks'])) {
$result_array['iwlinks'] = $this->formatIWLinks($p_result->getInterwikiLinks());
}
if (isset($prop['wikitext'])) {
$result_array['wikitext'] = array();
$result->setContent($result_array['wikitext'], $this->text);
if (!is_null($this->pstText)) {
$result_array['psttext'] = array();
$result->setContent($result_array['psttext'], $this->pstText);
}
}
$result_mapping = array('redirects' => 'r', 'langlinks' => 'll', 'categories' => 'cl', 'links' => 'pl', 'templates' => 'tl', 'images' => 'img', 'externallinks' => 'el', 'iwlinks' => 'iw', 'sections' => 's', 'headitems' => 'hi');
$this->setIndexedTagNames($result_array, $result_mapping);
$result->addValue(null, $this->getModuleName(), $result_array);
if (!is_null($oldLang)) {
$wgLang = $oldLang;
// Reset $wgLang to $oldLang
}
}
示例9: execute
public function execute()
{
global $wgUseFileCache, $wgDisableCounters, $wgContentNamespaces, $wgRequestTime;
global $wgTitle, $wgOut;
if (!$wgUseFileCache) {
$this->error("Nothing to do -- \$wgUseFileCache is disabled.", true);
}
$wgDisableCounters = false;
$start = $this->getArg(0, "0");
if (!ctype_digit($start)) {
$this->error("Invalid value for start parameter.", true);
}
$start = intval($start);
$overwrite = $this->hasArg(1) && $this->getArg(1) === 'overwrite';
$this->output("Building content page file cache from page {$start}!\n");
$dbr = wfGetDB(DB_SLAVE);
$start = $start > 0 ? $start : $dbr->selectField('page', 'MIN(page_id)', false, __FUNCTION__);
$end = $dbr->selectField('page', 'MAX(page_id)', false, __FUNCTION__);
if (!$start) {
$this->error("Nothing to do.", true);
}
$_SERVER['HTTP_ACCEPT_ENCODING'] = 'bgzip';
// hack, no real client
# Do remaining chunk
$end += $this->mBatchSize - 1;
$blockStart = $start;
$blockEnd = $start + $this->mBatchSize - 1;
$dbw = wfGetDB(DB_MASTER);
// Go through each page and save the output
while ($blockEnd <= $end) {
// Get the pages
$res = $dbr->select('page', array('page_namespace', 'page_title', 'page_id'), array('page_namespace' => $wgContentNamespaces, "page_id BETWEEN {$blockStart} AND {$blockEnd}"), array('ORDER BY' => 'page_id ASC', 'USE INDEX' => 'PRIMARY'));
foreach ($res as $row) {
$rebuilt = false;
$wgRequestTime = wfTime();
# bug 22852
$context = new RequestContext();
$wgTitle = Title::makeTitleSafe($row->page_namespace, $row->page_title);
$context->setTitle($wgTitle);
if (null == $wgTitle) {
$this->output("Page {$row->page_id} has bad title\n");
continue;
// broken title?
}
$wgOut = $context->getOutput();
// set display title
$article = new Article($wgTitle);
// If the article is cacheable, then load it
if ($article->isFileCacheable()) {
$cache = new HTMLFileCache($wgTitle);
if ($cache->isFileCacheGood()) {
if ($overwrite) {
$rebuilt = true;
} else {
$this->output("Page {$row->page_id} already cached\n");
continue;
// done already!
}
}
ob_start(array(&$cache, 'saveToFileCache'));
// save on ob_end_clean()
$wgUseFileCache = false;
// hack, we don't want $article fiddling with filecache
$article->view();
wfSuppressWarnings();
// header notices
$wgOut->output();
wfRestoreWarnings();
$wgUseFileCache = true;
ob_end_clean();
// clear buffer
if ($rebuilt) {
$this->output("Re-cached page {$row->page_id}\n");
} else {
$this->output("Cached page {$row->page_id}\n");
}
} else {
$this->output("Page {$row->page_id} not cacheable\n");
}
$dbw->commit();
// commit any changes
}
$blockStart += $this->mBatchSize;
$blockEnd += $this->mBatchSize;
wfWaitForSlaves();
}
$this->output("Done!\n");
// Remove these to be safe
if (isset($wgTitle)) {
unset($wgTitle);
}
}
示例10: getDisallowedErrorMessage
/**
* @todo Move this to AbstractBlock and use for summary/header/etc.
* @param AbstractRevision $revision
* @return Message
*/
protected function getDisallowedErrorMessage(AbstractRevision $revision)
{
if (in_array($this->action, array('moderate-topic', 'moderate-post'))) {
/*
* When failing to moderate an already moderated action (like
* undo), show the more general "you have insufficient
* permissions for this action" message, rather than the
* specialized "this topic is <hidden|deleted|suppressed>" msg.
*/
return $this->context->msg('flow-error-not-allowed');
}
$state = $revision->getModerationState();
// display simple message
// i18n messages:
// flow-error-not-allowed-hide,
// flow-error-not-allowed-reply-to-hide-topic
// flow-error-not-allowed-delete
// flow-error-not-allowed-reply-to-delete-topic
// flow-error-not-allowed-suppress
// flow-error-not-allowed-reply-to-suppress-topic
if ($revision instanceof PostRevision) {
$type = $revision->isTopicTitle() ? 'topic' : 'post';
} else {
$type = $revision->getRevisionType();
}
// Show a snippet of the relevant log entry if available.
if (\LogPage::isLogType($state)) {
// check if user has sufficient permissions to see log
$logPage = new \LogPage($state);
if ($this->context->getUser()->isAllowed($logPage->getRestriction())) {
// LogEventsList::showLogExtract will write to OutputPage, but we
// actually just want that text, to write it ourselves wherever we want,
// so let's create an OutputPage object to then get the content from.
$rc = new \RequestContext();
$output = $rc->getOutput();
// get log extract
$entries = \LogEventsList::showLogExtract($output, array($state), $this->workflow->getArticleTitle()->getPrefixedText(), '', array('lim' => 10, 'showIfEmpty' => false, 'msgKey' => array(array("flow-error-not-allowed-{$this->action}-to-{$state}-{$type}", "flow-error-not-allowed-{$state}-extract"))));
// check if there were any log extracts
if ($entries) {
$message = new \RawMessage('$1');
return $message->rawParams($output->getHTML());
}
}
}
return $this->context->msg(array("flow-error-not-allowed-{$this->action}-to-{$state}-{$type}", "flow-error-not-allowed-{$state}", "flow-error-not-allowed"));
}
示例11: capturePath
/**
* Just like executePath() except it returns the HTML instead of outputting it
* Returns false if there was no such special page, or a title object if it was
* a redirect.
*
* Also saves the current $wgTitle, $wgOut, and $wgRequest variables so that
* the special page will get the context it'd expect on a normal request,
* and then restores them to their previous values after.
*
* @param $title Title
*
* @return String: HTML fragment
*/
static function capturePath(&$title)
{
global $wgOut, $wgTitle, $wgRequest;
$oldTitle = $wgTitle;
$oldOut = $wgOut;
$oldRequest = $wgRequest;
// Don't want special pages interpreting ?feed=atom parameters.
$wgRequest = new FauxRequest(array());
$context = new RequestContext();
$context->setTitle($title);
$context->setRequest($wgRequest);
$wgOut = $context->getOutput();
$ret = self::executePath($title, $context, true);
if ($ret === true) {
$ret = $wgOut->getHTML();
}
$wgTitle = $oldTitle;
$wgOut = $oldOut;
$wgRequest = $oldRequest;
return $ret;
}