#!/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; } $c = new Zend_Config($application->getOptions()); Zend_Registry::set('config', $c); $test = false; if (isset($opts->list)){ $test = true; } //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', $c->profil->path->data); define ('ACTES_IGNUM_LOCAL_DIR', PATH_DATA.'/pdf/scan/'); define ('ACTES_IG_LOCAL_DIR', PATH_DATA.'/pdf/'); $report_email = $c->profil->mail->email->support; $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, utf8_decode($message), $headers) ){ echo date ('Y/m/d - H:i:s').' - Un email a été envoyé à '.$commande['emailCommande']." pour la commande $nomCible.\n"; return true; } else { echo date ('Y/m/d - H:i:s').' - ERREUR : Impossible d\'envoyer l\'email à '.$commande['emailCommande']." pour la commande $nomCible.\n"; return false; } } set_time_limit(0); /** * Connexion à la base de données */ $db = Zend_Db::factory($c->profil->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"; $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 !\n"; /** * 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.") !\n"; 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.")!\n"; 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\n"; if ($test){ echo date ('Y/m/d - H:i:s')." - Fichier $fichier \n"; } 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.\n"; } else { echo date ('Y/m/d - H:i:s')." - ERREUR : Impossible de télécharger le fichier $fichier !\n"; } } //Copie et renommage du fichier suivant la ref infogreffe (s'il n'existe pas déjà) $sirenC = $commande['siren']; $refC = $commande['refDocument']; require_once 'Infogreffe/Infogreffe.php'; $infogreffe = new Infogreffe(); if (preg_match('/^([0-9]{4}_).*?$/', $refC, $matches)){ $path = $infogreffe->bilanPath($refC); $nomCible = $infogreffe->bilanFilename($sirenC, $refC); $type = 'acte'; } else { $path = $infogreffe->actePath($refC); $nomCible = $infogreffe->acteFilename($sirenC, $refC); $type = 'bilan'; } if (file_exists(ACTES_IGNUM_LOCAL_DIR.$fichier) && !file_exists(PATH_DATA.$path.$nomCible)) { if (rename(ACTES_IGNUM_LOCAL_DIR.$fichier, PATH_DATA.$path.$nomCible)){ if ( $type == 'acte' ){ preg_match('/^acte-([0-9]{9})-([0-9a-zA-Z]{1,})-([0-9]{8})-(.*)-(.*)-(.*)-(.*)-(.*)-([0-9]{1,})\.pdf$/', $fichier, $matches); $siren = $matches[1]; $type_acte = $matches[2]; $date_acte = $matches[3]; $num_acte = $matches[9]; $actesM = new Application_Model_ActesFiles(); $sql = $actesM->select()->where('file=?',$nomCible); $result = $actesM->fetchRow($sql); if ( null === $result ) { $actesM->insert(array( 'siren' => $siren, 'type' => $type_acte, 'date' => $date_acte, 'num' => $num_acte, 'file' => $nomCible, )); } } echo date ('Y/m/d - H:i:s')." - Fichier ".ACTES_IGNUM_LOCAL_DIR.$fichier." déplacé en ".PATH_DATA.$path.$nomCible.".\n"; } else { echo date ('Y/m/d - H:i:s')." ERREUR - Impossible de déplacer ".ACTES_IGNUM_LOCAL_DIR.$fichier." en ".PATH_DATA.$path.$nomCible." !\n"; } } //Envoi du mail et Mise à jour de la commande $testMail = false; if (file_exists(PATH_DATA.$path.$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\n"; $commandesM = new Application_Model_Commandes(); $data = array( 'dateReception' => date('YmdHis')); $commandesM->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\n"; } $report_txt.= "\n"; } } } break; } } } ftp_close($conn_id); if (empty($report_txt)) { $report_txt = "Aucun envoi."; } //Envoi du mail de rapport if (!$test && !$testMail){ if (mail($report_email, $report_subject, utf8_decode($report_txt))){ echo date ('Y/m/d - H:i:s')." - Rapport envoyé.\n"; } else { echo date ('Y/m/d - H:i:s')." - Erreur lors de l'envoir du rapport !\n"; } } ?>