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 <[email protected]>
Gerrit-Reviewer: 01tonythomas <[email protected]>
Gerrit-Reviewer: Addshore <[email protected]>
Gerrit-Reviewer: Filip <[email protected]>
Gerrit-Reviewer: Reedy <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits