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