From 57a4162e2b3f92c9b12d264f83dd191d7ba71fa2 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Barrois?= Date: Sun, 30 Jan 2011 00:29:51 +0100 Subject: [PATCH] Add UFC_HasEmailRedirect / UFC_NLSubscribed MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Raphaël Barrois --- classes/userfilter.php | 31 +++++++++++++++++++++++++++++ classes/userfilter/conditions.inc.php | 37 ++++++++++++++++++++++++++++++++++- 2 files changed, 67 insertions(+), 1 deletion(-) diff --git a/classes/userfilter.php b/classes/userfilter.php index 1fd27a6..c900cfd 100644 --- a/classes/userfilter.php +++ b/classes/userfilter.php @@ -863,6 +863,26 @@ class UserFilter extends PlFilter return $joins; } + /** NLS + */ + private $nls = array(); + public function addNewsLetterFilter($nlid) + { + $this->requireAccounts(); + $sub = 'nl_' . $nlid; + $this->nls[$nlid] = $sub; + return $sub; + } + + protected function newsLetterJoins() + { + $joins = array(); + foreach ($this->nls as $key => $sub) { + $joins[$sub] = PlSqlJoin::left('newsletter_ins', '$ME.nlid = {?} AND $ME.uid = $UID', $key); + } + return $joins; + } + /** BINETS */ @@ -901,6 +921,14 @@ class UserFilter extends PlFilter return $this->register_optional($this->e, $email); } + private $with_eo = false; + public function addEmailOptionsFilter() + { + $this->requireAccounts(); + $this->with_eo = true; + return 'eo'; + } + private $ve = array(); public function addVirtualEmailFilter($email = null) { @@ -963,6 +991,9 @@ class UserFilter extends PlFilter a.email))', $globals->mail->domain, $globals->mail->domain2); } + if ($this->with_eo) { + $joins['eo'] = PlSqlJoin::left('email_options', '$ME.uid = $UID'); + } return $joins; } diff --git a/classes/userfilter/conditions.inc.php b/classes/userfilter/conditions.inc.php index 5bc0668..766ee0c 100644 --- a/classes/userfilter/conditions.inc.php +++ b/classes/userfilter/conditions.inc.php @@ -31,7 +31,7 @@ */ abstract class UserFilterCondition implements PlFilterCondition { - const OP_EQUALS = '=='; + const OP_EQUALS = '='; const OP_GREATER = '>'; const OP_NOTGREATER = '<='; const OP_LESSER = '<'; @@ -324,6 +324,19 @@ class UFC_Hrpid extends UserFilterCondition } } // }}} +// {{{ class UFC_HasEmailRedirect +/** Filters users, keeping only those with a valid email redirection. + */ +class UFC_HasEmailRedirect extends UserFilterCondition +{ + public function buildCondition(PlFilter $uf) + { + $sub_redirect = $uf->addEmailRedirectFilter(); + $sub_options = $uf->addEmailOptionsFilter(); + return 'e' . $sub_redirect . '.flags = \'active\' OR FIND_IN_SET(\'googleapps\', ' . $sub_options . '.storage)'; + } +} +// }}} // {{{ class UFC_Ip /** Filters users based on one of their last IPs * @param $ip IP from which connection are checked @@ -802,6 +815,28 @@ class UFC_Sex extends UserFilterCondition } } // }}} +// {{{ class UFC_NLSubscribed +/** Filters users based on NL subscription + * @param $nlid NL whose subscribers we are selecting + * @param $issue Select only subscribers who have not yet received that issue + */ +class UFC_NLSubscribed extends UserFilterCondition +{ + private $nlid; + private $issue_id; + public function __construct($nlid, $issue_id) + { + $this->nlid = $nlid; + $this->issue_id = $issue_id; + } + + public function buildCondition(PlFilter $uf) + { + $sub = $uf->addNewsLetterFilter($this->nlid); + return XDB::format($sub . '.last < {?}', $this->issue_id); + } +} +// }}} // {{{ class UFC_Group /** Filters users based on group membership * @param $group Group whose members we are selecting -- 2.1.4