From 00cfaac07b14591665b4f039b744e10df6e37617 Mon Sep 17 00:00:00 2001 From: Guillaume Dubost Date: Fri, 11 Dec 2015 18:08:08 +0100 Subject: [PATCH 1/4] [FEATURE#22851] Ajout de la preparation de pieces jointes - Ajout des pieces jointes pour les mails - Bugfix dans le csvutils --- README.md | 1 + Tests/Functional/bootstrap/FeatureContext.php | 24 ++++++++++++++--- Tests/Functional/features/csv/csv.feature | 6 +++++ .../features/csv/requests/empty_array.json | 1 + .../Functional/features/csv/results/empty.csv | 0 .../Functional/features/notify/email.feature | 10 +++++++ .../features/notify/requests/file1.txt | 2 ++ .../features/notify/requests/file2.txt | 1 + .../notify/results/email_with_files_job.json | 16 ++++++++++++ src/CsvUtils.php | 5 ++++ src/NotifyUtils.php | 26 +++++++++++++++++++ 11 files changed, 89 insertions(+), 3 deletions(-) create mode 100644 Tests/Functional/features/csv/requests/empty_array.json create mode 100644 Tests/Functional/features/csv/results/empty.csv create mode 100644 Tests/Functional/features/notify/requests/file1.txt create mode 100644 Tests/Functional/features/notify/requests/file2.txt create mode 100644 Tests/Functional/features/notify/results/email_with_files_job.json diff --git a/README.md b/README.md index a43f72c..c554be7 100644 --- a/README.md +++ b/README.md @@ -32,6 +32,7 @@ Toutes les classes `utils` de ce composant seront dans le namespace `ETNA\Utils` ### NotifyUtils - `NotifyUtils::sendPrint` Envoie un job à sprinter pour l'impression de documents +- `NotifyUtils::prepareFilesForMail` Prepare un tableau de fichier pour des pieces jointes - `NotifyUtils::sendMail` Envoie un job pigeon voyageur pour l'envoi de mail ### PasswordUtils diff --git a/Tests/Functional/bootstrap/FeatureContext.php b/Tests/Functional/bootstrap/FeatureContext.php index 9f60ca6..3ffd610 100644 --- a/Tests/Functional/bootstrap/FeatureContext.php +++ b/Tests/Functional/bootstrap/FeatureContext.php @@ -77,9 +77,9 @@ function($line) use ($prefix) { } /** - * @When /^j'envoie un mail a "([^"]*)" avec "([^"]*)" avec le titre "([^"]*)" et le template contenu dans le fichier "([^"]*)" et les tokens contenus dans "([^"]*)"$/ + * @When /^j'envoie un mail a "([^"]*)" avec "([^"]*)" avec le titre "([^"]*)" et le template contenu dans le fichier "([^"]*)" et les tokens contenus dans "([^"]*)"(?: avec comme pièce jointe les fichiers "([^"]*)"?)?$/ */ - public function jEnvoieUnMail($to_email, $from_email, $title, $template_filename, $tokens_filename) + public function jEnvoieUnMail($to_email, $from_email, $title, $template_filename, $tokens_filename, $files = null) { $template_filepath = realpath($this->requests_path . "/" . $template_filename); $template = file_get_contents($template_filepath); @@ -87,8 +87,26 @@ public function jEnvoieUnMail($to_email, $from_email, $title, $template_filename $tokens_content = file_get_contents($tokens_filepath); $tokens = json_decode($tokens_content, true); + $mail_opt = []; + if (null !== $files) { + $mail_opt = [ + "files" => NotifyUtils::prepareFilesForMail( + array_map( + function ($filename) { + $filename = trim($filename); + return [ + "name" => $filename, + "path" => "{$this->requests_path}/{$filename}" + ]; + }, + explode(";", $files) + ) + ) + ]; + } + try { - NotifyUtils::sendMail(self::$silex_app, $title, $template, $from_email, $to_email, $tokens); + NotifyUtils::sendMail(self::$silex_app, $title, $template, $from_email, $to_email, $tokens, $mail_opt); } catch (\Exception $exception) { $this->error = $exception; } diff --git a/Tests/Functional/features/csv/csv.feature b/Tests/Functional/features/csv/csv.feature index 9bea20e..f95ac36 100644 --- a/Tests/Functional/features/csv/csv.feature +++ b/Tests/Functional/features/csv/csv.feature @@ -27,6 +27,12 @@ Scénario: Transformer un tableau multidimensionnel en prefixant les champs Et le résultat devrait être identique au fichier csv "prefixed_csv_from_multidimentional_array.csv" Et le csv sortant devrait contenir 3 lignes +Scénario: Transformer un tableau vide + Quand je convertis en csv le tableau contenu dans "empty_array.json" + Alors il ne devrait pas y avoir eu une erreur + Et le résultat devrait être identique au fichier csv "empty.csv" + Et le csv sortant devrait contenir 0 lignes + Plan du Scénario: Transformer un tableau mal formatté Quand je convertis en csv le tableau contenu dans "" Alors il devrait y avoir eu une erreur diff --git a/Tests/Functional/features/csv/requests/empty_array.json b/Tests/Functional/features/csv/requests/empty_array.json new file mode 100644 index 0000000..fe51488 --- /dev/null +++ b/Tests/Functional/features/csv/requests/empty_array.json @@ -0,0 +1 @@ +[] diff --git a/Tests/Functional/features/csv/results/empty.csv b/Tests/Functional/features/csv/results/empty.csv new file mode 100644 index 0000000..e69de29 diff --git a/Tests/Functional/features/notify/email.feature b/Tests/Functional/features/notify/email.feature index e3288a1..efe6a1b 100644 --- a/Tests/Functional/features/notify/email.feature +++ b/Tests/Functional/features/notify/email.feature @@ -8,6 +8,16 @@ Scénario: Envoyer un email Alors il ne devrait pas y avoir eu une erreur Et il doit y avoir un message dans la file "email" avec le corps contenu dans "simple_email_job.json" +Scénario: Envoyer un email avec des pieces jointes + Quand j'envoie un mail a "test@test.test" avec "sender@send.er" avec le titre "title" et le template contenu dans le fichier "simple_template" et les tokens contenus dans "simple_tokens.json" avec comme pièce jointe les fichiers "file1.txt;file2.txt" + Alors il ne devrait pas y avoir eu une erreur + Et il doit y avoir un message dans la file "email" avec le corps contenu dans "email_with_files_job.json" + +Scénario: Envoyer un email avec certaines des pieces jointes qui n'existent pas + Quand j'envoie un mail a "test@test.test" avec "sender@send.er" avec le titre "title" et le template contenu dans le fichier "simple_template" et les tokens contenus dans "simple_tokens.json" avec comme pièce jointe les fichiers "file12.txt;file1.txt;file2.txt;file42.txt" + Alors il ne devrait pas y avoir eu une erreur + Et il doit y avoir un message dans la file "email" avec le corps contenu dans "email_with_files_job.json" + Plan du Scénario: Envoyer un email sans donner d'adresse Quand j'envoie un mail a "" avec "" avec le titre "title" et le template contenu dans le fichier "simple_template" et les tokens contenus dans "simple_tokens.json" Alors il devrait y avoir eu une erreur diff --git a/Tests/Functional/features/notify/requests/file1.txt b/Tests/Functional/features/notify/requests/file1.txt new file mode 100644 index 0000000..103e359 --- /dev/null +++ b/Tests/Functional/features/notify/requests/file1.txt @@ -0,0 +1,2 @@ +Super fichier texte +Trop de trucs ! diff --git a/Tests/Functional/features/notify/requests/file2.txt b/Tests/Functional/features/notify/requests/file2.txt new file mode 100644 index 0000000..75a25a7 --- /dev/null +++ b/Tests/Functional/features/notify/requests/file2.txt @@ -0,0 +1 @@ +Encore trop de trucs cools ! diff --git a/Tests/Functional/features/notify/results/email_with_files_job.json b/Tests/Functional/features/notify/results/email_with_files_job.json new file mode 100644 index 0000000..2af6e44 --- /dev/null +++ b/Tests/Functional/features/notify/results/email_with_files_job.json @@ -0,0 +1,16 @@ +{ + "from": "sender@send.er", + "to": "test@test.test", + "subject": "title", + "content": "Bonjour,\n\nOn va juste tester l'envoi de mail avec un template tout simple et s'apercevoir que ca fonctionne trop super bien.\n\nC'est vraiment m\u00e9ga g\u00e9nial !\n", + "files": [ + { + "name": "file1.txt", + "content": "U3VwZXIgZmljaGllciB0ZXh0ZQpUcm9wIGRlIHRydWNzICEK" + }, + { + "name": "file2.txt", + "content": "RW5jb3JlIHRyb3AgZGUgdHJ1Y3MgY29vbHMgIQo=" + } + ] +} diff --git a/src/CsvUtils.php b/src/CsvUtils.php index f0b0daa..90af3ce 100644 --- a/src/CsvUtils.php +++ b/src/CsvUtils.php @@ -36,6 +36,11 @@ public static function getTokenFromArray($array, $prefix = '') */ public static function arrayToCsv(array $array, int &$csv_rows = null) { + if (true === empty($array)) { + $csv_rows = 0; + return ""; + } + $headers = array_keys($array[0]); $tokens = array_values($array); diff --git a/src/NotifyUtils.php b/src/NotifyUtils.php index 13f7405..8a9e81f 100644 --- a/src/NotifyUtils.php +++ b/src/NotifyUtils.php @@ -52,6 +52,32 @@ public static function sendPrint( return $routing_key; } + /** + * Prépare des fichiers pour de l'envoi par mail + * + * @param array> $files Fichiers sous la forme ["name" => "...", "path" => "..."] + * + * @return array> Fichiers prêts pour pigeon voyageur + */ + public static function prepareFilesForMail(array $files) + { + $prepared = []; + + foreach ($files as $file) { + if (!isset($file["path"]) || + !isset($file["name"]) || + false === ($file_content = @file_get_contents($file["path"]))) { + continue; + } + $prepared[] = [ + "name" => $file["name"], + "content" => base64_encode($file_content), + ]; + } + + return $prepared; + } + /** * Envoie un mail via rabbitMq * From d03b8c55b62853558042549a5d9e3647704d67ad Mon Sep 17 00:00:00 2001 From: Guillaume Dubost Date: Mon, 14 Dec 2015 09:34:50 +0100 Subject: [PATCH 2/4] [FEATURE#22851] Scrutinizer --- .scrutinizer.yml | 3 +++ src/CsvUtils.php | 2 +- src/NotifyUtils.php | 4 ++-- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/.scrutinizer.yml b/.scrutinizer.yml index f290254..a807ef0 100644 --- a/.scrutinizer.yml +++ b/.scrutinizer.yml @@ -5,6 +5,9 @@ tools: tools: external_code_coverage: timeout: 600 # Timeout in seconds. +filter: + paths: + - src/* checks: php: code_rating: true diff --git a/src/CsvUtils.php b/src/CsvUtils.php index 90af3ce..7f162c7 100644 --- a/src/CsvUtils.php +++ b/src/CsvUtils.php @@ -46,7 +46,7 @@ public static function arrayToCsv(array $array, int &$csv_rows = null) $csv = self::sputcsv($headers, ';', '"', "\n"); foreach ($tokens as $value) { - if (!empty(array_diff($headers, array_keys($value))) || count($headers) !== count($value)) { + if (!empty(array_diff(array_keys($value), $headers))) { throw new \Exception("Bad csv", 400); } $csv .= self::sputcsv(array_values($value), ';', '"', "\n"); diff --git a/src/NotifyUtils.php b/src/NotifyUtils.php index 8a9e81f..81384e2 100644 --- a/src/NotifyUtils.php +++ b/src/NotifyUtils.php @@ -55,9 +55,9 @@ public static function sendPrint( /** * Prépare des fichiers pour de l'envoi par mail * - * @param array> $files Fichiers sous la forme ["name" => "...", "path" => "..."] + * @param array $files Fichiers sous la forme ["name" => "...", "path" => "..."] * - * @return array> Fichiers prêts pour pigeon voyageur + * @return array Fichiers prêts pour pigeon voyageur */ public static function prepareFilesForMail(array $files) { From 80792ebe967e3420f59381090c827e5d4654dc02 Mon Sep 17 00:00:00 2001 From: Guillaume Dubost Date: Mon, 14 Dec 2015 12:21:30 +0100 Subject: [PATCH 3/4] [FEATURE#22851] Correction PR Commentaire PR --- src/NotifyUtils.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/NotifyUtils.php b/src/NotifyUtils.php index 81384e2..e274650 100644 --- a/src/NotifyUtils.php +++ b/src/NotifyUtils.php @@ -70,8 +70,8 @@ public static function prepareFilesForMail(array $files) continue; } $prepared[] = [ - "name" => $file["name"], - "content" => base64_encode($file_content), + "name" => $file["name"], + "content" => base64_encode($file_content), ]; } From 4fa96e8e6ed548466883dc4e36723029a0c06aef Mon Sep 17 00:00:00 2001 From: Guillaume Dubost Date: Mon, 14 Dec 2015 14:22:08 +0100 Subject: [PATCH 4/4] [FEATURE#22851] Suppression du `@` --- src/NotifyUtils.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/src/NotifyUtils.php b/src/NotifyUtils.php index e274650..26e1851 100644 --- a/src/NotifyUtils.php +++ b/src/NotifyUtils.php @@ -64,14 +64,12 @@ public static function prepareFilesForMail(array $files) $prepared = []; foreach ($files as $file) { - if (!isset($file["path"]) || - !isset($file["name"]) || - false === ($file_content = @file_get_contents($file["path"]))) { + if (!isset($file["path"]) || !isset($file["name"]) || false === file_exists($file["path"])) { continue; } $prepared[] = [ "name" => $file["name"], - "content" => base64_encode($file_content), + "content" => base64_encode(file_get_contents($file["path"])), ]; }