Port csv export of xnetgrp, partially port member edition form.
authorFlorent Bruneau <florent.bruneau@polytechnique.org>
Thu, 29 Jan 2009 21:20:24 +0000 (22:20 +0100)
committerFlorent Bruneau <florent.bruneau@polytechnique.org>
Thu, 29 Jan 2009 21:20:24 +0000 (22:20 +0100)
Signed-off-by: Florent Bruneau <florent.bruneau@polytechnique.org>
classes/user.php
modules/xnetgrp.php
templates/skin/common.bandeau.tpl
templates/xnet/skin.tpl
templates/xnetgrp/annuaire-csv.tpl
templates/xnetgrp/asso.tpl
templates/xnetgrp/membres-edit.tpl

index 29b4904..bd466b4 100644 (file)
@@ -189,6 +189,7 @@ class User extends PlUser
         if ($globals->asso('id')) {
             $joins .= XDB::format("LEFT JOIN groupex.membres AS gpm ON (gpm.uid = a.uid AND gpm.asso_id = {?})\n", $globals->asso('id'));
             $fields[] = 'gpm.perms AS group_perms';
+            $fields[] = 'gpm.comm AS group_comm';
         }
         if (count($fields) > 0) {
             $fields = ', ' . implode(', ', $fields);
@@ -296,6 +297,22 @@ class User extends PlUser
         return $this->profile()->promo();
     }
 
+    public function firstName()
+    {
+        if (!$this->hasProfile()) {
+            return $this->displayName();
+        }
+        return $this->profile()->firstName();
+    }
+
+    public function lastName()
+    {
+        if (!$this->hasProfile()) {
+            return '';
+        }
+        return $this->profile()->lastName();
+    }
+
     /** Return the main profile attached with this account if any.
      */
     public function profile()
@@ -340,18 +357,32 @@ class User extends PlUser
 
     /** Get all the aliases the user belongs to.
      */
-    public function emailAliases($domain = null)
+    public function emailAliases($domain = null, $type = 'user',  $sub_state = false)
     {
+        $join = XDB::format('(vr.redirect = {?} OR vr.redirect = {?}) ',
+                             $this->forlifeEmail(), $this->m4xForlifeEmail());
         $where = '';
         if (!is_null($domain)) {
-            $where = XDB::format(' AND alias LIKE CONCAT("%@", {?})', $domain);
+            $where = XDB::format('WHERE v.alias LIKE CONCAT("%@", {?})', $domain);
+        }
+        if (!is_null($type)) {
+            if (empty($where)) {
+                $where = XDB::format('WHERE v.type = {?}', $type);
+            } else {
+                $where .= XDB::format(' AND v.type = {?}', $type);
+            }
+        }
+        if ($sub_state) {
+            return XDB::fetchAllAssoc('alias', 'SELECT  v.alias, vr.redirect IS NOT NULL AS sub
+                                                  FROM  virtual AS v
+                                             LEFT JOIN  virtual_redirect AS vr ON (v.vid = vr.vid AND ' . $join . ')
+                                                 ' . $where);
+        } else {
+            return XDB::fetchColumn('SELECT  v.alias
+                                       FROM  virtual AS v
+                                 INNER JOIN  virtual_redirect AS vr ON (v.vid = vr.vid AND ' . $join . ')
+                                     ' . $where);
         }
-        return XDB::fetchColumn('SELECT  v.alias
-                                   FROM  virtual AS v
-                             INNER JOIN  virtual_redirect AS vr ON (v.vid = vr.vid)
-                                  WHERE  (vr.redirect = {?} OR vr.redirect = {?})
-                                         ' . $where,
-                               $this->forlifeEmail(), $this->m4xForlifeEmail());
     }
 
     /** Get the alternative forlife email
index e2fcdc4..53d5c0f 100644 (file)
@@ -183,10 +183,8 @@ class XnetGrpModule extends PLModule
             S::assert_xsrf_token();
 
             $flags = new PlFlagSet('wiki_desc');
-            if (Post::has('notif_unsub') && Post::i('notif_unsub') == 1) {
-                $flags->addFlag('notif_unsub');
-            }
-            $site = trim(Post::v('site'));
+            $flags->addFlag('notif_unsub', Post::i('notif_unsub') == 1);
+            $site = Post::t('site');
             if ($site && ($site != "http://")) {
                 $scheme = parse_url($site, PHP_URL_SCHEME);
                 if (!$scheme) {
@@ -196,7 +194,7 @@ class XnetGrpModule extends PLModule
                 $site = "";
             }
             if (S::has_perms()) {
-                if (Post::v('mail_domain') && (strstr(Post::v('mail_domain'), '.') === false)) {
+                if (strstr(Post::v('mail_domain'), '.') === false) {
                     $page->trigError("le domaine doit être un FQDN (aucune modif effectuée) !!!");
                     return;
                 }
@@ -235,13 +233,18 @@ class XnetGrpModule extends PLModule
                       $flags, $globals->asso('id'));
             }
 
+
             if ($_FILES['logo']['name']) {
-                $logo = file_get_contents($_FILES['logo']['tmp_name']);
-                $mime = $_FILES['logo']['type'];
-                XDB::execute('UPDATE groupex.asso
-                                 SET logo={?}, logo_mime={?}
-                               WHERE id={?}', $logo, $mime,
-                             $globals->asso('id'));
+                $upload = PlUpload::get($_FILES['logo'], $globals->asso('id'), 'asso.logo', true);
+                if (!$upload) {
+                    $page->trigError("Impossible de télécharger le logo");
+                } else {
+                    XDB::execute('UPDATE groupex.asso
+                                     SET logo={?}, logo_mime={?}
+                                   WHERE id={?}', $upload->getContents(), $upload->contentType(),
+                                 $globals->asso('id'));
+                    $upload->rm();
+                }
             }
 
             pl_redirect('../'.Post::v('diminutif', $globals->asso('diminutif')).'/edit');
@@ -449,26 +452,16 @@ class XnetGrpModule extends PLModule
         if (is_null($filename)) {
             $filename = $globals->asso('diminutif') . '.csv';
         }
-        $ann = XDB::iterator(
-                  "SELECT  IF(m.origine='X',IF(u.nom_usage<>'', u.nom_usage, u.nom) ,m.nom) AS nom,
-                           IF(m.origine='X',u.prenom,m.prenom) AS prenom,
-                           IF(m.origine='X', u.promo, IF(m.origine='ext', 'extérieur', 'personne morale')) AS promo,
-                           IF(m.origine='X' AND u.perms != 'pending',CONCAT(a.alias, '@', {?}), m.email) AS email,
-                           IF(m.origine='X',FIND_IN_SET('femme', u.flags), m.sexe) AS femme,
-                           m.comm as comm
-                     FROM  groupex.membres AS m
-                LEFT JOIN  auth_user_md5   AS u ON ( u.user_id = m.uid )
-                LEFT JOIN  aliases         AS a ON ( a.id = m.uid AND a.type = 'a_vie' )
-                    WHERE  m.asso_id = {?}
-                           AND (m.origine != 'X' OR u.perms != 'pending' OR m.email IS NOT NULL)
-                 GROUP BY  m.uid
-                 ORDER BY  nom, prenom",
-                 $globals->mail->domain, $globals->asso('id'));
+        $id = XDB::fetchColumn("SELECT  uid
+                                  FROM  groupex.membres
+                                 WHERE  asso_id = {?}",
+                                $globals->asso('id'));
+        $users = User::getBuildUsersWithUIDs($id, 'full_name');
         header('Content-Type: text/x-csv; charset=utf-8;');
         header('Pragma: ');
         header('Cache-Control: ');
         $page->changeTpl('xnetgrp/annuaire-csv.tpl', NO_SKIN);
-        $page->assign('ann', $ann);
+        $page->assign('users', $users);
     }
 
     private function removeSubscriptionRequest($uid)
@@ -1035,7 +1028,7 @@ class XnetGrpModule extends PLModule
             }
 
             $perms = Post::i('is_admin');
-            $comm  = trim(Post::s('comm'));
+            $comm  = Post::t('comm');
             if ($user['perms'] != $perms || $user['comm'] != $comm) {
                 XDB::query('UPDATE groupex.membres
                                SET perms={?}, comm={?}
@@ -1100,16 +1093,8 @@ class XnetGrpModule extends PLModule
         }
 
         $page->assign('user', $user);
-        $listes = $mmlist->get_lists($user['email2']);
-        $page->assign('listes', $listes);
-
-        $res = XDB::query(
-                'SELECT  alias, redirect IS NOT NULL as sub
-                   FROM  virtual          AS v
-              LEFT JOIN  virtual_redirect AS vr ON(v.vid=vr.vid AND (redirect = {?} OR redirect = {?}))
-                  WHERE  alias LIKE {?} AND type="user"',
-                $user['email'], $user['email2'], '%@'.$globals->asso('mail_domain'));
-        $page->assign('alias', $res->fetchAllAssoc());
+        $page->assign('listes', $mmlist->get_lists($user->forlifeEmail()));
+        $page->assign('alias', $user->emailAliases($globals->asso('mail_domain'), 'user', true));
     }
 
     function handler_rss(&$page, $user = null, $hash = null)
index 71d84e5..ca0550d 100644 (file)
@@ -32,6 +32,7 @@
 
 <!-- Don't copy this list of emails!!!
 
+{assign var="login" value="false"}
 {if !t($login)}
   {if t($smarty.session.auth)}
   {assign var="login" value="true"}
index d8fbc0b..2899130 100644 (file)
               {/if}
             {/foreach}
           {/foreach}
-          {if $asso && ($is_admin ||
+          {if $asso && ($is_admin || 
                       ($smarty.session.suid && ($smarty.session.suid.perms->hasFlag('admin') ||
                                                 $smarty.session.suid.may_update[$asso.id])))}
           <h1>Voir le site comme...</h1>
index 1ce4ca9..62b9270 100644 (file)
 {*                                                                        *}
 {**************************************************************************}
 Nom,Prénom,Sexe,Promotion,Email,Commentaire
-{if $ann}
-{iterate from=$ann item=m}
+{if $users|@count}
+{foreach from=$users item=user}
 
-{$m.nom},{$m.prenom},{if $m.sexe}F{else}M{/if},{$m.promo},{$m.email},{$m.comm|replace:',':'\,'}
+{$user->firstName()},{$user->lastName()},{if $user->isFemale()}F{else}M{/if},{$user->promo()},{$user->forlifeEmail()},{$user->group_comm|replace:',':'\,'}
 
-{/iterate}
+{/foreach}
 {/if}
 {* vim:set et sw=2 sts=2 sws=2 enc=utf-8: *}
index 4ec01b0..5714102 100644 (file)
 
 <br />
 
-{if $article_index && $article_index->total()}
+{if t($article_index) && $article_index->total()}
 <table class="tinybicol">
   <tr>
     <th>
index b601010..d36e235 100644 (file)
 </p>
 
 <h2>
-  Édition du profil de {if "`$user.prenom` `$user.nom`"|trim}{$user.prenom} {$user.nom}{else}{$user.email}{/if}
-  {if $user.origine eq 'X'}
-  (X{$user.promo})
-  <a href="https://www.polytechnique.org/profile/{$user.alias}">{icon name=user_suit title="fiche"}</a>
-  {/if}
-  <a href="{$platal->ns}member/del/{$user.email}">{icon name=delete title="Suppression du compte"}</a>
-  <a href="mailto:{$user.email}">{icon name=email title="mail"}</a>
+  Édition du profil de {profile user=$user groupperms=false sex=false promo=true}
+  <a href="mailto:{$user->bestEmail()}">{icon name=email title="mail"}</a>
 </h2>
 
 <form method="post" action="{$platal->ns}member/{$platal->argv[1]}">
       </td>
       <td>
         <select name="is_admin">
-          <option value="0" {if !$user.perms}selected="selected"{/if}>Membre</option>
-          <option value="1" {if $user.perms}selected="selected"{/if}>Animateur</option>
+          <option value="0" {if $user->group_perms eq 'membre'}</option>}selected="selected"{/if}>Membre</option>
+          <option value="1" {if $user->group_perms eq 'admin'}</option>}selected="selected"{/if}>Animateur</option>
         </select>
       </td>
     </tr>
-    {if $user.origine neq X}
     <tr class="impair">
       <td class="titre">
         Type d'utilisateur&nbsp;:
       </td>
       <td>
         <select name="origine" onchange="showInformations(this); return true">
-          <option value="ext" {if $user.origine eq "ext"}selected="selected"{/if}>Personne physique</option>
-          <option value="groupe" {if $user.origine eq "groupe"}selected="selected"{/if}>Personne morale</option>
+          <option value="ext" {if $user->type neq 'virtual'}selected="selected"{/if}>Personne physique</option>
+          <option value="groupe" {if $user->type eq "virtual"}selected="selected"{/if}>Personne morale</option>
         </select>
       </td>
     </tr>
-    <tr id="prenom" class="impair" {if $user.origine eq "groupe"}style="display: none"{/if}>
+      <tr id="prenom" class="impair" {if $user->type eq "virtual"}style="display: none"{/if}>
       <td class="titre">
         Prénom&nbsp;:
       </td>
       <td>
-        <input type="text" value="{$user.prenom}" name="prenom" size="40" />
+        <input type="text" value="{$user->displayName()}" name="prenom" size="40" />
       </td>
     </tr>
     <tr class="impair">
         Nom&nbsp;:
       </td>
       <td>
-        <input type="text" value="{$user.nom}" name="nom" size="40" />
+        <input type="text" value="{$user->fullName()}" name="nom" size="40" />
       </td>
     </tr>
-    <tr id="sexe" class="impair" {if $user.origine eq "groupe"}style="display: none"{/if}>
+    <tr id="sexe" class="impair" {if $user->type eq "virtual"}style="display: none"{/if}>
       <td class="titre">
         Sexe&nbsp;:
       </td>
       <td>
         <select name="sexe">
-          <option value="0"{if $user.sexe eq 0} selected="selected"{/if}>Homme</option>
-          <option value="1"{if $user.sexe eq 1} selected="selected"{/if}>Femme</option>
+          <option value="0"{if !$user->isFemale()} selected="selected"{/if}>Homme</option>
+          <option value="1"{if $user->isFemale()} selected="selected"{/if}>Femme</option>
         </select>
       </td>
     </tr>
         Email&nbsp;:
       </td>
       <td>
-        <input type="text" value="{$user.email}" name="email" size="40" />
+        <input type="text" value="{$user->forlifeEmail()}" name="email" size="40" />
       </td>
     </tr>
-    {/if}
     <tr class="impair">
       <td class="titre">
         Commentaire&nbsp;:
       </td>
       <td>
-        <input type="text" name="comm" value="{$user.comm}" size="40" maxlength="255" /><br />
+        <input type="text" name="comm" value="{$user->group_comm}" size="40" maxlength="255" /><br />
         <small>Poste, origine, ... (accessible à toutes les personnes autorisées à consulter l'annuaire)</small>
       </td>
     </tr>
-    {if $user.origine neq X}
-    <tr id="make_X" {if $user.origine eq "groupe"}style="display: none"{/if}>
+    {if $user->type eq 'ext'}
+    <tr id="make_X">
       <td colspan="2">
         <span id="make_X_cb">
           <input type="checkbox" name="is_x" id="is_x" onclick="showXInput(this);" onchange="showXInput(this);" />
       <th>Alias</th>
     </tr>
 
-    {foreach from=$alias item=a}
+    {foreach from=$alias key=address item=sub}
     <tr>
       <td align='right'>
-        <input type='hidden' name='ml3[{$a.alias}]' value='{$a.sub}' />
-        <input type='checkbox' name='ml4[{$a.alias}]' {if $a.sub}checked="checked"{/if} />
+        <input type='hidden' name='ml3[{$address}]' value='{$sub}' />
+        <input type='checkbox' name='ml4[{$address}]' {if $sub}checked="checked"{/if} />
       </td>
       <td>
-        <a href='{$platal->ns}alias/admin/{$a.alias}'>{$a.alias}</a>
+        <a href='{$platal->ns}alias/admin/{$address}'>{$address}</a>
       </td>
     </tr>
     {foreachelse}