Advertisement
Guest User

Untitled

a guest
Mar 10th, 2016
105
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 8.89 KB | None | 0 0
  1. <?php
  2. /**
  3. * Script exécuté le premier du Mois
  4. * Récupération des données CDR et mise en page sur un CSV
  5. * suivit de l'envoi d'un email.
  6. **/
  7.  
  8. /**
  9. * Les Erreurs et Succès sont ajoutés au syslog du serveur.
  10. **/
  11.  
  12. /**
  13. * --- Définition des Fonctions ---
  14. **/
  15.  
  16. // Fonction pour l'envoi de l'email avec une pièce jointe
  17. /*
  18. function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
  19. $file = $path.$filename;
  20. $file_size = filesize($file);
  21. $handle = fopen($file, "r");
  22. $content = fread($handle, $file_size);
  23. fclose($handle);
  24. $content = chunk_split(base64_encode($content));
  25. $uid = md5(uniqid(time()));
  26. $header = "From: ".$from_name." <".$from_mail.">\r\n";
  27. $header .= "Reply-To: ".$replyto."\r\n";
  28. $header .= "MIME-Version: 1.0\r\n";
  29. $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
  30. $header .= "This is a multi-part message in MIME format.\r\n";
  31. $header .= "--".$uid."\r\n";
  32. $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
  33. $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
  34. $header .= $message."\r\n\r\n";
  35. $header .= "--".$uid."\r\n";
  36. $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
  37. $header .= "Content-Transfer-Encoding: base64\r\n";
  38. $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
  39. $header .= $content."\r\n\r\n";
  40. $header .= "--".$uid."--";
  41. openlog('email', LOG_NDELAY, LOG_USER);
  42. if (mail($mailto, $subject, "", $header)) {
  43. syslog(LOG_NOTICE, "Email Send! (".$mailto.")");
  44. } else {
  45. syslog(LOG_ERR, "Email Error!");
  46. }
  47. }
  48. */
  49.  
  50. // Fonction pour l'envoi de l'email avec une pièce jointe avec phpmailer
  51. function send_email_with_attachment($from,$destination,$subject,$body,$file=null){
  52. // Function Working: send_email_with_attachment(MAIL SRC, MAIL DEST, SUBJECT, MAIL BODY, OPTIONAL ATTACHMENT FILE);
  53. require 'mail/PHPMailerAutoload.php'; // user phpmailer to send emails
  54. $mail = new PHPMailer;
  55. $mail->isSMTP();
  56. $mail->Host = '172.16.101.19';
  57. $mail->SMTPAuth = true;
  58. $mail->Username = 'EMAIL LOGIN';
  59. $mail->Password = 'EMAIL PASSWORD';
  60. $mail->SMTPSecure = 'tls';
  61. $mail->Port = 587;
  62. $mail->setFrom($from);
  63. $mail->addAddress($destination);
  64. if (!isset($file)) {$mail->addAttachment($file);} // Si un fichier est présent
  65. $mail->isHTML(true);
  66. $mail->Subject = $subject;
  67. $mail->Body = $body;
  68. if(!$mail->send()){syslog(LOG_ERR, "Email Error!");}else{syslog(LOG_NOTICE, "Email Send! (".$mailto.")");} // Ajout du status dans syslog
  69. }
  70.  
  71. // Fonction pour executer une requête SQL
  72. function sql_request($request,$database){
  73. // SQL Connexion
  74. $db = mysql_connect('localhost', 'root', 'debian');
  75. // SQL Selection de la database
  76. mysql_select_db($database,$db);
  77. // SQL Exécution de la requête
  78. if (empty($request)) {
  79. syslog(LOG_ERR, "No Data in SQL Request. script abort");
  80. die("No SQL Data");
  81. }
  82. return mysql_query($request) or die(syslog(LOG_ERR, "SQL Request Error: ".mysql_error()));
  83. }
  84.  
  85. // Fonction pour réupérer le mois précédent
  86. function get_month($value){ // +X / -X
  87. date_default_timezone_set('Europe/Paris');
  88. $month = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
  89. if(!empty($value)){
  90. $selectedMonth = date("m", strtotime("$value month"));
  91. $year = date("Y", strtotime("$value month"));
  92. }else{
  93. $selectedMonth = date("m");
  94. $year = date("Y");
  95. }
  96.  
  97. $return['digit'] = $selectedMonth
  98. if (preg_match("/0*/", subject)) {
  99. $selectedMonth = substr($selectedMonth, -1, -0);
  100. }
  101. substr("abcdef", -1, -0);
  102. $return['month'] = $month[$selectedMonth];
  103. $return['year'] = $year;
  104. return $return;
  105. }
  106.  
  107. // Fonction pour ranger les informations récupérées dans un tableau
  108.  
  109. // V2 -------------------
  110. /**
  111. * Utilisation de la fonction:
  112. * traitement_sql(Tableau Résultat SQL, Tableau de TRI, N° de l'Extension)
  113. * Tableau de Tri:
  114. * - DEFINE: Définit une fonction externe. Actuellement seul monthXX est disponible
  115. * - NUMERO: supprime le n° d'extension et suppression du DST et SRC
  116. * - TAPPEL: remplace dtcontext par une information plus lisible
  117. **/
  118. function traitement_sql($tab_data_sql,$tabFilter[],$extension){
  119. // Stockage des données SQL dans un tableau associatif
  120. while($data = mysql_fetch_assoc($tab_data_sql))
  121. {
  122. $tab[]=$data;
  123. }
  124. // Traitement du tableau résultat par résultat
  125. foreach ($tab as $key => $value) {
  126. // Pour chaque résultat, je parcours le tableau pour me donner l'ordre des informations
  127. foreach ($tabFilter as $k => $v) {
  128. /*
  129. * FILTRE APPEL DE FONCTION: Je cherche si un fonction externe intervient
  130. */
  131. if (preg_match("/DEFINE(.*)/", $value[$v])){
  132. /*
  133. * FILTRE MONTH: récupère le mois +/- valeur
  134. */
  135. if (preg_match("/.*month(.*)/", $value[$v],$valueGetMonth)){
  136. $month = get_month($valueGetMonth["1"]);
  137. $value[$v] = $month['month'];
  138. }
  139. }
  140. /*
  141. * FILTRE NUMERO Je cherche si il faut regrouper deux colonnes avec un seul numéro (différent de l'extension)
  142. */
  143. if (preg_match("/NUMERO/", $v)){
  144. if (preg_match("/$extension/", $value['src'])){
  145. $tempTab[$v] = $value['dst'];
  146. }elseif (preg_match("/$extension/", $value['dst'])){
  147. $tempTab[$v] = $value['src'];
  148. }
  149. }
  150. // Sinon je conserve la valeur
  151. else{
  152. $tempTab[$v] = $value[$v];
  153. }
  154. }
  155. // J'enregistre les données de cette ligne / Je cumule les lignes
  156. $newTab[] = $tempTab;
  157. }
  158. unset($tab);
  159. $newTab = array_map('array_filter', $newTab);
  160. $newTab = array_filter($newTab);
  161. // Fermeture de la connexion sql
  162. mysql_close();
  163. // Return multidimensional tab with content values
  164. return array_filter($newTab);
  165. }
  166.  
  167. // Fonction pour creer un fichier csv à partir des données précédentes
  168. function create_csv_file($data,$filename,$delimiter){
  169. // Creation du fichier CSV
  170. $csv_file = fopen($filename, 'w+');
  171. // Si le fichier existe, vider le contenu:
  172. ftruncate($csv_file,0);
  173. fprintf($csv_file, chr(0xEF).chr(0xBB).chr(0xBF));
  174. fputcsv($csv_file, "TYPE D'APPEL", $delimiter);
  175. fputcsv($csv_file, "DATE", $delimiter);
  176. fputcsv($csv_file, "MOIS", $delimiter);
  177. fputcsv($csv_file, "DUREE", $delimiter);
  178. fputcsv($csv_file, "N° APPELE", $delimiter);
  179. foreach($data as $ligne){
  180. fputcsv($csv_file, $ligne, $delimiter);
  181. }
  182. fclose($csv_file);
  183. return $filename;
  184. }
  185.  
  186. /**
  187. * --- Mise en Oeuvre des Fonctions ---
  188. **/
  189.  
  190. // Requête SQL: INCOMPLETE
  191. $result_func_month = get_month('-1');
  192. $previous_month = $result_func_month["month"];
  193. $year = $result_func_month["year"];
  194. $digitMonth = $previous_month["digit"];
  195. $monextension = "15300";
  196.  
  197. $sql = "SELECT dcontext, calldate, duration, dst, src
  198. FROM cdr
  199. WHERE calldate LIKE(\"".$year."-".$digitMonth."-%\")
  200. AND
  201. (src LIKE \"$monextension\" OR dst LIKE \"$monextension\")
  202. ORDER BY calldate DESC;";
  203.  
  204. // function sql_request: (arg1: request, arg2: database)
  205. $tab_data_sql = sql_request($sql,'asteriskcdrdb');
  206. // Traitement des données (préparation pour création d'un fichier CSV) => DEFINE définit une Valeur hors SQL, déjà implémenté.
  207. // Pour récupérer le mois : DEFINEmonth suivi de + / - la valeur.
  208. $tab_result = traitement_sql(array(0 => 'dcontext',1 => 'calldate',2 => 'DEFINEmonth-1',3 => 'NUMERO'), $monextension);
  209.  
  210. // Appel de la fonction de création
  211. $return_csv = create_csv_file($tab_result,'Rapport-'.$previous_month.'-Standard CFPR Dinard',',');
  212.  
  213. // Exécution de la fonction d'envoi de mails
  214. $from = "Asterisk.server@roullier.com";
  215. $destination ="josselin.rouveau@roullier.com";
  216. $subject = "Rapport Standard Accueil CFP Dinard - ".$previous_month;
  217. $body = "Mail automatique:\n\n\nVous trouverez ci-joint le rapport du mois de ".$previous_month." pour le Standard téléphonique de l'accueil CFPR de Dinard.";
  218. $file = $return_csv;
  219. print_r($file);
  220. //send_email_with_attachment($from,$destination,$subject,$body,$file);
  221. /**
  222. * Espace Commentaires / Modifications
  223. ***
  224. Creation du CSV dans l'ordre:
  225. Type d'appel (Retranscrire entrant vers...)
  226. Date
  227. Mois
  228. Durée
  229. CallerID
  230. Modifier liste exécution CSV après test sur serveur
  231.  
  232. Envoi du mail via phpmailer? sendmail? mail? => qui demande de modifier une fichier de conf (impact sur asterisk?)
  233.  
  234.  
  235. Placement du Fichier: /var/www/ et phpmailer dans /var/wwww/mail
  236. Droit du fichier : apache2
  237.  
  238. ***************************************/
  239. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement