Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /**
- * Script exécuté le premier du Mois
- * Récupération des données CDR et mise en page sur un CSV
- * suivit de l'envoi d'un email.
- **/
- /**
- * Les Erreurs et Succès sont ajoutés au syslog du serveur.
- **/
- /**
- * --- Définition des Fonctions ---
- **/
- // Fonction pour l'envoi de l'email avec une pièce jointe
- /*
- function mail_attachment($filename, $path, $mailto, $from_mail, $from_name, $replyto, $subject, $message) {
- $file = $path.$filename;
- $file_size = filesize($file);
- $handle = fopen($file, "r");
- $content = fread($handle, $file_size);
- fclose($handle);
- $content = chunk_split(base64_encode($content));
- $uid = md5(uniqid(time()));
- $header = "From: ".$from_name." <".$from_mail.">\r\n";
- $header .= "Reply-To: ".$replyto."\r\n";
- $header .= "MIME-Version: 1.0\r\n";
- $header .= "Content-Type: multipart/mixed; boundary=\"".$uid."\"\r\n\r\n";
- $header .= "This is a multi-part message in MIME format.\r\n";
- $header .= "--".$uid."\r\n";
- $header .= "Content-type:text/plain; charset=iso-8859-1\r\n";
- $header .= "Content-Transfer-Encoding: 7bit\r\n\r\n";
- $header .= $message."\r\n\r\n";
- $header .= "--".$uid."\r\n";
- $header .= "Content-Type: application/octet-stream; name=\"".$filename."\"\r\n"; // use different content types here
- $header .= "Content-Transfer-Encoding: base64\r\n";
- $header .= "Content-Disposition: attachment; filename=\"".$filename."\"\r\n\r\n";
- $header .= $content."\r\n\r\n";
- $header .= "--".$uid."--";
- openlog('email', LOG_NDELAY, LOG_USER);
- if (mail($mailto, $subject, "", $header)) {
- syslog(LOG_NOTICE, "Email Send! (".$mailto.")");
- } else {
- syslog(LOG_ERR, "Email Error!");
- }
- }
- */
- // Fonction pour l'envoi de l'email avec une pièce jointe avec phpmailer
- function send_email_with_attachment($from,$destination,$subject,$body,$file=null){
- // Function Working: send_email_with_attachment(MAIL SRC, MAIL DEST, SUBJECT, MAIL BODY, OPTIONAL ATTACHMENT FILE);
- require 'mail/PHPMailerAutoload.php'; // user phpmailer to send emails
- $mail = new PHPMailer;
- $mail->isSMTP();
- $mail->Host = '172.16.101.19';
- $mail->SMTPAuth = true;
- $mail->Username = 'EMAIL LOGIN';
- $mail->Password = 'EMAIL PASSWORD';
- $mail->SMTPSecure = 'tls';
- $mail->Port = 587;
- $mail->setFrom($from);
- $mail->addAddress($destination);
- if (!isset($file)) {$mail->addAttachment($file);} // Si un fichier est présent
- $mail->isHTML(true);
- $mail->Subject = $subject;
- $mail->Body = $body;
- if(!$mail->send()){syslog(LOG_ERR, "Email Error!");}else{syslog(LOG_NOTICE, "Email Send! (".$mailto.")");} // Ajout du status dans syslog
- }
- // Fonction pour executer une requête SQL
- function sql_request($request,$database){
- // SQL Connexion
- $db = mysql_connect('localhost', 'root', 'debian');
- // SQL Selection de la database
- mysql_select_db($database,$db);
- // SQL Exécution de la requête
- if (empty($request)) {
- syslog(LOG_ERR, "No Data in SQL Request. script abort");
- die("No SQL Data");
- }
- return mysql_query($request) or die(syslog(LOG_ERR, "SQL Request Error: ".mysql_error()));
- }
- // Fonction pour réupérer le mois précédent
- function get_month($value){ // +X / -X
- date_default_timezone_set('Europe/Paris');
- $month = array("","Janvier","Février","Mars","Avril","Mai","Juin","Juillet","Août","Septembre","Octobre","Novembre","Décembre");
- if(!empty($value)){
- $selectedMonth = date("m", strtotime("$value month"));
- $year = date("Y", strtotime("$value month"));
- }else{
- $selectedMonth = date("m");
- $year = date("Y");
- }
- $return['digit'] = $selectedMonth
- if (preg_match("/0*/", subject)) {
- $selectedMonth = substr($selectedMonth, -1, -0);
- }
- substr("abcdef", -1, -0);
- $return['month'] = $month[$selectedMonth];
- $return['year'] = $year;
- return $return;
- }
- // Fonction pour ranger les informations récupérées dans un tableau
- // V2 -------------------
- /**
- * Utilisation de la fonction:
- * traitement_sql(Tableau Résultat SQL, Tableau de TRI, N° de l'Extension)
- * Tableau de Tri:
- * - DEFINE: Définit une fonction externe. Actuellement seul monthXX est disponible
- * - NUMERO: supprime le n° d'extension et suppression du DST et SRC
- * - TAPPEL: remplace dtcontext par une information plus lisible
- **/
- function traitement_sql($tab_data_sql,$tabFilter[],$extension){
- // Stockage des données SQL dans un tableau associatif
- while($data = mysql_fetch_assoc($tab_data_sql))
- {
- $tab[]=$data;
- }
- // Traitement du tableau résultat par résultat
- foreach ($tab as $key => $value) {
- // Pour chaque résultat, je parcours le tableau pour me donner l'ordre des informations
- foreach ($tabFilter as $k => $v) {
- /*
- * FILTRE APPEL DE FONCTION: Je cherche si un fonction externe intervient
- */
- if (preg_match("/DEFINE(.*)/", $value[$v])){
- /*
- * FILTRE MONTH: récupère le mois +/- valeur
- */
- if (preg_match("/.*month(.*)/", $value[$v],$valueGetMonth)){
- $month = get_month($valueGetMonth["1"]);
- $value[$v] = $month['month'];
- }
- }
- /*
- * FILTRE NUMERO Je cherche si il faut regrouper deux colonnes avec un seul numéro (différent de l'extension)
- */
- if (preg_match("/NUMERO/", $v)){
- if (preg_match("/$extension/", $value['src'])){
- $tempTab[$v] = $value['dst'];
- }elseif (preg_match("/$extension/", $value['dst'])){
- $tempTab[$v] = $value['src'];
- }
- }
- // Sinon je conserve la valeur
- else{
- $tempTab[$v] = $value[$v];
- }
- }
- // J'enregistre les données de cette ligne / Je cumule les lignes
- $newTab[] = $tempTab;
- }
- unset($tab);
- $newTab = array_map('array_filter', $newTab);
- $newTab = array_filter($newTab);
- // Fermeture de la connexion sql
- mysql_close();
- // Return multidimensional tab with content values
- return array_filter($newTab);
- }
- // Fonction pour creer un fichier csv à partir des données précédentes
- function create_csv_file($data,$filename,$delimiter){
- // Creation du fichier CSV
- $csv_file = fopen($filename, 'w+');
- // Si le fichier existe, vider le contenu:
- ftruncate($csv_file,0);
- fprintf($csv_file, chr(0xEF).chr(0xBB).chr(0xBF));
- fputcsv($csv_file, "TYPE D'APPEL", $delimiter);
- fputcsv($csv_file, "DATE", $delimiter);
- fputcsv($csv_file, "MOIS", $delimiter);
- fputcsv($csv_file, "DUREE", $delimiter);
- fputcsv($csv_file, "N° APPELE", $delimiter);
- foreach($data as $ligne){
- fputcsv($csv_file, $ligne, $delimiter);
- }
- fclose($csv_file);
- return $filename;
- }
- /**
- * --- Mise en Oeuvre des Fonctions ---
- **/
- // Requête SQL: INCOMPLETE
- $result_func_month = get_month('-1');
- $previous_month = $result_func_month["month"];
- $year = $result_func_month["year"];
- $digitMonth = $previous_month["digit"];
- $monextension = "15300";
- $sql = "SELECT dcontext, calldate, duration, dst, src
- FROM cdr
- WHERE calldate LIKE(\"".$year."-".$digitMonth."-%\")
- AND
- (src LIKE \"$monextension\" OR dst LIKE \"$monextension\")
- ORDER BY calldate DESC;";
- // function sql_request: (arg1: request, arg2: database)
- $tab_data_sql = sql_request($sql,'asteriskcdrdb');
- // Traitement des données (préparation pour création d'un fichier CSV) => DEFINE définit une Valeur hors SQL, déjà implémenté.
- // Pour récupérer le mois : DEFINEmonth suivi de + / - la valeur.
- $tab_result = traitement_sql(array(0 => 'dcontext',1 => 'calldate',2 => 'DEFINEmonth-1',3 => 'NUMERO'), $monextension);
- // Appel de la fonction de création
- $return_csv = create_csv_file($tab_result,'Rapport-'.$previous_month.'-Standard CFPR Dinard',',');
- // Exécution de la fonction d'envoi de mails
- $from = "Asterisk.server@roullier.com";
- $destination ="josselin.rouveau@roullier.com";
- $subject = "Rapport Standard Accueil CFP Dinard - ".$previous_month;
- $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.";
- $file = $return_csv;
- print_r($file);
- //send_email_with_attachment($from,$destination,$subject,$body,$file);
- /**
- * Espace Commentaires / Modifications
- ***
- Creation du CSV dans l'ordre:
- Type d'appel (Retranscrire entrant vers...)
- Date
- Mois
- Durée
- CallerID
- Modifier liste exécution CSV après test sur serveur
- Envoi du mail via phpmailer? sendmail? mail? => qui demande de modifier une fichier de conf (impact sur asterisk?)
- Placement du Fichier: /var/www/ et phpmailer dans /var/wwww/mail
- Droit du fichier : apache2
- ***************************************/
- ?>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement