Stores and uses preferences for sending emails from site (Closes #1529).
authorStéphane Jacob <sj@m4x.org>
Tue, 20 Sep 2011 21:21:03 +0000 (23:21 +0200)
committerStéphane Jacob <sj@m4x.org>
Tue, 20 Sep 2011 21:21:03 +0000 (23:21 +0200)
Signed-off-by: Stéphane Jacob <sj@m4x.org>
ChangeLog
modules/email.php
modules/platal.php
templates/emails/send.tpl
templates/platal/preferences.tpl

index cc46cb5..e4e6b15 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -9,6 +9,9 @@ Bug/Wish:
     * Core:
         - #1523: Rename AUTH_MDP to AUTH_PASSWD                            -JAC
 
+    * Email:
+        - #1529: Stores and uses preferences for sending emails from site  -JAC
+
     * Payments:
         - #1512: Allows payments for unlogged users                        -JAC
         - #1537: Replaces payments page on main site by a donation page    -JAC
index 457157f..6c5d96f 100644 (file)
@@ -463,7 +463,7 @@ class EmailModule extends PLModule
                     foreach ($files as $name=>&$upload) {
                         $mymail->addUploadAttachment($upload, $name);
                     }
-                    if (Env::v('nowiki')) {
+                    if (Env::v('wiki') == 'text') {
                         $mymail->setTxtBody(wordwrap($txt, 78, "\n"));
                     } else {
                         $mymail->setWikiBody($txt);
@@ -498,6 +498,14 @@ class EmailModule extends PLModule
         $page->assign('contacts', $contacts);
         $page->assign('maxsize', ini_get('upload_max_filesize') . 'o');
         $page->assign('user', S::user());
+        $preferences = XDB::fetchOneAssoc('SELECT  from_email, from_format
+                                             FROM  accounts
+                                            WHERE  uid = {?}',
+                                          S::user()->id());
+        if ($preferences['from_email'] == '') {
+            $preferences['from_email'] = '"' . S::user()->fullName() . '" <' . S::user()->bestEmail() . '>';
+        }
+        $page->assign('preferences', $preferences);
     }
 
     function handler_test($page, $hruid = null)
index 1dee07e..baa18b1 100644 (file)
@@ -47,6 +47,7 @@ class PlatalModule extends PLModule
             'prefs/rss'         => $this->make_hook('prefs_rss',    AUTH_COOKIE, 'user'),
             'prefs/webredirect' => $this->make_hook('webredir',     AUTH_PASSWD, 'mail'),
             'prefs/skin'        => $this->make_hook('skin',         AUTH_COOKIE, 'user'),
+            'prefs/email'       => $this->make_hook('prefs_email',  AUTH_COOKIE, 'mail'),
 
             // password related thingies
             'password'          => $this->make_hook('password',     AUTH_PASSWD, 'user,groups'),
@@ -199,6 +200,47 @@ class PlatalModule extends PLModule
         }
     }
 
+    function handler_prefs_email($page)
+    {
+        $page->changeTpl('platal/email_preferences.tpl');
+
+        if (Post::has('submit')) {
+            S::assert_xsrf_token();
+
+            $from_email = Post::t('from_email');
+            $from_format = Post::v('from_format');
+
+            // Checks email.
+            $email_regex = '/^[a-z0-9.\-+_\$]+@([\-.+_]?[a-z0-9])+$/i';
+            if (!preg_match($email_regex, $from_email)) {
+                $full_regex = '/^[^<]*<[a-z0-9.\-+_\$]+@([\-.+_]?[a-z0-9])+>$/i';
+                if (!preg_match($full_regex, $from_email)) {
+                    $page->trigError("L'adresse email est erronée.");
+                    $error = true;
+                    $page->assign('from_email', $from_email);
+                    $page->assign('from_format', $from_format);
+                    $page->assign('error', true);
+                    return;
+                }
+            }
+
+            // Saves data.
+            XDB::execute('UPDATE  accounts
+                             SET  from_email = {?}, from_format = {?}
+                           WHERE  uid = {?}',
+                         $from_email, ($from_format == 'html' ? 'html' : 'text'), S::user()->id());
+            $page->trigSuccess('Données enregistrées.');
+        }
+
+        $data = XDB::fetchOneAssoc('SELECT  from_email, from_format
+                                      FROM  accounts
+                                     WHERE  uid = {?}',
+                                   S::user()->id());
+        $page->assign('from_email', $data['from_email']);
+        $page->assign('from_format', $data['from_format']);
+        $page->assign('error', false);
+    }
+
     function handler_password($page)
     {
         global $globals;
index 1434bc5..1524824 100644 (file)
     }
   }
 
+  function toggleWiki()
+  {
+    if ($('[name="wiki"]').val() == 'text') {
+      $('[name="wiki"]').val('wiki');
+    } else {
+      $('[name="wiki"]').val('text');
+    }
+  }
+
   $(window).unload(
     function() {
       if (sent) {
       <td class="titre">de&nbsp;:</td>
       <td>
         <input type='hidden' name='signature' value='1' />
-        <input type='text' name='from' size='60' value='{if $smarty.request.from}
-{$smarty.request.from}
-{else}
-"{$user->fullName()}" &lt;{$user->bestEmail()}&gt;
-{/if}' />
+        <input type='text' name='from' size='60'
+          value="{if $smarty.request.from}{$smarty.request.from}{else}{$preferences.from_email}{/if}" />
       </td>
     </tr>
     <tr>
     <legend>Sujet&nbsp;:&nbsp;<input type='text' name='sujet' size='60' value="{$smarty.request.sujet}" /></legend>
     <div class="center">
       Tu peux utiliser des <a href="wiki_help" class="popup3">{icon name=information title="Syntaxe wiki"} marqueurs wiki</a> pour formatter ton texte.<br />
-      <small><label><input type="checkbox" name="nowiki" value="1" {if $smarty.request.nowiki}checked="checked"{/if} onchange="updateWikiView(this);" />
-      coche cette case pour envoyer l'email en texte brut, sans formattage</label></small>
+      <small><label>
+        <input type="hidden"  name="wiki" value="{$smarty.request.wiki|default:$preferences.from_format}" />
+        <input type="checkbox" {if $smarty.request.wiki eq "text" || (!$smarty.request.wiki && $preferences.from_format eq "text")}checked="checked"{/if}
+        onchange="updateWikiView(this); toggleWiki();" />
+        coche cette case pour envoyer l'email en texte brut, sans formattage
+      </label></small>
     </div>
     <div id="preview">
       <div id="preview_pv" style="display: none">
index 0628af4..a50bfca 100644 (file)
@@ -100,6 +100,11 @@ $(function() {
       http://www.carva.org/{$smarty.session.user->hruid} vers la page de ton choix.<br />
       <a href="prefs/webredirect">Gérer ta redirection Web</a>
     </dd>
+    <dt>Paramètres d'envois d'emails depuis le site</dt>
+    <dd>
+      Tu peux faire retenir au site les paramètres d'envoi par défaut des emails depuis <a href="emails/send">le site</a>.<br />
+      <a href="prefs/email">Gérer tes envois d'emails depuis le site</a>
+    </dd>
   </dl>
 </fieldset>
 {/if}