Merge remote branch 'origin/xorg/maint' into xorg/master
[platal.git] / modules / xnetgrp.php
index 56fd3b7..0516201 100644 (file)
@@ -1,6 +1,6 @@
 <?php
 /***************************************************************************
- *  Copyright (C) 2003-2010 Polytechnique.org                              *
+ *  Copyright (C) 2003-2011 Polytechnique.org                              *
  *  http://opensource.polytechnique.org/                                   *
  *                                                                         *
  *  This program is free software; you can redistribute it and/or modify   *
@@ -48,7 +48,7 @@ class XnetGrpModule extends PLModule
             '%grp/member/new/ajax' => $this->make_hook('admin_member_new_ajax', AUTH_MDP,    'user', NO_AUTH),
             '%grp/member/del'      => $this->make_hook('admin_member_del',      AUTH_MDP,    'groupadmin'),
 
-            '%grp/rss'             => $this->make_hook('rss',                   AUTH_PUBLIC, 'user', NO_HTTPS),
+            '%grp/rss'             => $this->make_token_hook('rss',             AUTH_PUBLIC),
             '%grp/announce/new'    => $this->make_hook('edit_announce',         AUTH_MDP,    'groupadmin'),
             '%grp/announce/edit'   => $this->make_hook('edit_announce',         AUTH_MDP,    'groupadmin'),
             '%grp/announce/photo'  => $this->make_hook('photo_announce',        AUTH_PUBLIC),
@@ -56,7 +56,7 @@ class XnetGrpModule extends PLModule
         );
     }
 
-    function handler_index(&$page, $arg = null)
+    function handler_index($page, $arg = null)
     {
         global $globals, $platal;
         if (!is_null($arg)) {
@@ -136,13 +136,13 @@ class XnetGrpModule extends PLModule
         $page->assign('articles', $arts);
     }
 
-    function handler_logo(&$page)
+    function handler_logo($page)
     {
         global $globals;
         $globals->asso()->getLogo()->send();
     }
 
-    function handler_site(&$page)
+    function handler_site($page)
     {
         global $globals;
         $site = $globals->asso('site');
@@ -154,7 +154,7 @@ class XnetGrpModule extends PLModule
         exit;
     }
 
-    function handler_edit(&$page)
+    function handler_edit($page)
     {
         global $globals;
         $page->changeTpl('xnetgrp/edit.tpl');
@@ -184,22 +184,29 @@ class XnetGrpModule extends PLModule
                     $page->trigError('Ni le nom ni le diminutif du groupe ne peuvent être vide.');
                     return;
                 }
+                $axDate = make_datetime(Post::v('axDate'));
+                if (Post::t('axDate') != '') {
+                    $axDate = make_datetime(Post::v('axDate'))->format('Y-m-d');
+                } else {
+                    $axDate = null;
+                }
                 XDB::execute(
                     "UPDATE  groups
                         SET  nom={?}, diminutif={?}, cat={?}, dom={?},
                              descr={?}, site={?}, mail={?}, resp={?},
-                             forum={?}, mail_domain={?}, ax={?}, pub={?},
+                             forum={?}, mail_domain={?}, ax={?}, axDate = {?}, pub={?},
                              sub_url={?}, inscriptible={?}, unsub_url={?},
-                             flags={?}
+                             flags = {?}, welcome_msg = {?}
                       WHERE  id={?}",
                       Post::v('nom'), Post::v('diminutif'),
-                      Post::v('cat'), Post::i('dom'),
+                      Post::v('cat'), (Post::i('dom') == 0) ? null : Post::i('dom'),
                       Post::v('descr'), $site,
                       Post::v('mail'), Post::v('resp'),
                       Post::v('forum'), Post::v('mail_domain'),
-                      Post::has('ax'), Post::v('pub'),
+                      Post::has('ax'), $axDate, Post::v('pub'),
                       Post::v('sub_url'), Post::v('inscriptible'),
-                      Post::v('unsub_url'), $flags, $globals->asso('id'));
+                      Post::v('unsub_url'), $flags, Post::t('welcome_msg'),
+                      $globals->asso('id'));
                 if (Post::v('mail_domain')) {
                     XDB::execute('INSERT IGNORE INTO virtual_domains (domain) VALUES({?})',
                                            Post::v('mail_domain'));
@@ -209,13 +216,14 @@ class XnetGrpModule extends PLModule
                     "UPDATE  groups
                         SET  descr={?}, site={?}, mail={?}, resp={?},
                              forum={?}, pub= {?}, sub_url={?},
-                             unsub_url={?},flags={?}
+                             unsub_url = {?}, flags = {?}, welcome_msg = {?}
                       WHERE  id={?}",
                       Post::v('descr'), $site,
                       Post::v('mail'), Post::v('resp'),
                       Post::v('forum'), Post::v('pub'),
                       Post::v('sub_url'), Post::v('unsub_url'),
-                      $flags, $globals->asso('id'));
+                      $flags, Post::t('welcome_msg'),
+                      $globals->asso('id'));
             }
 
 
@@ -244,13 +252,12 @@ class XnetGrpModule extends PLModule
         }
     }
 
-    function handler_mail(&$page)
+    function handler_mail($page)
     {
         global $globals;
 
         $page->changeTpl('xnetgrp/mail.tpl');
-        $mmlist = new MMList(S::v('uid'), S::v('password'),
-                           $globals->asso('mail_domain'));
+        $mmlist = new MMList(S::user(), $globals->asso('mail_domain'));
         $page->assign('listes', $mmlist->get_lists());
         $page->assign('user', S::user());
 
@@ -282,7 +289,7 @@ class XnetGrpModule extends PLModule
         }
     }
 
-    function handler_forum(&$page, $group = null, $artid = null)
+    function handler_forum($page, $group = null, $artid = null)
     {
         global $globals;
         $page->changeTpl('xnetgrp/forum.tpl');
@@ -295,7 +302,7 @@ class XnetGrpModule extends PLModule
         run_banana($page, 'ForumsBanana', $get);
     }
 
-    function handler_annuaire(&$page, $action = null, $subaction = null)
+    function handler_annuaire($page, $action = null, $subaction = null)
     {
         global $globals;
 
@@ -348,17 +355,17 @@ class XnetGrpModule extends PLModule
         $page->assign('only_admin', Env::b('admin'));
     }
 
-    function handler_trombi(&$page)
+    function handler_trombi($page)
     {
         pl_redirect('annuaire/trombi');
     }
 
-    function handler_geoloc(&$page)
+    function handler_geoloc($page)
     {
         pl_redirect('annuaire/geoloc');
     }
 
-    function handler_vcard(&$page, $photos = null)
+    function handler_vcard($page, $photos = null)
     {
         global $globals;
         $vcard = new VCard($photos == 'photos', 'Membre du groupe ' . $globals->asso('nom'));
@@ -366,14 +373,14 @@ class XnetGrpModule extends PLModule
         $vcard->show();
     }
 
-    function handler_csv(&$page, $filename = null)
+    function handler_csv($page, $filename = null)
     {
         global $globals;
         if (is_null($filename)) {
             $filename = $globals->asso('diminutif') . '.csv';
         }
         $users = $globals->asso()->getMembersFilter(null, new UFO_Name('directory_name'))->getUsers();
-        pl_content_headers("text/x-csv");
+        pl_cached_content_headers('text/x-csv', 1);
         $page->changeTpl('xnetgrp/annuaire-csv.tpl', NO_SKIN);
         $page->assign('users', $users);
     }
@@ -386,7 +393,7 @@ class XnetGrpModule extends PLModule
                      $globals->asso('id'), $uid);
     }
 
-    private function validSubscription(User &$user)
+    private function validSubscription(User $user)
     {
         global $globals;
         $this->removeSubscriptionRequest($user->id());
@@ -402,6 +409,7 @@ class XnetGrpModule extends PLModule
                      . "\n"
                      . "  Suite à ta demande d'adhésion à " . $globals->asso('nom')
                      . ", j'ai le plaisir de t'annoncer que ton inscription a été validée !\n"
+                     . (is_null($globals->asso('welcome_msg')) ? '' : "\n" . $globals->asso('welcome_msg') . "\n")
                      . "\n"
                      . "Bien cordialement,\n"
                      . "-- \n"
@@ -411,7 +419,7 @@ class XnetGrpModule extends PLModule
         }
     }
 
-    function handler_subscribe(&$page, $u = null)
+    function handler_subscribe($page, $u = null)
     {
         global $globals;
         $page->changeTpl('xnetgrp/inscrire.tpl');
@@ -492,9 +500,9 @@ class XnetGrpModule extends PLModule
             $uf = New UserFilter(New UFC_Group($globals->asso('id'), true));
             $admins = $uf->iterUsers();
             $admin = $admins->next();
-            $to = $admin->bestalias;
+            $to = $admin->bestEmail();
             while ($admin = $admins->next()) {
-                $to .= ', ' . $admin->bestalias;
+                $to .= ', ' . $admin->bestEmail();
             }
 
             $append = "\n"
@@ -526,7 +534,7 @@ class XnetGrpModule extends PLModule
         }
     }
 
-    function handler_subscribe_valid(&$page)
+    function handler_subscribe_valid($page)
     {
         global $globals;
 
@@ -555,7 +563,7 @@ class XnetGrpModule extends PLModule
         $page->assign('valid', $it);
     }
 
-    function handler_change_rights(&$page)
+    function handler_change_rights($page)
     {
         if (Env::has('right') && (may_update() || S::suid())) {
             switch (Env::v('right')) {
@@ -582,7 +590,7 @@ class XnetGrpModule extends PLModule
         http_redirect($_SERVER['HTTP_REFERER']);
     }
 
-    function handler_admin_annuaire(&$page)
+    function handler_admin_annuaire($page)
     {
         global $globals;
 
@@ -622,7 +630,7 @@ class XnetGrpModule extends PLModule
         $page->assign('lists', $lists);
     }
 
-    function handler_admin_member_new(&$page, $email = null)
+    function handler_admin_member_new($page, $email = null)
     {
         global $globals;
 
@@ -706,7 +714,7 @@ class XnetGrpModule extends PLModule
         }
     }
 
-    function handler_admin_member_new_ajax(&$page)
+    function handler_admin_member_new_ajax($page)
     {
         pl_content_headers("text/html");
         $page->changeTpl('xnetgrp/membres-new-search.tpl', NO_SKIN);
@@ -739,7 +747,7 @@ class XnetGrpModule extends PLModule
         $page->assign('users', $users);
     }
 
-    function unsubscribe(PlUser &$user)
+    function unsubscribe(PlUser $user)
     {
         global $globals;
         XDB::execute("DELETE FROM  group_members
@@ -793,7 +801,7 @@ class XnetGrpModule extends PLModule
         return !$warning;
     }
 
-    function handler_unsubscribe(&$page)
+    function handler_unsubscribe($page)
     {
         $page->changeTpl('xnetgrp/membres-del.tpl');
         $user = S::user();
@@ -818,7 +826,7 @@ class XnetGrpModule extends PLModule
         $page->assign('is_member', is_member(true));
     }
 
-    function handler_admin_member_del(&$page, $user = null)
+    function handler_admin_member_del($page, $user = null)
     {
         $page->changeTpl('xnetgrp/membres-del.tpl');
         $user = User::getSilent($user);
@@ -840,7 +848,7 @@ class XnetGrpModule extends PLModule
         }
     }
 
-    private function changeLogin(PlPage &$page, PlUser &$user, MMList &$mmlist, $login)
+    private function changeLogin(PlPage $page, PlUser $user, MMList $mmlist, $login)
     {
         // Search the user's uid.
         $xuser = User::getSilent($login);
@@ -866,7 +874,7 @@ class XnetGrpModule extends PLModule
         return $user->login();
     }
 
-    function handler_admin_member(&$page, $user)
+    function handler_admin_member($page, $user)
     {
         global $globals;
 
@@ -893,7 +901,7 @@ class XnetGrpModule extends PLModule
             // Update user info
             $email_changed = (!$user->profile() && strtolower($user->forlifeEmail()) != strtolower(Post::v('email')));
             $from_email = $user->forlifeEmail();
-            if (!$user->profile()) {
+            if ($user->type == 'virtual' || $user->type == 'xnet') {
                 XDB::query('UPDATE  accounts
                                SET  full_name = {?}, directory_name = {?}, display_name = {?},
                                     sex = {?}, email = {?}, type = {?}
@@ -914,11 +922,12 @@ class XnetGrpModule extends PLModule
             // Update group params for user
             $perms = Post::v('group_perms');
             $comm  = Post::t('comm');
-            if ($user->group_perms != $perms || $user->group_comm != $comm) {
+            $position = (Post::t('group_position') == '') ? null : Post::v('group_position');
+            if ($user->group_perms != $perms || $user->group_comm != $comm || $user->group_position != $position) {
                 XDB::query('UPDATE  group_members
-                               SET  perms = {?}, comm = {?}
+                               SET  perms = {?}, comm = {?}, position = {?}
                              WHERE  uid = {?} AND asso_id = {?}',
-                            ($perms == 'admin') ? 'admin' : 'membre', $comm,
+                            ($perms == 'admin') ? 'admin' : 'membre', $comm, $position,
                             $user->id(), $globals->asso('id'));
                 if (XDB::affectedRows()) {
                     if ($perms != $user->group_perms) {
@@ -927,6 +936,9 @@ class XnetGrpModule extends PLModule
                     if ($comm != $user->group_comm) {
                         $page->trigSuccess('Commentaire mis à jour.');
                     }
+                    if ($position != $user->group_position) {
+                        $page->trigSuccess('Poste mis à jour.');
+                    }
                 }
             }
 
@@ -987,22 +999,26 @@ class XnetGrpModule extends PLModule
             }
         }
 
+        $res = XDB::rawFetchAllAssoc('SHOW COLUMNS FROM group_members LIKE \'position\'');
+        $positions = str_replace(array('enum(', ')', '\''), '', $res[0]['Type']);
+
         $page->assign('user', $user);
         $page->assign('listes', $mmlist->get_lists($user->forlifeEmail()));
         $page->assign('alias', $user->emailAliases($globals->asso('mail_domain'), 'user', true));
+        $page->assign('positions', explode(',', $positions));
     }
 
-    function handler_rss(&$page, $user = null, $hash = null)
+    function handler_rss(PlPage $page, PlUser $user)
     {
         global $globals;
         $page->assign('asso', $globals->asso());
 
         $this->load('feed.inc.php');
         $feed = new XnetGrpEventFeed();
-        return $feed->run($page, $user, $hash, false);
+        return $feed->run($page, $user, false);
     }
 
-    private function upload_image(PlPage &$page, PlUpload &$upload)
+    private function upload_image(PlPage $page, PlUpload $upload)
     {
         if (@!$_FILES['image']['tmp_name'] && !Env::v('image_url')) {
             return true;
@@ -1021,7 +1037,7 @@ class XnetGrpModule extends PLModule
         return true;
     }
 
-    function handler_photo_announce(&$page, $eid = null) {
+    function handler_photo_announce($page, $eid = null) {
         if ($eid) {
             $res = XDB::query('SELECT  *
                                  FROM  group_announces_photo
@@ -1046,7 +1062,7 @@ class XnetGrpModule extends PLModule
         exit;
     }
 
-    function handler_edit_announce(&$page, $aid = null)
+    function handler_edit_announce($page, $aid = null)
     {
         global $globals, $platal;
         $page->changeTpl('xnetgrp/announce-edit.tpl');
@@ -1211,7 +1227,7 @@ class XnetGrpModule extends PLModule
         $page->assign_by_ref('upload', $upload);
     }
 
-    function handler_admin_announce(&$page)
+    function handler_admin_announce($page)
     {
         global $globals;
         $page->changeTpl('xnetgrp/announce-admin.tpl');