Skip to content

Commit

Permalink
Merge pull request #2 from gdubost/feature/22851
Browse files Browse the repository at this point in the history
[FEATURE#22851] Ajout de la preparation de pieces jointes
  • Loading branch information
SparSio committed Jan 4, 2016
2 parents 0e445dc + 4fa96e8 commit d5d33df
Show file tree
Hide file tree
Showing 12 changed files with 91 additions and 4 deletions.
3 changes: 3 additions & 0 deletions .scrutinizer.yml
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,9 @@ tools:
tools:
external_code_coverage:
timeout: 600 # Timeout in seconds.
filter:
paths:
- src/*
checks:
php:
code_rating: true
Expand Down
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
24 changes: 21 additions & 3 deletions Tests/Functional/bootstrap/FeatureContext.php
Original file line number Diff line number Diff line change
Expand Up @@ -77,18 +77,36 @@ 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);
$tokens_filepath = realpath($this->requests_path . "/" . $tokens_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;
}
Expand Down
6 changes: 6 additions & 0 deletions Tests/Functional/features/csv/csv.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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 "<array_source>"
Alors il devrait y avoir eu une erreur
Expand Down
1 change: 1 addition & 0 deletions Tests/Functional/features/csv/requests/empty_array.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
[]
Empty file.
10 changes: 10 additions & 0 deletions Tests/Functional/features/notify/email.feature
Original file line number Diff line number Diff line change
Expand Up @@ -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 "[email protected]" avec "[email protected]" 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 "[email protected]" avec "[email protected]" 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 "<sender>" avec "<receiver>" 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
Expand Down
2 changes: 2 additions & 0 deletions Tests/Functional/features/notify/requests/file1.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
Super fichier texte
Trop de trucs !
1 change: 1 addition & 0 deletions Tests/Functional/features/notify/requests/file2.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
Encore trop de trucs cools !
16 changes: 16 additions & 0 deletions Tests/Functional/features/notify/results/email_with_files_job.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
{
"from": "[email protected]",
"to": "[email protected]",
"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="
}
]
}
7 changes: 6 additions & 1 deletion src/CsvUtils.php
Original file line number Diff line number Diff line change
Expand Up @@ -36,12 +36,17 @@ 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);

$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");
Expand Down
24 changes: 24 additions & 0 deletions src/NotifyUtils.php
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,30 @@ 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_exists($file["path"])) {
continue;
}
$prepared[] = [
"name" => $file["name"],
"content" => base64_encode(file_get_contents($file["path"])),
];
}

return $prepared;
}

/**
* Envoie un mail via rabbitMq
*
Expand Down

0 comments on commit d5d33df

Please sign in to comment.