+
+ public function addJobTerms(ProfileJobTerms $jobterms)
+ {
+ $terms = $jobterms->get();
+ foreach ($terms as $term) {
+ if ($this->pid == $term->pid && array_key_exists($term->jid, $this->jobs)) {
+ $this->jobs[$term->jid]->addTerm($term);
+ }
+ }
+ }
+}
+// }}}
+// {{{ class ProfileJobTerms [ Field ]
+class ProfileJobTerms extends ProfileField
+{
+ private $jobterms = array();
+
+ public function __construct(PlInnerSubIterator $it)
+ {
+ $this->pid = $it->value();
+ while ($term = $it->next()) {
+ $this->jobterms[] = new JobTerm($term);
+ }
+ }
+
+ public function get()
+ {
+ return $this->jobterms;
+ }
+
+ public static function fetchData(array $pids, Visibility $visibility)
+ {
+ $data = XDB::iterator('SELECT jt.jtid, jte.full_name, jt.pid, jt.jid
+ FROM profile_job_term AS jt
+ INNER JOIN profile_job AS j ON (jt.pid = j.pid AND jt.jid = j.id)
+ LEFT JOIN profile_job_term_enum AS jte USING(jtid)
+ LEFT JOIN profile_visibility_enum AS pve ON (pve.access_level = {?})
+ WHERE jt.pid IN {?} AND pve.best_display_level + 0 <= j.pub + 0
+ ORDER BY ' . XDB::formatCustomOrder('jt.pid', $pids),
+ $visibility->level(), $pids);
+ return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid'));
+ }
+}
+// }}}
+// {{{ class ProfileMentoringTerms [ Field ]
+class ProfileMentoringTerms extends ProfileJobTerms
+{
+ public static function fetchData(array $pids, Visibility $visibility)
+ {
+ $data = XDB::iterator('SELECT mt.jtid, jte.full_name, mt.pid
+ FROM profile_mentor_term AS mt
+ LEFT JOIN profile_job_term_enum AS jte USING(jtid)
+ WHERE mt.pid IN {?}
+ ORDER BY ' . XDB::formatCustomOrder('mt.pid', $pids),
+ $pids);
+ return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid'));
+ }
+}
+// }}}
+// {{{ class ProfileSkills [ Field ]
+class ProfileSkills extends ProfileField
+{
+ public $skills = array();
+
+ public function __construct(PlInnerSubIterator $it)
+ {
+ $this->pid = $it->value();
+ while ($skill = $it->next()) {
+ $this->skills[$skill['cid']] = $skill;
+ }
+ }
+
+ public static function fetchData(array $pids, Visibility $visibility)
+ {
+ $data = XDB::iterator('SELECT ps.cid, pse.text_fr, ps.level, ps.pid
+ FROM profile_skills AS ps
+ INNER JOIN profile_skill_enum AS pse ON (pse.id = ps.cid)
+ WHERE ps.pid IN {?}
+ ORDER BY ' . XDB::formatCustomOrder('ps.pid', $pids),
+ $pids);
+ return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid'));
+ }
+}
+// }}}
+// {{{ class ProfileLanguages [ Field ]
+class ProfileLanguages extends ProfileField
+{
+ public $languages = array();
+
+ public function __construct(PlInnerSubIterator $it)
+ {
+ static $levels = array(
+ 1 => 'connaissance basique',
+ 2 => 'maîtrise des bases',
+ 3 => 'maîtrise limitée',
+ 4 => 'maîtrise générale',
+ 5 => 'bonne maîtrise',
+ 6 => 'maîtrise complète'
+ );
+
+ $this->pid = $it->value();
+ while ($language = $it->next()) {
+ $this->languages[$language['lid']] = $language;
+ $this->languages[$language['lid']]['level'] = $levels[$language['level']];
+ }
+ }
+
+ public static function fetchData(array $pids, Visibility $visibility)
+ {
+ $data = XDB::iterator('SELECT ps.lid, pse.language, ps.level, ps.pid
+ FROM profile_langskills AS ps
+ INNER JOIN profile_langskill_enum AS pse ON (pse.iso_639_2b = ps.lid)
+ WHERE ps.pid IN {?}
+ ORDER BY ' . XDB::formatCustomOrder('ps.pid', $pids),
+ $pids);
+ return PlIteratorUtils::subIterator($data, PlIteratorUtils::arrayValueCallback('pid'));
+ }