Tinaj1234 has uploaded a new change for review.

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

Change subject: Add filters to customize the search of newsletters
......................................................................

Add filters to customize the search of newsletters

To-be done
* Find an easier way to do the same (optimize code)
* Add qqq entries

Bug: T107557
Change-Id: I78529be036ec58646dab14d6e638356b110f696f
---
M i18n/en.json
M includes/specials/SpecialNewsletters.php
M includes/specials/pagers/NewsletterTablePager.php
3 files changed, 46 insertions(+), 1 deletion(-)


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

diff --git a/i18n/en.json b/i18n/en.json
index b533160..34831c9 100755
--- a/i18n/en.json
+++ b/i18n/en.json
@@ -103,5 +103,11 @@
        "apihelp-newslettersubscribe-param-id": "ID of the newsletter for which 
the subscription should be changed.",
        "apihelp-newslettersubscribe-param-do": "Action to do. Should be either 
<kbd>subscribe</kbd> or <kbd>unsubscribe</kbd>.",
        "apihelp-newslettersubscribe-example-1": "Subscribe to newsletter with 
id 1.",
-       "apihelp-newslettersubscribe-example-2": "Unsubscribe from newsletter 
with id 2."
+       "apihelp-newslettersubscribe-example-2": "Unsubscribe from newsletter 
with id 2.",
+       "newsletter-filter-table": "Filter table by: ",
+       "newsletter-filtertableform-filter-section":  "Search for Newsletters",
+       "newsletter-filtertable-option-1": "All newsletters",
+       "newsletter-filtertable-option-2": "Newsletters I'm subscribed to",
+       "newsletter-filtertable-option-3": "Newsletters I'm not subscribed to",
+       "newsletter-go-button": "Go"
 }
diff --git a/includes/specials/SpecialNewsletters.php 
b/includes/specials/SpecialNewsletters.php
index 17ead7c..fd2ddfe 100644
--- a/includes/specials/SpecialNewsletters.php
+++ b/includes/specials/SpecialNewsletters.php
@@ -8,6 +8,8 @@
  */
 class SpecialNewsletters extends SpecialPage {
 
+       private $option = null;
+
        public function __construct() {
                parent::__construct( 'Newsletters' );
        }
@@ -23,7 +25,19 @@
                }
                $out->setSubtitle( LinksGenerator::getSubtitleLinks() );
 
+               $filterTableForm = new HTMLForm(
+                       $this->getFormFields(),
+                       $this->getContexT(),
+                       'newsletter-filtertableform'
+               );
+               $filterTableForm->setSubmitText( $this->msg( 
'newsletter-go-button' ) );
+               $filterTableForm->setSubmitCallback( array( $this, 'onSubmit') 
);
+               $filterTableForm->setWrapperLegendMsg( 
'newsletter-filtertableform-filter-section' );
+               $filterTableForm->show();
+
                $pager = new NewsletterTablePager();
+               $pager->getUserOption( $this->option );
+
                if ( $pager->getNumRows() > 0 ) {
                        $out->addParserOutput( $pager->getFullOutput() );
                } else {
@@ -31,4 +45,21 @@
                }
        }
 
+       public function getFormFields() {
+               return array(
+                       'filter' => array(
+                               'type' => 'select',
+                               'label-message' => 'newsletter-filter-table',
+                               'options' => array(
+                                       $this->msg( 
'newsletter-filtertable-option-1' )->parse() => 0,
+                                       $this->msg( 
'newsletter-filtertable-option-2' )->parse() => 1,
+                                       $this->msg( 
'newsletter-filtertable-option-3' )->parse() => 2
+                               ),
+                       ),
+               );
+       }
+
+       public function onSubmit( array $formData ) {
+               $this->option = $formData['filter'];
+       }
 }
diff --git a/includes/specials/pagers/NewsletterTablePager.php 
b/includes/specials/pagers/NewsletterTablePager.php
index 2b3a315..4208481 100644
--- a/includes/specials/pagers/NewsletterTablePager.php
+++ b/includes/specials/pagers/NewsletterTablePager.php
@@ -11,6 +11,7 @@
         * @var null|string[]
         */
        private $fieldNames = null;
+       private $option = null;
 
        public function __construct( IContextSource $context = null, IDatabase 
$readDb = null ) {
                if ( $readDb !== null ) {
@@ -48,6 +49,10 @@
                                'nl_frequency',
                                'subscribers' => ( '( SELECT COUNT(*) FROM 
nl_subscriptions WHERE nls_newsletter_id = nl_id )' ),
                        ),
+                       'conds' => ( $this->option == 1 ) ? array( 
$this->mDb->addQuotes( $this->getUser()->getId() ) .
+                                       ' IN (SELECT nls_subscriber_id FROM 
nl_subscriptions WHERE nls_newsletter_id = nl_id )' ) :
+                                       ( ( $this->option == 2 ) ? array( 
$this->mDb->addQuotes( $this->getUser()->getId() ) .
+                                       ' NOT IN (SELECT nls_subscriber_id FROM 
nl_subscriptions WHERE nls_newsletter_id = nl_id )' ) : null ),
                        'options' => array( 'DISTINCT nl_id' ),
                );
 
@@ -138,4 +143,7 @@
                return false;
        }
 
+       public function getUserOption( $value ) {
+               $this->option = $value;
+       }
 }

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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I78529be036ec58646dab14d6e638356b110f696f
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