X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;f=classes%2Fuser.php;h=b5669fa4934e9483ae25bb21fb0d7a5e1dc9da3a;hb=190efb3a08127072aa3e0876a79e7bf76aa77051;hp=8551cbd2db9896acd0b662d9fea232ac00ecb270;hpb=f74509fbb4f06820dc3d028e3ffd2145f151b013;p=platal.git diff --git a/classes/user.php b/classes/user.php index 8551cbd..b5669fa 100644 --- a/classes/user.php +++ b/classes/user.php @@ -172,6 +172,7 @@ class User extends PlUser $joins .= XDB::format("LEFT JOIN group_members AS gpm ON (gpm.uid = a.uid AND gpm.asso_id = {?})\n", $globals->asso('id')); $fields[] = 'gpm.perms AS group_perms'; $fields[] = 'gpm.comm AS group_comm'; + $fields[] = 'gpm.position AS group_position'; } if (count($fields) > 0) { $fields = ', ' . implode(', ', $fields); @@ -194,7 +195,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 +245,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 +276,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 +328,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; } @@ -327,12 +344,26 @@ class User extends PlUser return !is_null($this->profile()); } + /** Return true if given a reference to the profile of this user. + */ + public function isMyProfile($other) + { + if (!$other) { + return false; + } else if ($other instanceof Profile) { + $profile = $this->profile(); + return $profile && $profile->id() == $other->id(); + } + return false; + } + /** Check if the user can edit to given profile. */ public function canEdit(Profile $profile) { - // XXX: Check permissions (e.g. secretary permission) - // and flags from the profile + if ($this->checkPerms(User::PERM_EDIT_DIRECTORY)) { + return true; + } return XDB::fetchOneCell('SELECT pid FROM account_profiles WHERE uid = {?} AND pid = {?}', @@ -570,29 +601,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()); } /** @@ -653,7 +691,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 = {?}', @@ -691,7 +729,7 @@ class User extends PlUser } } - $mmlist = new MMList($this); + $mmlist = new MMList(S::user()); $mmlist->kill($this->hruid, $clearAll); } @@ -776,7 +814,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());