X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fprofile.php;h=102f9080d127325ef2e162b5804c4bd4ff092572;hb=5c005b3704c4b83a0b796f2e7b1355b6f6e42c42;hp=6e68dc91f79958a02ea4edee6f64fd579049a15c;hpb=d1e6167749fdad08c81e23d09e1bbbf76e3b989b;p=platal.git diff --git a/classes/profile.php b/classes/profile.php index 6e68dc9..102f908 100644 --- a/classes/profile.php +++ b/classes/profile.php @@ -1,6 +1,6 @@ array('public'), 'ax' => array('ax', 'public'), 'private' => array('private', 'ax', 'public')); + const VISIBILITY_PUBLIC = 'public'; const VISIBILITY_AX = 'ax'; const VISIBILITY_PRIVATE = 'private'; + /* name tokens */ + const LASTNAME = 'lastname'; + const FIRSTNAME = 'firstname'; + const NICKNAME = 'nickname'; + const PSEUDONYM = 'pseudonym'; + const NAME = 'name'; + /* name variants */ + const VN_MARITAL = 'marital'; + const VN_ORDINARY = 'ordinary'; + const VN_OTHER = 'other'; + const VN_INI = 'ini'; + /* display names */ + const DN_FULL = 'directory_name'; + const DN_DISPLAY = 'yourself'; + const DN_YOURSELF = 'yourself'; + const DN_DIRECTORY = 'directory_name'; + const DN_PRIVATE = 'private_name'; + const DN_PUBLIC = 'public_name'; + const DN_SHORT = 'short_name'; + const DN_SORT = 'sort_name'; + + static public $name_variants = array( + self::LASTNAME => array(self::VN_MARITAL, self::VN_ORDINARY), + self::FIRSTNAME => array(self::VN_ORDINARY, self::VN_INI, self::VN_OTHER) + ); + const ADDRESS_MAIN = 0x000001; const ADDRESS_PERSO = 0x000002; const ADDRESS_PRO = 0x000004; @@ -119,11 +146,21 @@ class Profile return $this->firstname; } + public function firstNames() + { + return $this->nameVariants(self::FIRSTNAME); + } + public function lastName() { return $this->lastname; } + public function lastNames() + { + return $this->nameVariants(self::LASTNAME); + } + public function isFemale() { return $this->sex == PlUser::GENDER_FEMALE; @@ -135,6 +172,19 @@ class Profile return $this->data; } + private function nameVariants($type) + { + $vals = array($this->$type); + foreach (self::$name_variants[$type] as $var) { + $vartype = $type . '_' . $var; + $varname = $this->$vartype; + if ($varname != null && $varname != "") { + $vals[] = $varname; + } + } + return array_unique($vals); + } + public function __get($name) { if (property_exists($this, $name)) { @@ -161,12 +211,38 @@ class Profile Platal::page()->kill("Visibility invalide: " . $visibility); } $this->visibility = self::$v_values[$visibility]; - if ($this->mobile && !in_array($this->modbile_pub, $this->visibility)) { + if ($this->mobile && !in_array($this->mobile_pub, $this->visibility)) { unset($this->data['mobile']); } } + /* Photo + */ + public function getPhoto($fallback = true) + { + /* TODO: migrate photo table to profile_photo, change uid to pid + */ + $cond = ''; + if ($this->visibility) { + $cond = ' AND pub IN ' . XDB::formatArray($this->visibility); + } + $res = XDB::query('SELECT * + FROM photo + WHERE attachmime IN (\'jpeg\', \'png\') + ' . $cond . ' AND uid = {?}', + $this->id()); + if ($res->numRows() > 0) { + $photo = $res->fetchOneAssoc(); + return PlImage::fromData($photo['attach'], 'image/' . $photo['attachmime'], + $photo['x'], $photo['y']); + } else if ($fallback) { + return PlImage::fromFile(dirname(__FILE__).'/../htdocs/images/none.png', + 'image/png'); + } + return null; + } + /* Addresses */ public function getAddresses($flags, $limit = null) @@ -304,11 +380,10 @@ class Profile 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, - pjfe.name AS function, pjse.name AS sector, - pjsse.name AS subsector, pjssse.name AS subsubsector + 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_function_enum AS pjfe ON (pjfe.id = pj.functionid) 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) @@ -326,6 +401,15 @@ class Profile return $job->next(); } + /* Binets + */ + public function getBinets() + { + return XDB::fetchColumn('SELECT binet_id + FROM binets_ins + WHERE user_id = {?}', $this->id()); + } + public function owner() { @@ -339,24 +423,26 @@ class Profile } return XDB::fetchAllAssoc('SELECT p.*, p.sex = \'female\' AS sex, pe.entry_year, pe.grad_year, pn_f.name AS firstname, pn_l.name AS lastname, pn_n.name AS nickname, - IF(pn_uf.name IS NULL, pn_f.name, pn_uf.name) AS firstname_usual, - IF(pn_ul.name IS NULL, pn_l.name, pn_ul.name) AS lastname_usual, + 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.promo AS promo, pd.short_name, pd.directory_name AS full_name, - pp.display_tel AS mobile, pp.pub AS mobile_pub + pd.directory_name, pp.display_tel AS mobile, pp.pub AS mobile_pub, + ph.pub AS photo_pub FROM profiles AS p INNER JOIN profile_display AS pd ON (pd.pid = p.pid) INNER JOIN profile_education AS pe ON (pe.uid = p.pid AND FIND_IN_SET(\'primary\', pe.flags)) INNER JOIN profile_name AS pn_f ON (pn_f.pid = p.pid - AND pn_f.typeid = ' . self::getNameTypeId('lastname', true) . ') + AND pn_f.typeid = ' . self::getNameTypeId('firstname', true) . ') INNER JOIN profile_name AS pn_l ON (pn_l.pid = p.pid - AND pn_l.typeid = ' . self::getNameTypeId('firstname', true) . ') + AND pn_l.typeid = ' . self::getNameTypeId('lastname', true) . ') LEFT JOIN profile_name AS pn_uf ON (pn_uf.pid = p.pid - AND pn_uf.typeid = ' . self::getNameTypeId('lastname_ordinary', true) . ') + AND pn_uf.typeid = ' . self::getNameTypeId('firstname_ordinary', true) . ') LEFT JOIN profile_name AS pn_ul ON (pn_ul.pid = p.pid - AND pn_ul.typeid = ' . self::getNameTypeId('firstname_ordinary', true) . ') + AND pn_ul.typeid = ' . self::getNameTypeId('lastname_ordinary', true) . ') LEFT JOIN profile_name AS pn_n ON (pn_n.pid = p.pid AND pn_n.typeid = ' . self::getNameTypeId('nickname', true) . ') LEFT JOIN profile_phones AS pp ON (pp.uid = p.pid AND pp.link_type = \'user\' AND tel_type = \'mobile\') + LEFT JOIN photo AS ph ON (ph.uid = p.pid) WHERE p.pid IN ' . XDB::formatArray($pids) . ' GROUP BY p.pid'); } @@ -433,6 +519,14 @@ class Profile return self::getBulkProfilesWithPIDs($table); } + public static function isDisplayName($name) + { + return $name == self::DN_FULL || $name == self::DN_DISPLAY + || $name == self::DN_YOURSELF || $name == self::DN_DIRECTORY + || $name == self::DN_PRIVATE || $name == self::DN_PUBLIC + || $name == self::DN_SHORT || $name == self::DN_SORT; + } + public static function getNameTypeId($type, $for_sql = false) { if (!S::has('name_types')) {