Bugfixes and improvements
authorRaphaël Barrois <raphael.barrois@polytechnique.org>
Sun, 21 Jun 2009 16:01:16 +0000 (18:01 +0200)
committerRaphaël Barrois <raphael.barrois@polytechnique.org>
Sat, 27 Jun 2009 22:57:23 +0000 (00:57 +0200)
* axletter_subsets instead of subset
* better safety and readability of SQL requests

Signed-off-by: Raphaël Barrois <raphael.barrois@polytechnique.org>
modules/axletter.php
modules/axletter/axletter.inc.php
templates/axletter/edit.tpl
upgrade/0.10.1/02_axletter.sql

index 4dd6b0c..fe160b2 100644 (file)
@@ -90,8 +90,8 @@ class AXLetterModule extends PLModule
         $signature  = trim(Post::v('signature'));
         $promo_min  = Post::i('promo_min');
         $promo_max  = Post::i('promo_max');
-        $subset     = Post::b('subset_to');
-        $subset_to  = preg_split("/ *[ ,;\:\n\r]+ */", Post::v('subset_to'));
+        $subset_to  = preg_split("/[ ,;\:\n\r]+/", Post::v('subset_to'), -1, PREG_SPLIT_NO_EMPTY);
+        $subset     = ( count($subset_to) > 0);
         $echeance   = Post::has('echeance_date') ?
               preg_replace('/^(\d\d\d\d)(\d\d)(\d\d)$/', '\1-\2-\3', Post::v('echeance_date')) . ' ' . Post::v('echeance_time')
             : Post::v('echeance');
@@ -103,7 +103,7 @@ class AXLetterModule extends PLModule
             if ($res->numRows()) {
                 extract($res->fetchOneAssoc(), EXTR_OVERWRITE);
                 if ($subset) {
-                    $res = XDB::query('SELECT email FROM axletter_subset WHERE letter_id = {?}', $id);
+                    $res = XDB::query('SELECT email FROM axletter_subsets WHERE letter_id = {?}', $id);
                     $subset_to = $res->fetchColumn();
                 }
                 $saved = true;
@@ -135,10 +135,6 @@ class AXLetterModule extends PLModule
                 $page->trigError("L'intervalle de promotions n'est pas valide");
                 Post::kill('valid');
             }
-            if ($subset && !count($subset_to)) {
-                $page->trigError("La liste d'adresses mails sélectionnée est vide");
-                Post::kill('valid');
-            }
             if (empty($short_name)) {
                 $page->trigError("L'annonce doit avoir un nom raccourci pour simplifier la navigation dans les archives");
                 Post::kill('valid');
@@ -171,12 +167,14 @@ class AXLetterModule extends PLModule
                                             signature = {?}, promo_min = {?}, promo_max = {?}, echeance = {?}, subset = {?}",
                              $id, $short_name, $subject, $title, $body, $signature, $promo_min, $promo_max, $echeance, $subset);
                 if ($subset) {
-                    XDB::execute('DELETE FROM axletter_subset WHERE letter_id = {?}', $id);
+                    XDB::execute('DELETE FROM   axletter_subsets
+                                        WHERE   letter_id = {?}', $id);
                     foreach ($subset_to as $email) {
-                //        $email = trim($email);
                         $uid = $this->idFromMail(array('email' => $email));
                         if ($uid) {
-                            XDB::execute('INSERT INTO axletter_subset SET letter_id = {?}, user_id = {?}, email = {?}', $id, $uid, $email);
+                            XDB::execute('INSERT    INTO axletter_subsets
+                                             SET    letter_id = {?}, user_id = {?}, email = {?}',
+                                $id, $uid, $email);
                         }
                     }
                 }
index 3305381..8b591f6 100644 (file)
@@ -190,8 +190,9 @@ class AXLetter extends MassMailer
     protected function subsetJoin()
     {
         if ($this->_subset) {
-            return "INNER JOIN axletter_subset AS c ON (c.letter_id = {$this->_id} AND ni.user_id = c.user_id)";
+            return "INNER JOIN axletter_subsets AS c ON (c.letter_id = ".XDB::escape($this->_id)." AND ni.user_id = c.uid)";
         }
+        return '';
         // TODO : force use of the adresses given by AX, not "canonical" ones
     }
 
index 76fd6fb..5d71278 100644 (file)
@@ -67,7 +67,7 @@
     <tr>
       <td class="titre">Envoyer à une liste d'adresses</td>
       <td><textarea name="subset_to" rows="7" cols="78">{$subset_to}</textarea><br />
-      <span class="smaller">Indiquez une liste d'adresses mails : la lettre sera envoyée uniquement aux personnes des promotions sélectionnées, dont l'adresse figure dans la liste, et qui souhaitent recevoir les mailings de l'AX.</span>
+      <span class="smaller">Indiquez une liste d'adresses emails : la lettre sera envoyée uniquement aux personnes des promotions sélectionnées, dont l'adresse figure dans la liste, et qui souhaitent recevoir les emails de l'AX.</span>
       </td>
     </tr>
     {if !$saved}
index d79cf6b..a460fed 100644 (file)
@@ -1,8 +1,8 @@
-DROP TABLE IF EXISTS axletter_subset;
+DROP TABLE IF EXISTS axletter_subsets;
 
-CREATE TABLE IF NOT EXISTS axletter_subset (
+CREATE TABLE IF NOT EXISTS axletter_subsets (
     letter_id INT(11) UNSIGNED NOT NULL,
-    user_id INT(11) NOT NULL,
+    uid INT(11) NOT NULL,
     email VARCHAR(255) NOT NULL
 )