Merge branch 'xorg/master' into xorg/f/xnet-accounts
[platal.git] / modules / xnetgrp.php
index 66acde1..8a04125 100644 (file)
@@ -805,12 +805,11 @@ class XnetGrpModule extends PLModule
     {
         $page->changeTpl('xnetgrp/membres-del.tpl');
         $user = S::user();
-        $uid  = S::user()->id();
-        if (empty($uid)) {
+        if (empty($user)) {
             return PL_NOT_FOUND;
         }
         $page->assign('self', true);
-        $page->assign('user', $uid);
+        $page->assign('user', $user);
 
         if (!Post::has('confirm')) {
             return;
@@ -818,10 +817,18 @@ class XnetGrpModule extends PLModule
             S::assert_xsrf_token();
         }
 
+        $hasSingleGroup = ($user->groupCount() == 1);
+
         if ($this->unsubscribe($user)) {
-            $page->trigSuccess('Vous avez été désinscrit du groupe avec succès.');
+            $page->trigSuccess('Tu as été désinscrit du groupe avec succès.');
         } else {
-            $page->trigWarning('Vous avez été désinscrit du groupe, mais des erreurs se sont produites lors des désinscriptions des alias et des listes de diffusion.');
+            $page->trigWarning('Tu as été désinscrit du groupe, mais des erreurs se sont produites lors des désinscriptions des alias et des listes de diffusion.');
+        }
+        if ($user->type == 'xnet' && $hasSingleGroup && Post::has('accountDeletion')) {
+            XDB::execute('DELETE FROM  acounts
+                                WHERE  uid = {?}',
+                         $user->id());
+            $page->trigSuccess('Ton compte a bien été supprimé.');
         }
         $page->assign('is_member', is_member(true));
     }
@@ -833,6 +840,14 @@ class XnetGrpModule extends PLModule
         if (empty($user)) {
             return PL_NOT_FOUND;
         }
+
+        global $globals;
+
+        if (!$user->inGroup($globals->asso('id'))) {
+            pl_redirect('annuaire');
+        }
+
+        $page->assign('self', false);
         $page->assign('user', $user);
 
         if (!Post::has('confirm')) {
@@ -841,14 +856,36 @@ class XnetGrpModule extends PLModule
             S::assert_xsrf_token();
         }
 
+        $hasSingleGroup = ($user->groupCount() == 1);
+
         if ($this->unsubscribe($user)) {
             $page->trigSuccess("{$user->fullName()} a été désinscrit du groupe !");
         } else {
             $page->trigWarning("{$user->fullName()} a été désinscrit du groupe, mais des erreurs subsistent !");
         }
+
+        // Either deletes or notifies site administrators if it was the last group
+        // of a xnet account.
+        if ($user->type == 'xnet' && $hasSingleGroup) {
+            if ($user->state == 'pending') {
+                // If the user has never logged in the site, we delete her account.
+                XDB::execute('DELETE FROM  acounts
+                                    WHERE  uid = {?}',
+                             $user->id());
+            } else {
+                // It the user has already logged in the site, we notify site
+                // administrators that there is a new xnet account without any
+                // group.
+                $mailer = new PlMailer('xnetgrp/unsubscription.mail.tpl');
+                $mailer->assign('user', $user);
+                $mailer->assign('groupId', $globals->asso('id'));
+                $mailer->assign('groupName', $globals->asso('nom'));
+                $mailer->send();
+            }
+        }
     }
 
-    private function changeLogin(PlPage &$page, PlUser &$user, MMList &$mmlist, $login)
+    private function changeLogin(PlPage &$page, PlUser &$user, $login)
     {
         // Search the user's uid.
         $xuser = User::getSilent($login);
@@ -878,13 +915,17 @@ class XnetGrpModule extends PLModule
     {
         global $globals;
 
-        $page->changeTpl('xnetgrp/membres-edit.tpl');
-
         $user = User::getSilent($user);
         if (empty($user)) {
             return PL_NOT_FOUND;
         }
 
+        if (!$user->inGroup($globals->asso('id'))) {
+            pl_redirect('annuaire');
+        }
+
+        $page->changeTpl('xnetgrp/membres-edit.tpl');
+
         $mmlist = new MMList(S::user(), $globals->asso('mail_domain'));
 
         if (Post::has('change')) {
@@ -892,7 +933,7 @@ class XnetGrpModule extends PLModule
 
             // Convert user status to X
             if (!Post::blank('login_X')) {
-                $forlife = $this->changeLogin($page, $user, $mmlist, Post::t('login_X'));
+                $forlife = $this->changeLogin($page, $user, Post::t('login_X'));
                 if ($forlife) {
                     pl_redirect('member/' . $forlife);
                 }
@@ -909,6 +950,13 @@ class XnetGrpModule extends PLModule
                            Post::t('full_name'), Post::t('directory_name'), Post::t('display_name'),
                            (Post::t('sex') == 'male') ? 'male' : 'female', Post::t('email'),
                            (Post::t('type') == 'xnet') ? 'xnet' : 'virtual', $user->id());
+                // If user is of type xnet and new password is given.
+                if (!Post::blank('pwhash') && Post::t('type') == 'xnet') {
+                    XDB::query('UPDATE  accounts
+                                   SET  password = {?}
+                                 WHERE  uid = {?}',
+                               Post::t('pwhash'), $user->id());
+                }
             } else if (!$user->perms) {
                 XDB::query('UPDATE  accounts
                                SET  email = {?}
@@ -916,7 +964,7 @@ class XnetGrpModule extends PLModule
                            Post::t('email'), $user->id());
             }
             if (XDB::affectedRows()) {
-                $page->trigSuccess('Données de l\'utilisateur mise à jour.');
+                $page->trigSuccess('Données de l\'utilisateur mises à jour.');
             }
 
             // Update group params for user
@@ -1002,6 +1050,8 @@ class XnetGrpModule extends PLModule
         $res = XDB::rawFetchAllAssoc('SHOW COLUMNS FROM group_members LIKE \'position\'');
         $positions = str_replace(array('enum(', ')', '\''), '', $res[0]['Type']);
 
+        $page->addJsLink('password.js');
+        $page->assign('onlyGroup', ($user->groupCount() == 1));
         $page->assign('user', $user);
         $page->assign('listes', $mmlist->get_lists($user->forlifeEmail()));
         $page->assign('alias', $user->emailAliases($globals->asso('mail_domain'), 'user', true));