Add fallback action which parse tout les repos et detecte les fichiers
oubliés
This commit is contained in:
parent
87ad95ab13
commit
a81fe86d6f
227
fallback.php
Normal file
227
fallback.php
Normal file
@ -0,0 +1,227 @@
|
||||
<?php
|
||||
// --- Define path to application directory
|
||||
defined('APPLICATION_PATH')
|
||||
|| define('APPLICATION_PATH', realpath(__DIR__ . '/application'));
|
||||
|
||||
// --- Define application environment
|
||||
defined('APPLICATION_ENV')
|
||||
|| define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production'));
|
||||
|
||||
// --- Composer autoload
|
||||
require_once realpath(__DIR__ . '/vendor/autoload.php');
|
||||
|
||||
// --- Create application, bootstrap, and run
|
||||
$application = new Zend_Application(APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini');
|
||||
|
||||
// --- Options
|
||||
$displayUsage = false;
|
||||
try {
|
||||
$opts = new Zend_Console_Getopt(array(
|
||||
'help|?' => "Displays usage information.",
|
||||
'cron' => "Mandatory option with cron",
|
||||
'verbose|v' => "Affichage de ce qui est fait."
|
||||
));
|
||||
$opts->parse();
|
||||
} catch (Zend_Console_Getopt_Exception $e) {
|
||||
$displayUsage = true;
|
||||
}
|
||||
|
||||
// --- Aide / Options
|
||||
if (count($opts->getOptions())==0 || isset($opts->help)) {
|
||||
$displayUsage = true;
|
||||
}
|
||||
|
||||
// --- Usage
|
||||
if ($displayUsage) {
|
||||
echo "Fallback pour distribuer les fichiers si la gestion par event n'as pas fonctionné.\n";
|
||||
echo $opts->getUsageMessage();
|
||||
exit;
|
||||
}
|
||||
|
||||
$c = new Zend_Config($application->getOptions());
|
||||
$db = Zend_Db::factory($c->profil->db->metier);
|
||||
Zend_Db_Table::setDefaultAdapter($db);
|
||||
|
||||
$fileConfig = include __DIR__ . '/fileConfig.php';
|
||||
|
||||
if (count($fileConfig) > 0) {
|
||||
foreach ($fileConfig as $client => $prestations) {
|
||||
if (count($prestations) > 0) {
|
||||
foreach($prestations as $p) {
|
||||
|
||||
$prestation = $p['name'];
|
||||
$type = $p['type'];
|
||||
|
||||
$optionsCopyAddDate = false;
|
||||
$optionsCopyDeleteAfter = false;
|
||||
$optionsRunWithEndFile = false;
|
||||
$optionsLog = true;
|
||||
$optionsRoute = array();
|
||||
$optionsFilterName = false;
|
||||
|
||||
// --- Set options
|
||||
if (array_key_exists('in', $p) && count($p['in']) > 0) {
|
||||
foreach ($p['in'] as $option => $value) {
|
||||
${'options'.$option} = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$repositoryDir = 'send';
|
||||
|
||||
// --- Base path, type and repository
|
||||
$startpos = strlen( $c->profil->path->data . '/' );
|
||||
if ($type == 'SFTP') {
|
||||
$fluxBasePath = $c->profil->path->sftp . '/' . $client;
|
||||
}
|
||||
elseif ($type == 'FTP') {
|
||||
$fluxBasePath = $c->profil->path->ftp . '/' . $client;
|
||||
}
|
||||
|
||||
// --- Repository dir
|
||||
if (array_key_exists('directory', $p) && !empty($p['directory'])) {
|
||||
$repositoryDir = $p['directory'];
|
||||
}
|
||||
$fluxBasePath = $fluxBasePath . '/' . $repositoryDir;
|
||||
|
||||
// --- Get files
|
||||
$it = new FilesystemIterator($fluxBasePath);
|
||||
foreach ($it as $fileinfo) {
|
||||
$filenameIn = $fileinfo->getFilename();
|
||||
$extension = $fileinfo->getExtension();
|
||||
|
||||
// --- Don't play with *.tck files
|
||||
if ($extension == 'tck') {
|
||||
continue;
|
||||
}
|
||||
|
||||
// --- Filters
|
||||
if ($optionsFilterName === true) {
|
||||
if ( strpos($filenameIn, $prestation) === false ) {
|
||||
$prestation = null; continue;
|
||||
}
|
||||
}
|
||||
if (is_string($optionsFilterName) && strlen($optionsFilterName) > 0) {
|
||||
if (strpos($filenameIn, $optionsFilterName) === false) {
|
||||
$prestation = null; continue;
|
||||
}
|
||||
}
|
||||
|
||||
// --- Use ".fin" or ".end" files to do something
|
||||
$runExtensions = array('fin', 'end');
|
||||
if (in_array($extension, $runExtensions)) {
|
||||
if ($optionsRunWithEndFile) {
|
||||
$extToDelete = $extension;
|
||||
if (file_exists($fluxBasePath . '/' . $filenameIn)) {
|
||||
$pathParts = pathinfo($fluxBasePath . '/' . $filenameIn);
|
||||
$filenameIn = $pathParts['basename'];
|
||||
}
|
||||
else {
|
||||
echo "Fichier fin inexistant $filenameIn\n";
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// --- Get the realname of file IN or exit
|
||||
if ($optionsRunWithEndFile) {
|
||||
if (in_array($extension, $runExtensions)) {
|
||||
$extensionLength = strlen($extension)+1;
|
||||
$filenameIn = substr($filenameIn, 0, strlen($filenameIn) - $extensionLength);
|
||||
$extension = '';
|
||||
}
|
||||
else {
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
// --- Detail du fichier
|
||||
$nbLines = 0;
|
||||
if ( strtolower(substr($filenameIn, -3)) == 'csv' ) {
|
||||
$lines = file($fluxBasePath . '/' . $filenameIn);
|
||||
$nbLines = count($lines);
|
||||
}
|
||||
$size = filesize($fluxBasePath . '/' . $filenameIn);
|
||||
$dateFile = date('YmdHis', filectime($fluxBasePath . '/' . $filenameIn));
|
||||
|
||||
// --- Define default out filename
|
||||
$filenameOut = $filenameIn;
|
||||
|
||||
// --- Add date to filename
|
||||
if ($optionsCopyAddDate) {
|
||||
$extensionLength = 0;
|
||||
if ($extension != '') {
|
||||
$extensionLength = strlen($extension)+1;
|
||||
$filenameOut = substr($filenameIn, 0, strlen($filenameIn) - $extensionLength);
|
||||
$filenameOut = $filenameOut . '_' . date('YmdHis') . '.' . $extension;
|
||||
}
|
||||
else {
|
||||
$filenameOut = $filenameIn . '_' . date('YmdHis');
|
||||
}
|
||||
}
|
||||
|
||||
// --- Before store the file send to another repository
|
||||
if (count($optionsRoute) > 0) {
|
||||
foreach ($optionsRoute as $tr => $value) {
|
||||
switch($tr) {
|
||||
case 'cp':
|
||||
if (copy($fluxBasePath . '/' . $filenameIn, $value . '/' . $filenameOut)) {
|
||||
echo date('Y-m-d H:i:s')." - Copie du fichier $filenameIn dans $value\n";
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// --- Copy file
|
||||
$destDir = $c->profil->path->storage . '/' . $client . '/send';
|
||||
|
||||
if (!is_dir($destDir)) {
|
||||
mkdir($destDir, 0755, true);
|
||||
}
|
||||
|
||||
if (copy($fluxBasePath . '/' . $filenameIn, $destDir. '/' . $filenameOut)) {
|
||||
echo date('Y-m-d H:i:s')." - Copie du fichier $filenameIn dans $destDir\n";
|
||||
|
||||
// --- Execute
|
||||
if ($optionsLog === true) {
|
||||
$db = Zend_Db::factory($c->profil->db->metier);
|
||||
Zend_Db_Table::setDefaultAdapter($db);
|
||||
try {
|
||||
$fluxM = new Application_Model_Sdv1FluxFileIn();
|
||||
$fluxM->insert(array(
|
||||
'client' => $client,
|
||||
'name' => $prestation,
|
||||
'depotType' => $type,
|
||||
'depotDate' => $dateFile,
|
||||
'depotFile' => $filenameOut,
|
||||
'nbLines' => $nbLines,
|
||||
'depotFileSize' => $size,
|
||||
'dateInsert' => date('YmdHis'),
|
||||
'dateExecute' => '0000-00-00 00:00:00', // @todo : dateExecute
|
||||
));
|
||||
echo date('Y-m-d H:i:s')." - Enregistrement client:$client fichier:$filenameOut\n";
|
||||
} catch (Zend_Db_Exception $e) {
|
||||
echo date('Y-m-d H:i:s')." - ERREUR Enregistrement client:$client fichier:$filenameOut\n";
|
||||
}
|
||||
}
|
||||
|
||||
// --- Suppression des fichiers
|
||||
if ($optionsCopyDeleteAfter) {
|
||||
unlink( $fluxBasePath . '/' . $filenameIn );
|
||||
if ($optionsRunWithEndFile) {
|
||||
unlink( $fluxBasePath . '/' . $filenameIn . '.' . $extToDelete );
|
||||
}
|
||||
}
|
||||
}
|
||||
else {
|
||||
echo date('Y-m-d H:i:s')." - ERREUR Copie du fichier $filenameIn dans $destDir\n";
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Reference in New Issue
Block a user