Tinaj1234 has uploaded a new change for review.

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

Change subject: Replace drop down menus in Special:Newsletters with table
......................................................................

Replace drop down menus in Special:Newsletters with table

First version of table with two columns, name of newsletter and description
of the newsletter. New columns to be added in later patches.

Bug: T103813
Change-Id: Ic52ead998363dc0a8860fcdb5d46bb30ae590dc0
---
M Newsletter.php
M i18n/en.json
M includes/SpecialNewsletters.php
3 files changed, 50 insertions(+), 162 deletions(-)


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

diff --git a/Newsletter.php b/Newsletter.php
index 87b260b..d197eb0 100755
--- a/Newsletter.php
+++ b/Newsletter.php
@@ -30,6 +30,7 @@
 $wgAutoloadClasses['SpecialNewsletterManage'] = __DIR__ . 
'/includes/SpecialNewsletterManage.php';
 $wgAutoloadClasses['SpecialNewsletters'] = __DIR__ . 
'/includes/SpecialNewsletters.php';
 $wgAutoloadClasses['EchoNewsletterFormatter'] = __DIR__ . 
'/includes/EchoNewsletterFormatter.php';
+$wgAutoloadClasses['NewsletterTablePager'] = __DIR__ . 
'/includes/SpecialNewsletters.php';
 
 $wgSpecialPages['NewsletterCreate'] = 'SpecialNewsletterCreate';
 $wgSpecialPages['NewsletterManage'] = 'SpecialNewsletterManage';
diff --git a/i18n/en.json b/i18n/en.json
index 74c99e8..3e87b83 100755
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -24,5 +24,7 @@
        "echo-pref-tooltip-newsletter": "Notify me when any of the newsletters 
to which I have subscribed to announces a new issue.",
        "notification-newsletter-title": "$1 has announced an issue",
        "notification-newsletter-flyout": "$1 has announced a new issue",
-       "notification-link-text-new-issue": "View new issue"
+       "notification-link-text-new-issue": "View new issue",
+       "newsletter-header-name": "Name of Newsletter",
+       "newsletter-header-description": "Description"
 }
diff --git a/includes/SpecialNewsletters.php b/includes/SpecialNewsletters.php
index 7b979d7..a76084f 100644
--- a/includes/SpecialNewsletters.php
+++ b/includes/SpecialNewsletters.php
@@ -4,6 +4,12 @@
  *
  */
 class SpecialNewsletters extends SpecialPage {
+
+       static $fields = array(
+               'nl_name' => 'name',
+               'nl_desc' => 'description',
+       );
+
        public function __construct() {
                parent::__construct( 'Newsletters' );
        }
@@ -11,180 +17,59 @@
        public function execute( $par ) {
                $this->setHeaders();
                $this->requireLogin();
-               $subscribeNewsletterArray = $this->getSubscribeFormFields();
+               $out = $this->getOutput();
 
-               # Create HTML form
-               $subscribeNewsletterForm = new HTMLForm( 
$subscribeNewsletterArray, $this->getContext(), 'subscribenewsletterform' );
-               $subscribeNewsletterForm->setSubmitCallback( array( 
'SpecialNewsletters', 'onSubscribe' ) );
-               $subscribeNewsletterForm->setWrapperLegendMsg( 
'newsletter-subscribe-section' );
-               $subscribeNewsletterForm->setSubmitText( $this->msg( 
'subscribe-button-label' )->text() );
-               $subscribeNewsletterForm->show();
+               $pager = new NewsletterTablePager();
 
-               $userSubscriptionsArray = $this->getSubscriptionsFormFields( 
$this->getUser()->getId() );
-               $userSubscriptionsForm = new HTMLForm( $userSubscriptionsArray, 
$this->getContext(), 'usersubscriptionsform' );
-               $userSubscriptionsForm->setSubmitCallback( array( 
'SpecialNewsletters', 'onUnSubscribe' ) );
-               $userSubscriptionsForm->setWrapperLegendMsg( 
'newsletter-unsubscribe-section' );
-               $userSubscriptionsForm->setSubmitText( $this->msg( 
'unsubscribe-button-label' )->text() );
-               $userSubscriptionsForm->show();
+               if ( $pager->getNumRows() > 0 ) {
+                       $out->addHTML(
+                               $pager->getNavigationBar() .
+                               $pager->getBody() .
+                               $pager->getNavigationBar()
+                       );
+               }
        }
+}
 
-       /**
-        * Function to get user entries from HTML form for subscribing to a 
newsletter
-        *
-        * @return array
-        */
-       protected function getSubscribeFormFields() {
-               $dbr = wfGetDB( DB_SLAVE );
-               $res = $dbr->select(
-                       'nl_newsletters',
-                       array( 'nl_name'),
-                       '',
-                       __METHOD__
-               );
-               $newsletterNames = array();
-               $defaultOption = array( '' => null );
-               foreach( $res as $row ) {
-                       $newsletterNames[$row->nl_name] = $row->nl_name;
+class NewsletterTablePager extends TablePager {
+
+       function getFieldNames() {
+               static $headers = null;
+               if ( is_null( $headers ) ) {
+                       $headers = array();
+                       foreach( SpecialNewsletters::$fields as $field => 
$property ) {
+                               $headers[$field] = $this->msg( 
"newsletter-header-$property" )->text();
+                       }
                }
 
-               return array(
-                       'available-newsletters' => array(
-                               'required' => true,
-                               'type' => 'select',
-                               'label' => $this->msg( 
'available-newsletters-field-label' )->text(),
-                               'options' => array_merge( $defaultOption, 
$newsletterNames ),
-                       ),
-                       'subscriber' => array(
-                               'type' => 'hidden',
-                               'default' => $this->getUser()->getId()
+               return $headers;
+       }
+
+       function getQueryInfo() {
+               $info = array(
+                       'tables' => array( 'nl_newsletters' ),
+                       'fields' => array(
+                               'nl_name',
+                               'nl_desc'
                        )
                );
+
+               return $info;
        }
 
-       /**
-        * Perform insert query on subscriptions table with data retrieved from 
HTML
-        * form when a user subscribes to a newsletter
-        *
-        * @param array $formData The data entered by user in the form
-        * @return bool
-        */
-       static function onSubscribe( array $formData ) {
-               if ( isset( $formData['available-newsletters'] ) && isset( 
$formData['subscriber'] ) ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-                       //get newsletter id user is subscribing to
-                       $res = $dbr->select(
-                               'nl_newsletters',
-                               array('nl_id'),
-                               array('nl_name' => 
$formData['available-newsletters']),
-                               __METHOD__
-                       );
-                       foreach ( $res as $row ) {
-                               $newsletterId = $row->nl_id;
-                       }
-                       if ( isset( $newsletterId ) ) {
-                               $dbw = wfGetDB( DB_MASTER );
-                               $rowData = array(
-                                       'newsletter_id' => $newsletterId,
-                                       'subscriber_id' => 
$formData['subscriber'],
-                               );
-                               try {
-                                       $dbw->insert( 'nl_subscriptions', 
$rowData, __METHOD__ );
-                               } catch ( DBQueryError $e ) {
-                                       return 'You are already subscribed to 
this newsletter!';
-                               }
-                               
RequestContext::getMain()->getOutput()->addWikiMsg( 
'newsletter-subscribe-confirmation' );
-
-                               return true;
-                       } else {
-                               return 'Invalid newsletter name entered. Please 
try again';
-                       }
+       function formatValue( $field, $value ) {
+               switch( $field ) {
+                       case 'nl_name': return $value;
+                       case 'nl_desc': return $value;
                }
+       }
 
+       function getDefaultSort() {
+               return 'nl_name';
+       }
+
+       function isFieldSortable( $field ) {
                return false;
        }
 
-       /**
-        *Get user entries from HTML form to un-subscribe from newsletters
-        *
-        * @param integer $id User id of logged in user
-        * @return array
-        */
-       protected function getSubscriptionsFormFields( $id ) {
-               $dbr = wfGetDB( DB_SLAVE );
-               //get newsletter ids to which user is subscribed to
-               $res = $dbr->select(
-                       'nl_subscriptions',
-                       array( 'newsletter_id' ),
-                       array( 'subscriber_id' => $id ),
-                       __METHOD__
-               );
-               $newsletterIds = array();
-               foreach( $res as $row ) {
-                       $newsletterIds[] = $row->newsletter_id;
-               }
-
-               $newsletterNames = array();
-               $defaultOption = array( '' => null );
-               //get newsletter names
-               foreach ( $newsletterIds as $value ) {
-                       $result = $dbr->select(
-                               'nl_newsletters',
-                               array( 'nl_name' ),
-                               array( 'nl_id' => $value ),
-                               __METHOD__
-                       );
-                       foreach( $result as $row ) {
-                               $newsletterNames[$row->nl_name] = $row->nl_name;
-                       }
-               }
-               return array(
-                       'subscribed-newsletters' => array(
-                               'required' => true,
-                               'type' => 'select',
-                               'label' => $this->msg( 
'subscribed-newsletters-field-label' )->text(),
-                               'options' => array_merge( $defaultOption, 
$newsletterNames )
-                       ),
-                       'un-subscriber' => array(
-                               'type' => 'hidden',
-                               'default' => $this->getUser()->getId()
-                       )
-               );
-       }
-
-       /**
-        * Perform deletion on subscriptions table when a user un-subscribes
-        *
-        * @param array $formData The data entered by user in the form
-        * @return bool
-        */
-       static function onUnSubscribe( array $formData ) {
-               if ( isset( $formData['subscribed-newsletters'] ) && isset( 
$formData['un-subscriber'] ) ) {
-                       $dbr = wfGetDB( DB_SLAVE );
-                       //remove entry from subscriptions table
-                       $res = $dbr->select(
-                               'nl_newsletters',
-                               array( 'nl_id' ),
-                               array( 'nl_name' => 
$formData['subscribed-newsletters'] ),
-                               __METHOD__
-                       );
-                       foreach ( $res as $row ) {
-                               $newsletterId = $row->nl_id;
-                       }
-                       if ( isset ( $newsletterId ) ) {
-                               $dbw = wfGetDB( DB_MASTER );
-                               $rowData = array(
-                                       'newsletter_id' => $newsletterId,
-                                       'subscriber_id' => 
$formData['un-subscriber'],
-                               );
-                               $dbw->delete( 'nl_subscriptions', $rowData, 
__METHOD__ );
-                               
RequestContext::getMain()->getOutput()->addWikiMsg( 
'newsletter-unsubscribe-confirmation' );
-
-                               return true;
-                       } else {
-                               return 'Invalid newsletter name entered. Please 
try again';
-                       }
-               }
-
-               return false;
-       }
 }
\ No newline at end of file

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic52ead998363dc0a8860fcdb5d46bb30ae590dc0
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Newsletter
Gerrit-Branch: master
Gerrit-Owner: Tinaj1234 <tinajohnson.1...@gmail.com>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to