From 4a08dc738828b2d7d4137f67b0f45f73b0ae89f1 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Rapha=C3=ABl=20Barrois?= Date: Sun, 21 Jun 2009 18:01:16 +0200 Subject: [PATCH] Bugfixes and improvements MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit * axletter_subsets instead of subset * better safety and readability of SQL requests Signed-off-by: Raphaël Barrois --- modules/axletter.php | 18 ++++++++---------- modules/axletter/axletter.inc.php | 3 ++- templates/axletter/edit.tpl | 2 +- upgrade/0.10.1/02_axletter.sql | 6 +++--- 4 files changed, 14 insertions(+), 15 deletions(-) diff --git a/modules/axletter.php b/modules/axletter.php index 4dd6b0c..fe160b2 100644 --- a/modules/axletter.php +++ b/modules/axletter.php @@ -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); } } } diff --git a/modules/axletter/axletter.inc.php b/modules/axletter/axletter.inc.php index 3305381..8b591f6 100644 --- a/modules/axletter/axletter.inc.php +++ b/modules/axletter/axletter.inc.php @@ -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 } diff --git a/templates/axletter/edit.tpl b/templates/axletter/edit.tpl index 76fd6fb..5d71278 100644 --- a/templates/axletter/edit.tpl +++ b/templates/axletter/edit.tpl @@ -67,7 +67,7 @@ Envoyer à une liste d'adresses
- 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. + 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. {if !$saved} diff --git a/upgrade/0.10.1/02_axletter.sql b/upgrade/0.10.1/02_axletter.sql index d79cf6b..a460fed 100644 --- a/upgrade/0.10.1/02_axletter.sql +++ b/upgrade/0.10.1/02_axletter.sql @@ -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 ) -- 2.1.4