#!/usr/bin/php -q "Affiche l'aide.", 'list' => "Liste les actes en attente disponible sur le FTP et affiche les informations", 'get-s' => "Recupère seulement les actes du FTP (un seul document si la référence est spécifier G )", 'send-s' => "Récupère les actes et envoi un mail à chaque client (un seul acte si la référence est spécifier G)", ) ); $opts->parse(); } catch (Zend_Console_Getopt_Exception $e) { echo $e->getUsageMessage(); exit; } //Usage if(count($opts->getOptions())==0 || isset($opts->help)) { echo "Vérifie les actes numérisés reçus en provenance des Greffes."; echo "\n\n"; echo $opts->getUsageMessage(); echo "\n"; exit; } $test = false; if (isset($opts->list)){ $test = true; } $config = new Zend_Config_Ini(APPLICATION_PATH . '/configs/configuration.ini'); //Configuration FTP define ('ACTES_IGNUM_FTP_URL', 'ftp2.scores-decisions.com'); define ('ACTES_IGNUM_FTP_USER', 'mpc2500'); define ('ACTES_IGNUM_FTP_PASS', 'passmpc78'); define ('PATH_DATA', $config->path->data); define ('ACTES_IGNUM_LOCAL_DIR', PATH_DATA.'/'.$config->path->pdf.'/scan/'); define ('ACTES_IG_LOCAL_DIR', PATH_DATA.'/'.$config->path->pdf.'/'); $report_email = $config->mail->production; $report_subject = 'Traitement des actes '.date('Y-m-d H:i:s'); $report_txt = ''; require_once 'common/ftp.php'; function sendMail($commande, $nomCible){ $subject = "Actes ou Statuts disponible pour ".$commande['siren']; $message = "Le document commandé pour le siren ".$commande['siren']." est disponible en téléchargement sur le site de Scores & Décisions à l'adresse suivante :\r\n\r\n"; $message.= "http://extranet.scores-decisions.com/fichier/pdf/$nomCible\r\n"; $headers = 'From: infoslegales@scores-decisions.com' . "\r\n" . 'Reply-To: infoslegales@scores-decisions.com'; if ( mail($commande['emailCommande'], $subject, $message, $headers) ){ echo date ('Y/m/d - H:i:s').' - Un email a été envoyé à '.$commande['emailCommande']." pour la commande $nomCible.".EOL; return true; } else { echo date ('Y/m/d - H:i:s').' - ERREUR : Impossible d\'envoyer l\'email à '.$commande['emailCommande']." pour la commande $nomCible.".EOL; return false; } } set_time_limit(0); $eol = "\n"; /** * Connexion à la base de données */ $dbConfig = new Zend_Config_Ini(APPLICATION_PATH.'/configs/databases.ini'); $db = Zend_Db::factory($dbConfig->db->sdv1); Zend_Db_Table_Abstract::setDefaultAdapter($db); /** * Liste des commandes non traités depuis la base de données */ $sql = "SELECT idCommande, idUser, login, emailCommande, siren, refDocument, typeCommande, dateCommande FROM commandes WHERE dateReception=0 AND dateCommande LIKE '".date('Y')."%'"; $tabCommandes = $db->fetchAssoc($sql); $nbCommandes = count($tabCommandes); $tabTmp = array(); foreach ($tabCommandes as $commande) { if ($commande['typeCommande']=='C'){ $tabTmp['c'.$commande['idCommande']] = $commande; } elseif ($commande['typeCommande']=='G' || $commande['typeCommande']==''){ $tabTmp['g'.$commande['idCommande']] = $commande; } } $tabCommandes = $tabTmp; unset($tabTmp); echo date('Y/m/d - H:i:s') ." - Il y a $nbCommandes commandes en attente de réception courrier ou numérisation !$eol"; /** * Connexion au site FTP pour la récupération de la liste des fichiers au format pdf */ $conn_id = ftp_connect(ACTES_IGNUM_FTP_URL); if (!$conn_id) { echo date ('Y/m/d - H:i:s')." - ERREUR : Impossible de se connecter au serveur FTP (".ACTES_IGNUM_FTP_URL.") !".EOL; exit; } $login_result = ftp_login($conn_id, ACTES_IGNUM_FTP_USER, ACTES_IGNUM_FTP_PASS); if (!$login_result) { echo date ('Y/m/d - H:i:s')." - ERREUR : Impossible de s'authentifier sur le serveur FTP (".ACTES_IGNUM_FTP_URL.")!".EOL; exit; } $contents = ftp_nlist($conn_id, "*.pdf"); /** * Liste de tout les fichiers disponible dans le repertoire * et associe une clé pour faciliter le tri */ $tabFichiersFtp = array(); foreach ($contents as $filename){ $indice = 0; if (preg_match('/[g|c][0-9]+\.pdf/', $filename) || preg_match('/[g|c][0-9]+-[0-9]{1,2}\.pdf/', $filename)){ list($ref, $indice) = explode( '-', str_replace(array('.pdf', 'g', 'c'), array('','',''), $filename) ); if(empty($indice)) $indice = 0; $tabFichiersFtp[$ref.'-'.$indice] = strtolower($filename); // Fichiers en anomalies } else { if ($test){ echo "Erreur : Anomalie fichier numérisé $filename\n"; } else { $subject = "Erreur : Anomalie fichier numérisé"; $message = "Le fichier $filename a été trouvé et ne correspond pas au format attendu"; $headers = 'From: supportdev@scores-decisions.com' . "\r\n" . 'Reply-To: supportdev@scores-decisions.com'; mail('supportdev@scores-decisions.com', $subject, $message, $headers); } } } /** * Tri des fichiers par ordre décroissant * Les noms des fichiers sont incrémenté par 1 */ krsort($tabFichiersFtp); /** * Dans le cas ou il y a eu une erreur de scan, la production passe a nouveau le * document dans le scanner et le fichier est envoyé sur le ftp * Le document est nommé G[ref],G[ref]-1,G[ref]-2,.....pdf. * On garde donc le dernier document scanné. */ $lastRef = ''; $tabFichiersTemp = array(); foreach($tabFichiersFtp as $k => $val) { list($ref, $indice) = explode('-',$k); if( $lastRef != $ref ) { $tabFichiersTemp[$ref] = $val; } $lastRef = $ref; } $tabFichiers = $tabFichiersTemp; unset($tabFichiersTemp); /** * Pour chaque commande, test de la présence d'un fichier associé * Si le fichier correspond téléchargement du fichier */ foreach ($tabCommandes as $ref => $commande){ foreach ($tabFichiers as $refAssocie => $fichier){ if (substr($ref,1) == $refAssocie){ echo date ('Y/m/d - H:i:s')." - Traitement de la commande $ref ".EOL; if ($test){ echo date ('Y/m/d - H:i:s')." - Fichier $fichier ".EOL; } else { //Récupération du fichier depuis le FTP (s'il n'existe pas déjà) if (!file_exists(ACTES_IGNUM_LOCAL_DIR.$fichier)){ if (ftp_get($conn_id, ACTES_IGNUM_LOCAL_DIR.$fichier, $fichier, FTP_BINARY, 0)) { echo date ('Y/m/d - H:i:s')." - Fichier $fichier téléchargé depuis le serveur FTP.".EOL; } else { echo date ('Y/m/d - H:i:s')." - ERREUR : Impossible de télécharger le fichier $fichier !".EOL; } } //Copie et renommage du fichier suivant la ref infogreffe (s'il n'existe pas déjà) $sirenC = $commande['siren']; $refC = $commande['refDocument']; $nomCible = "acte-$sirenC-$refC.pdf"; if (preg_match('/^([0-9]{4}_).*?$/', $refC, $matches)){ $nomCible = "bilan-$sirenC-$refC.pdf"; } if (file_exists(ACTES_IGNUM_LOCAL_DIR.$fichier) && !file_exists(ACTES_IG_LOCAL_DIR.$nomCible)){ if (rename(ACTES_IGNUM_LOCAL_DIR.$fichier, ACTES_IG_LOCAL_DIR.$nomCible)){ echo date ('Y/m/d - H:i:s')." - Fichier ".ACTES_IGNUM_LOCAL_DIR.$fichier." déplacé en ".ACTES_IG_LOCAL_DIR.$nomCible.".".EOL; } else { echo date ('Y/m/d - H:i:s')." ERREUR - Impossible de déplacer ".ACTES_IGNUM_LOCAL_DIR.$fichier." en ".ACTES_IG_LOCAL_DIR.$nomCible.' !'.EOL; } } //Envoi du mail et Mise à jour de la commande $testMail = false; if (file_exists(ACTES_IG_LOCAL_DIR.$nomCible)){ if ($testMail){ echo "Envoi fichier $nomCible ($ref) à ".$commande['emailCommande']; } else { $report_txt.= "$ref intégré à l'extranet"; $isMailSent = false; if (trim($commande['emailCommande'])!=''){ $isMailSent = sendMail($commande, $nomCible); } else { $isMailSent = true; } if ($isMailSent){ echo date ('Y/m/d - H:i:s')." - Commande $ref mise à jour".EOL; $commande = new Application_Model_Commandes(); $data = array( 'dateReception' => date('YmdHis')); $commande->update($data, 'idCommande='.$commande['idCommande']); $report_txt.= ' - Email envoyé à '.$commande['emailCommande']; } else { $report_txt.= ' - Email non envoyé !'; echo date ('Y/m/d - H:i:s')." ERREUR - Email non envoyé et commande $ref non mise à jour".EOL; } $report_txt.= "\n"; } } } break; } } } ftp_close($conn_id); //Envoi du mail de rapport if (!$test && !$testMail){ if (mail($report_email, $report_subject, $report_txt)){ echo date ('Y/m/d - H:i:s')."Rapport envoyé."; } else { echo date ('Y/m/d - H:i:s')."Erreur lors de l'envoir du rapport !"; } } ?>