/** * @dataProvider provideIsValidMove * @covers MovePage::isValidMove * @covers MovePage::isValidFileMove */ public function testIsValidMove($old, $new, $error) { $this->setMwGlobals('wgContentHandlerUseDB', false); $mp = new MovePage(Title::newFromText($old), Title::newFromText($new)); $status = $mp->isValidMove(); if ($error === true) { $this->assertTrue($status->isGood()); } else { $this->assertTrue($status->hasMessage($error)); } }
protected function movePage(Title $oldPage, Title $newPage) { $mp = new MovePage($oldPage, $newPage); $valid = $mp->isValidMove(); if (!$valid->isOK()) { wfDebugLog('CentralAuthRename', "Invalid page move: {$oldPage->getPrefixedText()} -> {$newPage->getPrefixedText()}"); return; } $msg = wfMessage('centralauth-rename-movelog')->params($this->params['from'], $this->params['to'])->inContentLanguage()->text(); $status = $mp->move($this->user, $msg, !$this->params['suppressredirects']); if (!$status->isOK()) { wfDebugLog('CentralAuthRename', "Page move failed: {$oldPage->getPrefixedText()} -> {$newPage->getPrefixedText()}"); } }
protected function processRow($row) { global $wgContLang; $current = Title::makeTitle($row->page_namespace, $row->page_title); $display = $current->getPrefixedText(); $upper = $row->page_title; $lower = $wgContLang->lcfirst($row->page_title); if ($upper == $lower) { $this->output("\"{$display}\" already lowercase.\n"); return $this->progress(0); } $target = Title::makeTitle($row->page_namespace, $lower); $targetDisplay = $target->getPrefixedText(); if ($target->exists()) { $this->output("\"{$display}\" skipped; \"{$targetDisplay}\" already exists\n"); return $this->progress(0); } if ($this->dryrun) { $this->output("\"{$display}\" -> \"{$targetDisplay}\": DRY RUN, NOT MOVED\n"); $ok = true; } else { $mp = new MovePage($current, $target); $status = $mp->move($this->user, 'Converting page titles to lowercase', true); $ok = $status->isOK() ? 'OK' : $status->getWikiText(false, false, 'en'); $this->output("\"{$display}\" -> \"{$targetDisplay}\": {$ok}\n"); } if ($ok === true) { $this->progress(1); if ($row->page_namespace == $this->namespace) { $talk = $target->getTalkPage(); $row->page_namespace = $talk->getNamespace(); if ($talk->exists()) { return $this->processRow($row); } } } return $this->progress(0); }
public function execute() { global $wgUser; # Change to current working directory $oldCwd = getcwd(); chdir($oldCwd); # Options processing $user = $this->getOption('u', false); $reason = $this->getOption('r', ''); $interval = $this->getOption('i', 0); $noredirects = $this->getOption('noredirects', false); if ($this->hasArg()) { $file = fopen($this->getArg(), 'r'); } else { $file = $this->getStdin(); } # Setup if (!$file) { $this->error("Unable to read file, exiting", true); } if ($user === false) { $wgUser = User::newSystemUser('Move page script', array('steal' => true)); } else { $wgUser = User::newFromName($user); } if (!$wgUser) { $this->error("Invalid username", true); } # Setup complete, now start $dbw = $this->getDB(DB_MASTER); // @codingStandardsIgnoreStart Ignore avoid function calls in a FOR loop test part warning for ($linenum = 1; !feof($file); $linenum++) { // @codingStandardsIgnoreEnd $line = fgets($file); if ($line === false) { break; } $parts = array_map('trim', explode('|', $line)); if (count($parts) != 2) { $this->error("Error on line {$linenum}, no pipe character"); continue; } $source = Title::newFromText($parts[0]); $dest = Title::newFromText($parts[1]); if (is_null($source) || is_null($dest)) { $this->error("Invalid title on line {$linenum}"); continue; } $this->output($source->getPrefixedText() . ' --> ' . $dest->getPrefixedText()); $this->beginTransaction($dbw, __METHOD__); $mp = new MovePage($source, $dest); $status = $mp->move($wgUser, $reason, !$noredirects); if (!$status->isOK()) { $this->output("\nFAILED: " . $status->getWikiText()); } $this->commitTransaction($dbw, __METHOD__); $this->output("\n"); if ($interval) { sleep($interval); } wfWaitForSlaves(); } }
/** * Move a title to a new location * * @deprecated since 1.25, use the MovePage class instead * @param Title $nt The new title * @param bool $auth Indicates whether $wgUser's permissions * should be checked * @param string $reason The reason for the move * @param bool $createRedirect Whether to create a redirect from the old title to the new title. * Ignored if the user doesn't have the suppressredirect right. * @return array|bool True on success, getUserPermissionsErrors()-like array on failure */ public function moveTo(&$nt, $auth = true, $reason = '', $createRedirect = true) { global $wgUser; $err = $this->isValidMoveOperation($nt, $auth, $reason); if (is_array($err)) { // Auto-block user's IP if the account was "hard" blocked $wgUser->spreadAnyEditBlock(); return $err; } // Check suppressredirect permission if ($auth && !$wgUser->isAllowed('suppressredirect')) { $createRedirect = true; } $mp = new MovePage($this, $nt); $status = $mp->move($wgUser, $reason, $createRedirect); if ($status->isOK()) { return true; } else { return $status->getErrorsArray(); } }
/** * @param Title $from * @param Title $to * @param string $reason * @param bool $createRedirect * @return Status */ protected function movePage(Title $from, Title $to, $reason, $createRedirect) { $mp = new MovePage($from, $to); $valid = $mp->isValidMove(); if (!$valid->isOK()) { return $valid; } $permStatus = $mp->checkPermissions($this->getUser(), $reason); if (!$permStatus->isOK()) { return $permStatus; } // Check suppressredirect permission if (!$this->getUser()->isAllowed('suppressredirect')) { $createRedirect = true; } return $mp->move($this->getUser(), $reason, $createRedirect); }
function doSubmit() { $user = $this->getUser(); if ($user->pingLimiter('move')) { throw new ThrottledError(); } $ot = $this->oldTitle; $nt = $this->newTitle; # don't allow moving to pages with # in if (!$nt || $nt->hasFragment()) { $this->showForm(array(array('badtitletext'))); return; } # Show a warning if the target file exists on a shared repo if ($nt->getNamespace() == NS_FILE && !($this->moveOverShared && $user->isAllowed('reupload-shared')) && !RepoGroup::singleton()->getLocalRepo()->findFile($nt) && wfFindFile($nt)) { $this->showForm(array(array('file-exists-sharedrepo'))); return; } # Delete to make way if requested if ($this->deleteAndMove) { $permErrors = $nt->getUserPermissionsErrors('delete', $user); if (count($permErrors)) { # Only show the first error $this->showForm($permErrors); return; } $reason = $this->msg('delete_and_move_reason', $ot)->inContentLanguage()->text(); // Delete an associated image if there is if ($nt->getNamespace() == NS_FILE) { $file = wfLocalFile($nt); $file->load(File::READ_LATEST); if ($file->exists()) { $file->delete($reason, false, $user); } } $error = ''; // passed by ref $page = WikiPage::factory($nt); $deleteStatus = $page->doDeleteArticleReal($reason, false, 0, true, $error, $user); if (!$deleteStatus->isGood()) { $this->showForm($deleteStatus->getErrorsArray()); return; } } $handler = ContentHandler::getForTitle($ot); if (!$handler->supportsRedirects()) { $createRedirect = false; } elseif ($user->isAllowed('suppressredirect')) { $createRedirect = $this->leaveRedirect; } else { $createRedirect = true; } # Do the actual move. $mp = new MovePage($ot, $nt); $valid = $mp->isValidMove(); if (!$valid->isOK()) { $this->showForm($valid->getErrorsArray()); return; } $permStatus = $mp->checkPermissions($user, $this->reason); if (!$permStatus->isOK()) { $this->showForm($permStatus->getErrorsArray()); return; } $status = $mp->move($user, $this->reason, $createRedirect); if (!$status->isOK()) { $this->showForm($status->getErrorsArray()); return; } if ($this->getConfig()->get('FixDoubleRedirects') && $this->fixRedirects) { DoubleRedirectJob::fixRedirects('move', $ot, $nt); } $out = $this->getOutput(); $out->setPageTitle($this->msg('pagemovedsub')); $oldLink = Linker::link($ot, null, array('id' => 'movepage-oldlink'), array('redirect' => 'no')); $newLink = Linker::linkKnown($nt, null, array('id' => 'movepage-newlink')); $oldText = $ot->getPrefixedText(); $newText = $nt->getPrefixedText(); if ($ot->exists()) { // NOTE: we assume that if the old title exists, it's because it was re-created as // a redirect to the new title. This is not safe, but what we did before was // even worse: we just determined whether a redirect should have been created, // and reported that it was created if it should have, without any checks. // Also note that isRedirect() is unreliable because of bug 37209. $msgName = 'movepage-moved-redirect'; } else { $msgName = 'movepage-moved-noredirect'; } $out->addHTML($this->msg('movepage-moved')->rawParams($oldLink, $newLink)->params($oldText, $newText)->parseAsBlock()); $out->addWikiMsg($msgName); Hooks::run('SpecialMovepageAfterMove', array(&$this, &$ot, &$nt)); # Now we move extra pages we've been asked to move: subpages and talk # pages. First, if the old page or the new page is a talk page, we # can't move any talk pages: cancel that. if ($ot->isTalkPage() || $nt->isTalkPage()) { $this->moveTalk = false; } if (count($ot->getUserPermissionsErrors('move-subpages', $user))) { $this->moveSubpages = false; } # Next make a list of id's. This might be marginally less efficient # than a more direct method, but this is not a highly performance-cri- # tical code path and readable code is more important here. # # Note: this query works nicely on MySQL 5, but the optimizer in MySQL # 4 might get confused. If so, consider rewriting as a UNION. # # If the target namespace doesn't allow subpages, moving with subpages # would mean that you couldn't move them back in one operation, which # is bad. # @todo FIXME: A specific error message should be given in this case. // @todo FIXME: Use Title::moveSubpages() here $dbr = wfGetDB(DB_MASTER); if ($this->moveSubpages && (MWNamespace::hasSubpages($nt->getNamespace()) || $this->moveTalk && MWNamespace::hasSubpages($nt->getTalkPage()->getNamespace()))) { $conds = array('page_title' . $dbr->buildLike($ot->getDBkey() . '/', $dbr->anyString()) . ' OR page_title = ' . $dbr->addQuotes($ot->getDBkey())); $conds['page_namespace'] = array(); if (MWNamespace::hasSubpages($nt->getNamespace())) { $conds['page_namespace'][] = $ot->getNamespace(); } if ($this->moveTalk && MWNamespace::hasSubpages($nt->getTalkPage()->getNamespace())) { $conds['page_namespace'][] = $ot->getTalkPage()->getNamespace(); } } elseif ($this->moveTalk) { $conds = array('page_namespace' => $ot->getTalkPage()->getNamespace(), 'page_title' => $ot->getDBkey()); } else { # Skip the query $conds = null; } $extraPages = array(); if (!is_null($conds)) { $extraPages = TitleArray::newFromResult($dbr->select('page', array('page_id', 'page_namespace', 'page_title'), $conds, __METHOD__)); } $extraOutput = array(); $count = 1; foreach ($extraPages as $oldSubpage) { if ($ot->equals($oldSubpage) || $nt->equals($oldSubpage)) { # Already did this one. continue; } $newPageName = preg_replace('#^' . preg_quote($ot->getDBkey(), '#') . '#', StringUtils::escapeRegexReplacement($nt->getDBkey()), $oldSubpage->getDBkey()); if ($oldSubpage->isSubpage() && ($ot->isTalkPage() xor $nt->isTalkPage())) { // Moving a subpage from a subject namespace to a talk namespace or vice-versa $newNs = $nt->getNamespace(); } elseif ($oldSubpage->isTalkPage()) { $newNs = $nt->getTalkPage()->getNamespace(); } else { $newNs = $nt->getSubjectPage()->getNamespace(); } # Bug 14385: we need makeTitleSafe because the new page names may # be longer than 255 characters. $newSubpage = Title::makeTitleSafe($newNs, $newPageName); if (!$newSubpage) { $oldLink = Linker::linkKnown($oldSubpage); $extraOutput[] = $this->msg('movepage-page-unmoved')->rawParams($oldLink)->params(Title::makeName($newNs, $newPageName))->escaped(); continue; } # This was copy-pasted from Renameuser, bleh. if ($newSubpage->exists() && !$oldSubpage->isValidMoveTarget($newSubpage)) { $link = Linker::linkKnown($newSubpage); $extraOutput[] = $this->msg('movepage-page-exists')->rawParams($link)->escaped(); } else { $success = $oldSubpage->moveTo($newSubpage, true, $this->reason, $createRedirect); if ($success === true) { if ($this->fixRedirects) { DoubleRedirectJob::fixRedirects('move', $oldSubpage, $newSubpage); } $oldLink = Linker::link($oldSubpage, null, array(), array('redirect' => 'no')); $newLink = Linker::linkKnown($newSubpage); $extraOutput[] = $this->msg('movepage-page-moved')->rawParams($oldLink, $newLink)->escaped(); ++$count; $maximumMovedPages = $this->getConfig()->get('MaximumMovedPages'); if ($count >= $maximumMovedPages) { $extraOutput[] = $this->msg('movepage-max-pages')->numParams($maximumMovedPages)->escaped(); break; } } else { $oldLink = Linker::linkKnown($oldSubpage); $newLink = Linker::link($newSubpage); $extraOutput[] = $this->msg('movepage-page-unmoved')->rawParams($oldLink, $newLink)->escaped(); } } } if ($extraOutput !== array()) { $out->addHTML("<ul>\n<li>" . implode("</li>\n<li>", $extraOutput) . "</li>\n</ul>"); } # Deal with watches (we don't watch subpages) WatchAction::doWatchOrUnwatch($this->watch, $ot, $user); WatchAction::doWatchOrUnwatch($this->watch, $nt, $user); }
function execute($par) { if (!$this->userCanExecute($this->getUser())) { $this->displayRestrictionError(); return; } $output = $this->getOutput(); $this->setHeaders(); $output->addModules('ext.createteams.SpecialPage'); $report = ''; $e = ''; $log = ''; $preview = ''; $this->getTemplates(); # Get request data from, e.g. # Do stuff # ... //$wgOut->setPageTitle( "create team templates" ); $output->addWikiText('==' . wfMessage('createteams-create-teams-heading')->inContentLanguage()->text() . '=='); $output->addWikiText(wfMessage('createteams-create-teams-desc')->inContentLanguage()->text()); global $wgUser, $wgUploadNavigationUrl; if ($wgUploadNavigationUrl) { $uploadMessage = wfMessage('createteams-create-teams-image-helper-remote')->params($wgUploadNavigationUrl)->inContentLanguage()->parse(); } else { $uploadMessage = wfMessage('createteams-create-teams-image-helper')->inContentLanguage()->parse(); } $request = $this->getRequest(); $reqTeam = $request->getText('team'); $reqTeamslug = $request->getText('teamslug'); $reqPagetitle = $request->getText('pagetitle'); $reqImage = $request->getText('image'); $reqTeamshort = $request->getText('teamshort'); $reqOverwrite = $request->getBool('overwrite'); $output->addHTML('<form name="createform" id="createform" method="post"> <table> <tr> <td class="input-label"><label for="team">' . wfMessage('createteams-create-teams-team-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="team" id="team" value="' . $reqTeam . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-team-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="team">' . wfMessage('createteams-create-teams-team-slug-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="teamslug" id="teamslug" value="' . $reqTeamslug . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-team-slug-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="pagetitle">' . wfMessage('createteams-create-teams-pagetitle-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="pagetitle" id="pagetitle" value="' . $reqPagetitle . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-pagetitle-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="teamshort">' . wfMessage('createteams-create-teams-teamshort-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="teamshort" id="teamshort" value="' . $reqTeamshort . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-teamshort-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="image">' . wfMessage('createteams-create-teams-image-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="image" id="image" value="' . $reqImage . '"></td> <td class="input-helper">' . $uploadMessage . '</td> </tr> <tr> <td class="input-label"><label for="overwrite">' . wfMessage('createteams-create-teams-overwrite-label')->inContentLanguage()->parse() . '</label></td> <td><input type="checkbox" name="overwrite" id="overwrite"' . ($reqOverwrite ? ' checked=""' : '') . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-overwrite-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td> </td> <td colspan="2"> <input type="submit" name="createbutton" value="' . wfMessage('createteams-create-teams-create-button')->inContentLanguage()->text() . '"> <input type="submit" name="createpreviewbutton" value="' . wfMessage('createteams-create-teams-preview-button')->inContentLanguage()->text() . '"> </td> </tr> </table> </form>'); if ($request->getBool('createbutton') || $request->getBool('createpreviewbutton')) { if ($reqImage == '') { $reqImage = $reqTeam . 'logo std.png'; } $wikiimage = 'File:' . $reqImage; $imagetitle = Title::newFromText($wikiimage); $imagewikipage = new WikiFilePage($imagetitle); $imagefile = $imagewikipage->getFile(); $test = $imagefile->exists(); if ($reqTeam == '') { $e = wfMessage('createteams-create-teams-error-team-name-empty')->inContentLanguage()->text(); } else { if (preg_match('/[a-z]*:\\/\\//', $reqTeam) == 1) { $e = wfMessage('createteams-create-teams-error-team-name-url')->inContentLanguage()->text(); } else { if ($imagefile->exists() == false) { $e = wfMessage('createteams-create-teams-error-image-not-found')->inContentLanguage()->text(); } else { $lcname = strtolower($reqTeam); $lcslug = strtolower($reqTeamslug); if ($lcslug != '') { $lcname = $lcslug; } $vars = array('name' => $reqTeam, 'shortname' => $reqTeamshort, 'link' => '', 'namewithlink' => '', 'image' => $reqImage); if ($reqPagetitle != $reqTeam && $reqPagetitle != '') { $vars['namewithlink'] = '[[' . $reqPagetitle . '|' . $reqTeam . ']]'; $vars['link'] = $reqPagetitle; } else { $vars['namewithlink'] = '[[' . $reqTeam . ']]'; $vars['link'] = $reqTeam; } if ($vars['image'] == '') { $vars['image'] = $reqTeam . 'logo_std.png'; } foreach ($this->templates as $prefix => $template) { $contents["Template:{$prefix}/{$lcname}"] = self::makeTeamTemplate($template, $vars); } $preview = '{| class="createteams-preview"' . "\n"; foreach ($contents as $key => $value) { $title = Title::newFromText($key); $page = WikiPage::factory($title); $content = \ContentHandler::makeContent($value, $page->getTitle(), CONTENT_MODEL_WIKITEXT); if ($request->getBool('createpreviewbutton')) { $preview .= '|-' . "\n" . '![[' . $key . ']]' . "\n" . '|' . $value . "\n"; } else { $errors = $title->getUserPermissionsErrors('edit', $wgUser); if (!$title->exists()) { $errors = array_merge($errors, $title->getUserPermissionsErrors('create', $wgUser)); } if (count($errors)) { $e .= '*' . wfMessage('createteams-create-error-permission')->params($key)->inContentLanguage()->text() . "\n"; } else { if ($title->exists()) { if ($reqOverwrite) { $status = $page->doeditcontent($content, wfMessage('createteams-create-summary-edit')->inContentLanguage()->text(), EDIT_UPDATE, false, $wgUser, null); if ($status->isOK()) { $log .= '*' . wfMessage('createteams-create-log-edit-success')->params($key)->inContentLanguage()->text() . "\n"; } else { $e .= '*' . wfMessage('createteams-create-error-edit')->params($key)->inContentLanguage()->text() . $status->getWikiText() . "\n"; } } else { $e .= '*' . wfMessage('createteams-create-error-edit-already-exists')->params($key)->inContentLanguage()->text() . "\n"; } } else { $status = $page->doeditcontent($content, wfMessage('createteams-create-summary-creation')->inContentLanguage()->text(), EDIT_NEW, false, $wgUser, null); if ($status->isOK()) { $log .= '*' . wfMessage('createteams-create-log-create-success')->params($key)->inContentLanguage()->text() . "\n"; } else { $e .= '*' . wfMessage('createteams-create-error-create')->params($key)->inContentLanguage()->text() . $status->getWikiText() . "\n"; } } } } } $preview .= '|}'; } } } if ($e == '') { $report = wfMessage('createteams-create-teams-report-success')->params(htmlspecialchars($reqTeam))->inContentLanguage()->text(); } else { $report = $e; } $report .= '<div class="log">' . "\n" . $log . '</div>'; if ($request->getBool('createpreviewbutton')) { $output->addWikiText('===' . wfMessage('createteams-preview-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($preview); $output->addWikiText('===' . wfMessage('createteams-report-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($report); } else { $output->addWikiText('===' . wfMessage('createteams-report-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($report); } } $reqHistoricaltemplate = $request->getText('historicaltemplate'); $reqHistoricalteam = $request->getArray('historicalteam'); $reqHistoricaltime = $request->getArray('historicaltime'); if (is_array($reqHistoricalteam)) { foreach ($reqHistoricalteam as $index => $value) { if ($value == '') { unset($reqHistoricalteam[$index]); } } $reqHistoricalteam = array_values($reqHistoricalteam); } if (is_array($reqHistoricaltime)) { foreach ($reqHistoricaltime as $index => $value) { if ($value == '') { unset($reqHistoricaltime[$index]); } } $reqHistoricaltime = array_values($reqHistoricaltime); } $reqHistoricalteamlength = count($reqHistoricalteam); $reqHistoricaltimelength = count($reqHistoricaltime); $reqHistoricaloverwrite = $request->getBool('historicaloverwrite'); $output->addWikiText('==' . wfMessage('createteams-create-historicalteam-heading')->inContentLanguage()->text() . '=='); $historicalteamform = '<form name="createhistoricalform" id="createhistoricalform" method="post"> <table> <tr> <td> </td> <td colspan="2" class="input-helper">' . wfMessage('createteams-create-teams-historicaltemplate-info')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="historicaltemplate">' . wfMessage('createteams-create-teams-historicaltemplate-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="historicaltemplate" id="historicaltemplate" value="' . $reqHistoricaltemplate . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-historicaltemplate-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="historicalteam">' . wfMessage('createteams-create-teams-historicalteam-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="historicalteam[]" value="' . $reqHistoricalteam[0] . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-historicalteam-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="historicaltime">' . wfMessage('createteams-create-teams-historicaltime-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="historicaltime[]" value="' . $reqHistoricaltime[0] . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-historicaltime-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="historicalteam">' . wfMessage('createteams-create-teams-historicalteam-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="historicalteam[]" value="' . $reqHistoricalteam[1] . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-historicalteam-helper')->inContentLanguage()->parse() . '</td> </tr>'; if ($reqHistoricalteamlength > 2) { for ($i = 2; $i < $reqHistoricalteamlength; $i++) { if ($reqHistoricaltime[$i - 1] != '' || $reqHistoricalteam[$i] != '') { $historicalteamform .= '<tr> <td class="input-label"><label for="historicaltime">' . wfMessage('createteams-create-teams-historicaltime-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="historicaltime[]" value="' . $reqHistoricaltime[$i - 1] . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-historicaltime-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="historicalteam">' . wfMessage('createteams-create-teams-historicalteam-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="historicalteam[]" value="' . strtolower($reqHistoricalteam[$i]) . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-historicalteam-helper')->inContentLanguage()->parse() . '</td> </tr>'; } } } $historicalteamform .= '<tr id="historicaloverwriteline"> <td class="input-label"><label for="historicaloverwrite">' . wfMessage('createteams-create-teams-historicaloverwrite-label')->inContentLanguage()->parse() . '</label></td> <td><input type="checkbox" name="historicaloverwrite" id="historicaloverwrite"' . ($reqHistoricaloverwrite ? ' checked=""' : '') . '"></td> <td class="input-helper">' . wfMessage('createteams-create-teams-historicaloverwrite-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td> </td> <td colspan="2"> <input type="button" name="createhistoricaladd" id="createhistoricaladd" value="' . wfMessage('createteams-create-teams-historicaladd-button')->inContentLanguage()->text() . '"> <input type="submit" name="createhistoricalbutton" value="' . wfMessage('createteams-create-teams-historicalcreate-button')->inContentLanguage()->text() . '"> <input type="submit" name="createhistoricalpreviewbutton" value="' . wfMessage('createteams-create-teams-historicalpreview-button')->inContentLanguage()->text() . '"> </td> </tr> </table> </form>'; $output->addHTML($historicalteamform); if ($request->getBool('createhistoricalbutton') || $request->getBool('createhistoricalpreviewbutton')) { if ($reqHistoricalteamlength == $reqHistoricaltimelength + 1) { if ($reqHistoricaltemplate == '') { $e = wfMessage('createteams-create-teams-error-team-name-empty')->inContentLanguage()->text(); } else { if (preg_match('/[a-z]*:\\/\\//', $reqHistoricaltemplate) == 1) { $e = wfMessage('createteams-create-teams-error-team-name-url')->inContentLanguage()->text(); } else { $lcname = strtolower($reqHistoricaltemplate); foreach ($this->templates as $prefix => $template) { $contents["Template:{$prefix}/{$lcname}"] = self::makeHistoricalTeamTemplate($prefix, $lcname, $reqHistoricalteam, $reqHistoricaltime, $reqHistoricalteamlength, $reqHistoricaltimelength); } $preview = '{| class="createteams-preview"' . "\n"; foreach ($contents as $key => $value) { $title = Title::newFromText($key); $page = WikiPage::factory($title); $content = \ContentHandler::makeContent($value, $page->getTitle(), CONTENT_MODEL_WIKITEXT); if ($request->getBool('createhistoricalpreviewbutton')) { $preview .= '|-' . "\n" . '![[' . $key . ']]' . "\n" . '|' . $value . "\n"; } else { $errors = $title->getUserPermissionsErrors('edit', $wgUser); if (!$title->exists()) { $errors = array_merge($errors, $title->getUserPermissionsErrors('create', $wgUser)); } if (count($errors)) { $e .= '*' . wfMessage('createteams-create-error-permission')->params($key)->inContentLanguage()->text() . "\n"; } else { if ($title->exists()) { if ($reqHistoricaloverwrite) { $status = $page->doeditcontent($content, wfMessage('createteams-create-summary-edit')->inContentLanguage()->text(), EDIT_UPDATE, false, $wgUser, null); if ($status->isOK()) { $log .= '*' . wfMessage('createteams-create-log-edit-success')->params($key)->inContentLanguage()->text() . "\n"; } else { $e .= '*' . wfMessage('createteams-create-error-edit')->params($key)->inContentLanguage()->text() . $status->getWikiText() . "\n"; } } else { $e .= '*' . wfMessage('createteams-create-error-edit-already-exists')->params($key)->inContentLanguage()->text() . "\n"; } } else { $status = $page->doeditcontent($content, wfMessage('createteams-create-summary-creation')->inContentLanguage()->text(), EDIT_NEW, false, $wgUser, null); if ($status->isOK()) { $log .= '*' . wfMessage('createteams-create-log-create-success')->params($key)->inContentLanguage()->text() . "\n"; } else { $e .= '*' . wfMessage('createteams-create-error-create')->params($key)->inContentLanguage()->text() . $status->getWikiText() . "\n"; } } } } } } } $preview .= '|}'; } else { $e .= '*' . wfMessage('createteams-create-error-historical-number-error')->inContentLanguage()->text() . "\n"; } if ($e == '') { $report = wfMessage('createteams-create-teams-report-success')->params(htmlspecialchars($reqHistoricaltemplate))->inContentLanguage()->text(); } else { $report = $e; } $report .= '<div class="log">' . "\n" . $log . '</div>'; if ($request->getBool('createhistoricalpreviewbutton')) { $output->addWikiText('===' . wfMessage('createteams-preview-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($preview); $output->addWikiText('===' . wfMessage('createteams-report-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($report); } else { $output->addWikiText('===' . wfMessage('createteams-report-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($report); } } // Redirects $reqRedirect = $request->getText('redirect'); $reqRedirectteam = $request->getText('redirectteam'); $reqRedirectoverwrite = $request->getText('redirectoverwrite'); $output->addWikiText('==' . wfMessage('createteams-create-redirects-heading')->inContentLanguage()->text() . '=='); $redirectform = '<form name="redirectform" method="post"> <table> <tr> <td class="input-label"><label for="redirect">' . wfMessage('createteams-create-redirects-redirect-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="redirect" id="redirect" value="' . $reqRedirect . '"></td> <td class="input-helper">' . wfMessage('createteams-create-redirects-redirect-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="redirectteam">' . wfMessage('createteams-create-redirects-redirectteam-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="redirectteam" id="redirectteam" value="' . $reqRedirectteam . '"></td> <td class="input-helper">' . wfMessage('createteams-create-redirects-redirectteam-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="redirectoverwrite">' . wfMessage('createteams-create-redirects-redirectoverwrite-label')->inContentLanguage()->parse() . '</label></td> <td><input type="checkbox" name="redirectoverwrite" id="redirectoverwrite"' . ($reqRedirectoverwrite ? ' checked=""' : '') . '"></td> <td class="input-helper">' . wfMessage('createteams-create-redirects-redirectoverwrite-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td> </td> <td colspan="2"> <input type="submit" name="redirectbutton" value="' . wfMessage('createteams-create-redirects-create-button')->inContentLanguage()->text() . '"> <input type="submit" name="redirectpreviewbutton" value="' . wfMessage('createteams-create-redirects-preview-button')->inContentLanguage()->text() . '"> </td> </tr> </table> </form>'; $output->addHTML($redirectform); if ($request->getBool('redirectbutton') || $request->getBool('redirectpreviewbutton')) { if ($reqRedirect == '' || $reqRedirectteam == '') { $e = wfMessage('createteams-create-redirects-error-source-or-destination-empty')->inContentLanguage()->text(); } else { foreach (array_keys($this->templates) as $prefix) { $contents["Template:{$prefix}/" . strtolower($reqRedirect)] = "#REDIRECT [[Template:{$prefix}/" . strtolower($reqRedirectteam) . "]]"; } $preview = '{| class="createteams-preview"' . "\n"; foreach ($contents as $key => $value) { $title = Title::newFromText($key); $page = WikiPage::factory($title); $content = \ContentHandler::makeContent($value, $page->getTitle(), CONTENT_MODEL_WIKITEXT); if ($request->getBool('redirectpreviewbutton')) { $preview .= '|-' . "\n" . '![[' . $key . ']]' . "\n" . '|<nowiki>' . $value . '</nowiki>' . "\n"; } else { $errors = $title->getUserPermissionsErrors('edit', $wgUser); if (!$title->exists()) { $errors = array_merge($errors, $title->getUserPermissionsErrors('create', $wgUser)); } if (count($errors)) { $e .= '*' . wfMessage('createteams-create-error-permission')->params($key)->inContentLanguage()->text() . "\n"; } else { if ($title->exists()) { if ($reqRedirectoverwrite) { $status = $page->doeditcontent($content, wfMessage('createteams-create-summary-edit')->inContentLanguage()->text(), EDIT_UPDATE, false, $wgUser, null); if ($status->isOK()) { $log .= '*' . wfMessage('createteams-create-log-edit-success')->params($key)->inContentLanguage()->text() . "\n"; } else { $e .= '*' . wfMessage('createteams-create-error-edit')->params($key)->inContentLanguage()->text() . $status->getWikiText() . "\n"; } } else { $e .= '*' . wfMessage('createteams-create-error-edit-already-exists')->params($key)->inContentLanguage()->text() . "\n"; } } else { $status = $page->doeditcontent($content, wfMessage('createteams-create-summary-creation')->inContentLanguage()->text(), EDIT_NEW, false, $wgUser, null); if ($status->isOK()) { $log .= '*' . wfMessage('createteams-create-log-create-success')->params($key)->inContentLanguage()->text() . "\n"; } else { $e .= '*' . wfMessage('createteams-create-error-create')->params($key)->inContentLanguage()->text() . $status->getWikiText() . "\n"; } } } } } $preview .= '|}'; } if ($e == '') { $report = wfMessage('createteams-create-redirects-report-success')->params(array(htmlspecialchars($reqRedirect), htmlspecialchars($reqRedirectteam)))->inContentLanguage()->text(); } else { $report = $e; } $report .= '<div class="log">' . "\n" . $log . '</div>'; if ($request->getBool('redirectpreviewbutton')) { $output->addWikiText('===' . wfMessage('createteams-preview-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($preview); } else { $output->addWikiText('===' . wfMessage('createteams-report-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($report); } } // Moves $reqMove = $request->getText('move'); $reqMoveto = $request->getText('moveto'); $output->addWikiText('==' . wfMessage('createteams-move-heading')->inContentLanguage()->text() . '=='); $moveform = '<form name="moveform" method="post"> <table> <tr> <td class="input-label"><label for="move">' . wfMessage('createteams-move-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="move" id="move" value="' . $reqMove . '"></td> <td class="input-helper">' . wfMessage('createteams-move-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td class="input-label"><label for="moveto">' . wfMessage('createteams-move-moveto-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"><input type="text" name="moveto" id="moveto" value="' . $reqMoveto . '"></td> <td class="input-helper">' . wfMessage('createteams-move-moveto-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td> </td> <td colspan="2"> <input type="submit" name="movebutton" value="' . wfMessage('createteams-move-button')->inContentLanguage()->text() . '"> <input type="submit" name="movepreviewbutton" value="' . wfMessage('createteams-move-preview-button')->inContentLanguage()->text() . '"> </td> </tr> </table> </form>'; $output->addHTML($moveform); if ($request->getBool('movebutton') || $request->getBool('movepreviewbutton')) { if ($reqMove == '' || $reqMoveto == '') { $e = wfMessage('createteams-move-error-source-or-destination-empty')->inContentLanguage()->text(); } else { $preview = '{| class="createteams-preview"' . "\n"; foreach (array_keys($this->templates) as $prefix) { $oldTitle = Title::newFromText("Template:{$prefix}/" . strtolower($reqMove)); $newTitle = Title::newFromText("Template:{$prefix}/" . strtolower($reqMoveto)); if ($request->getBool('movepreviewbutton')) { $preview .= '|-' . "\n" . "![[Template:{$prefix}/" . strtolower($reqMove) . ']]' . "\n" . '|→' . "\n" . "|[[Template:{$prefix}/" . strtolower($reqMoveto) . ']]' . "\n"; } else { $errors = $oldTitle->getUserPermissionsErrors('move', $wgUser); if (!$oldTitle->exists() || !$newTitle->exists()) { $errors = array_merge($errors, $oldTitle->getUserPermissionsErrors('create', $wgUser)); } if (count($errors)) { $e .= '*' . wfMessage('createteams-move-error-permission')->params("Template:{$prefix}/" . strtolower($reqMove))->inContentLanguage()->text() . "\n"; } else { if (!$oldTitle->exists()) { $e .= '*' . wfMessage('createteams-move-error-source-does-not-exists')->params("Template:{$prefix}/" . strtolower($reqMove))->inContentLanguage()->text() . "\n"; } elseif ($newTitle->exists()) { $e .= '*' . wfMessage('createteams-move-error-target-already-exists')->params("Template:{$prefix}/" . strtolower($reqMoveto))->inContentLanguage()->text() . "\n"; } else { $movePage = new MovePage($oldTitle, $newTitle); $status = $movePage->move($wgUser, wfMessage('createteams-move-summary')->inContentLanguage()->text(), false); if ($status->isOK()) { $log .= '*' . wfMessage('createteams-move-log-create-success')->params("Template:{$prefix}/" . strtolower($reqMove), "Template:{$prefix}/" . strtolower($reqMoveto))->inContentLanguage()->text() . "\n"; } else { $e .= '*' . wfMessage('createteams-move-error-move')->params("Template:{$prefix}/" . strtolower($reqMove))->inContentLanguage()->text() . $status->getWikiText() . "\n"; } } } } } $preview .= '|}'; } if ($e == '') { $report = wfMessage('createteams-move-report-success')->params(array(htmlspecialchars($reqMove), htmlspecialchars($reqMoveto)))->inContentLanguage()->text(); } else { $report = $e; } $report .= '<div class="log">' . "\n" . $log . '</div>'; if ($request->getBool('movepreviewbutton')) { $output->addWikiText('===' . wfMessage('createteams-preview-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($preview); } else { $output->addWikiText('===' . wfMessage('createteams-report-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($report); } } // Deletions if ($wgUser->isAllowed('delete')) { // stuff only admins are allowed to see $reqDeletepreviewteam = $request->getText('deletepreviewteam'); $reqDeleteteam = $request->getText('deleteteam'); $output->addWikiText('==' . wfMessage('createteams-delete-teams-heading')->inContentLanguage()->text() . '=='); $deleteForm = '<form name="delete-form" method="post"> <table> <tr> <td class="input-label"><label for="deletepreviewteam">' . wfMessage('createteams-delete-teams-deletepreviewteam-label')->inContentLanguage()->parse() . '</label></td> <td class="input-container"> <input type="text" name="deletepreviewteam" id="deletepreviewteam" value="' . $reqDeletepreviewteam . '"> </td> <td class="input-helper">' . wfMessage('createteams-delete-teams-deletepreviewteam-helper')->inContentLanguage()->parse() . '</td> </tr> <tr> <td> </td> <td> <input type="submit" name="deletepreviewbutton" value="' . wfMessage('createteams-delete-teams-preview-button')->inContentLanguage()->text() . '"> </td> <td class="input-helper">' . wfMessage('createteams-delete-teams-deletebutton-helper')->inContentLanguage()->parse() . '</td> </tr> </table> </form>'; $output->addHTML($deleteForm); if ($request->getBool('deletebutton')) { if ($reqDeleteteam == '') { $e = wfMessage('createteams-delete-teams-error-team-name-empty')->inContentLanguage()->text(); } else { foreach (array_keys($this->templates) as $prefix) { $deltemplate[$prefix] = "Template:{$prefix}/" . strtolower($reqDeleteteam); } foreach ($deltemplate as $value) { $title = Title::newFromText($value); $page = WikiPage::factory($title); $id = $page->getId(); $errors = $title->getUserPermissionsErrors('delete', $wgUser); if (count($errors)) { $e .= '*' . wfMessage('createteams-delete-error-permission')->params($value)->inContentLanguage()->text() . "\n"; } else { if (!$title->exists()) { $e .= '*' . wfMessage('createteams-delete-error-does-not-exist')->params($value)->inContentLanguage()->text() . "\n"; } else { if ($page->doDeleteArticle(wfMessage('createteams-delete-summary-deletion')->inContentLanguage()->text(), false, $id, '', $wgUser)) { $log .= '*' . wfMessage('createteams-delete-log-deletion-success')->params($value)->inContentLanguage()->text() . "\n"; } else { $e .= '*' . wfMessage('createteams-delete-error-deletion')->params($value)->inContentLanguage()->text() . "\n"; } } } } } if ($e == '') { $report = $report = wfMessage('createteams-delete-teams-report-success')->params(htmlspecialchars($reqDeleteteam))->inContentLanguage()->text(); } else { $report = $e; } $report .= '<div class="log">' . "\n" . $log . '</div>'; $output->addWikiText('===' . wfMessage('createteams-report-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($report); } else { if ($request->getBool('deletepreviewbutton')) { if ($reqDeletepreviewteam == '') { $preview = wfMessage('createteams-delete-teams-error-team-name-empty')->inContentLanguage()->text(); } else { foreach (array_keys($this->templates) as $prefix) { $deltemplate[$prefix] = "Template:{$prefix}/" . strtolower($reqDeletepreviewteam); } foreach ($deltemplate as $value) { $title = Title::newFromText($value); $page = WikiPage::factory($title); $id = $page->getId(); $errors = $title->getUserPermissionsErrors('delete', $wgUser); if (count($errors)) { $preview .= '*' . wfMessage('createteams-delete-error-permission')->params($value)->inContentLanguage()->text() . "\n"; } else { if (!$title->exists()) { $preview .= '*' . wfMessage('createteams-delete-error-does-not-exist')->params($value)->inContentLanguage()->text() . "\n"; } else { $preview .= '*' . wfMessage('createteams-delete-teams-preview-deletion')->params($value)->inContentLanguage()->text() . "\n"; } } } } $output->addWikiText('===' . wfMessage('createteams-preview-heading')->inContentLanguage()->text() . '==='); $output->addWikiText($preview); if ($reqDeletepreviewteam != '') { $deleteConfirmForm = '<form name="delete-confirm-form" method="post"> <input type="text" name="deleteteam" value="' . $reqDeletepreviewteam . '" readonly> <input type="submit" name="deletebutton" value="' . wfMessage('createteams-delete-teams-delete-button')->inContentLanguage()->text() . '"> <p class="warning">' . wfMessage('createteams-delete-teams-warning-deletion')->params($value)->inContentLanguage()->text() . '</p> </form>'; $output->addWikiText('===' . wfMessage('createteams-delete-teams-confirm-deletion-heading')->inContentLanguage()->text() . '==='); $output->addHTML($deleteConfirmForm); } } } } }
/** * @param Title $current * @param Title $target * @param string $reason * @param bool $createRedirect * @return bool Success */ private function movePage(Title $current, Title $target, $reason, $createRedirect) { $display = $current->getPrefixedText(); $targetDisplay = $target->getPrefixedText(); if ($this->dryrun) { $this->output("\"{$display}\" -> \"{$targetDisplay}\": DRY RUN, NOT MOVED\n"); $ok = 'OK'; } else { $mp = new MovePage($current, $target); $status = $mp->move($this->user, $reason, $createRedirect); $ok = $status->isOK() ? 'OK' : $status->getWikiText(false, false, 'en'); $this->output("\"{$display}\" -> \"{$targetDisplay}\": {$ok}\n"); } return $ok === 'OK'; }