X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=classes%2Fuser.php;h=fb9059c4b6d482a642eb51498c6c09c03da04453;hb=2d89ec936167033886ae76b153605d7ccf19bc20;hp=49f7931342bd0e71ea1ef3ae2b9a830b6c8edfd6;hpb=fceed6ea036b85ea418d3911f5e33f6d9fabfd0c;p=platal.git diff --git a/classes/user.php b/classes/user.php index 49f7931..fb9059c 100644 --- a/classes/user.php +++ b/classes/user.php @@ -194,7 +194,7 @@ class User extends PlUser IF (ab.alias IS NULL, NULL, CONCAT(ab.alias, \'@' . $globals->mail->domain2 . '\')) AS bestalias_alternate, a.email, a.full_name, a.directory_name, a.display_name, a.sex = \'female\' AS gender, IF(a.state = \'active\', CONCAT(at.perms, \',\', IF(a.user_perms IS NULL, \'\', a.user_perms)), \'\') AS perms, - a.user_perms, a.email_format, a.is_admin, a.state, a.type, a.skin, + a.user_perms, a.email_format, a.is_admin, a.state, a.type, at.description AS type_description, a.skin, FIND_IN_SET(\'watch\', a.flags) AS watch, a.comment, a.weak_password IS NOT NULL AS weak_access, g.g_account_name IS NOT NULL AS googleapps, a.token IS NOT NULL AS token_access, a.token, a.last_version, @@ -244,6 +244,12 @@ class User extends PlUser $this->perm_flags = self::makePerms($this->perms, $this->is_admin); } + public function setPerms($perms) + { + $this->perms = $perms; + $this->perm_flags = null; + } + // We do not want to store the password in the object. // So, fetch it 'on demand' public function password() @@ -269,6 +275,16 @@ class User extends PlUser return $this->profile()->promo(); } + public function category() + { + $promo = $this->promo(); + if (!empty($promo)) { + return $promo; + } else { + return $this->type_description; + } + } + public function firstName() { if (!$this->hasProfile()) { @@ -311,11 +327,11 @@ class User extends PlUser /** Return the main profile attached with this account if any. */ - public function profile($forceFetch = false) + public function profile($forceFetch = false, $fields = 0x0000, $visibility = null) { if (!$this->_profile_fetched || $forceFetch) { $this->_profile_fetched = true; - $this->_profile = Profile::get($this); + $this->_profile = Profile::get($this, $fields, $visibility); } return $this->_profile; } @@ -584,29 +600,36 @@ class User extends PlUser // Groupes X private $groups = null; - public function groups() + public function groups($institutions = false, $onlyPublic = false) { if (is_null($this->groups)) { - $this->groups = XDB::fetchAllAssoc('asso_id', 'SELECT asso_id, perms, comm - FROM group_members + $this->groups = XDB::fetchAllAssoc('asso_id', 'SELECT gm.asso_id, gm.perms, gm.comm, + g.diminutif, g.nom, g.site, g.cat, + g.pub + FROM group_members AS gm + INNER JOIN groups AS g ON (g.id = gm.asso_id) WHERE uid = {?}', $this->id()); } - return $this->groups; - } - - public function groupNames($institutions = false) - { - if ($institutions) { - $where = ' AND (g.cat = \'GroupesX\' OR g.cat = \'Institutions\')'; + if (!$institutions && !$onlyPublic) { + return $this->groups; } else { - $where = ''; + $result = array(); + foreach ($this->groups as $id=>$data) { + if ($institutions) { + if ($data['cat'] != Group::CAT_GROUPESX && $data['cat'] != Group::CAT_INSTITUTIONS) { + continue; + } + } + if ($onlyPublic) { + if ($data['pub'] != 'public') { + continue; + } + } + $result[$id] = $data; + } + return $result; } - return XDB::fetchAllAssoc('SELECT g.diminutif, g.nom, g.site - FROM group_members AS gm - LEFT JOIN groups AS g ON (g.id = gm.asso_id) - WHERE gm.uid = {?}' . $where, - $this->id()); } /** @@ -667,7 +690,7 @@ class User extends PlUser 'forum_innd', 'forum_profiles', 'forum_subs', 'group_announces_read', 'group_members', 'group_member_sub_requests', 'reminder', 'requests', - 'requests_hidden'); + 'requests_hidden', 'aliases'); foreach ($tables as $t) { XDB::execute('DELETE FROM ' . $t . ' WHERE uid = {?}', @@ -705,7 +728,7 @@ class User extends PlUser } } - $mmlist = new MMList($this); + $mmlist = new MMList(S::user()); $mmlist->kill($this->hruid, $clearAll); } @@ -790,7 +813,7 @@ class User extends PlUser XDB::execute('UPDATE log_last_sessions SET id = {?} WHERE uid = {?}', - $newuser->id()); + $lastSession, $newuser->id()); XDB::execute('DELETE FROM accounts WHERE uid = {?}', $this->id());