From: Raphaël Barrois Date: Sat, 29 Jan 2011 23:29:51 +0000 (+0100) Subject: Add UFC_HasEmailRedirect / UFC_NLSubscribed X-Git-Tag: xorg/1.0.2~7 X-Git-Url: http://git.polytechnique.org/?a=commitdiff_plain;h=57a4162e2b3f92c9b12d264f83dd191d7ba71fa2;p=platal.git Add UFC_HasEmailRedirect / UFC_NLSubscribed Signed-off-by: Raphaël Barrois --- 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