X-Git-Url: http://git.polytechnique.org/?a=blobdiff_plain;ds=sidebyside;f=classes%2Fuser.php;h=e380dacde2037f0f7168675f85a0308b645a0228;hb=6c615821baef0daad2d1d8d7ef988be146da58e3;hp=b7ac5f2e19454a410531f81be64fce03da8a1722;hpb=38a86f60ef2563469ac50ed1cc435d1ac554ff68;p=platal.git diff --git a/classes/user.php b/classes/user.php index b7ac5f2..e380dac 100644 --- a/classes/user.php +++ b/classes/user.php @@ -1,6 +1,6 @@ numRows()) { return $res->fetchOneCell(); } @@ -170,7 +171,7 @@ class User extends PlUser 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, - UNIX_TIMESTAMP(s.start) AS lastlogin, s.host, UNIX_TIMESTAMP(fp.last_seen) AS banana_last + s.start AS lastlogin, s.host, fp.last_seen AS banana_last ' . $fields . ' FROM accounts AS a INNER JOIN account_types AS at ON (at.type = a.type) @@ -230,23 +231,23 @@ class User extends PlUser * * Rules are: * - Everyone can view 'public' - * - directory_ax gives access to 'AX' level + * - directory_ax gives access to 'AX' level, ie. the printed directory * - directory_private gives access to 'private' level - * - admin gives access to 'hidden' level + * - admin and directory_hidden gives access to 'hidden' level */ public function readVisibility() { - $level = ProfileVisibility::VIS_NONE; - if ($this->is_admin) { - $level = ProfileVisibility::VIS_HIDDEN; + $level = Visibility::VIEW_NONE; + if ($this->is_admin || $this->checkPerms('directory_hidden')) { + $level = Visibility::VIEW_ADMIN; } elseif ($this->checkPerms('directory_private')) { - $level = ProfileVisibility::VIS_PRIVATE; + $level = Visibility::VIEW_PRIVATE; } elseif ($this->checkPerms('directory_ax')) { - $level = ProfileVisibility::VIS_AX; + $level = Visibility::VIEW_AX; } else { - $level = ProfileVisibility::VIS_PUBLIC; + $level = Visibility::VIEW_PUBLIC; } - return new ProfileVisibility($level); + return Visibility::get($level); } /** Retrieve the 'general' edit visibility. @@ -254,23 +255,18 @@ class User extends PlUser * * Rules are: * - Only admins can edit the 'hidden' fields - * - If someone has 'directory_edit' and 'directory_ax': AX level - * - If someone has 'directory_edit' and 'directory_private': Private level + * - If someone has 'directory_edit' (which is actually directory_ax_edit): AX level * - Otherwise, nothing. */ public function editVisibility() { - $level = ProfileVisibility::VIS_NONE; + $level = Visibility::VIEW_NONE; if ($this->is_admin) { - $level = ProfileVisibility::VIS_HIDDEN; + $level = Visibility::VIEW_ADMIN; } elseif ($this->checkPerms('directory_edit')) { - if ($this->checkPerms('directory_ax')) { - $level = ProfileVisibility::VIS_AX; - } elseif ($this->checkPerms('directory_private')) { - $level = ProfileVisibility::VIS_PRIVATE; - } + $level = Visibility::VIEW_AX; } - return new ProfileVisibility($level); + return Visibility::get($level); } // We do not want to store the password in the object. @@ -311,7 +307,7 @@ class User extends PlUser public function firstName() { if (!$this->hasProfile()) { - return $this->displayName(); + return $this->firstname; } return $this->profile()->firstName(); } @@ -319,7 +315,7 @@ class User extends PlUser public function lastName() { if (!$this->hasProfile()) { - return ''; + return $this->lastname; } return $this->profile()->lastName(); } @@ -368,10 +364,18 @@ class User extends PlUser if (!$this->_profile_fetched || $forceFetch) { $this->_profile_fetched = true; $this->_profile = Profile::get($this, $fields, $visibility); + } else if ($this->_profile !== null && $visibility !== null && !$this->_profile->visibility->equals($visibility)) { + return Profile::get($this, $fields, $visibility); } return $this->_profile; } + public function setPrefetchedProfile(Profile $profile) + { + $this->_profile_fetched = true; + $this->_profile = $profile; + } + /** Return true if the user has an associated profile. */ public function hasProfile() @@ -571,6 +575,10 @@ class User extends PlUser $watch['watch_promos'] = XDB::fetchColumn('SELECT promo FROM watch_promo WHERE uid = {?}', $this->id()); + $watch['watch_groups'] = XDB::fetchColumn("SELECT w.groupid + FROM watch_group AS w + INNER JOIN groups AS g ON (w.groupid = g.id AND NOT FIND_IN_SET('private', pub)) + WHERE w.uid = {?}", $this->id()); $watch['watch_users'] = XDB::fetchColumn('SELECT ni_id FROM watch_nonins WHERE uid = {?}', $this->id()); @@ -601,6 +609,12 @@ class User extends PlUser return $this->watch_promos; } + public function watchGroups() + { + $this->fetchWatchData(); + return $this->watch_groups; + } + public function watchUsers() { $this->fetchWatchData(); @@ -619,6 +633,7 @@ class User extends PlUser unset($this->watch_users); unset($this->watch_last); unset($this->watch_promos); + unset($this->watch_groups); } @@ -711,7 +726,7 @@ class User extends PlUser /** * Clears a user. * *always deletes in: account_lost_passwords, register_marketing, - * register_pending, register_subs, watch_nonins, watch, watch_promo + * register_pending, register_subs, watch_nonins, watch, watch_promo, watch_group, * *always keeps in: account_types, accounts, email_virtual, carvas, * group_members, homonyms_list, newsletter_ins, register_mstats, email_source_account * *deletes if $clearAll: account_auth_openid, announce_read, contacts, @@ -731,7 +746,7 @@ class User extends PlUser { $tables = array('account_lost_passwords', 'register_marketing', 'register_pending', 'register_subs', 'watch_nonins', - 'watch', 'watch_promo'); + 'watch', 'watch_promo', 'watch_group'); foreach ($tables as $t) { XDB::execute('DELETE FROM ' . $t . ' @@ -889,7 +904,6 @@ class User extends PlUser public static function makePerms($perms, $is_admin) { $flags = new PlFlagSet($perms); - $flags->addFlag(PERMS_USER); if ($is_admin) { $flags->addFlag(PERMS_ADMIN); } @@ -1094,5 +1108,5 @@ class UserIterator implements PlIterator } } -// vim:set et sw=4 sts=4 sws=4 foldmethod=marker enc=utf-8: +// vim:set et sw=4 sts=4 sws=4 foldmethod=marker fenc=utf-8: ?>