break;
case 'has_profile':
+ case 'has_email_redirect':
+ case 'has_valid_email':
$class = 'ufc_' . str_replace('_', '', $type);
$cond = new $class();
break;
}
// }}}
// {{{ class UFC_HasEmailRedirect
-/** Filters users, keeping only those with a valid email redirection.
+/** Filters users, keeping only those with a valid email redirection (only X.org accounts).
*/
class UFC_HasEmailRedirect extends UserFilterCondition
{
public function buildCondition(PlFilter $uf)
{
+ $sub_redirect = $uf->addActiveEmailRedirectFilter();
+ return 'rf.redirect IS NOT NULL';
+ }
+
+ public function export()
+ {
+ $export = $this->buildExport('has_email_redirect');
+ return $export;
+ }
+}
+// }}}
+// {{{ class UFC_HasValidEmail
+/** Filters users, keeping only those with a valid email address (all accounts).
+ */
+class UFC_HasValidEmail extends UserFilterCondition
+{
+ public function buildCondition(PlFilter $uf)
+ {
$sub_redirect = $uf->addEmailRedirectFilter();
- return 'ra' . $sub_redirect . '.flags = \'active\'';
+ $uf->requireAccounts();
+ return 'ra' . $sub_redirect . '.flags = \'active\' OR a.email IS NOT NULL';
+ }
+
+ public function export()
+ {
+ $export = $this->buildExport('has_valid_email');
+ return $export;
}
}
// }}}
public function buildCondition(PlFilter $uf)
{
- // Groups have AX visibility.
- if ($uf->getVisibilityLevel() == ProfileVisibility::VIS_PUBLIC) {
- return self::COND_TRUE;
+ // Groups are only visible for users with perm 'groups'.
+ if (!S::user()->checkPerms(User::PERM_GROUPS)) {
+ return self::COND_FALSE;
}
$sub = $uf->addGroupFilter($this->group);
$where = 'gpm' . $sub . '.perms IS NOT NULL';
{
// Binets are private.
if ($uf->getVisibilityLevel() != ProfileVisibility::VIS_PRIVATE) {
- return self::CONF_TRUE;
+ return self::COND_TRUE;
}
$sub = $uf->addBinetsFilter();
return XDB::format($sub . '.binet_id IN {?}', $this->val);
{
// Sections are private.
if ($uf->getVisibilityLevel() != ProfileVisibility::VIS_PRIVATE) {
- return self::CONF_TRUE;
+ return self::COND_TRUE;
}
$uf->requireProfiles();
return XDB::format('p.section IN {?}', $this->section);
if (count($foreign) > 0) {
$sub = $uf->addEmailRedirectFilter($foreign);
- $cond[] = XDB::format('ra' . $sub . '.redirect IS NOT NULL OR ra.redirect IN {?}', $foreign);
+ $cond[] = XDB::format('ra' . $sub . '.redirect IS NOT NULL OR ra' . $sub . '.redirect IN {?}', $foreign);
}
if (count($local) > 0) {
$sub = $uf->addAliasFilter($local);
const ORIGIN = 2;
private $corps;
+ private $id;
private $type;
- public function __construct($corps, $type = self::CURRENT)
+ public function __construct($corps, $id = null, $type = self::CURRENT)
{
$this->corps = $corps;
+ $this->id = $id;
$this->type = $type;
}
* pcec for profile_corps_enum - current
*/
$sub = $uf->addCorpsFilter($this->type);
- $cond = $sub . '.abbreviation = ' . $corps;
- $cond .= ' AND ' . $uf->getVisibilityCondition($sub . '.corps_pub');
+ if (is_null($this->id)) {
+ $cond = $sub . '.abbreviation = ' . $this->corps;
+ } else {
+ $cond = $sub . '.id = ' . $this->id;
+ }
+ // XXX(x2006barrois): find a way to get rid of that hardcoded
+ // reference to 'pc'.
+ $cond .= ' AND ' . $uf->getVisibilityCondition('pc.corps_pub');
return $cond;
}
}
class UFC_Corps_Rank extends UserFilterCondition
{
private $rank;
- public function __construct($rank)
+ private $id;
+
+ public function __construct($rank, $id = null)
{
$this->rank = $rank;
+ $this->id = $id;
}
public function buildCondition(PlFilter $uf)
* pcr for profile_corps_rank
*/
$sub = $uf->addCorpsRankFilter();
- $cond = $sub . '.abbreviation = ' . $rank;
+ if (is_null($this->id)) {
+ $cond = $sub . '.abbreviation = ' . $this->rank;
+ } else {
+ $cond = $sub . '.id = ' . $this->id;
+ }
// XXX(x2006barrois): find a way to get rid of that hardcoded
// reference to 'pc'.
$cond .= ' AND ' . $uf->getVisibilityCondition('pc.corps_pub');
// don't do anything. Otherwise restrict to standard job visibility.
if ($this->fields == UserFilter::JOB_CV) {
if ($uf->getVisibilityLevel() != ProfileVisibility::VIS_PRIVATE) {
- return self::CONF_TRUE;
+ return self::COND_TRUE;
}
- } else {
- $conds[] = $uf->getVisibilityCondition($jsub . '.pub');
}
-
if ($this->fields & UserFilter::JOB_USERDEFINED) {
$conds[] = $jsub . '.description ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
}
$uf->requireProfiles();
$conds[] = 'p.cv ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
}
- return implode(' OR ', $conds);
+ if (count($conds) == 0) {
+ return self::COND_TRUE;
+ }
+ return $uf->getVisibilityCondition($jsub . '.pub') . ' AND ( ' . implode(' OR ', $conds) . ' )';
}
}
// }}}