MtDu has uploaded a new change for review. https://gerrit.wikimedia.org/r/320370
Change subject: [WIP] Implement Undeleting a newsletter from the Logs ...................................................................... [WIP] Implement Undeleting a newsletter from the Logs Bug: T150125 Change-Id: Iba80892b596c46782aabffc1ed638132d7990503 --- M Newsletter.hooks.php M extension.json M i18n/en.json M i18n/qqq.json M includes/Newsletter.php M includes/NewsletterDb.php M includes/logging/NewsletterLogger.php 7 files changed, 82 insertions(+), 2 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Newsletter refs/changes/70/320370/1 diff --git a/Newsletter.hooks.php b/Newsletter.hooks.php index 4536962..241217f 100755 --- a/Newsletter.hooks.php +++ b/Newsletter.hooks.php @@ -208,4 +208,32 @@ } return true; } + + /** + * @param PageArchive $archive + * @param Title $title + */ + public static function onUndeleteForm( PageArchive &$archive, Title $title ) { + if ($title->inNamespace( NS_NEWSLETTER )) { + $store = NewsletterStore::getDefaultInstance(); + $store->restoreNewsletter( $title->getText() ); + } + $newsletter = Newsletter::newFromName( $title->getText() ); + if ( $newsletter ) { + if ( !$newsletter->canRestore( $user ) ) { + throw new PermissionsError( 'newsletter-restore' ); + } + $success = NewsletterStore::getDefaultInstance() + ->restoreNewsletter( $newsletter, $reason ); + if ( $success ) { + return $status->newGood(); + } else { + // Show error message and allow resubmitting in case of failure + return $status->newFatal( + $wgOut->msg( 'newsletter-restore-failure' )->rawParams( $newsletter->getName() ) + ); + } + } + return true; + } } diff --git a/extension.json b/extension.json index 5dcdb01..ab72928 100644 --- a/extension.json +++ b/extension.json @@ -161,6 +161,9 @@ ], "ArticleDelete": [ "NewsletterHooks::onArticleDelete" + ], + "UndeleteForm::undelete": [ + "NewsletterHooks::onUndeleteForm" ] }, "namespaces": [ diff --git a/i18n/en.json b/i18n/en.json index 1c348bd..7557689 100755 --- a/i18n/en.json +++ b/i18n/en.json @@ -148,11 +148,13 @@ "logentry-newsletter-publisher-removed": "$1 {{GENDER:$2|removed}} {{GENDER:$6|$3}} as a publisher on newsletter $4", "logentry-newsletter-newsletter-added": "$1 {{GENDER:$2|created}} newsletter $4", "logentry-newsletter-newsletter-removed": "$1 {{GENDER:$2|deleted}} newsletter $4", + "logentry-newsletter-newsletter-restored": "$1 {{GENDER:$2|restored}} newsletter $4", "logentry-newsletter-issue-added": "$1 {{GENDER:$2|published}} a new issue of $4 newsletter at $6", "log-action-filter-newsletter": "Type of action:", "log-action-filter-newsletter-publisher-added": "Publisher addition", "log-action-filter-newsletter-publisher-removed": "Publisher removal", "log-action-filter-newsletter-newsletter-added": "Newsletter creation", "log-action-filter-newsletter-newsletter-removed": "Newsletter deletion", - "log-action-filter-newsletter-issue-added": "New issue announcements" + "log-action-filter-newsletter-issue-added": "New issue announcements", + "newsletter-restore-failure": "\"$1\" newsletter could not be restored. Please try again." } diff --git a/i18n/qqq.json b/i18n/qqq.json index 2849c90..790cab8 100644 --- a/i18n/qqq.json +++ b/i18n/qqq.json @@ -155,11 +155,13 @@ "logentry-newsletter-publisher-removed": "{{logentry}}\n\nAdditional parameters:\n* $4 - the newsletter affected by the action\n* $6 - unused, or the full user name that was removed, whose display name is on $3 (to be used with GENDER)", "logentry-newsletter-newsletter-added": "{{logentry}}\n\nAdditional parameters:\n* $4 - the newsletter affected by the action", "logentry-newsletter-newsletter-removed": "{{logentry}}\n\nAdditional parameters:\n* $4 - the newsletter affected by the action", + "logentry-newsletter-newsletter-restored": "{{logentry}}\n\nAdditional parameters:\n* $4 - the newsletter affected by the action", "logentry-newsletter-issue-added": "{{logentry}}\n\nAdditional parameters:\n* $4 - the newsletter affected by the action\n* $5 - ID of the issue (unused) \n* $6 - link to the issue page", "log-action-filter-newsletter": "{{doc-log-action-filter-type|newsletter}}", "log-action-filter-newsletter-publisher-added": "{{doc-log-action-filter-action|newsletter|publisher-added}}", "log-action-filter-newsletter-publisher-removed": "{{doc-log-action-filter-action|newsletter|publisher-removed}}", "log-action-filter-newsletter-newsletter-added": "{{doc-log-action-filter-action|newsletter|newsletter-added}}", "log-action-filter-newsletter-newsletter-removed": "{{doc-log-action-filter-action|newsletter|newsletter-removed}}", - "log-action-filter-newsletter-issue-added": "{{doc-log-action-filter-action|newsletter|issue-added}}" + "log-action-filter-newsletter-issue-added": "{{doc-log-action-filter-action|newsletter|issue-added}}", + "newsletter-restore-failure": "Error message shown on title=Special:Undelete&target=Newsletter<id>&action=submit when the newsletter restoration fails.\n\nParameters:\n* $1 - Newsletter name" } diff --git a/includes/Newsletter.php b/includes/Newsletter.php index a630511..f72c0db 100644 --- a/includes/Newsletter.php +++ b/includes/Newsletter.php @@ -237,4 +237,15 @@ public function canManage( User $user ) { return $this->isPublisher( $user ) || $user->isAllowed( 'newsletter-manage' ); } + + /** + * Check whether the user is allowed to restore the newsletter. + * + * @param User $user + * + * @return bool + */ + public function canRestore( User $user ) { + return $this->isPublisher( $user ) || $user->isAllowed( 'newsletter-restore' ); + } } diff --git a/includes/NewsletterDb.php b/includes/NewsletterDb.php index b260a2a..6412034 100644 --- a/includes/NewsletterDb.php +++ b/includes/NewsletterDb.php @@ -240,6 +240,29 @@ } /** + * Set an inactive newsletter to active again + * + * @param string $newsletterName + * + * @return bool success of the action + */ + public function restoreNewsletter( $newsletterName ) { + $dbw = $this->lb->getConnection( DB_MASTER ); + + $dbw->update( + 'nl_newsletters', + array( 'nl_active' => 1 ), + array( 'nl_name' => $getNewsletterFromName ), + __METHOD__ + ); + $success = (bool)$dbw->affectedRows(); + + $this->lb->reuseConnection( $dbw ); + + return $success; + } + + /** * @param int $id * * @return Newsletter|null null if no newsletter exists with the provided id diff --git a/includes/logging/NewsletterLogger.php b/includes/logging/NewsletterLogger.php index 5a798fb..4a1a5e7 100644 --- a/includes/logging/NewsletterLogger.php +++ b/includes/logging/NewsletterLogger.php @@ -43,6 +43,17 @@ public function logNewsletterDeleted( Newsletter $newsletter, $reason ) { $id = $newsletter->getId(); + $log = new ManualLogEntry( 'newsletter', 'newsletter-restored' ); + $log->setPerformer( RequestContext::getMain()->getUser() ); + $log->setTarget( SpecialPage::getTitleFor( 'Newsletter', $id ) ); + $log->setParameters( [ '4:newsletter-link:nl_id' => "$id:{$newsletter->getName()}" ] ); + $log->setComment( $reason ); + $log->setRelations( [ 'nl_id' => $id ] ); + $log->publish( $log->insert() ); + } + + public function logNewsletterRestored( Newsletter $newsletter, $reason ) { + $id = $newsletter->getId(); $log = new ManualLogEntry( 'newsletter', 'newsletter-removed' ); $log->setPerformer( RequestContext::getMain()->getUser() ); $log->setTarget( SpecialPage::getTitleFor( 'Newsletter', $id ) ); -- To view, visit https://gerrit.wikimedia.org/r/320370 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Iba80892b596c46782aabffc1ed638132d7990503 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/Newsletter Gerrit-Branch: master Gerrit-Owner: MtDu <justin.d...@gmail.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits