X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=include%2Fprofilefields.inc.php;h=263fcb5176f5629431b184a47211f04aa68e7cb2;hb=abc8b908704ff4cf1afe51aef381557f678f7982;hp=c1dd0743d09ef1f11dc61476defff513e7a9d046;hpb=173ff0bdf41db90ee0995e0c3bf844bf2151d0e6;p=platal.git diff --git a/include/profilefields.inc.php b/include/profilefields.inc.php index c1dd074..263fcb5 100644 --- a/include/profilefields.inc.php +++ b/include/profilefields.inc.php @@ -36,6 +36,8 @@ abstract class ProfileField Profile::FETCH_MENTOR_COUNTRY => 'ProfileMentoringCountries', Profile::FETCH_JOB_TERMS => 'ProfileJobTerms', Profile::FETCH_MENTOR_TERMS => 'ProfileMentoringTerms', + Profile::FETCH_SKILL => 'ProfileSkills', + Profile::FETCH_LANGUAGE => 'ProfileLanguages', Profile::FETCH_PARTNER => 'ProfilePartnerSharing', ); @@ -374,7 +376,7 @@ class ProfileMedals extends ProfileField public static function fetchData(array $pids, Visibility $visibility) { - $data = XDB::iterator('SELECT pm.pid, pm.mid, pm.gid, pme.text, pme.img, pmge.text AS grade + $data = XDB::iterator('SELECT pm.pid, pm.mid, pm.gid, pme.text, pme.img, pmge.text AS grade, pm.level FROM profile_medals AS pm LEFT JOIN profiles AS p ON (pm.pid = p.pid) LEFT JOIN profile_medal_enum AS pme ON (pme.id = pm.mid) @@ -722,6 +724,66 @@ class ProfileMentoringTerms extends ProfileJobTerms } } // }}} +// {{{ 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')); + } +} +// }}} // {{{ class ProfilePartnerSharing [ Field ] class ProfilePartnerSharing extends ProfileField { @@ -813,7 +875,7 @@ class CompanyList static public function get($id) { - if (!array_key_exists($id, self::$companies)) { + if (!is_null($id) && !array_key_exists($id, self::$companies)) { self::preload(); } if (isset(self::$companies[$id])) {