Adds IHEDN and CHEAr to the education list.
[platal.git] / classes / user.php
index ba271dd..71b21c9 100644 (file)
@@ -24,11 +24,18 @@ class User extends PlUser
     private $_profile_fetched = false;
     private $_profile = null;
 
+    // Additional fields (non core)
+    protected $promo = null;
+
     // Implementation of the login to uid method.
     protected function getLogin($login)
     {
         global $globals;
 
+        if (!$login) {
+            throw new UserNotFoundException();
+        }
+
         if ($login instanceof User) {
             $machin->id();
         }
@@ -163,11 +170,15 @@ class User extends PlUser
                                       a.email_format, a.is_admin, a.state, a.type, a.skin,
                                       FIND_IN_SET(\'watch\', a.flags) AS watch, a.comment,
                                       a.weak_password IS NOT NULL AS weak_access,
-                                      a.token IS NOT NULL AS token_access ' . $fields . '
+                                      a.token IS NOT NULL AS token_access,
+                                      (e.email IS NULL AND NOT FIND_IN_SET(\'googleapps\', eo.storage)) AND a.state != \'pending\' AS lost
+                                      ' . $fields . '
                                 FROM  accounts AS a
                           INNER JOIN  account_types AS at ON (at.type = a.type)
                            LEFT JOIN  aliases AS af ON (af.id = a.uid AND af.type = \'a_vie\')
                            LEFT JOIN  aliases AS ab ON (ab.id = a.uid AND FIND_IN_SET(\'bestalias\', ab.flags))
+                           LEFT JOIN  emails AS e ON (e.uid = a.uid AND e.flags = \'active\')
+                           LEFT JOIN  email_options AS eo ON (eo.uid = a.uid)
                                    ' . $joins . '
                                WHERE  a.uid IN (' . implode(', ', $uids) . ')
                             GROUP BY  a.uid');
@@ -451,7 +462,7 @@ class User extends PlUser
     private $contacts = null;
     public function isContact(PlUser &$user)
     {
-        if ($this->contacts) {
+        if (is_null($this->contacts)) {
             $this->contacts = XDB::fetchAllAssoc('contact', 'SELECT  *
                                                                FROM  contacts
                                                               WHERE  uid = {?}',
@@ -475,7 +486,7 @@ class User extends PlUser
     public static function _default_user_callback($login, $results)
     {
         $result_count = count($results);
-        if ($result_count == 0 || !S::has_perms()) {
+        if ($result_count == 0 || !S::admin()) {
             Platal::page()->trigError("Il n'y a pas d'utilisateur avec l'identifiant : $login");
         } else {
             Platal::page()->trigError("Il y a $result_count utilisateurs avec cet identifiant : " . join(', ', $results));
@@ -510,21 +521,67 @@ class User extends PlUser
     }
 
     // Fetch a set of users from a list of UIDs
-    public static function getBulkUsersWithUIDs(array $uids)
+    public static function getBulkUsersWithUIDs(array $data, $orig = null, $dest = null, $fetchProfile = true)
     {
+        // Fetch the list of uids
+        if (is_null($orig)) {
+            $uids = $data;
+        } else {
+            if (is_null($dest)) {
+                $dest = $orig;
+            }
+            $uids = array();
+            foreach ($data as $key=>$entry) {
+                if (isset($entry[$orig])) {
+                    $uids[] = $entry[$orig];
+                }
+            }
+        }
+
+        // Fetch users
         if (count($uids) == 0) {
-            return array();
+            return $data;
         }
         $fields = self::loadMainFieldsFromUIDs($uids);
         $table = array();
+        if ($fetchProfile) {
+            $profiles = Profile::getBulkProfilesWithUIDS($uids);
+        }
         while (($list = $fields->next())) {
-            $table[$list['uid']] = User::getSilentWithValues(null, $list);
+            $uid  = $list['uid'];
+            $user = User::getSilentWithValues(null, $list);
+            if ($fetchProfile) {
+                if (isset($profiles[$uid])) {
+                    $user->_profile = $profiles[$uid];
+                }
+                $user->_profile_fetched = true;
+            }
+            $table[$list['uid']] = $user;
         }
-        $users = array();
-        foreach ($uids as $uid) {
-            $users[] = $table[$uid];
+
+        // Build the result with respect to input order.
+        if (is_null($orig)) {
+            $users = array();
+            foreach ($uids as $key=>$uid) {
+                $users[$key] = $table[$uid];
+            }
+            return $users;
+        } else {
+            foreach ($data as $key=>$entry) {
+                if (isset($entry[$orig])) {
+                    $entry[$dest] = $table[$entry[$orig]];
+                    $data[$key] = $entry;
+                }
+            }
+            return $data;
         }
-        return $users;
+    }
+
+    public static function getBulkUsersFromDB($fetchProfile = true)
+    {
+        $args = func_get_args();
+        $uids = call_user_func_array(array('XDB', 'fetchColumn'), $args);
+        return self::getBulkUsersWithUIDs($uids, null, null, $fetchProfile);
     }
 }