ajax sur le module mes emails
authorx2001corpet <x2001corpet@839d8a87-29fc-0310-9880-83ba4fa771e5>
Sun, 26 Nov 2006 22:07:50 +0000 (22:07 +0000)
committerx2001corpet <x2001corpet@839d8a87-29fc-0310-9880-83ba4fa771e5>
Sun, 26 Nov 2006 22:07:50 +0000 (22:07 +0000)
git-svn-id: svn+ssh://murphy/home/svn/platal/trunk@1179 839d8a87-29fc-0310-9880-83ba4fa771e5

htdocs/images/icons/bin_empty.gif [new file with mode: 0644]
htdocs/javascript/ajax.js
include/emails.inc.php
include/validations/aliases.inc.php
modules/email.php
templates/emails/alias.tpl
templates/emails/antispam.tpl
templates/emails/index.tpl
templates/emails/redirect.tpl

diff --git a/htdocs/images/icons/bin_empty.gif b/htdocs/images/icons/bin_empty.gif
new file mode 100644 (file)
index 0000000..337e0e2
Binary files /dev/null and b/htdocs/images/icons/bin_empty.gif differ
index 155ae06..5d34faf 100644 (file)
@@ -52,7 +52,9 @@ Ajax = {
             {
                 if(Ajax.xml_client.readyState == 4) {
                     if (Ajax.xml_client.status == 200) {
-                        document.getElementById(obj).innerHTML = Ajax.xml_client.responseText;
+                       if (obj != null) {
+                               document.getElementById(obj).innerHTML = Ajax.xml_client.responseText;
+                        }
                     } else if (Ajax.xml_client.status == 403) {
                         window.location.reload();
                     }
index c3852d3..eeb33b1 100644 (file)
@@ -300,16 +300,36 @@ class Redirect
     }
 
     function modify_one_email($email, $activate) {
+        $allinactive = true;
+        $thisone = false;
         foreach ($this->emails as $i=>$mail) {
             if ($mail->email == $email) {
-                if ($activate)
-                    $this->emails[$i]->activate($this->uid);
-                else
-                    $this->emails[$i]->deactivate($this->uid);
+                $thisone = $i;
             }
+            $allinactive &= !$mail->active || $mail->email == $email;
         }
+        if ($thisone === false) {
+            return ERROR_INVALID_EMAIL;
+        }
+        if ($allinactive || $activate)
+            $this->emails[$thisone]->activate($this->uid);
+        else
+            $this->emails[$thisone]->deactivate($this->uid);
+        if ($allinactive && !$activate) {
+            return ERROR_INACTIVE_REDIRECTION;
+        } else {
+            return SUCCESS;
+        } 
     }
 
+       function modify_one_email_redirect($email, $redirect) {
+               foreach ($this->emails as $i=>$mail) {
+                       if ($mail->email == $email) {
+                               $this->emails[$i]->rewrite($redirect, $this->uid);
+                               return;
+                       }
+               }
+       }
     // }}}
 }
 
index 2f62e66..a6a3645 100644 (file)
@@ -60,7 +60,7 @@ class AliasReq extends Validate
     // }}}
     // {{{ function get_request()
 
-    function get_request($uid)
+    static function get_request($uid)
     {
         return parent::get_typed_request($uid,'alias');
     }
index 6edfbd2..19cd346 100644 (file)
@@ -35,7 +35,7 @@ class EmailModule extends PLModule
         );
     }
 
-    function handler_emails(&$page)
+    function handler_emails(&$page, $action = null, $email = null)
     {
         global $globals;
 
@@ -44,12 +44,12 @@ class EmailModule extends PLModule
 
         $uid = S::v('uid');
 
-        if (Post::has('best')) {
+        if ($action == 'best' && $email) {
             // bestalias is the first bit : 1
             // there will be maximum 8 bits in flags : 255
             XDB::execute("UPDATE  aliases SET flags=flags & (255 - 1) WHERE id={?}", $uid);
             XDB::execute("UPDATE  aliases SET flags=flags | 1 WHERE id={?} AND alias={?}",
-                                   $uid, Post::v('best'));
+                                   $uid, $email);
         }
 
         // on regarde si on a affaire à un homonyme
@@ -198,11 +198,26 @@ class EmailModule extends PLModule
         $redirect = new Redirect(S::v('uid'));
 
         if ($action == 'remove' && $email) {
-            $page->assign('retour', $redirect->delete_email($email));
+            $retour = $redirect->delete_email($email);
+            $page->assign('retour', $retour);
         }
-
+               
+               if ($action == 'active' && $email) {
+                       $redirect->modify_one_email($email, true);
+               }
+               
+               if ($action == 'inactive' && $email) {
+                       $redirect->modify_one_email($email, false);
+               }
+               
+               if ($action == 'rewrite' && $email) {
+                       $rewrite = @func_get_arg(3);
+                       $redirect->modify_one_email_redirect($email, $rewrite);
+               }
+               
         if (Env::has('emailop')) {
             $actifs = Env::v('emails_actifs', Array());
+            print_r(Env::v('emails_rewrite'));
             if (Env::v('emailop') == "ajouter" && Env::has('email')) {
                 $page->assign('retour', $redirect->add_email(Env::v('email')));
             } elseif (empty($actifs)) {
@@ -235,15 +250,15 @@ class EmailModule extends PLModule
         $page->assign('emails',$redirect->emails);
     }
 
-    function handler_antispam(&$page)
+    function handler_antispam(&$page, $statut_filtre = null)
     {
         require_once 'emails.inc.php';
 
         $page->changeTpl('emails/antispam.tpl');
 
         $bogo = new Bogo(S::v('uid'));
-        if (Env::has('statut_filtre')) {
-            $bogo->change(S::v('uid'), Env::i('statut_filtre'));
+        if (isset($statut_filtre)) {
+            $bogo->change(S::v('uid'), $statut_filtre + 0);
         }
         $page->assign('filtre',$bogo->level());
     }
index 86bd82b..e3979ec 100644 (file)
   </h1>
 
 {if $actuel}
-<form action="emails/alias/set/{if $mail_public}private{else}public{/if}" method='post'>
+<script type="text/javascript" src="javascript/ajax.js"></script>
   <table class="flags">
     <tr>
       <td class="orange">
-        <input type="checkbox" {if $mail_public}checked="checked"{/if} onclick="this.form.submit()" />
+        <input type="checkbox" {if $mail_public}checked="checked"{/if}
+            onclick="
+                Ajax.update_html(null,'{$globals->baseurl}/emails/alias/set/'+(this.checked?'public':'private'));
+                document.getElementById('mail_public').innerHTML = (this.checked?'public et apparaît donc sur ta fiche':'privé et n\'apparaît nulle part sur le site') + '.';
+            " />
       </td>
       <td>
         Ton alias est actuellement : <strong>{$actuel}</strong>. Il est pour l'instant
-        {if $mail_public}public et apparaît donc sur ta fiche.{else}privé et n'apparaît nulle part sur le site{/if}
+        <span id="mail_public">{if $mail_public}public et apparaît donc sur ta fiche.{else}privé et n'apparaît nulle part sur le site.{/if}</span>
       </td>
     </tr>
   </table>
-</form>
     
 {else}
   <p>
index e0d3acc..81c84f7 100644 (file)
@@ -46,22 +46,21 @@ Quatre r
   qui ne peuvent plus se satisfaire du réglage 3.
   </li>
 </ol>
-<form action="emails/antispam" method="post">
+<script type="text/javascript" src="javascript/ajax.js"></script>
   <fieldset>
     <legend><strong>Choisis ton propre réglage :</strong></legend>
-    <input id='s0' type='radio' name='statut_filtre' value='0' {if $filtre eq 0}checked="checked"{/if} onclick='this.form.submit()' />
+    <input id='s0' type='radio' name='statut_filtre' value='0' {if $filtre eq 0}checked="checked"{/if} onclick="Ajax.update_html(null, '{$globals->baseurl}/emails/antispam/'+this.value)" />
     <label for='s0'>(1) le filtre anti-spam est coupé</label>
     <br />
-    <input id='s1' type='radio' name='statut_filtre' value='1' {if $filtre eq 1}checked="checked"{/if} onclick='this.form.submit()' />
+    <input id='s1' type='radio' name='statut_filtre' value='1' {if $filtre eq 1}checked="checked"{/if} onclick="Ajax.update_html(null, '{$globals->baseurl}/emails/antispam/'+this.value)" />
     <label for='s1'>(2) le filtre anti-spam est activé, et marque les mails</label>
     <br />
-    <input id='s2' type='radio' name='statut_filtre' value='2' {if $filtre eq 2}checked="checked"{/if} onclick='this.form.submit()' />
+    <input id='s2' type='radio' name='statut_filtre' value='2' {if $filtre eq 2}checked="checked"{/if} onclick="Ajax.update_html(null, '{$globals->baseurl}/emails/antispam/'+this.value)" />
     <label for='s2'>(3) le filtre anti-spam est activé, marque les mails, et élimine les spams avec des notes les plus hautes</label>
     <br />
-    <input id='s3' type='radio' name='statut_filtre' value='3' {if $filtre eq 3}checked="checked"{/if} onclick='this.form.submit()' />
+    <input id='s3' type='radio' name='statut_filtre' value='3' {if $filtre eq 3}checked="checked"{/if} onclick="Ajax.update_html(null, '{$globals->baseurl}/emails/antispam/'+this.value)" />
     <label for='s3'>(4) le filtre anti-spam est activé, et élimine les mails détectés comme spams</label>
   </fieldset>
-</form>
 
 <p>
 Evidemment, <strong>le système n'étant pas infaillible, il est possible qu'un
index fcaf62f..da75c2f 100644 (file)
@@ -22,6 +22,8 @@
 
 <h1>Gestion de mes courriers électroniques</h1>
 
+<script type="text/javascript" src="javascript/ajax.js">
+</script>
 <table class="bicol">
   <tr>
     <th>Mes adresses polytechniciennes à vie</th>
   <tr class="impair">
     <td>
       Tes adresses polytechniciennes sont :<br /><br />
-      <form method='post' action='emails'>
         <div>
           {iterate from=$aliases item=a}
-          <input type='radio' {if $a.best}checked="checked"{/if} name='best' value='{$a.alias}' onclick='this.form.submit()' />
+          <input type='radio' {if $a.best}checked="checked"{/if} name='best' value='{$a.alias}' onclick='Ajax.update_html(null,"{$globals->baseurl}/emails/best/{$a.alias}")' />
           {if $a.a_vie}(**){/if}{if $a.cent_ans}(*){/if} <strong>{$a.alias}</strong>@{#globals.mail.domain#} et @{#globals.mail.domain2#}
           {if $a.expire}<span class='erreur'>(expire le {$a.expire|date_format})</span>{/if}
           <br />
           {/iterate}
         </div>
-      </form>
       <br />
       L'adresse cochée est celle que tu utilises le plus (et qui sera donc affichée sur ta carte de visite, ta fiche, etc...).
       Coche une autre case pour en changer !
index 8f25f32..cad27eb 100644 (file)
@@ -72,7 +72,7 @@
     {#globals.mail.domain2#}, ou lorsque tu utilises notre
     <a href="Docs/SMTPS%E9curis%E9">service d'envoi de courrier SMTP sécurisé</a>.
   </p>
-<form action="emails/redirect" method="post">
+<script type="text/javascript" src="javascript/ajax.js"></script>
   <div class="center">
     <table class="bicol" summary="Adresses de redirection">
       <tr>
@@ -92,9 +92,9 @@
           </strong>
         </td>
         <td>
-          <input type="checkbox" name="emails_actifs[]" value="{$e->email}" {if $e->active}checked="checked"{/if} /></td>
+          <input type="checkbox" value="{$e->email}" {if $e->active}checked="checked"{/if} onclick="Ajax.update_html(null,'{$globals->baseurl}/emails/redirect/'+(this.checked?'':'in')+'active/{$e->email}')"/></td>
         <td>
-          <select name="emails_rewrite[{$e->email}]">
+          <select onchange="Ajax.update_html(null,'{$globals->baseurl}/emails/redirect/rewrite/{$e->email}/'+this.value)">
             <option value=''>--- aucune ---</option>
             {foreach from=$alias item=a}
             <option {if $e->rewrite eq "`$a.alias`@polytechnique.org"}selected='selected'{/if}
             {/foreach}
           </select>
         </td>
-        <td><a href="emails/redirect/remove/{$e->email}">retirer</a></td>
+        <td><a href="emails/redirect/remove/{$e->email}">{icon name=bin_empty title="retirer"}</a></td>
       </tr>
       {/foreach}
       <tr class="{cycle values="pair,impair"}"><td colspan="4">
-               &nbsp;<br />
-               Ajouter une adresse email :
-        <input type="text" size="35" maxlength="60" name="email" value="" />
-        &nbsp;&nbsp;<input type="submit" value="ajouter" name="emailop" />
+        <form action="emails/redirect" method="post">
+        <div>
+               &nbsp;<br />
+               Ajouter une adresse email :
+            <input type="text" size="35" maxlength="60" name="email" value="" />
+            &nbsp;&nbsp;<input type="submit" value="ajouter" name="emailop" />
+        </div>
+        </form>
       </td></tr>
     </table>
-    <br />
-    <input type="submit" value="Valider les modifications" name="emailop" />
   </div>
-</form>
 {if $panne}
 <p class="smaller">
   <strong>
 </p>
 <p>
   Si tu utilises le service POP de poly pour récupérer tes mails dans ton logiciel de courrier,
-  l'équipe de Polytechnique.org te conseille de rediriger :
+  l'équipe de Polytechnique.org te conseille de rediriger :
 </p>
 <ul>
   <li>«prenom.nom»@polytechnique.edu vers {$smarty.session.forlife}@{#globals.mail.domain#}</li>