X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fprofile.php;h=a74706364b337a23a0ef76dabea307de65119680;hb=3ac45f10c6b54e4db4bfeb0aeb5eef0f5ee5d1b2;hp=fe929c1723c4f5ee135f9a6a0d8bbfd47c5426af;hpb=0c54d458de4782d691b9bcdeac872982c1027231;p=platal.git diff --git a/classes/profile.php b/classes/profile.php index fe929c1..a747063 100644 --- a/classes/profile.php +++ b/classes/profile.php @@ -155,10 +155,12 @@ class Profile const FETCH_MENTOR_SECTOR = 0x000040; const FETCH_MENTOR_COUNTRY = 0x000080; const FETCH_PHONES = 0x000100; + const FETCH_JOB_TERMS = 0x000200; + const FETCH_MENTOR_TERMS = 0x000400; const FETCH_MINIFICHES = 0x00012D; // FETCH_ADDRESSES | FETCH_EDU | FETCH_JOBS | FETCH_NETWORKING | FETCH_PHONES - const FETCH_ALL = 0x0001FF; // OR of FETCH_* + const FETCH_ALL = 0x0007FF; // OR of FETCH_* private $fetched_fields = 0x000000; @@ -198,6 +200,14 @@ class Profile return $this->owner; } + public function isActive() + { + if ($this->owner()) { + return $this->owner->isActive(); + } + return false; + } + public function promo() { return $this->promo; @@ -371,14 +381,15 @@ class Profile public function nationalities() { $nats = array(); + $countries = DirEnum::getOptions(DirEnum::COUNTRIES); if ($this->nationality1) { - $nats[] = $this->nationality1; + $nats[$this->nationality1] = $countries[$this->nationality1]; } if ($this->nationality2) { - $nats[] = $this->nationality2; + $nats[$this->nationality2] = $countries[$this->nationality2]; } if ($this->nationality3) { - $nats[] = $this->nationality3; + $nats[$this->nationality3] = $countries[$this->nationality3]; } return $nats; } @@ -472,8 +483,8 @@ class Profile private function fetched($field) { - if (!array_key_exists($field, ProfileField::$fields)) { - Platal::page()->kill("Invalid field: $field"); + if (($fields | self::FETCH_ALL) != self::FETCH_ALL) { + Platal::page()->kill("Invalid fetched fields: $fields"); } return ($this->fetched_fields & $field); @@ -485,6 +496,9 @@ class Profile */ private function getProfileField($field) { + if (!array_key_exists($field, ProfileField::$fields)) { + Platal::page()->kill("Invalid field: $field"); + } if ($this->fetched($field)) { return null; } else { @@ -513,6 +527,9 @@ class Profile if ($this->addresses != null && $this->jobs != null) { $this->jobs->addAddresses($this->addresses); } + if ($this->jobs != null && $this->jobterms != null) { + $this->jobs->addJobTerms($this->jobterms); + } } /* Photo @@ -723,6 +740,15 @@ class Profile return array_pop($job); } + /** JobTerms + */ + private $jobterms = null; + public function setJobTerms(ProfileJobTerms $jobterms) + { + $this->jobterms = $jobterms; + $this->consolidateFields(); + } + /* Mentoring */ private $mentor_sectors = null; @@ -763,6 +789,34 @@ class Profile } } + /** List of job terms to specify mentoring */ + private $mentor_terms = null; + /** + * set job terms to specify mentoring + * @param $terms a ProfileMentoringTerms object listing terms only for this profile + */ + public function setMentoringTerms(ProfileMentoringTerms $terms) + { + $this->mentor_terms = $terms; + } + /** + * get all job terms that specify mentoring + * @return an array of JobTerms objects + */ + public function getMentoringTerms() + { + if ($this->mentor_terms == null && !$this->fetched(self::FETCH_MENTOR_TERMS)) { + $this->setMentoringTerms($this->getProfileField(self::FETCH_MENTOR_TERMS)); + } + + if ($this->mentor_terms == null) { + return array(); + } else { + return $this->mentor_terms->get(); + } + } + + /* Binets */ public function getBinets() @@ -850,8 +904,9 @@ class Profile IF( {?}, pn_n.name, NULL) AS nickname, IF(pn_uf.name IS NULL, pn_f.name, pn_uf.name) AS firstname_ordinary, IF(pn_ul.name IS NULL, pn_l.name, pn_ul.name) AS lastname_ordinary, - pd.yourself, pd.promo, pd.short_name, pd.directory_name AS full_name, - pd.directory_name, IF(pp.pub IN {?}, pp.display_tel, NULL) AS mobile, + pd.yourself, pd.promo, pd.short_name, pd.public_name AS full_name, + pd.directory_name, pd.public_name, pd.private_name, + IF(pp.pub IN {?}, pp.display_tel, NULL) AS mobile, (ph.pub IN {?} AND ph.attach IS NOT NULL) AS has_photo, ph.x AS photo_width, ph.y AS photo_height, p.last_change < DATE_SUB(NOW(), INTERVAL 365 DAY) AS is_old, @@ -990,6 +1045,26 @@ class Profile || $name == self::DN_SHORT || $name == self::DN_SORT; } + /** Returns the closest "accounts only" name type for $name + */ + public static function getAccountEquivalentName($name) + { + switch ($name) + { + case self::DN_DIRECTORY: + case self::DN_SORT: + return 'directory_name'; + case self::DN_FULL: + case self::DN_PUBLIC: + return 'full_name'; + case self::DN_PRIVATE: + case self::DN_SHORT: + case self::DN_YOURSELF: + default: + return 'display_name'; + } + } + public static function getNameTypeId($type, $for_sql = false) { if (!S::has('name_types')) { @@ -1038,7 +1113,7 @@ class Profile /** The school identifier consists of 6 digits. The first 3 represent the * promotion entry year. The last 3 indicate the student's rank. - * + * * Our identifier consists of 8 digits and both half have the same role. * This enables us to deal with bigger promotions and with a wider range * of promotions. @@ -1094,6 +1169,8 @@ class ProfileIterator implements PlIterator private $fields; private $visibility; + const FETCH_ALL = 0x000033F; // FETCH_ADDRESSES | FETCH_CORPS | FETCH_EDU | FETCH_JOBS | FETCH_MEDALS | FETCH_NETWORKING | FETCH_PHONES | FETCH_JOB_TERMS + public function __construct(PlIterator $it, array $pids, $fields = 0x0000, ProfileVisibility $visibility = null) { require_once 'profilefields.inc.php'; @@ -1112,39 +1189,12 @@ class ProfileIterator implements PlIterator $callbacks[0] = PlIteratorUtils::arrayValueCallback('pid'); $cb = PlIteratorUtils::objectPropertyCallback('pid'); - if ($fields & Profile::FETCH_ADDRESSES) { - $callbacks[Profile::FETCH_ADDRESSES] = $cb; - $subits[Profile::FETCH_ADDRESSES] = new ProfileFieldIterator('ProfileAddresses', $pids, $visibility); - } - - if ($fields & Profile::FETCH_CORPS) { - $callbacks[Profile::FETCH_CORPS] = $cb; - $subits[Profile::FETCH_CORPS] = new ProfileFieldIterator('ProfileCorps', $pids, $visibility); - } - - if ($fields & Profile::FETCH_EDU) { - $callbacks[Profile::FETCH_EDU] = $cb; - $subits[Profile::FETCH_EDU] = new ProfileFieldIterator('ProfileEducation', $pids, $visibility); - } - - if ($fields & Profile::FETCH_JOBS) { - $callbacks[Profile::FETCH_JOBS] = $cb; - $subits[Profile::FETCH_JOBS] = new ProfileFieldIterator('ProfileJobs', $pids, $visibility); - } - - if ($fields & Profile::FETCH_MEDALS) { - $callbacks[Profile::FETCH_MEDALS] = $cb; - $subits[Profile::FETCH_MEDALS] = new ProfileFieldIterator('ProfileMedals', $pids, $visibility); - } - - if ($fields & Profile::FETCH_NETWORKING) { - $callbacks[Profile::FETCH_NETWORKING] = $cb; - $subits[Profile::FETCH_NETWORKING] = new ProfileFieldIterator('ProfileNetworking', $pids, $visibility); - } - - if ($fields & Profile::FETCH_PHONES) { - $callbacks[Profile::FETCH_PHONES] = $cb; - $subits[Profile::FETCH_PHONES] = new ProfileFieldIterator('ProfilePhones', $pids, $visibility); + $fields = $fields & self::FETCH_ALL; + for ($field = 1; $field < $fields; $field *= 2) { + if (($fields & $field) ) { + $callbacks[$field] = $cb; + $subits[$field] = new ProfileFieldIterator($field, $pids, $visibility); + } } $this->iterator = PlIteratorUtils::parallelIterator($subits, $callbacks, 0); @@ -1170,6 +1220,9 @@ class ProfileIterator implements PlIterator if ($this->hasData(Profile::FETCH_JOBS, $vals)) { $pf->setJobs($vals[Profile::FETCH_JOBS]); } + if ($this->hasData(Profile::FETCH_JOB_TERMS, $vals)) { + $pf->setJobTerms($vals[Profile::FETCH_JOB_TERMS]); + } if ($this->hasData(Profile::FETCH_CORPS, $vals)) { $pf->setCorps($vals[Profile::FETCH_CORPS]);