Add "directory_hidden" permission to account types
[platal.git] / classes / user.php
index a7467b2..e380dac 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2011 Polytechnique.org                              *
+ *  Copyright (C) 2003-2014 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -24,6 +24,7 @@ class User extends PlUser
     const PERM_API_USER_READONLY = 'api_user_readonly';
     const PERM_DIRECTORY_AX      = 'directory_ax';
     const PERM_DIRECTORY_PRIVATE = 'directory_private';
+    const PERM_DIRECTORY_HIDDEN  = 'directory_hidden';
     const PERM_EDIT_DIRECTORY    = 'edit_directory';
     const PERM_FORUMS            = 'forums';
     const PERM_GROUPS            = 'groups';
@@ -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,14 +231,14 @@ 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 = Visibility::VIEW_NONE;
-        if ($this->is_admin) {
+        if ($this->is_admin || $this->checkPerms('directory_hidden')) {
             $level = Visibility::VIEW_ADMIN;
         } elseif ($this->checkPerms('directory_private')) {
             $level = Visibility::VIEW_PRIVATE;
@@ -363,12 +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 && !$this->_profile->visibility->equals($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()
@@ -1101,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:
 ?>