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