From 671b7073a0debbd347e7276f44fa04c961693f4c Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Barrois?= Date: Sun, 17 Jan 2010 13:04:12 +0100 Subject: [PATCH] Add UFC_Mentor_* MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit For filtering users based on mentoring domain/country/sector Signed-off-by: Raphaël Barrois --- classes/userfilter.php | 105 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 105 insertions(+) diff --git a/classes/userfilter.php b/classes/userfilter.php index 738c702..8075279 100644 --- a/classes/userfilter.php +++ b/classes/userfilter.php @@ -851,6 +851,77 @@ class UFC_Medal extends UserFilterCondition } // }}} +// {{{ class UFC_Mentor_Expertise +/** Filters users by mentoring expertise + * @param $expertise Domain of expertise + */ +class UFC_Mentor_Expertise extends UserFilterCondition +{ + private $expertise; + + public function __construct($expertise) + { + $this->expertise = $expertise; + } + + public function buildCondition(UserFilter &$uf) + { + $sub = $uf->addMentorFilter(UserFilter::MENTOR_EXPERTISE); + return $sub . '.expertise LIKE ' . XDB::format('CONCAT(\'%\', {?}, \'%\'', $this->expertise); + } +} +// }}} + +// {{{ class UFC_Mentor_Country +/** Filters users by mentoring country + * @param $country Two-letters code of country being searched + */ +class UFC_Mentor_Country extends UserFilterCondition +{ + private $country; + + public function __construct($country) + { + $this->country = $country; + } + + public function buildCondition(UserFilter &$uf) + { + $sub = $uf->addMentorFilter(UserFilter::MENTOR_COUNTRY); + return $sub . '.country = ' . XDB::format('{?}', $this->country); + } +} +// }}} + +// {{{ class UFC_Mentor_Sectorization +/** Filters users based on mentoring (sub|)sector + * @param $sector ID of sector + * @param $subsector Subsector (null for any) + */ +class UFC_Mentor_Sectorization extends UserFilterCondition +{ + private $sector; + private $subsector; + + public function __construct($sector, $subsector = null) + { + $this->sector = $sector; + $this->subsubsector = $subsector; + } + + public function buildCondition(UserFilter &$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); + } + return implode(' AND ', $conds); + } +} +// }}} + // {{{ class UFC_UserRelated /** Filters users based on a relation toward on user * @param $user User to which searched users are related @@ -1771,6 +1842,40 @@ class UserFilter return $joins; } + /** MENTORING + */ + + private $pms = array(); + const MENTOR_EXPERTISE = 1; + const MENTOR_COUNTRY = 2; + const MENTOR_SECTOR = 3; + + public function addMentorFilter($type) + { + switch($type) { + case MENTOR_EXPERTISE: + $pms['pme'] = 'profile_mentor'; + return 'pme'; + case MENTOR_COUNTRY: + $pms['pmc'] = 'profile_mentor_country'; + return 'pmc'; + case MENTOR_SECTOR: + $pms['pms'] = 'profile_mentor_sector'; + return 'pms'; + default: + return; + } + } + + private function mentorJoins() + { + $joins = array(); + foreach ($this->pms as $sub => $tab) { + $joins[$sub] = array('left', $tab, '$ME.uid = $UID'); + } + return $joins; + } + /** CONTACTS */ private $cts = array(); -- 2.1.4