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
*/
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)
{
a.email))',
$globals->mail->domain, $globals->mail->domain2);
}
+ if ($this->with_eo) {
+ $joins['eo'] = PlSqlJoin::left('email_options', '$ME.uid = $UID');
+ }
return $joins;
}
*/
abstract class UserFilterCondition implements PlFilterCondition
{
- const OP_EQUALS = '==';
+ const OP_EQUALS = '=';
const OP_GREATER = '>';
const OP_NOTGREATER = '<=';
const OP_LESSER = '<';
}
}
// }}}
+// {{{ 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
}
}
// }}}
+// {{{ 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