<?php
/***************************************************************************
- * Copyright (C) 2003-2009 Polytechnique.org *
+ * Copyright (C) 2003-2010 Polytechnique.org *
* http://opensource.polytechnique.org/ *
* *
* This program is free software; you can redistribute it and/or modify *
}
// }}}
+// {{{ class UFC_Hruid
+/** Filters users based on their hruid
+ * @param $val Either an hruid, or a list of those
+ */
+class UFC_Hruid implements UserFilterCondition
+{
+ private $hruids;
+
+ public function __construct($val)
+ {
+ if (!is_array($val)) {
+ $val = array($val);
+ }
+ $this->hruids = $val;
+ }
+
+ public function buildCondition(PlFilter &$uf)
+ {
+ $ufc->requireAccounts();
+
+ return 'a.hruid IN ' . XDB::formatArray($this->hruids);
+ }
+}
+// }}}
+
+// {{{ class UFC_Ip
+/** Filters users based on one of their last IPs
+ * @param $ip IP from which connection are checked
+ */
+class UFC_Ip implements UserFilterCondition
+{
+ private $ip;
+
+ public function __construct($ip)
+ {
+ $this->ip = $ip;
+ }
+
+ public function buildCondition(PlFilter &$uf)
+ {
+ $sub = $uf->addLoggerFilter();
+ $ip = ip_to_uint($this->ip);
+ return XDB::format($sub . '.ip = {?} OR ' . $sub . '.forward_ip = {?}', $ip, $ip);
+ }
+}
+// }}}
+
// {{{ class UFC_Comment
class UFC_Comment implements UserFilterCondition
{
public function buildCondition(PlFilter &$uf)
{
$uf->requireProfiles();
- return 'p.freetext LIKE ' . XDB::format('CONCAT(\'%\', {?}, \'%\')', $this->text);
+ return 'p.freetext ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->text);
}
}
// }}}
}
// }}}
-// {{{ class UFC_Formation
+// {{{ class UFC_SchoolId
+/** Filters users based on their shoold identifier
+ * @param type Parameter type (Xorg, AX, School)
+ * @param value School id value
+ */
+class UFC_SchooldId implements UserFilterCondition
+{
+ const AX = 'ax';
+ const Xorg = 'xorg';
+ const School = 'school';
+
+ private $type;
+ private $id;
+
+ static public function assertType($type)
+ {
+ if ($type != self::AX && $type != self::Xorg && $type != self::School) {
+ Platal::page()->killError("Type de matricule invalide: $type");
+ }
+ }
+
+ public function __construct($type, $id)
+ {
+ $this->type = $type;
+ $this->id = $id;
+ self::assertType($type);
+ }
+
+ public function buildCondition(PlFilter &$uf)
+ {
+ $uf->requireProfiles();
+ $id = $this->id;
+ $type = $this->type;
+ if ($type == self::School) {
+ $type = self::Xorg;
+ $id = Profile::getXorgId($id);
+ }
+ return XDB::format('p.' . $type . '_id = {?}', $id);
+ }
+}
+// }}}
+
+// {{{ class UFC_EducationSchool
/** Filters users by formation
* @param $val The formation to search (either ID or array of IDs)
*/
-class UFC_Formation implements UserFilterCondition
+class UFC_EducationSchool implements UserFilterCondition
{
private $val;
}
// }}}
-// {{{ class UFC_Diploma
-class UFC_Diploma implements UserFilterCondition
+// {{{ class UFC_EducationDegree
+class UFC_EducationDegree implements UserFilterCondition
{
private $diploma;
}
// }}}
-// {{{ class UFC_StudyField
-class UFC_StudyField implements UserFilterCondition
+// {{{ class UFC_EducationField
+class UFC_EducationField implements UserFilterCondition
{
private $val;
*/
class UFC_Name implements UserFilterCondition
{
- const PREFIX = 1;
- const SUFFIX = 2;
- const PARTICLE = 7;
- const VARIANTS = 8;
- const CONTAINS = 3;
+ const PREFIX = XDB::WILDCARD_PREFIX; // 0x001
+ const SUFFIX = XDB::WILDCARD_SUFFIX; // 0x002
+ const CONTAINS = XDB::WILDCARD_CONTAINS; // 0x003
+ const PARTICLE = 0x007; // self::CONTAINS | 0x004
+ const VARIANTS = 0x008;
private $type;
private $text;
public function buildCondition(PlFilter &$uf)
{
$left = '$ME.name';
- $op = ' LIKE ';
if (($this->mode & self::PARTICLE) == self::PARTICLE) {
$left = 'CONCAT($ME.particle, \' \', $ME.name)';
}
- if (($this->mode & self::CONTAINS) == 0) {
- $right = XDB::format('{?}', $this->text);
- $op = ' = ';
- } else if (($this->mode & self::CONTAINS) == self::PREFIX) {
- $right = XDB::format('CONCAT({?}, \'%\')', $this->text);
- } else if (($this->mode & self::CONTAINS) == self::SUFFIX) {
- $right = XDB::format('CONCAT(\'%\', {?})', $this->text);
- } else {
- $right = XDB::format('CONCAT(\'%\', {?}, \'%\')', $this->text);
- }
- $cond = $left . $op . $right;
+ $right = XDB::formatWildcards($this->mode & self::CONTAINS, $this->text);
+
+ $cond = $left . $right;
$conds = array($this->buildNameQuery($this->type, null, $cond, $uf));
- if (($this->mode & self::VARIANTS) != 0 && isset(UserFilter::$name_variants[$this->type])) {
- foreach (UserFilter::$name_variants[$this->type] as $var) {
+ if (($this->mode & self::VARIANTS) != 0 && isset(Profile::$name_variants[$this->type])) {
+ foreach (Profile::$name_variants[$this->type] as $var) {
$conds[] = $this->buildNameQuery($this->type, $var, $cond, $uf);
}
}
} else {
$tokconds = array();
foreach ($this->tokens as $token) {
- $tokconds[] = $sub . '.token LIKE ' . XDB::format('CONCAT(\'%\', {?}, \'%\')', $token);
+ $tokconds[] = $sub . '.token ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $token);
}
$conds[] = implode(' OR ', $tokconds);
}
// {{{ class UFC_AddressText
/** Select users based on their address, using full text search
* @param $text Text for filter in fulltext search
- * @param $textSearchMode Mode for search (PREFIX, SUFFIX, ...)
+ * @param $textSearchMode Mode for search (one of XDB::WILDCARD_*)
* @param $type Filter on address type
* @param $flags Filter on address flags
* @param $country Filter on address country
*/
class UFC_AddressText extends UFC_Address
{
- /** Flags for text search
- */
- const PREFIX = 0x0001;
- const SUFFIX = 0x0002;
- const CONTAINS = 0x0003;
private $text;
private $textSearchMode;
- public function __construct($text = null, $textSearchMode = self::CONTAINS,
+ public function __construct($text = null, $textSearchMode = XDB::WILDCARD_CONTAINS,
$type = null, $flags = self::FLAG_ANY, $country = null, $locality = null)
{
parent::__construct($type, $flags);
private function mkMatch($txt)
{
- $op = ' LIKE ';
- if (($this->textSearchMode & self::CONTAINS) == 0) {
- $right = XDB::format('{?}', $this->text);
- $op = ' = ';
- } else if (($this->mode & self::CONTAINS) == self::PREFIX) {
- $right = XDB::format('CONCAT({?}, \'%\')', $this->text);
- } else if (($this->mode & self::CONTAINS) == self::SUFFIX) {
- $right = XDB::format('CONCAT(\'%\', {?})', $this->text);
- } else {
- $right = XDB::format('CONCAT(\'%\', {?}, \'%\')', $this->text);
- }
- return $op . $right;
+ return XDB::formatWildcards($this->textSearchMode, $txt);
}
public function buildCondition(PlFilter &$uf)
$field = 'postalCode';
break;
default:
- Platal::page()->killError('Invalid address field type : ' . $this->fieldtype);
+ Platal::page()->killError('Invalid address field type: ' . $this->fieldtype);
}
$conds[] = $sub . '.' . $field . ' IN ' . XDB::formatArray($this->val);
class UFC_Job_Description implements UserFilterCondition
{
- /** Meta-filters
- * Built with binary OR on UserFilter::JOB_*
- */
- const ANY = 63;
- const SECTORIZATION = 15;
-
private $description;
private $fields;
$conds = array();
if ($this->fields & UserFilter::JOB_USERDEFINED) {
$sub = $uf->addJobFilter();
- $conds[] = $sub . '.description LIKE ' . XDB::format('CONCAT(\'%\', {?}, \'%\')', $this->description);
+ $conds[] = $sub . '.description ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
}
if ($this->fields & UserFilter::JOB_CV) {
$uf->requireProfiles();
- $conds[] = 'p.cv LIKE ' . XDB::format('CONCAT(\'%\', {?}, \'%\')', $this->description);
+ $conds[] = 'p.cv ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
}
if ($this->fields & UserFilter::JOB_SECTOR) {
$sub = $uf->addJobSectorizationFilter(UserFilter::JOB_SECTOR);
- $conds[] = $sub . '.name LIKE ' . XDB::format('CONCAT(\'%\', {?}, \'%\')', $this->description);
+ $conds[] = $sub . '.name ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
}
if ($this->fields & UserFilter::JOB_SUBSECTOR) {
$sub = $uf->addJobSectorizationFilter(UserFilter::JOB_SUBSECTOR);
- $conds[] = $sub . '.name LIKE ' . XDB::format('CONCAT(\'%\', {?}, \'%\')', $this->description);
+ $conds[] = $sub . '.name ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
}
if ($this->fields & UserFilter::JOB_SUBSUBSECTOR) {
$sub = $uf->addJobSectorizationFilter(UserFilter::JOB_SUBSUBSECTOR);
- $conds[] = $sub . '.name LIKE ' . XDB::format('CONCAT(\'%\', {?}, \'%\')', $this->description);
+ $conds[] = $sub . '.name ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
$sub = $uf->addJobSectorizationFilter(UserFilter::JOB_ALTERNATES);
- $conds[] = $sub . '.name LIKE ' . XDB::format('CONCAT(\'%\', {?}, \'%\')', $this->description);
+ $conds[] = $sub . '.name ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->description);
}
return implode(' OR ', $conds);
}
{
$sub = $uf->addNetworkingFilter();
$conds = array();
- $conds[] = $sub . '.address = ' . XDB::format('CONCAT(\'%\', {?}, \'%\')', $this->value);
+ $conds[] = $sub . '.address ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->value);
if ($this->type != -1) {
$conds[] = $sub . '.network_type = ' . XDB::format('{?}', $this->type);
}
public function buildCondition(PlFilter &$uf)
{
$sub = $uf->addMentorFilter(UserFilter::MENTOR_EXPERTISE);
- return $sub . '.expertise LIKE ' . XDB::format('CONCAT(\'%\', {?}, \'%\'', $this->expertise);
+ return $sub . '.expertise ' . XDB::formatWildcards(XDB::WILDCARD_CONTAINS, $this->expertise);
}
}
// }}}
// {{{ class UFC_Mentor_Sectorization
/** Filters users based on mentoring (sub|)sector
- * @param $sector ID of sector
- * @param $subsector Subsector (null for any)
+ * @param $sector ID of (sub)sector
+ * @param $type Whether we are looking for a sector or a subsector
*/
class UFC_Mentor_Sectorization implements UserFilterCondition
{
+ const SECTOR = 1;
+ const SUBSECTOR = 2;
private $sector;
- private $subsector;
+ private $type;
- public function __construct($sector, $subsector = null)
+ public function __construct($sector, $type = self::SECTOR)
{
$this->sector = $sector;
- $this->subsubsector = $subsector;
+ $this->type = $type;
}
public function buildCondition(PlFilter &$uf)
{
$sub = $uf->addMentorFilter(UserFilter::MENTOR_SECTOR);
- $conds = array();
- $conds[] = $sub . '.sectorid = ' . XDB::format('{?}', $this->sector);
- if ($this->subsector != null) {
- $conds[] = $sub . '.subsectorid = ' . XDB::format('{?}', $this->subsector);
+ if ($this->type == self::SECTOR) {
+ $field = 'sectorid';
+ } else {
+ $field = 'subsectorid';
}
- return implode(' AND ', $conds);
+ return $sub . '.' . $field . ' = ' . XDB::format('{?}', $this->sector);
}
}
// }}}
{
public function buildCondition(PlFilter &$uf)
{
- if (!$this->user->watch('registration')) {
+ if (!$this->user->watchType('registration')) {
return PlFilterCondition::COND_FALSE;
}
$uids = $this->user->watchUsers();
}
// }}}
+// {{{ class UFC_MarketingHash
+/** Filters users using the hash generated
+ * to send marketing emails to him.
+ */
+class UFC_MarketingHash implements UserFilterCondition
+{
+ private $hash;
+
+ public function __construct($hash)
+ {
+ $this->hash = $hash;
+ }
+
+ public function buildCondition(PlFilter &$uf)
+ {
+ $table = $uf->addMarketingHash();
+ return XDB::format('rm.hash = {?}', $this->hash);
+ }
+}
/******************
* ORDERS
* @param &$uf The UserFilter whose results must be ordered
* @return The name of the field to use for ordering results
*/
- abstract protected function getSortTokens(UserFilter &$uf);
+// abstract protected function getSortTokens(UserFilter &$uf);
}
// }}}
$this->grade = $grade;
}
- protected function getSortTokens(UserFilter &$uf)
+ protected function getSortTokens(PlFilter &$uf)
{
if (UserFilter::isGrade($this->grade)) {
$sub = $uf->addEducationFilter($this->grade);
$this->particle = $particle;
}
- protected function getSortTokens(UserFilter &$uf)
+ protected function getSortTokens(PlFilter &$uf)
{
- if (UserFilter::isDisplayName($this->type)) {
+ if (Profile::isDisplayName($this->type)) {
$sub = $uf->addDisplayFilter();
return 'pd' . $sub . '.' . $this->type;
} else {
// {{{ class UFO_Score
class UFO_Score extends UserFilterOrder
{
- protected function getSortTokens(UserFilter &$uf)
+ protected function getSortTokens(PlFilter &$uf)
{
$sub = $uf->addNameTokensFilter();
return 'SUM(' . $sub . '.score)';
*/
class UFO_Registration extends UserFilterOrder
{
- protected function getSortTokens(UserFilter &$uf)
+ protected function getSortTokens(PlFilter &$uf)
{
return 'a.registration_date';
}
*/
class UFO_Birthday extends UserFilterOrder
{
- protected function getSortTokens(UserFilter &$uf)
+ protected function getSortTokens(PlFilter &$uf)
{
return 'p.next_birthday';
}
*/
class UFO_ProfileUpdate extends UserFilterOrder
{
- protected function getSortTokens(UserFilter &$uf)
+ protected function getSortTokens(PlFilter &$uf)
{
return 'p.last_change';
}
*/
class UFO_Death extends UserFilterOrder
{
- protected function getSortTokens(UserFilter &$uf)
+ protected function getSortTokens(PlFilter &$uf)
{
return 'p.deathdate';
}
* in the final query.
*
* In the join_criter text, $ME is replaced with 'join_tablealias', $PID with
- * profile.pid, and $UID with auth_user_md5.user_id.
+ * profile.pid, and $UID with accounts.uid.
*
* For each kind of "JOIN" needed, a function named addXXXFilter() should be defined;
* its parameter will be used to set various private vars of the UserFilter describing
{
protected $joinMethods = array();
- protected $joinMetas = array('$PID' => 'p.pid',
- '$UID' => 'a.uid',
+ protected $joinMetas = array(
+ '$PID' => 'p.pid',
+ '$UID' => 'a.uid',
);
private $root;
return $fetched;
}
+ private static function defaultLimit($limit) {
+ if ($limit == null) {
+ return new PlLimit();
+ } else {
+ return $limit;
+ }
+ }
+
/** Check that the user match the given rule.
*/
public function checkUser(PlUser &$user)
/** Default filter is on users
*/
- public function filter(array $users, PlLimit &$limit)
+ public function filter(array $users, $limit = null)
{
- return $this->filterUsers($users, $limit);
+ return $this->filterUsers($users, self::defaultLimit($limit));
}
/** Filter a list of users to extract the users matching the rule.
*/
- public function filterUsers(array $users, PlLimit &$limit)
+ public function filterUsers(array $users, $limit = null)
{
+ $limit = self::defaultLimit($limit);
$this->requireAccounts();
$this->buildQuery();
$table = array();
/** Filter a list of profiles to extract the users matching the rule.
*/
- public function filterProfiles(array $profiles, PlLimit &$limit)
+ public function filterProfiles(array $profiles, $limit = null)
{
+ $limit = self::defaultLimit($limit);
$this->requireProfiles();
$this->buildQuery();
$table = array();
return $output;
}
- public function getUIDs(PlLimit &$limit)
+ public function getUIDs($limit = null)
{
+ $limit = self::defaultLimit($limit);
return $this->getUIDList(null, $limit);
}
- public function getPIDs(PlLimit &$limit)
+ public function getUID($pos = 0)
+ {
+ $uids =$this->getUIDList(null, new PlFilter(1, $pos));
+ if (count($uids) == 0) {
+ return null;
+ } else {
+ return $uids[0];
+ }
+ }
+
+ public function getPIDs($limit = null)
{
+ $limit = self::defaultLimit($limit);
return $this->getPIDList(null, $limit);
}
- public function getUsers(PlLimit &$limit)
+ public function getPID($pos = 0)
+ {
+ $pids =$this->getPIDList(null, new PlFilter(1, $pos));
+ if (count($pids) == 0) {
+ return null;
+ } else {
+ return $pids[0];
+ }
+ }
+
+ public function getUsers($limit = null)
{
return User::getBulkUsersWithUIDs($this->getUIDs($limit));
}
- public function getProfiles(PlLimit &$limit)
+ public function getUser($pos = 0)
+ {
+ $uid = $this->getUID($pos);
+ if ($uid == null) {
+ return null;
+ } else {
+ return User::getWithUID($uid);
+ }
+ }
+
+ public function iterUsers($limit = null)
+ {
+ return User::iterOverUIDs($this->getUIDs($limit));
+ }
+
+ public function getProfiles($limit = null)
{
return Profile::getBulkProfilesWithPIDs($this->getPIDs($limit));
}
- public function get(PlLimit &$limit)
+ public function getProfile($pos = 0)
+ {
+ $pid = $this->getPID($pos);
+ if ($pid == null) {
+ return null;
+ } else {
+ return Profile::get($pid);
+ }
+ }
+
+ public function iterProfiles($limit = null)
+ {
+ return Profile::iterOverPIDs($this->getPIDs($limit));
+ }
+
+ public function get($limit = null)
{
return $this->getUsers($limit);
}
if ($promo_min != 0) {
$min = new UFC_Promo('>=', self::GRADE_ING, intval($promo_min));
} else {
- $min = new UFC_True();
+ $min = new PFC_True();
}
if ($promo_max != 0) {
$max = new UFC_Promo('<=', self::GRADE_ING, intval($promo_max));
} else {
- $max = new UFC_True();
+ $max = new PFC_True();
}
return new UserFilter(new PFC_And($min, $max));
}
static public function sortByName()
{
- return array(new UFO_Name(self::LASTNAME), new UFO_Name(self::FIRSTNAME));
+ return array(new UFO_Name(Profile::LASTNAME), new UFO_Name(Profile::FIRSTNAME));
}
static public function sortByPromo()
{
- return array(new UFO_Promo(), new UFO_Name(self::LASTNAME), new UFO_Name(self::FIRSTNAME));
+ return array(new UFO_Promo(), new UFO_Name(Profile::LASTNAME), new UFO_Name(Profile::FIRSTNAME));
}
static private function getDBSuffix($string)
}
}
+ /** LOGGER
+ */
+
+ private $with_logger = false;
+ public function addLoggerFilter()
+ {
+ $this->with_logger = true;
+ $this->requireAccounts();
+ return 'ls';
+ }
+ protected function loggerJoins()
+ {
+ $joins = array();
+ if ($this->with_logger) {
+ $joins['ls'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'log_sessions', '$ME.uid = $UID');
+ }
+ return $joins;
+ }
+
/** NAMES
*/
- /* name tokens */
- const LASTNAME = 'lastname';
- const FIRSTNAME = 'firstname';
- const NICKNAME = 'nickname';
- const PSEUDONYM = 'pseudonym';
- const NAME = 'name';
- /* name variants */
- const VN_MARITAL = 'marital';
- const VN_ORDINARY = 'ordinary';
- const VN_OTHER = 'other';
- const VN_INI = 'ini';
- /* display names */
- const DN_FULL = 'directory_name';
- const DN_DISPLAY = 'yourself';
- const DN_YOURSELF = 'yourself';
- const DN_DIRECTORY = 'directory_name';
- const DN_PRIVATE = 'private_name';
- const DN_PUBLIC = 'public_name';
- const DN_SHORT = 'short_name';
- const DN_SORT = 'sort_name';
-
- static public $name_variants = array(
- self::LASTNAME => array(self::VN_MARITAL, self::VN_ORDINARY),
- self::FIRSTNAME => array(self::VN_ORDINARY, self::VN_INI, self::VN_OTHER)
- );
static public function assertName($name)
{
}
}
- static public function isDisplayName($name)
- {
- return $name == self::DN_FULL || $name == self::DN_DISPLAY
- || $name == self::DN_YOURSELF || $name == self::DN_DIRECTORY
- || $name == self::DN_PRIVATE || $name == self::DN_PUBLIC
- || $name == self::DN_SHORT || $name == self::DN_SORT;
- }
-
private $pn = array();
public function addNameFilter($type, $variant = null)
{
static public function assertGrade($grade)
{
if (!self::isGrade($grade)) {
- Platal::page()->killError("Diplôme non valide");
+ Platal::page()->killError("Diplôme non valide: $grade");
}
}
}
foreach ($this->pepe as $grade => $sub) {
if ($this->isGrade($grade)) {
- $joins['pe' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_education', '$ME.eduid = pee.id AND $ME.uid = $PID');
+ $joins['pe' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_education', '$ME.eduid = pee.id AND $ME.pid = $PID');
$joins['pede' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_INNER, 'profile_education_degree_enum', '$ME.id = pe' . $sub . '.degreeid AND $ME.abbreviation LIKE ' .
XDB::format('{?}', $grade));
} else {
- $joins['pe' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_education', '$ME.uid = $PID');
+ $joins['pe' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_education', '$ME.pid = $PID');
$joins['pee' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_INNER, 'profile_education_enum', '$ME.id = pe' . $sub . '.eduid');
$joins['pede' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_INNER, 'profile_education_degree_enum', '$ME.id = pe' . $sub . '.degreeid');
}
$joins = array();
foreach ($this->gpm as $sub => $key) {
if (is_null($key)) {
- $joins['gpa' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_INNER, 'groupex.asso');
- $joins['gpm' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'groupex.membres', '$ME.uid = $UID AND $ME.asso_id = gpa' . $sub . '.id');
+ $joins['gpa' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_INNER, 'groups');
+ $joins['gpm' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'group_members', '$ME.uid = $UID AND $ME.asso_id = gpa' . $sub . '.id');
} else if (ctype_digit($key)) {
- $joins['gpm' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'groupex.membres', '$ME.uid = $UID AND $ME.asso_id = ' . $key);
+ $joins['gpm' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'group_members', '$ME.uid = $UID AND $ME.asso_id = ' . $key);
} else {
- $joins['gpa' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_INNER, 'groupex.asso', XDB::format('$ME.diminutif = {?}', $key));
- $joins['gpm' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'groupex.membres', '$ME.uid = $UID AND $ME.asso_id = gpa' . $sub . '.id');
+ $joins['gpa' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_INNER, 'groups', XDB::format('$ME.diminutif = {?}', $key));
+ $joins['gpm' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'group_members', '$ME.uid = $UID AND $ME.asso_id = gpa' . $sub . '.id');
}
}
return $joins;
{
$joins = array();
if ($this->with_bi) {
- $joins['bi'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'binets_ins', '$ME.user_id = $PID');
+ $joins['bi'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_binets', '$ME.pid = $PID');
}
if ($this->with_bd) {
- $joins['bd'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'binets_def', '$ME.id = bi.binet_id');
+ $joins['bd'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_binet_enum', '$ME.id = bi.binet_id');
}
return $joins;
}
}
foreach ($this->al as $sub=>$key) {
if (is_null($key)) {
- $joins['al' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'aliases', '$ME.id = $UID AND $ME.type IN (\'alias\', \'a_vie\')');
+ $joins['al' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'aliases', '$ME.uid = $UID AND $ME.type IN (\'alias\', \'a_vie\')');
} else if ($key == self::ALIAS_BEST) {
- $joins['al' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'aliases', '$ME.id = $UID AND $ME.type IN (\'alias\', \'a_vie\') AND FIND_IN_SET(\'bestalias\', $ME.flags)');
+ $joins['al' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'aliases', '$ME.uid = $UID AND $ME.type IN (\'alias\', \'a_vie\') AND FIND_IN_SET(\'bestalias\', $ME.flags)');
} else if ($key == self::ALIAS_FORLIFE) {
- $joins['al' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'aliases', '$ME.id = $UID AND $ME.type = \'a_vie\'');
+ $joins['al' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'aliases', '$ME.uid = $UID AND $ME.type = \'a_vie\'');
} else {
- $joins['al' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'aliases', XDB::format('$ME.id = $UID AND $ME.type IN (\'alias\', \'a_vie\') AND $ME.alias = {?}', $key));
+ $joins['al' . $sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'aliases', XDB::format('$ME.uid = $UID AND $ME.type IN (\'alias\', \'a_vie\') AND $ME.alias = {?}', $key));
}
}
foreach ($this->ve as $sub=>$key) {
{
$joins = array();
if ($this->pc) {
- $joins['pc'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_corps', '$ME.uid = $UID');
+ $joins['pc'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_corps', '$ME.pid = $PID');
}
if ($this->pcr) {
$joins['pcr'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_corps_rank_enum', '$ME.id = pc.rankid');
/** JOBS
*/
- const JOB_SECTOR = 1;
- const JOB_SUBSECTOR = 2;
- const JOB_SUBSUBSECTOR = 4;
- const JOB_ALTERNATES = 8;
- const JOB_USERDEFINED = 16;
- const JOB_CV = 32;
+ const JOB_SECTOR = 0x0001;
+ const JOB_SUBSECTOR = 0x0002;
+ const JOB_SUBSUBSECTOR = 0x0004;
+ const JOB_ALTERNATES = 0x0008;
+ const JOB_USERDEFINED = 0x0010;
+ const JOB_CV = 0x0020;
+
+ const JOB_SECTORIZATION = 0x000F;
+ const JOB_ANY = 0x003F;
/** Joins :
* pj => profile_job
{
$joins = array();
if ($this->with_pj) {
- $joins['pj'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_job', '$ME.uid = $UID');
+ $joins['pj'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_job', '$ME.pid = $PID');
}
if ($this->with_pje) {
$joins['pje'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_job_enum', '$ME.id = pj.jobid');
{
$joins = array();
if ($this->with_pnw) {
- $joins['pnw'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_networking', '$ME.uid = $UID');
+ $joins['pnw'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_networking', '$ME.pid = $PID');
}
return $joins;
}
{
$joins = array();
if ($this->with_ptel) {
- $joins['ptel'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_phones', '$ME.uid = $UID');
+ $joins['ptel'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_phones', '$ME.pid = $PID');
}
return $joins;
}
{
$joins = array();
if ($this->with_pmed) {
- $joins['pmed'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_medals_sub', '$ME.uid = $UID');
+ $joins['pmed'] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'profile_medals', '$ME.pid = $PID');
}
return $joins;
}
{
$this->requireAccounts();
switch($type) {
- case MENTOR_EXPERTISE:
- $pms['pme'] = 'profile_mentor';
+ case self::MENTOR_EXPERTISE:
+ $this->pms['pme'] = 'profile_mentor';
return 'pme';
- case MENTOR_COUNTRY:
- $pms['pmc'] = 'profile_mentor_country';
+ case self::MENTOR_COUNTRY:
+ $this->pms['pmc'] = 'profile_mentor_country';
return 'pmc';
- case MENTOR_SECTOR:
- $pms['pms'] = 'profile_mentor_sector';
+ case self::MENTOR_SECTOR:
+ $this->pms['pms'] = 'profile_mentor_sector';
return 'pms';
default:
Platal::page()->killError("Undefined mentor filter.");
{
$joins = array();
foreach ($this->pms as $sub => $tab) {
- $joins[$sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, $tab, '$ME.uid = $UID');
+ $joins[$sub] = new PlSqlJoin(PlSqlJoin::MODE_LEFT, $tab, '$ME.pid = $PID');
}
return $joins;
}
}
return $joins;
}
+
+
+ /** MARKETING
+ */
+ private $with_rm;
+ public function addMarketingHash()
+ {
+ $this->requireAccounts();
+ $this->with_rm = true;
+ }
+
+ protected function marketingJoins()
+ {
+ if ($this->with_rm) {
+ return array('rm' => new PlSqlJoin(PlSqlJoin::MODE_LEFT, 'register_marketing', '$ME.uid = $UID'));
+ } else {
+ return array();
+ }
+ }
+}
+// }}}
+
+// {{{ class ProfileFilter
+class ProfileFilter extends UserFilter
+{
+ public function get($limit = null)
+ {
+ return $this->getProfiles($limit);
+ }
}
// }}}