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 <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits