Ignores suid sessions when determining the cut-off date for removing old
[platal.git] / classes / user.php
index 1c22fef..5944a7f 100644 (file)
@@ -37,7 +37,7 @@ class User extends PlUser
         }
 
         if ($login instanceof User) {
-            $machin->id();
+            return $login->id();
         }
 
         if ($login instanceof Profile) {
@@ -184,8 +184,8 @@ class User extends PlUser
                                       IF (ab.alias IS NULL, NULL, CONCAT(ab.alias, \'@' . $globals->mail->domain . '\')) AS bestalias,
                                       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\', at.perms, \'\') AS perms,
-                                      a.email_format, a.is_admin, a.state, a.type, a.skin,
+                                      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,
                                       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,
@@ -618,13 +618,15 @@ class User extends PlUser
         }
 
         if ($clearAll) {
+            global $globals;
+
             $groupIds = XDB::iterator('SELECT  asso_id
                                          FROM  group_members
                                         WHERE  uid = {?}',
                                       $this->id());
             while ($groupId = $groupIds->next()) {
                 $group = Group::get($groupId);
-                if ($group->notif_unsub) {
+                if (!empty($group) && $group->notif_unsub) {
                     $mailer = new PlMailer('xnetgrp/unsubscription-notif.mail.tpl');
                     $admins = $group->iterAdmins();
                     while ($admin = $admins->next()) {
@@ -637,17 +639,22 @@ class User extends PlUser
                 }
             }
 
-            $tables = array('account_auth_openid', 'gannounce_read', 'contacts',
-                            'email_options', 'gemail_send_save', 'emails',
-                            'forum_innd', 'gforum_profiles', 'forum_subs',
-                            'gapps_accounts', 'ggapps_nicknames', 'group_announces_read',
-                            'group_members', 'ggroup_member_sub_requests', 'reminder', 'requests',
+            $tables = array('account_auth_openid', 'announce_read', 'contacts',
+                            'email_options', 'email_send_save', 'emails',
+                            'forum_innd', 'forum_profiles', 'forum_subs',
+                            'group_announces_read', 'group_members',
+                            'group_member_sub_requests', 'reminder', 'requests',
                             'requests_hidden');
-
             foreach ($tables as $t) {
                 XDB::execute('DELETE FROM  ' . $t . '
                                     WHERE  uid = {?}',
-                    $this->id());
+                             $this->id());
+            }
+
+            foreach (array('gapps_accounts', 'gapps_nicknames') as $t) {
+                XDB::execute('DELETE FROM  ' . $t . '
+                                    WHERE  l_userid = {?}',
+                             $this->id());
             }
 
             XDB::execute("UPDATE  accounts
@@ -668,8 +675,8 @@ class User extends PlUser
             if ($globals->mailstorage->googleapps_domain) {
                 require_once 'googleapps.inc.php';
 
-                if (GoogleAppsAccount::account_status($uid)) {
-                    $account = new GoogleAppsAccount($user);
+                if (GoogleAppsAccount::account_status($this->id())) {
+                    $account = new GoogleAppsAccount($this);
                     $account->suspend();
                 }
             }
@@ -732,16 +739,12 @@ class User extends PlUser
         }
 
         // Updates user in following tables.
-        foreach (array('group_announces', 'payment_transactions', 'log_sessions') as $table) {
+        foreach (array('group_announces', 'payment_transactions', 'log_sessions', 'group_events') as $table) {
             XDB::execute('UPDATE  ' . $table . '
                              SET  uid = {?}
                            WHERE  uid = {?}',
                          $newuser->id(), $this->id());
         }
-        XDB::execute('UPDATE  group_events
-                         SET  organisateur_uid = {?}
-                       WHERE  organisateur_uid = {?}',
-                     $newuser->id(), $this->id());
 
         // Merges user in following tables, ie updates when possible, then deletes remaining occurences of the old user.
         foreach (array('group_announces_read', 'group_event_participants', 'group_member_sub_requests', 'group_members') as $table) {
@@ -780,6 +783,11 @@ class User extends PlUser
         if ($is_admin) {
             $flags->addFlag(PERMS_ADMIN);
         }
+
+        // Access to private directory implies access to 'less'-private version.
+        if ($flags->hasFlag('directory_private')) {
+            $flags->addFlag('directory_ax');
+        }
         return $flags;
     }