jenkins-bot has submitted this change and it was merged. ( 
https://gerrit.wikimedia.org/r/328494 )

Change subject: Unassign main page from newsletter upon deletion of page
......................................................................


Unassign main page from newsletter upon deletion of page

Main page is now unassigned after deleting newsletter

Bug: T153690
Change-Id: I3ce5df266e2b1edfd571a0708c72a25881b71578
---
M Newsletter.hooks.php
M i18n/en.json
M i18n/qqq.json
M includes/NewsletterDb.php
M includes/NewsletterEditPage.php
M includes/specials/SpecialNewsletterCreate.php
A sql/nl_main_page_id-drop-index.sql
A sql/nl_newsletters-add-unique.sql
M sql/nl_newsletters.sql
9 files changed, 28 insertions(+), 10 deletions(-)

Approvals:
  Reedy: Looks good to me, approved
  jenkins-bot: Verified



diff --git a/Newsletter.hooks.php b/Newsletter.hooks.php
index 79da03f..3c74ba5 100755
--- a/Newsletter.hooks.php
+++ b/Newsletter.hooks.php
@@ -84,6 +84,8 @@
                $updater->addExtensionTable( 'nl_subscriptions', __DIR__ . 
'/sql/nl_subscriptions.sql' );
                $updater->addExtensionTable( 'nl_publishers', __DIR__ . 
'/sql/nl_publishers.sql' );
                $updater->addExtensionField( 'nl_newsletters', 'nl_active', 
__DIR__ . '/sql/nl_newsletters-add-active.sql' );
+               $updater->dropExtensionIndex( 'nl_newsletters', 
'nl_main_page_id', __DIR__ . '/sql/nl_main_page_id-drop-index.sql' );
+               $updater->addExtensionIndex( 'nl_newsletters', 
'nl_main_page_active', __DIR__ . '/sql/nl_newsletters-add-unique.sql' );
 
                return true;
        }
@@ -222,7 +224,15 @@
                        if ( !$newsletter->canRestore( $user ) ) {
                                throw new PermissionsError( 
'newsletter-restore' );
                        }
-                       $success = 
NewsletterStore::getDefaultInstance()->restoreNewsletter( $newsletterName );
+                       $store = NewsletterStore::getDefaultInstance();
+                       $rows = $store->newsletterExistsForMainPage( 
$newsletter->getPageId() );
+
+                       foreach ( $rows as $row ) {
+                               if ( (int)$row->nl_main_page_id === 
$newsletter->getPageId() && (int)$row->nl_active === 1 ) {
+                                       throw new ErrorPageError( 
'newsletter-mainpage-in-use','newsletter-mainpage-in-use' );
+                               }
+                       }
+                       $success = $store->restoreNewsletter( $newsletterName );
                        if ( $success ) {
                                return true;
                        }
diff --git a/i18n/en.json b/i18n/en.json
index 71ff0f0..422d9db 100644
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -23,6 +23,7 @@
        "newsletter-create-mainpage-error": "Invalid newsletter main page 
entered. Please try again.",
        "newsletter-mainpage-non-existent": "The newsletter main page does not 
exist. Please enter a valid existing page.",
        "newsletter-mainpage-in-use": "An existing newsletter has the same main 
page. Please enter another title.",
+       "newsletter-mainpage-in-use-title": "An existing newsletter has the 
same main page.",
        "newsletter-create-short-description-error": "The description is too 
short (less than 30 characters). Please try again.",
        "newsletter-subtitlelinks-list": "List of newsletters",
        "newsletter-subtitlelinks-create": "Create a new newsletter",
diff --git a/i18n/qqq.json b/i18n/qqq.json
index 41173b1..633a18b 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -30,6 +30,7 @@
        "newsletter-create-mainpage-error": "Error message shown on 
[[Special:CreateNewsletter]] if the page entered on main page field does not 
exist.",
        "newsletter-mainpage-non-existent": "Error message shown if the 
newsletter main page doesn't exist.",
        "newsletter-mainpage-in-use": "Error message shown if the newsletter's 
main page is already in use by another newsletter.",
+       "newsletter-mainpage-in-use-title": "Title for 
\"newsletter-mainpage-in-use\"",
        "newsletter-create-short-description-error": "Error message shown on 
[[Special:CreateNewsletter]] if the text entered in the description field is 
too short.",
        "newsletter-subtitlelinks-list": "Label for link to 
[[Special:Newsletters]] shown under the header on Newsletter special 
pages.\n\nSee also:\n* {{msg-mw|newsletter-subtitlelinks-create}}",
        "newsletter-subtitlelinks-create": "Label for link to 
[[Special:CreateNewsletter]] shown under the header on Newsletter special 
pages.\n\nSee also:\n* {{msg-mw|newsletter-subtitlelinks-list}}",
diff --git a/includes/NewsletterDb.php b/includes/NewsletterDb.php
index 3564ac3..3faf358 100644
--- a/includes/NewsletterDb.php
+++ b/includes/NewsletterDb.php
@@ -444,7 +444,7 @@
 
                $res = $dbr->select(
                        'nl_newsletters',
-                       array( 'nl_main_page_id' ),
+                       array( 'nl_main_page_id', 'nl_active' ),
                        array( 'nl_main_page_id' => $mainPageId )
                );
 
diff --git a/includes/NewsletterEditPage.php b/includes/NewsletterEditPage.php
index 6c51d7f..0532f34 100644
--- a/includes/NewsletterEditPage.php
+++ b/includes/NewsletterEditPage.php
@@ -208,11 +208,12 @@
                $dbr = wfGetDB( DB_SLAVE );
                $rows = $dbr->select(
                        'nl_newsletters',
-                       array( 'nl_name', 'nl_main_page_id' ),
+                       array( 'nl_name', 'nl_main_page_id', 'nl_active' ),
                        $dbr->makeList(
                                array(
                                        'nl_name' => $data['Name'],
                                        'nl_main_page_id' => $mainPageId,
+                                       'nl_active' => 1
                                ),
                                LIST_OR
                        )
@@ -221,7 +222,7 @@
                foreach ( $rows as $row ) {
                        if ( $row->nl_name === $data['Name'] ) {
                                return Status::newFatal( 
'newsletter-exist-error', $data['Name'] );
-                       } elseif ( (int)$row->nl_main_page_id === $mainPageId ) 
{
+                       } elseif ( (int)$row->nl_main_page_id === $mainPageId  
&& (int)$row->nl_active === 1 ) {
                                return Status::newFatal( 
'newsletter-mainpage-in-use' );
                        }
                }
@@ -315,7 +316,7 @@
                if ( $oldMainPage != $mainPageId ) {
                        $rows = $store->newsletterExistsForMainPage( 
$mainPageId );
                        foreach ( $rows as $row ) {
-                               if ( (int)$row->nl_main_page_id === $mainPageId 
 ) {
+                               if ( (int)$row->nl_main_page_id === $mainPageId 
&& (int)$row->nl_active === 1 ) {
                                        return Status::newFatal( 
'newsletter-mainpage-in-use' );
                                }
                        }
@@ -423,4 +424,4 @@
                return $ids;
        }
 
-}
\ No newline at end of file
+}
diff --git a/includes/specials/SpecialNewsletterCreate.php 
b/includes/specials/SpecialNewsletterCreate.php
index f6419d5..a264ef9 100644
--- a/includes/specials/SpecialNewsletterCreate.php
+++ b/includes/specials/SpecialNewsletterCreate.php
@@ -90,11 +90,12 @@
                $dbr = wfGetDB( DB_SLAVE );
                $rows = $dbr->select(
                        'nl_newsletters',
-                       array( 'nl_name', 'nl_main_page_id' ),
+                       array( 'nl_name', 'nl_main_page_id', 'nl_active' ),
                        $dbr->makeList(
                                array(
                                        'nl_name' => $data['Name'],
                                        'nl_main_page_id' => $mainPageId,
+                                       'nl_active' => 1
                                 ),
                                 LIST_OR
                        )
@@ -103,7 +104,7 @@
                foreach ( $rows as $row ) {
                        if ( $row->nl_name === $data['Name'] ) {
                                return Status::newFatal( 
'newsletter-exist-error', $data['Name'] );
-                       } elseif ( (int)$row->nl_main_page_id === $mainPageId ) 
{
+                       } elseif ( (int)$row->nl_main_page_id === $mainPageId  
&& (int)$row->nl_active === 1 ) {
                                return Status::newFatal( 
'newsletter-mainpage-in-use' );
                        }
                }
diff --git a/sql/nl_main_page_id-drop-index.sql 
b/sql/nl_main_page_id-drop-index.sql
new file mode 100644
index 0000000..3e5c2cc
--- /dev/null
+++ b/sql/nl_main_page_id-drop-index.sql
@@ -0,0 +1,2 @@
+-- Remove UNIQUE Index on nl_newsletters.nl_main_page_id
+DROP INDEX /*i*/nl_main_page_id ON /*_*/nl_newsletters;
diff --git a/sql/nl_newsletters-add-unique.sql 
b/sql/nl_newsletters-add-unique.sql
new file mode 100644
index 0000000..7da9c21
--- /dev/null
+++ b/sql/nl_newsletters-add-unique.sql
@@ -0,0 +1,2 @@
+-- Creates combined UNIQUE index in table nl_newsletters (nl_main_page_id, 
nl_active)
+CREATE UNIQUE INDEX /*i*/nl_main_page_active ON /*_*/nl_newsletters 
(nl_main_page_id, nl_active);
diff --git a/sql/nl_newsletters.sql b/sql/nl_newsletters.sql
index 8e54a55..5571416 100644
--- a/sql/nl_newsletters.sql
+++ b/sql/nl_newsletters.sql
@@ -5,9 +5,9 @@
        nl_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT,
        nl_name varchar(64) NOT NULL,
        nl_desc blob,
-       nl_main_page_id int unsigned NOT NULL UNIQUE,
+       nl_main_page_id int unsigned NOT NULL,
        nl_active boolean NOT NULL DEFAULT 1
 )/*$wgDBTableOptions*/;
 
 CREATE UNIQUE INDEX /*i*/nl_name ON /*_*/nl_newsletters (nl_name);
-CREATE INDEX /*i*/nl_active ON /*_*/nl_newsletters (nl_active);
+CREATE UNIQUE INDEX /*i*/nl_main_page_active ON /*_*/nl_newsletters 
(nl_main_page_id, nl_active);

-- 
To view, visit https://gerrit.wikimedia.org/r/328494
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: I3ce5df266e2b1edfd571a0708c72a25881b71578
Gerrit-PatchSet: 16
Gerrit-Project: mediawiki/extensions/Newsletter
Gerrit-Branch: master
Gerrit-Owner: Filip <r...@protonmail.com>
Gerrit-Reviewer: 01tonythomas <01tonytho...@gmail.com>
Gerrit-Reviewer: Addshore <addshorew...@gmail.com>
Gerrit-Reviewer: Filip <r...@protonmail.com>
Gerrit-Reviewer: Reedy <re...@wikimedia.org>
Gerrit-Reviewer: Siebrand <siebr...@kitano.nl>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to