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

Reply via email to