/** 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()
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;
}
}
// }}}
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;
}
}
// }}}