Showing 1 changed files with 83 additions and 3 deletions
+83 -3
analyse-votes-AN
... ...
@@ -185,6 +185,9 @@ function update_database () {
185 185
 
186 186
 function write_comparaison () {
187 187
     result="scrutins ($(sum <<< "${groupe[@]}" | cut -b1-5))${dossier:+ - ${dossier}}"
188
+    if test "$envoi_par_mail" = $true_flag; then
189
+        result="scrutins"
190
+    fi
188 191
     content="/dev/shm/$result/content.xml"
189 192
     id_cols=(Scrutin Date Séance Titre Adoption Dossier)
190 193
     eval $(sqlite_request 'select printf("typevotes[%i]=%s;", id, nom) from votes')
... ...
@@ -233,7 +236,9 @@ function write_comparaison () {
233 236
         echo $cell >> "$content"
234 237
     }
235 238
 
236
-    echo "génération du fichier $result"
239
+    if test -z "$envoi_par_mail"; then
240
+        echo "génération du fichier $result"
241
+    fi
237 242
 
238 243
     mkdir -p "/dev/shm/$result/META-INF"
239 244
 
... ...
@@ -408,13 +413,45 @@ EOcontent
408 413
 
409 414
     mv -f "/dev/shm/$result.zip" "${destination_path:+$destination_path/}$result.ods"
410 415
 
411
-    echo -e "\r\033[KTerminé : ${destination_path:+$destination_path/}$result.ods"
416
+    if test -z "$envoi_par_mail"; then
417
+        echo -e "\r\033[KTerminé : ${destination_path:+$destination_path/}$result.ods"
418
+    fi
412 419
 }
413 420
 
414 421
 function save_database () {
415 422
     test -n "$result" -a -d "/dev/shm/$result" && rm -fr "/dev/shm/$result"
416 423
     test -n "$database" -a -n "$in_ram_database" || return
417
-    if test -r "$database" && sqldiff=$(sqldiff $in_ram_database $database) && test -z "$sqldiff"; then
424
+    if test "$envoi_par_mail" = $true_flag; then
425
+        if test -n "$mailconfig_file" && test -r "$mailconfig_file"; then
426
+            source "$mailconfig_file"
427
+        elif test -r "/usr/local/etc/${0##*/}.mail.conf"; then
428
+            source "/usr/local/etc/${0##*/}.mail.conf"
429
+        fi
430
+        stat -Lc "(date de mise à jour de la base: %x)" $database
431
+        cat > $process_token.headers << EOC
432
+From: ${from_mail:?}
433
+To: $destinataire
434
+Subject: les scrutins demandés
435
+EOC
436
+        curl_opt=(
437
+                --url smtp://${smtp_address:?}:${smtp_port:?}
438
+                --mail-rcpt $destinataire
439
+                -H @$process_token.headers
440
+                -F "=(;type=multipart/alternative"
441
+                -F "=<$process_token.txt;encoder=quoted-printable"
442
+                -F "=<$process_token.html;encoder=quoted-printable"
443
+                -F "=)"
444
+        )
445
+        if test -r "${destination_path:+$destination_path/}$result.ods"; then
446
+            curl_opt[${#curl_opt[@]}]="-F"
447
+            curl_opt[${#curl_opt[@]}]="=@${destination_path:+$destination_path/}$result.ods;encoder=base64"
448
+        fi
449
+        exec 1>&-
450
+        aha -f $process_token.mail -t "envoi automatisé" > $process_token.html
451
+        w3m -dump $process_token.html > $process_token.txt
452
+        curl ${curl_opt[@]}
453
+        rm -f "${destination_path:+$destination_path/}$result.ods" $process_token*
454
+    elif test -r "$database" && sqldiff=$(sqldiff $in_ram_database $database) && test -z "$sqldiff"; then
418 455
         echo "pas de modification"
419 456
     elif test -w "$database"; then
420 457
         rm -f "$database"
... ...
@@ -544,6 +581,14 @@ while [[ $# -gt 0 ]]; do
544 581
             }
545 582
             config_file="$2"
546 583
             shift;;
584
+        "--mailconf")
585
+#<fichier>|indique le chemin vers le fichier de configuration. Par défaut "{_}.conf"
586
+            test -r "$2" || {
587
+                echo "config introuvable $2" >&2
588
+                options_error=$true_flag
589
+            }
590
+            mailconfig_file="$2"
591
+            shift;;
547 592
         "--dest")
548 593
 #<répertoire>|génère le fichier dans le répertoire spécifié. Par défaut $PWD
549 594
             if test -n "$2" && test -d "$2" -a -r "$2"; then
... ...
@@ -571,6 +616,14 @@ while [[ $# -gt 0 ]]; do
571 616
 #<chiffre>|affiche de la progression de la mise à jour de la base de données tous les <chiffre>%. Par défaut 1
572 617
             update_progress="$2"
573 618
             shift;;
619
+        "--mail")
620
+            envoi_par_mail=$true_flag
621
+            destinataire="$2"
622
+            no_db_update=$true_flag
623
+            destination_path=/dev/shm
624
+            generation_progress=1000
625
+            exec > $process_token.mail 2>&1
626
+            shift;;
574 627
         "--help")
575 628
 #|affiche cette aide et quitte
576 629
             echo "$0 [options]"
... ...
@@ -624,12 +677,18 @@ if test "$periode" = $true_flag; then
624 677
     }
625 678
     first=$(sqlite_request "select min(num) from scrutins where date = '$(get_date ${periode_value%:*} first)'")
626 679
     last=$(sqlite_request "select max(num) from scrutins where date = '$(get_date ${periode_value#*:} last)'")
680
+    if test "$envoi_par_mail" = $true_flag; then
681
+        texte_periode="du $(get_date ${periode_value%:*} first) (scrutin n°$first) au $(get_date ${periode_value#*:} last) (scrutin n°$last)"
682
+    fi
627 683
 elif test "$dossier" != $true_flag; then
628 684
     test -z "$last" && last=$(dernier_scrutin_public)
629 685
     test -z "$first" && first=1
630 686
 fi
631 687
 
632 688
 if test "$liste_dossiers" = $true_flag; then
689
+    if test "$envoi_par_mail" = $true_flag; then
690
+        echo "Voici la liste des dossiers actuellement à l'étude"
691
+    fi
633 692
     sqlite_request "select printf('• %s (%s)', titre, url) from dossiers"
634 693
     exit
635 694
 fi
... ...
@@ -643,6 +702,9 @@ fi
643 702
 
644 703
 if test "$liste_deputes" = $true_flag; then
645 704
     if test -n "$liste_deputes_value"; then
705
+        if test "$envoi_par_mail" = $true_flag; then
706
+            echo "Voici la liste des député·e·s du groupe dont le nom correspond au critère $liste_deputes_value"
707
+        fi
646 708
         sqlite_request "select printf('%s - %s%s',
647 709
                                       députés.nom,
648 710
                                       groupes.nom,
... ...
@@ -654,6 +716,9 @@ if test "$liste_deputes" = $true_flag; then
654 716
                         or
655 717
                             groupes.nom_court = '$liste_deputes_value'"
656 718
     else
719
+        if test "$envoi_par_mail" = $true_flag; then
720
+            echo "Voici la liste des député·e·s"
721
+        fi
657 722
         sqlite_request "select printf('%s - %s%s',
658 723
                                       députés.nom,
659 724
                                       groupes.nom,
... ...
@@ -694,5 +759,20 @@ for (( g = 0; g < ${#_groupe[@]}; g++ )); do
694 759
     fi
695 760
 done
696 761
 
762
+if test -s $process_token.mail; then
763
+    exit 1
764
+fi
765
+
697 766
 update_database
698 767
 write_comparaison
768
+
769
+if test "$envoi_par_mail" = $true_flag; then
770
+    echo Vous pourrez trouver en pièce-jointe les résultats demandés avec ces critères:
771
+    if test ${#groupe[@]} -gt 0; then
772
+        echo "votes des groupes et député·e·s suivant·e·s:"
773
+        printf " • %s\n" "${groupe[@]}"
774
+    fi
775
+    if test "$periode" = $true_flag; then
776
+        echo sur la période allant $texte_periode
777
+    fi
778
+fi