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

Change subject: Publisher add/remove functions now take user ids array
......................................................................

Publisher add/remove functions now take user ids array

Bug: T183658
Change-Id: Iec336c09248ed68dbb6f65e7cf29c416fc017844
---
M includes/NewsletterDb.php
M includes/NewsletterEditPage.php
M includes/NewsletterStore.php
M includes/content/NewsletterDataUpdate.php
M tests/NewsletterDbTest.php
5 files changed, 36 insertions(+), 39 deletions(-)


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

diff --git a/includes/NewsletterDb.php b/includes/NewsletterDb.php
index 90e3d8d..46d40bc 100644
--- a/includes/NewsletterDb.php
+++ b/includes/NewsletterDb.php
@@ -88,15 +88,19 @@
 
        /**
         * @param Newsletter $newsletter
-        * @param User $user
+        * @param array $userIds
         *
         * @return bool success of the action
         */
-       public function addPublisher( Newsletter $newsletter, User $user ) {
-               $rowData = [
-                       'nlp_newsletter_id' => $newsletter->getId(),
-                       'nlp_publisher_id' => $user->getId(),
-               ];
+       public function addPublisher( Newsletter $newsletter, $userIds ) {
+               $newsletterId = $newsletter->getId();
+               $rowData = [];
+               foreach ( $userIds as $userId ) {
+                       $rowData[] = [
+                               'nlp_newsletter_id' => $newsletterId,
+                               'nlp_publisher_id' => $userId
+                       ];
+               }
 
                $dbw = $this->lb->getConnection( DB_MASTER );
                $dbw->insert( 'nl_publishers', $rowData, __METHOD__, [ 'IGNORE' 
] );
@@ -109,14 +113,14 @@
 
        /**
         * @param Newsletter $newsletter
-        * @param User $user
+        * @param array $userIds
         *
         * @return bool success of the action
         */
-       public function removePublisher( Newsletter $newsletter, User $user ) {
+       public function removePublisher( Newsletter $newsletter, $userIds ) {
                $rowData = [
                        'nlp_newsletter_id' => $newsletter->getId(),
-                       'nlp_publisher_id' => $user->getId(),
+                       'nlp_publisher_id' => $userIds
                ];
 
                $dbw = $this->lb->getConnection( DB_MASTER );
diff --git a/includes/NewsletterEditPage.php b/includes/NewsletterEditPage.php
index 4c0a14f..88480a7 100644
--- a/includes/NewsletterEditPage.php
+++ b/includes/NewsletterEditPage.php
@@ -317,7 +317,8 @@
                        );
                        if ( $result->isGood() ) {
                                $this->newsletter->subscribe( $this->user );
-                               
NewsletterStore::getDefaultInstance()->addPublisher( $this->newsletter, 
$this->user );
+                               $store = NewsletterStore::getDefaultInstance();
+                               $store->addPublisher( $this->newsletter, [ 
$this->user->getId() ] );
                                $this->out->addWikiMsg( 
'newsletter-create-confirmation', $this->newsletter->getName() );
                                return Status::newGood();
                        } else {
@@ -413,10 +414,7 @@
 
                // Check if people has been added
                if ( $added ) {
-                       // @todo Do this in a batch..
-                       foreach ( $added as $auId ) {
-                               $store->addPublisher( $this->newsletter, 
User::newFromId( $auId ) );
-                       }
+                       $store->addPublisher( $this->newsletter, $added );
                        // Adds the new publishers to subscription list
                        $store->addSubscription( $this->newsletter, $added );
                        $this->newsletter->notifyPublishers(
@@ -424,11 +422,9 @@
                        );
                }
 
-               // Check if people has been removed
+               // Check if people have been removed
                if ( $removed ) {
-                       foreach ( $removed as $ruId ) {
-                               $store->removePublisher( $this->newsletter, 
User::newFromId( $ruId ) );
-                       }
+                       $store->removePublisher( $this->newsletter, $removed );
                        $this->newsletter->notifyPublishers(
                                $removed, $user, 
Newsletter::NEWSLETTER_PUBLISHERS_REMOVED
                        );
diff --git a/includes/NewsletterStore.php b/includes/NewsletterStore.php
index c76221d..ecedf22 100644
--- a/includes/NewsletterStore.php
+++ b/includes/NewsletterStore.php
@@ -65,28 +65,32 @@
 
        /**
         * @param Newsletter $newsletter
-        * @param User $user
+        * @param array $userIds
         *
         * @return bool success of the action
         */
-       public function addPublisher( Newsletter $newsletter, User $user ) {
-               $success = $this->db->addPublisher( $newsletter, $user );
+       public function addPublisher( Newsletter $newsletter, $userIds ) {
+               $success = $this->db->addPublisher( $newsletter, $userIds );
                if ( $success ) {
-                       $this->logger->logPublisherAdded( $newsletter, $user );
+                       foreach ( $userIds as $userId ) {
+                               $this->logger->logPublisherAdded( $newsletter, 
User::newFromId( $userId ) );
+                       }
                }
                return $success;
        }
 
        /**
         * @param Newsletter $newsletter
-        * @param User $user
+        * @param array $userIds
         *
         * @return bool success of the action
         */
-       public function removePublisher( Newsletter $newsletter, User $user ) {
-               $success = $this->db->removePublisher( $newsletter, $user );
+       public function removePublisher( Newsletter $newsletter, $userIds ) {
+               $success = $this->db->removePublisher( $newsletter, $userIds );
                if ( $success ) {
-                       $this->logger->logPublisherRemoved( $newsletter, $user 
);
+                       foreach ( $userIds as $userId ) {
+                               $this->logger->logPublisherRemoved( 
$newsletter, User::newFromId( $userId ) );
+                       }
                }
                return $success;
        }
diff --git a/includes/content/NewsletterDataUpdate.php 
b/includes/content/NewsletterDataUpdate.php
index 76a61ee..1f08dd0 100644
--- a/includes/content/NewsletterDataUpdate.php
+++ b/includes/content/NewsletterDataUpdate.php
@@ -122,24 +122,17 @@
                $added = array_diff( $updatedPublishersIds, $oldPublishersIds );
                $removed = array_diff( $oldPublishersIds, $updatedPublishersIds 
);
 
-               // Check if people has been added
+               // Check if people have been added
                if ( $added ) {
-                       // @todo Do this in a batch..
-                       foreach ( $added as $auId ) {
-                               $store->addPublisher( $newsletter, 
User::newFromId( $auId ) );
-                       }
-                       // Adds the new publishers to subscription list
-                       $store->addSubscription( $newsletter, $added );
+                       $store->addPublisher( $newsletter, $added );
                        $this->newsletter->notifyPublishers(
                                $added, $user, 
Newsletter::NEWSLETTER_PUBLISHERS_ADDED
                        );
                }
 
-               // Check if people has been removed
+               // Check if people have been removed
                if ( $removed ) {
-                       foreach ( $removed as $ruId ) {
-                               $store->removePublisher( $newsletter, 
User::newFromId( $ruId ) );
-                       }
+                       $store->removePublisher( $newsletter, $added );
                        $this->newsletter->notifyPublishers(
                                $removed, $user, 
Newsletter::NEWSLETTER_PUBLISHERS_REMOVED
                        );
diff --git a/tests/NewsletterDbTest.php b/tests/NewsletterDbTest.php
index 7c996aa..0fb4e5a 100644
--- a/tests/NewsletterDbTest.php
+++ b/tests/NewsletterDbTest.php
@@ -123,7 +123,7 @@
                        ->method( 'insert' )
                        ->with(
                                'nl_publishers',
-                               [ 'nlp_newsletter_id' => 1, 'nlp_publisher_id' 
=> $user->getId() ]
+                               [ [ 'nlp_newsletter_id' => 1, 
'nlp_publisher_id' => $user->getId() ] ]
                        );
                $mockWriteDb
                        ->expects( $this->once() )
@@ -132,7 +132,7 @@
 
                $table = new NewsletterDb( $this->getMockLoadBalancer( 
$mockWriteDb ) );
 
-               $result = $table->addPublisher( $this->getTestNewsletter(), 
$user );
+               $result = $table->addPublisher( $this->getTestNewsletter(), [ 
$user->getId() ] );
 
                $this->assertTrue( $result );
        }

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

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

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

Reply via email to