X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fprofile.php;h=bb4d2bf97241372760f29bcfc7b4a7fa88228d89;hb=57fc676c5dfbf964c21a6b1a1f6e5abcb08e0b42;hp=6b062315be26fb43f44ac4dc4da21c7f8a7ee837;hpb=22771578c2d44fe4488546116a84e1561f083ed7;p=platal.git diff --git a/classes/profile.php b/classes/profile.php index 6b06231..bb4d2bf 100644 --- a/classes/profile.php +++ b/classes/profile.php @@ -1,6 +1,6 @@ 'Noms', @@ -168,6 +171,13 @@ class Profile implements PlExportable $this->visibility = $visibility; } + public function __destruct() + { + // Need to delete objects allocated by the profile + // http://www.php.net/manual/en/function.unset.php#98692 + unset($this->owner); + } + public function id() { return $this->pid; @@ -318,6 +328,16 @@ class Profile implements PlExportable } } + // Returns younger/older promotion year for a given education. + static public function extremePromotions($education) + { + return XDB::fetchOneRow("SELECT MIN(pe.promo_year) AS min, MAX(pe.promo_year) AS max + FROM profile_education AS pe + INNER JOIN profile_education_degree_enum AS pede ON (pe.degreeid = pede.id) + WHERE pede.degree = {?} AND FIND_IN_SET('primary', pe.flags)", + $education); + } + /** Print a name with the given formatting: * %s = • for women * %f = firstname @@ -353,7 +373,7 @@ class Profile implements PlExportable public function firstName() { - return $this->firstname; + return $this->firstname_ordinary; } public function firstNames() @@ -363,7 +383,7 @@ class Profile implements PlExportable public function lastName() { - return $this->lastname; + return $this->lastname_ordinary; } public function lastNames() @@ -458,7 +478,8 @@ class Profile implements PlExportable * Clears a profile. * *always deletes in: profile_addresses, profile_binets, profile_deltaten, * profile_job, profile_langskills, profile_mentor, profile_networking, - * profile_phones, profile_skills, watch_profile + * profile_partnersharing_settings, profile_phones, profile_skills, + * watch_profile * *always keeps in: profile_corps, profile_display, profile_education, * profile_medals, profile_*_names, profile_photos, search_name * *modifies: profiles @@ -469,7 +490,7 @@ class Profile implements PlExportable 'profile_job', 'profile_langskills', 'profile_mentor', 'profile_networking', 'profile_skills', 'watch_profile', 'profile_phones', 'profile_addresses', 'profile_binets', - 'profile_deltaten'); + 'profile_deltaten', 'profile_partnersharing_settings'); foreach ($tables as $t) { XDB::execute('DELETE FROM ' . $t . ' @@ -479,7 +500,7 @@ class Profile implements PlExportable XDB::execute("UPDATE profiles SET cv = NULL, freetext = NULL, freetext_pub = 'private', - medals_pub = 'private', alias_pub = 'private', + medals_pub = 'private', alias_pub = 'hidden', email_directory = NULL WHERE pid = {?}", $this->id()); @@ -674,7 +695,10 @@ class Profile implements PlExportable public function getEducations($flags, $limit = null) { if ($this->educations == null && !$this->fetched(self::FETCH_EDU)) { - $this->setEducations($this->getProfileField(self::FETCH_EDU)); + $educations = $this->getProfileField(self::FETCH_EDU); + if ($educations) { + $this->setEducations($educations); + } } if ($this->educations == null) { @@ -699,7 +723,10 @@ class Profile implements PlExportable public function getCorps() { if ($this->corps == null && !$this->fetched(self::FETCH_CORPS)) { - $this->setCorps($this->getProfileField(self::FETCH_CORPS)); + $corps = $this->getProfileField(self::FETCH_CORPS); + if ($corps) { + $this->setCorps($corps); + } } return $this->corps; } @@ -794,7 +821,10 @@ class Profile implements PlExportable public function getMentoringCountries() { if ($this->mentor_countries == null && !$this->fetched(self::FETCH_MENTOR_COUNTRY)) { - $this->setMentoringCountries($this->getProfileField(self::FETCH_MENTOR_COUNTRY)); + $countries = $this->getProfileField(self::FETCH_MENTOR_COUNTRY); + if ($countries) { + $this->setMentoringCountries($countries); + } } if ($this->mentor_countries == null) { @@ -821,7 +851,10 @@ class Profile implements PlExportable public function getMentoringTerms() { if ($this->mentor_terms == null && !$this->fetched(self::FETCH_MENTOR_TERMS)) { - $this->setMentoringTerms($this->getProfileField(self::FETCH_MENTOR_TERMS)); + $terms = $this->getProfileField(self::FETCH_MENTOR_TERMS); + if ($terms) { + $this->setMentoringTerms($terms); + } } if ($this->mentor_terms == null) { @@ -831,6 +864,50 @@ class Profile implements PlExportable } } + /* Skills */ + private $skills = null; + public function setSkills(ProfileSkills $skills) + { + $this->skills = $skills; + } + public function getSkills() + { + if ($this->skills == null && !$this->fetched(self::FETCH_SKILL)) { + $skills = $this->getProfileField(self::FETCH_SKILL); + if ($skills) { + $this->setSkills($skills); + } + } + + if ($this->skills == null) { + return array(); + } else { + return $this->skills->skills; + } + } + + /* Languades */ + private $languages = null; + public function setLanguages(ProfileLanguages $languages) + { + $this->languages = $languages; + } + public function getLanguages() + { + if ($this->languages == null && !$this->fetched(self::FETCH_LANGUAGE)) { + $languages = $this->getProfileField(self::FETCH_LANGUAGE); + if ($languages) { + $this->setLanguages($languages); + } + } + + if ($this->languages == null) { + return array(); + } else { + return $this->languages->languages; + } + } + /** DeltaTen */ @@ -882,6 +959,19 @@ class Profile implements PlExportable return array(); } } + + public function getFullBinets() + { + if ($this->visibility->isVisible(Visibility::EXPORT_PRIVATE)) { + return XDB::fetchAllAssoc('SELECT binet_id, text, url + FROM profile_binets AS pb + LEFT JOIN profile_binet_enum AS pbe ON (pbe.id = pb.binet_id) + WHERE pid = {?}', $this->id()); + } else { + return array(); + } + } + public function getBinetsNames() { if ($this->visibility->isVisible(Visibility::EXPORT_PRIVATE)) { @@ -905,7 +995,10 @@ class Profile implements PlExportable public function getMedals() { if ($this->medals == null && !$this->fetched(self::FETCH_MEDALS)) { - $this->setMedals($this->getProfileField(self::FETCH_MEDALS)); + $medals = $this->getProfileField(self::FETCH_MEDALS); + if ($medals) { + $this->setMedals($medals); + } } if ($this->medals == null) { return array(); @@ -913,6 +1006,28 @@ class Profile implements PlExportable return $this->medals->medals; } + /** Sharing data with partner websites + */ + private $partners_settings = null; + public function setPartnersSettings(ProfilePartnerSharing $partners_settings) + { + $this->partners_settings = $partners_settings; + } + + public function getPartnerSettings($partner_id) + { + if ($this->partners_settings === null && !$this->fetched(self::FETCH_PARTNER)) { + $settings = $this->getProfileField(self::FETCH_PARTNER); + if ($settings) { + $this->setPartnersSettings($settings); + } + } + if ($this->partners_settings === null) { + return PartnerSettings::getEmpty($partner_id); + } + return $this->partners_settings->get($partner_id); + } + public function compareNames($firstname, $lastname) { $_lastname = mb_strtoupper($this->lastName()); @@ -975,11 +1090,11 @@ class Profile implements PlExportable IF ({?}, pse.text, NULL) AS section, ppn.firstname_main AS firstname, ppn.lastname_main AS lastname, IF ({?}, pn.name, NULL) AS nickname, IF (ppn.firstname_ordinary = \'\', ppn.firstname_main, ppn.firstname_ordinary) AS firstname_ordinary, - IF (ppn.lastname_ordinary = \'\', ppn.firstname_main, ppn.lastname_ordinary) AS lastname_ordinary, + IF (ppn.lastname_ordinary = \'\', ppn.lastname_main, ppn.lastname_ordinary) AS lastname_ordinary, 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 >= {?}, pp.display_tel, NULL) AS mobile, - (ph.pub >= {?} AND ph.attach IS NOT NULL) AS has_photo, + (ph.pub >= {?} AND ph.attach IS NOT NULL) AS has_photo, ph.pub as photo_pub, ph.x AS photo_width, ph.y AS photo_height, p.last_change < DATE_SUB(NOW(), INTERVAL 365 DAY) AS is_old, pm.expertise AS mentor_expertise, @@ -1119,18 +1234,19 @@ class Profile implements PlExportable */ public static function getAccountEquivalentName($name) { - switch ($name) - { - case self::DN_DIRECTORY: - case self::DN_SORT: + switch ($name) { + case self::DN_DIRECTORY: return 'directory_name'; - case self::DN_FULL: - case self::DN_PUBLIC: + case self::DN_SORT: + return 'sort_name'; + case self::DN_FULL: + case self::DN_PUBLIC: + case self::DN_PRIVATE: + case self::DN_SHORT: return 'full_name'; - case self::DN_PRIVATE: - case self::DN_SHORT: - case self::DN_YOURSELF: - default: + case self::DN_YOURSELF: + return 'display_name'; + default: return 'display_name'; } }