/** * Overrides content of parent page with contents of draft page * @param Title $draftTitle Title object of sub page (draft) * @throws PermissionsException */ private function approveDraft(Title $draftTitle) { // Get Title object of parent page $helper = new TemplateDraftHelper(); $parentTitle = $helper->getParentTitle($draftTitle); // Check edit rights if (!$parentTitle->userCan('templatedraft')) { throw new PermissionsException('edit'); } // Get contents of draft page $article = Article::newFromId($draftTitle->getArticleID()); $draftContent = $article->getContent(); // Get WikiPage object of parent page $page = WikiPage::newFromID($parentTitle->getArticleID()); // Save to parent page $page->doEdit($draftContent, wfMessage('templatedraft-approval-summary')->inContentLanguage()->plain()); // Remove Draft page $draftPage = WikiPage::newFromID($draftTitle->getArticleID()); $draftPage->doDeleteArticle(wfMessage('templatedraft-draft-removal-summary')->inContentLanguage()->plain()); // Show a confirmation message to a user after redirect BannerNotificationsController::addConfirmation(wfMessage('templatedraft-approval-success-confirmation')->escaped(), BannerNotificationsController::CONFIRMATION_CONFIRM, true); }
/** * Triggered if a user edits a Draft subpage of a template. * It adds an editintro message with help and links. * * @param Array $preloads * @param Title $title * @return bool */ public static function onEditPageLayoutShowIntro(&$preloads, Title $title) { if ($title->getNamespace() == NS_TEMPLATE) { if (TemplateDraftHelper::isTitleDraft($title)) { $base = Title::newFromText($title->getBaseText(), NS_TEMPLATE); $baseHelp = Title::newFromText('Help:PortableInfoboxes'); $preloads['EditPageIntro'] = ['content' => wfMessage('templatedraft-editintro')->rawParams(Xml::element('a', ['href' => $baseHelp->getFullURL(), 'target' => '_blank'], wfMessage('templatedraft-module-help')->plain()), Xml::element('a', ['href' => $base->getFullUrl(['action' => 'edit']), 'target' => '_blank'], wfMessage('templatedraft-module-view-parent')->plain()))->escaped()]; } elseif (!TemplateDraftHelper::titleHasPortableInfobox($title)) { $base = Title::newFromText($title->getBaseText() . '/' . wfMessage('templatedraft-subpage'), NS_TEMPLATE); $draftUrl = $base->getFullUrl(['action' => 'edit', TemplateConverter::CONVERSION_MARKER => 1]); $preloads['EditPageIntro'] = ['content' => wfMessage('templatedraft-module-editintro-please-convert')->rawParams(Xml::element('a', ['href' => $draftUrl, 'target' => '_blank'], wfMessage('templatedraft-module-button-create')->plain()))->escaped()]; } } return true; }
public static function isInfoboxTemplate(Title $title) { $namespace = $title->getNamespace(); if ($namespace === NS_TEMPLATE && class_exists('TemplateClassificationController')) { $tc = new TemplateClassificationController($title); return $tc->isType($tc::TEMPLATE_INFOBOX) || TemplateDraftHelper::isTitleDraft($title); } return false; }