Advertisement
Guest User

Untitled

a guest
Mar 8th, 2016
99
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 7.31 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. return $month[date("n").$value];
  90. }
  91.  
  92. // Fonction pour ranger les informations récupérées dans un tableau
  93. function traitement_sql($arg1,$arg2=null,$arg3=null,$arg4=null,$arg5=null,$arg6=null,$arg7=null,$arg8=null,$arg9=null,$arg10=null){
  94. for ($i=1; $i < func_num_args(); $i++) {
  95. $argX = "arg".$i;
  96. if (preg_match("/DEFINE(.*)/", ${$argX},$content)){
  97. if (preg_match("/month(.*)/", ${$argX},$valueGetMonth)){
  98. $month = get_month($valueGetMonth);
  99. }
  100. ${$argX} = ${$content[1]};
  101. }
  102. }
  103. while($data = mysql_fetch_assoc($req)){
  104. $data[] =
  105. array(
  106. $data[$arg1],
  107. $data[$arg2],
  108. $data[$arg3],
  109. $data[$arg4],
  110. $data[$arg5],
  111. $data[$arg6],
  112. $data[$arg7],
  113. $data[$arg8],
  114. $data[$arg9],
  115. $data[$arg10],
  116. );
  117. }
  118. $data = array_map('array_filter', $data);
  119. $data = array_filter($data);
  120. // Fermeture de la connexion sql
  121. mysql_close();
  122. // Return multidimensional tab with content values
  123. return array_filter($data);
  124. }
  125.  
  126. // Fonction pour creer un fichier csv à partir des données précédentes
  127. function create_csv_file($data,$filename,$delimiter){
  128. // Creation du fichier CSV
  129. $csv_file = fopen($filename, 'w+');
  130. // Si le fichier existe, vider le contenu:
  131. ftruncate($csv_file,0);
  132. fprintf($csv_file, chr(0xEF).chr(0xBB).chr(0xBF));
  133. fputcsv($csv_file, "TYPE D'APPEL", $delimiter);
  134. fputcsv($csv_file, "DATE", $delimiter);
  135. fputcsv($csv_file, "MOIS", $delimiter);
  136. fputcsv($csv_file, "DUREE", $delimiter);
  137. fputcsv($csv_file, "N° APPELE", $delimiter);
  138. foreach($data as $ligne){
  139. fputcsv($csv_file, $ligne, $delimiter);
  140. }
  141. fclose($csv_file);
  142. return $filename;
  143. }
  144.  
  145. /**
  146. * --- Mise en Oeuvre des Fonctions ---
  147. **/
  148.  
  149. // Requête SQL: INCOMPLETE
  150. $previous_month = get_month('-1');
  151.  
  152. $sql = "SELECT clid,src,dst,duration,cnum,cnam,outbound_cnum,outbound_cnam
  153. FROM cdr
  154. WHERE calldate
  155. BETWEEN ((
  156. SELECT DATE_SUB(curdate(),INTERVAL (DAY(curdate()).$previous_month) DAY)
  157. ))
  158. AND CURDATE()
  159. ORDER BY calldate DESC";
  160.  
  161. // function sql_request: (arg1: request, arg2: database)
  162. sql_request($sql,'asteriskcdrdb');
  163. // Traitement des données (préparation pour création d'un fichier CSV) => DEFINE définit une Valeur hors SQL, déjà implémenté.
  164. // Pour récupérer le mois : DEFINEmonth suivi de + / - la valeur.
  165. $tab_result = traitement_sql('clid','src','DEFINEmonth-1','dst','duration','cnum','cnam','outbound_cnum','outbound_cnam');
  166.  
  167. // Appel de la fonction de création
  168. $return_csv = create_csv_file($tab_result,'Rapport-'.$previous_month.'-Standard CFPR Dinard',',');
  169.  
  170. // Exécution de la fonction d'envoi de mails
  171. $from = "Asterisk.server@roullier.com";
  172. $destination;
  173. $subject = "Rapport Standard Accueil CFP Dinard - ".$previous_month;
  174. $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.";
  175. $file = $return_csv;
  176.  
  177. send_email_with_attachment($from,$destination,$subject,$body,$file);
  178. /**
  179. * Espace Commentaires / Modifications
  180. ***
  181. Creation du CSV dans l'ordre:
  182. Type d'appel (Retranscrire entrant vers...)
  183. Date
  184. Mois
  185. Durée
  186. CallerID
  187. Modifier liste exécution CSV après test sur serveur
  188.  
  189. Envoi du mail via phpmailer? sendmail? mail? => qui demande de modifier une fichier de conf (impact sur asterisk?)
  190.  
  191.  
  192. Placement du Fichier: /var/www/ et phpmailer dans /var/wwww/mail
  193. Droit du fichier : apache2
  194.  
  195. ***************************************/
  196. ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement