Addshore has uploaded a new change for review.

  https://gerrit.wikimedia.org/r/234522

Change subject: Implement PublishersTable
......................................................................

Implement PublishersTable

Change-Id: I136a87b88d838af059f64412b649c7f44782ffac
---
M extension.json
M includes/api/ApiNewsletterManage.php
A includes/db/PublishersTable.php
M includes/specials/SpecialNewsletterCreate.php
M includes/specials/SpecialNewsletterManage.php
5 files changed, 94 insertions(+), 45 deletions(-)


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

diff --git a/extension.json b/extension.json
index cac9a45..0e1447f 100644
--- a/extension.json
+++ b/extension.json
@@ -37,6 +37,7 @@
                "ApiNewsletter": "includes/api/ApiNewsletter.php",
                "ApiNewsletterManage": "includes/api/ApiNewsletterManage.php",
                "SubscriptionsTable": "includes/db/SubscriptionsTable.php",
+               "PublishersTable": "includes/db/PublishersTable.php",
                "EchoNewsletterFormatter": 
"includes/EchoNewsletterFormatter.php"
        },
        "ResourceModules": {
diff --git a/includes/api/ApiNewsletterManage.php 
b/includes/api/ApiNewsletterManage.php
index 2c10f8c..966df27 100644
--- a/includes/api/ApiNewsletterManage.php
+++ b/includes/api/ApiNewsletterManage.php
@@ -15,13 +15,13 @@
                        $this->dieUsage( 'You must be logged-in to interact 
with newsletters', 'notloggedin' );
                }
 
-               $dbw = wfGetDB( DB_MASTER );
+               //TODO should probably do something ehere depending on the 
result..
                if ( $this->getMain()->getVal( 'todo' ) === 'removepublisher' ) 
{
-                       $rowData = array(
-                               'newsletter_id' => $this->getMain()->getVal( 
'newsletterId' ),
-                               'publisher_id' => $this->getMain()->getVal( 
'publisher' ),
+                       $publishersTable = 
PublishersTable::newFromGlobalState();
+                       $publishersTable->removePublisher(
+                               $this->getMain()->getVal( 'publisher' ),
+                               $this->getMain()->getVal( 'newsletterId' )
                        );
-                       $dbw->delete( 'nl_publishers', $rowData, __METHOD__ );
                }
        }
 
diff --git a/includes/db/PublishersTable.php b/includes/db/PublishersTable.php
new file mode 100644
index 0000000..22528c3
--- /dev/null
+++ b/includes/db/PublishersTable.php
@@ -0,0 +1,74 @@
+<?php
+
+/**
+ * @license GNU GPL v2+
+ * @author Adam Shorland
+ */
+class PublishersTable {
+
+       private $readDb;
+       private $writeDb;
+
+       public function __construct( IDatabase $readDb, IDatabase $writeDb ) {
+               $this->readDb = $readDb;
+               $this->writeDb = $writeDb;
+       }
+
+       public static function newFromGlobalState() {
+               return new self( wfGetDB( DB_SLAVE ), wfGetDB( DB_MASTER ) );
+       }
+
+       /**
+        * @param int $userId
+        * @param int $newsletterId
+        *
+        * @return bool success of the action
+        */
+       public function addPublisher( $userId, $newsletterId ) {
+               $rowData = array(
+                       'newsletter_id' => $newsletterId,
+                       'publisher_id' =>$userId,
+               );
+               try{
+                       return $this->writeDb->insert( 'nl_publishers', 
$rowData, __METHOD__ );
+               } catch ( DBQueryError $ex ) {
+                       return false;
+               }
+       }
+
+       /**
+        * @param int $userId
+        * @param int $newsletterId
+        *
+        * @return bool success of the action
+        */
+       public function removePublisher( $userId, $newsletterId ) {
+               $rowData = array(
+                       'newsletter_id' => $newsletterId,
+                       'publisher_id' => $userId,
+               );
+               return $this->writeDb->delete( 'nl_publishers', $rowData, 
__METHOD__ );
+       }
+
+       /**
+        * @param int $userId
+        *
+        * @return int[]
+        */
+       public function getNewsletterIdsForPublisher( $userId ) {
+               $res = $this->readDb->select(
+                       'nl_publishers',
+                       array( 'newsletter_id' ),
+                       array( 'publisher_id' => $userId ),
+                       __METHOD__
+               );
+
+               $newsletterIds = array();
+               foreach ( $res as $row ) {
+                       $newsletterIds[] = $row->newsletter_id;
+               }
+
+               return $newsletterIds;
+       }
+
+}
diff --git a/includes/specials/SpecialNewsletterCreate.php 
b/includes/specials/SpecialNewsletterCreate.php
index 94700c7..88c5fc2 100644
--- a/includes/specials/SpecialNewsletterCreate.php
+++ b/includes/specials/SpecialNewsletterCreate.php
@@ -139,21 +139,13 @@
         *
         * @param int $newsletterId Id of the newsletter
         * @param int $ownerId User Id of the owner
-        * @return bool
         */
        private function autoSubscribe( $newsletterId, $ownerId ) {
-               $dbw = wfGetDB( DB_MASTER );
-               // add owner as a publisher
-               $pubRowData = array(
-                       'newsletter_id' => $newsletterId,
-                       'publisher_id' => $ownerId,
-               );
-               $dbw->insert( 'nl_publishers', $pubRowData, __METHOD__ );
+               $publishersTable = PublishersTable::newFromGlobalState();
+               $publishersTable->addPublisher( $ownerId, $newsletterId );
 
-               $table = SubscriptionsTable::newFromGlobalState();
-               $table->addSubscription( $ownerId, $newsletterId );
-
-               return true;
+               $subscriptionsTable = SubscriptionsTable::newFromGlobalState();
+               $subscriptionsTable->addSubscription( $ownerId, $newsletterId );
        }
 
 }
diff --git a/includes/specials/SpecialNewsletterManage.php 
b/includes/specials/SpecialNewsletterManage.php
index 9f7b3c6..299f34f 100644
--- a/includes/specials/SpecialNewsletterManage.php
+++ b/includes/specials/SpecialNewsletterManage.php
@@ -46,22 +46,16 @@
         */
        protected function getAnnounceFormFields() {
                $newsletterNames = array();
-               $newsletterIds = array();
                $ownedNewsletter = array();
                $defaultOption = array( '' => null );
                $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select(
-                       'nl_publishers',
-                       array( 'newsletter_id' ),
-                       array( 'publisher_id' => $this->getUser()->getId() ),
-                       __METHOD__
+
+               $publishersTable = PublishersTable::newFromGlobalState();
+               $userPublishedNewsletters = 
$publishersTable->getNewsletterIdsForPublisher(
+                       $this->getUser()->getId()
                );
 
-               foreach ( $res as $row ) {
-                       $newsletterIds[$row->newsletter_id] = 
$row->newsletter_id;
-               }
-
-               foreach ( $newsletterIds as $value ) {
+               foreach ( $userPublishedNewsletters as $value ) {
                        $resl = $dbr->select(
                                'nl_newsletters',
                                array( 'nl_name', 'nl_id' ),
@@ -208,26 +202,14 @@
                                return array( 
'newsletter-unconfirmed-email-error' );
                        }
 
-                       $dbww = wfGetDB( DB_MASTER );
-                       $rowData = array(
-                               'newsletter_id' => $pubNewsletterId,
-                               'publisher_id' => $user->getId(),
-                       );
-                       //Automatically subscribe publishers to the newsletter
-                       $subscribeRowData = array(
-                               'newsletter_id' => $pubNewsletterId,
-                               'subscriber_id' => $user->getId(),
-                       );
-                       try {
-                               $dbww->insert( 'nl_publishers', $rowData, 
__METHOD__ );
-                               $this->getOutput()->addWikiMsg( 
'newsletter-new-publisher-confirmation' );
-                       }
-                       catch ( DBQueryError $e ) {
-                               return array( 
'newsletter-invalid-username-error' );
-                       }
+                       $publishersTable = 
PublishersTable::newFromGlobalState();
+                       $publishersTable->addPublisher( $user->getId(), 
$pubNewsletterId );
+
                        $subscriptionsTable = 
SubscriptionsTable::newFromGlobalState();
                        $subscriptionsTable->addSubscription( $user->getId(), 
$pubNewsletterId );
 
+                       $this->getOutput()->addWikiMsg( 
'newsletter-new-publisher-confirmation' );
+
                        return true;
 
                }

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

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

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

Reply via email to