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