Filip has uploaded a new change for review. ( 
https://gerrit.wikimedia.org/r/328494 )

Change subject: Added Main page unassign after deteling newsletter
......................................................................

Added Main page unassign after deteling newsletter

Main page's are now unassigned after newsletter deletion.

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/NewsletterStore.php
M includes/specials/SpecialNewsletterCreate.php
A maintenance/deleteUniqueIndex.php
M sql/nl_newsletters.sql
9 files changed, 50 insertions(+), 10 deletions(-)


  git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Newsletter 
refs/changes/94/328494/1

diff --git a/Newsletter.hooks.php b/Newsletter.hooks.php
index 79da03f..2d7e22d 100755
--- a/Newsletter.hooks.php
+++ b/Newsletter.hooks.php
@@ -222,7 +222,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 21a59d1..5e3c298 100755
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -22,6 +22,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 6e2da62..820ca56 100644
--- a/i18n/qqq.json
+++ b/i18n/qqq.json
@@ -29,6 +29,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..624bc35 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/NewsletterStore.php b/includes/NewsletterStore.php
index 1605601..51b5936 100644
--- a/includes/NewsletterStore.php
+++ b/includes/NewsletterStore.php
@@ -249,7 +249,7 @@
         * @throws MWException
         */
        public function newsletterExistsForMainPage( $mainPageId ) {
-               return $this->db->newsletterExistsWithName( $mainPageId );
+               return $this->db->newsletterExistsForMainPage( $mainPageId );
        }
 
        /**
diff --git a/includes/specials/SpecialNewsletterCreate.php 
b/includes/specials/SpecialNewsletterCreate.php
index f6419d5..f6f4441 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/maintenance/deleteUniqueIndex.php 
b/maintenance/deleteUniqueIndex.php
new file mode 100644
index 0000000..5c33e5f
--- /dev/null
+++ b/maintenance/deleteUniqueIndex.php
@@ -0,0 +1,28 @@
+<?php
+
+$basePath = getenv( 'MW_INSTALL_PATH' ) !== false ? getenv( 'MW_INSTALL_PATH' 
) : __DIR__ . '/../../..';
+
+require_once $basePath . '/maintenance/Maintenance.php';
+
+/**
+ * @author Filip
+ */
+class DeleteUniqueIndex extends Maintenance {
+
+       public function __construct() {
+               parent::__construct();
+               $this->addDescription(
+                       "Removes UNIQUE index from nl_main_page_id" );
+
+               $this->requireExtension( 'Newsletter' );
+       }
+
+       public function execute() {
+               $dbw = $this->getDB( DB_MASTER );
+               $dbw->execute('DROP INDEX nl_main_page_id ON nl_newsletters', 
__METHOD__);
+               $this->output( "Done!\n" );
+       }
+}
+
+$maintClass = "DeleteUniqueIndex";
+require_once RUN_MAINTENANCE_IF_MAIN;
diff --git a/sql/nl_newsletters.sql b/sql/nl_newsletters.sql
index 8e54a55..c7ed2d0 100644
--- a/sql/nl_newsletters.sql
+++ b/sql/nl_newsletters.sql
@@ -5,7 +5,7 @@
        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*/;
 

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I3ce5df266e2b1edfd571a0708c72a25881b71578
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Newsletter
Gerrit-Branch: master
Gerrit-Owner: Filip <[email protected]>

_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to