From 949fc7367d8a29d15f8d29cdea34491daeec9d41 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Barrois?= Date: Wed, 17 Mar 2010 18:02:15 +0100 Subject: [PATCH] Add support for ProfileJobs MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Signed-off-by: Raphaël Barrois --- classes/profile.php | 31 +++++++++---------------- include/profilefields.inc.php | 54 +++++++++++++++++++++++++------------------ 2 files changed, 43 insertions(+), 42 deletions(-) diff --git a/classes/profile.php b/classes/profile.php index d0b4c78..a810870 100644 --- a/classes/profile.php +++ b/classes/profile.php @@ -431,29 +431,20 @@ class Profile /** Jobs */ + private $jobs = null; + public function setJobs(ProfileJobs $jobs) + { + $this->jobs = $jobs; + $this->consolidateFields(); + } public function getJobs($flags, $limit = null) { - $where = XDB::format('pj.pid = {?}', $this->id()); - $cond = 'TRUE'; - if ($this->visibility) { - $where .= ' AND pj.pub IN ' . XDB::formatArray($this->visibility); - $cond = 'pj.email_pub IN ' . XDB::formatArray($this->visibility); - } - $limit = is_null($limit) ? '' : XDB::format('LIMIT {?}', (int)$limit); - return XDB::iterator('SELECT pje.name, pje.acronym, pje.url, pje.email, pje.NAF_code, - pj.description, pj.url AS user_site, - IF (' . $cond . ', pj.email, NULL) AS user_email, - pjse.name AS sector, pjsse.name AS subsector, - pjssse.name AS subsubsector - FROM profile_job AS pj - INNER JOIN profile_job_enum AS pje ON (pje.id = pj.jobid) - LEFT JOIN profile_job_sector_enum AS pjse ON (pjse.id = pj.sectorid) - LEFT JOIN profile_job_subsector_enum AS pjsse ON (pjsse.id = pj.subsectorid) - LEFT JOIN profile_job_subsubsector_enum AS pjssse ON (pjssse.id = pj.subsubsectorid) - WHERE ' . $where . ' - ORDER BY pj.id - ' . $limit); + if ($this->jobs == null) { + $this->setJobs($this->getProfileField('ProfileJobs')); + } + + return $this->jobs->get($flags, $limit); } public function getMailJob() diff --git a/include/profilefields.inc.php b/include/profilefields.inc.php index 9e91c90..29eadb2 100644 --- a/include/profilefields.inc.php +++ b/include/profilefields.inc.php @@ -538,14 +538,13 @@ class ProfileAddresses extends ProfileField return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid')); } - public static function addPhones(array $addresses, $phones) + public function addPhones($phones) { foreach ($phones as $phone) { - if ($phone->link_type == Phone::LINK_ADDRESS) { - $addresses[$phone->link_id]->addPhone($phone); + if ($phone->link_type == Phone::LINK_ADDRESS && array_key_exists($phone->link_id, $this->addresses)) { + $this->addresses[$phone->link_id]->addPhone($phone); } } - return $addresses; } } // }}} @@ -582,52 +581,63 @@ class ProfileJobs extends ProfileField private function __construct(PlIterator $jobs) { while ($job = $jobs->next()) { - $this->jobs[] = Jobs::buildFromData($job); + $this->jobs[$job['id']] = Jobs::buildFromData($job); } } public static function fetchData(array $pids, $visibility) { - $data = XDB::iterator('SELECT description, url, jobid, IF(email_pub IN {?}, email, NULL) AS email + $data = XDB::iterator('SELECT id, pid, description, url, + jobid, sectorid, subsctorid, subsubsectorid, + IF(email_pub IN {?}, email, NULL) AS email FROM profile_job WHERE pid IN {?} AND pub IN {?} - ORDER BY ' . XDB::formatCustomOrder('pid', $pids), - XDB::formatArray($visibility), - XDB::formatArray($pids), - XDB::formatArray($visibility) - ); + ORDER BY ' . XDB::formatCustomOrder('pid', $pids) . ', + id', + $visibility, $pids, $visibility); return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid')); } - public static function addPhones(array $jobs, array $phones) + public function get($flags, $limit = null) + { + $jobs = array(); + $nb = 0; + foreach ($this->jobs as $id => $job) { + $jobs[$id] = $job; + ++$nb; + if ($limit != null && $nb >= $limit) { + break; + } + } + return PlIteratorUtils::fromArray($jobs); + } + + public function addPhones(array $phones) { foreach ($phones as $phone) { - if ($phone->link_type == Phone::LINK_JOB) { - $jobs[$phone->link_id]->addPhones($phone); + if ($phone->link_type == Phone::LINK_JOB && array_key_exists($phone->link_id, $this->jobs)) { + $this->jobs[$phone->link_id]->addPhones($phone); } } - return $jobs; } - public static function addAddresses(array $jobs, array $addresses) + public static function addAddresses(array $addresses) { foreach ($addresses as $address) { - if ($address->link_type == Address::LINK_JOB) { - $jobs[$address->link_id]->setAddress($address); + if ($address->link_type == Address::LINK_JOB && array_key_exists($address->link_id, $this->jobs)) { + $this->jobs[$address->link_id]->setAddress($address); } } - return $jobs; } - public static function addCompanies(array $jobs, array $companies) + public static function addCompanies(array $companies) { - foreach ($jobs as $job) + foreach ($this->jobs as $job) { $job->setCompany($companies[$job->company_id]); } - return $jobs; } } // }}} -- 2.1.4