webservice/bin/loadCodeRatios.php
2017-02-22 15:03:56 +01:00

636 lines
22 KiB
PHP
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<?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');
try {
$opts = new Zend_Console_Getopt(
//Options
array(
'help|?' => "Aide.",
'fichier=s' => "Nom du fichier complet : version ",
'affiche=s' => "Affiche resultat traitement "
));
$opts->parse();
}
catch (Zend_Console_Getopt_Exception $e)
{
echo $opts->getUsageMessage();
exit;
}
//Usage
if( count($opts->getOptions())==0 || isset($opts->help))
{
echo $opts->getUsageMessage();
exit;
}
#########################################################
##### Presence te taille du fichier #####
#########################################################
$fichier = $opts->fichier; // $fichier contient chemin/qqchose.csv
$nomfichier = basename($fichier); // $nomfichier contient qqchose.csv, basename retourne un array donc un tableau ayant comme valeur chacun des
// fichiers (chemain absolu) contenu dans le repertoir $directory, ici le repertoir contient normalement une seul fichier a la fois , donc $fichier[]
$fic = $fichier ; // On definti notre variable $fic comme etant notre fichier.
#########################################################
##### Teste de validité du nom du fichier #####
#########################################################
$detect1 = strstr($nomfichier, 'valo_commentaires_');
$detect2 = strstr($nomfichier, 'valo_formules_');
$detect3 = strstr($nomfichier, 'scores_formules_');
$detect4 = strstr($nomfichier, 'scores_commentaires_');
if ($detect1 !== false or $detect2 !== false or $detect3 !== false or $detect4 !== false)
{
echo "\n"." Nom du fichier ok"."\n" ;
}
else
{
echo "\n" . "le nom du fichier est incorrect" . "\n";
echo "\n" . "le nom du fichier doit obliqatoirement etre compose de la sorte :" . "\n";
echo "\n" . 'valo_commentaires_' . "\n";
echo "\n" ."ou"."\n";
echo "\n" . 'valo_formules_' . "\n";
echo "\n" ."ou"."\n";
echo "\n" . 'scores_formules_' . "\n";
echo "\n" ."ou"."\n";
echo "\n" . 'scores_commentaires_' . "\n";
Exit;
}
#########################################################
##### On indique si le fichier est present ou non #####
#########################################################
if ((file_exists($fichier)))
{
echo "\n Fichier $nomfichier au format csv trouve a l'emplacement prevu : \n";
echo "\n"." La taille du fichier est de :".filesize($fic)." octets"."\n";
$file = true;
}
else
{
echo "\n". "Pas de fichier .csv present a l'endroit indique"."\n";
$file = false;
exit;
}
#########################################################
##### taille du contenu du fichier #####
#########################################################
# déclaration variables :
$fileopen = fopen($fic, 'r');
$contenufichier = fgetcsv($fileopen);
$nblignes=0;
$cnbl = count($nblignes);
$fific = file($fic); // retourner le contenu du fichier dans une chaîne de caractères.
foreach ($fific as $line_num => $line)
{
$nblignes++;
}
echo "\n"." le fichier contient " . $nblignes . " lignes."."\n" ;
#########################################################
##### Routage vers commentaires ou formules #####
#########################################################
#variables :
$doublon = 0; // On initialise la variable doublon.
$row = 0 ; // On initialise les lignes.
$verif = array() ; // creation d'un tableau
$nom_fic = basename($fic) ;
$col3= 0;
#########################################################
##### Identification du type de fichier #####
#########################################################
//On commance rechercher si le nom du fichier contient "COMMENTAIRE" pour 4 colonnes sinon 2 colonnes
if (strstr($nom_fic, 'commentaires'))
{
$nbcol_cle = 4;
}
else
{
$nbcol_cle = 2;
}
// Si $fic est bien ouvert on commence le traitement.
if ($file = true )
{
$fileopen2 = fopen($fic, "r+");
if($fileopen2)
{
$contenufichier=fgetcsv($fileopen2);
$nblignes = file($fic);
// Tant qu'il y a des lignes, lis les et fait en un tableau.
while (($data = fgetcsv($fileopen2,0,';','"')) !== FALSE)
{
$num = count($row); //compte nombre de partits dans la phrase
$row++;
// On fait une concatenation des colonnes de $fic dans un nouveau tableau nomme $cle.
// Cela nous permettera de dedoublonner par la suite.
if ($nbcol_cle == 4) // si nbcol = 4 alors notre clé sera composée de 4 colonnes sinon 3
{
$cle = $data[0].$data[1].$data[2].$data[3];
}
else
{
$cle = $data[0].$data[1].$data[2];
}
#########################################################
##### Dédoublonnage #####
#########################################################
// On regarde si on retrouve les valeurs de $verif dans $cle
if (in_array($cle, $verif, TRUE))
{
$doublon = $doublon + 1; // On définit un compteur qui nous indiquera le nombre de doublons
echo "\n"."Attention vous avez $doublon doublon(s) dans votre fichier !\n";
echo "\n"."il semblerait qu'il soit present a la ligne $row contenant $cle "."\n";
}
else
{
// Ajout de la cle au tableau indexe numeriquement
$verif[] = $cle ;
}
#########################################################
##### Routage commentaires ou formules #####
##### et verification des champs #####
#########################################################
if (strstr ($nom_fic , 'commentaires'))// le nom du fichier contient 'commentaires' alors ...
{
// On teste les champs vide
if (strlen($data[0])== 0 or strlen($data[1]) == 0
or strlen($data[2]) == 0 or strlen($data[3]) == 0)
{
echo "\n"."Erreur ! Vous avez des champs vides commentaires , sur la ligne $num"."\n"."contenant $data[1].$data[2].$data[3].$data[4].$data[5].$data[6].$data[7]";
}
if ($data[0] == 0)
{
echo "\n"."erreur code commentaire ". $data[0] ." null"."\n";
exit;
}
if($data[2] < 0)
{
echo "\n"."erreur code ligne " . $data[2] . "null"."\n";
exit;
}
}
elseif (strstr ($nom_fic , 'formules'))
{
if (strlen($data[0]) == 0 or strlen($data[1]) == 0 )
{
echo "\n"." Erreur vous avez des champs vides formules , sur la ligne $row"."\n"."contenant $data[0].$data[1]. . ";
exit;
}
if ($data[0] == 0)
{
echo "\n"."erreur code commentaire " . $data[0] . " null"."\n";
exit;
}
if($data[1] < 0)
{
echo "\n"."erreur code code ligne". $data[1] ."null"."\n";
exit;
}
}
}
}
}
if ($doublon >= 1)
{
$ok = false;
echo "\n"." $doublon Doublons détectés dans le fichier."."\n";
// Quitte avec un code d'erreur: doublon détecté.
exit(1);
}
elseif ($doublon == 0 && !file_exists($fic))
{
$ok = false;
exit;
}
else
{
// le script appelant continue.
$ok = true; // petit marqueur de fonctionnement du script jusqu'a présent
echo "\n Le fichier ne comporte pas de doublon. \n";
}
fclose($fileopen);
echo "\n Bon, maintenant on va passer a la base de donnee \n";
#########################################################
##### ________ ____ ____ #####
### | __ \ | \ | \ ###
# | / | |\ \ | |\ \ #
### | __ \ | |/ / | |/ / ###
##### |_______/ |___/ |___/ #####
#########################################################
// si notre scripte est bon on passe a la suite
$c = new Zend_Config($application->getOptions());
try {
$db = Zend_Db::factory($c->profil->db->metier);
$db->getConnection();
// print_r (get_class_methods($db));
}
catch (Zend_Exception $e)
{
echo $e->getMessage();
}
if ($db->isConnected())
{
echo "\n***********************************************\n";
echo "\n Connection a la BDD ok \n";
echo "\n***********************************************\n";
}
else
{
echo "\n***********************************************\n";
echo "\n !!!! Erreur / ! Pas connecte a la BDD !!!! \n";
echo "\n***********************************************\n";
}
$pathCache = APPLICATION_PATH . '/../library/Metier/Scores/Variables';
$copy_fic = $nomfichier;
if($nomfichier) // Si le nom du fichier comprend 'scores' ou 'valo'...
{
// On découpe la chaine de caractère à chaque "/" et on fait un array.
$token = basename($copy_fic);
// On prend ce qui se trouve avant le point
$token1 = strtok($token, ".");
// On effece '_utf8' et '.csv'
$nomtabletemp =(str_replace('_utf8', '', $token));
$nomtable =(str_replace('.csv','', $nomtabletemp));
// Affichage du nom de la table
echo "\n Le nom de la table est : $nomtable . \n";
}
####################################################
##### // Création de la Table Ccmmentaires \\ #####
####################################################
if (strstr($nomtable,"commentaires"))
{
try
{
// Création d'une table "TEXTE"
$sql_ctc_query = $db->query("CREATE TABLE $nomtable
(
code int(8) NOT NULL,
langue char(2) NOT NULL,
cycle smallint(3) NOT NULL,
ligne char(4) NOT NULL,
commentaire longtext,
tri varchar(5) DEFAULT NULL,
deleted varchar(2) DEFAULT NULL,
idUser varchar(0) DEFAULT NULL,
dateInsert varchar(15) DEFAULT NULL,
dateUpdate varchar(0) DEFAULT NULL,
PRIMARY KEY (code,langue,cycle,ligne)
)
ENGINE = MyISAM DEFAULT CHARSET=latin1 COMMENT= 'Commentaires Valorisation - Liste des commentaires';");
}
catch (Zend_Exception $e)
{
echo $e->getMessage()."\n";
echo "\n"."!!!!! ERREUR ! / CHARGEMENT ARRETE !!!!!"."\n"."\n";
}
echo "\n" . " Table $nomtable cree." ."\n";
}
// !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
$fileopen2 = fopen($fic, "r+");
$nbr=0;
if($fileopen2)
{
$contenufichier=fgetcsv($fileopen2);
$nblignes = file($fic);
$vide = "";
$null = null;
$zero = 0;
}
else
{
exit;
echo "\n"."Erreur a l'ouverture du fichier"."\n";
}
if(strstr($nomtable,"commentaires"))
{
// Tant qu'il y a des lignes, lis les et fait en un tableau.
while (($data = fgetcsv($fileopen2,0,';','"')) !== FALSE)
{
####################################################
##### encodage et remplacement du contenu #####
####################################################
$data[4] = str_replace(chr(93), "]", $data[4]); // crochet fermant
$data[4] = str_replace(chr(92), "\\" , $data[4]); // anti slash
$data[4] = str_replace(chr(128), '€', $data[4]); // devise euros
$data[4] = str_replace(chr(130), ',', $data[4]); // baseline single quote
$data[4] = str_replace(chr(132), '"', $data[4]); // baseline double quote
$data[4] = str_replace(chr(133), '...', $data[4]); // ellipsis
$data[4] = str_replace(chr(145), "'", $data[4]); // left single quote
$data[4] = str_replace(chr(146), "'", $data[4]); // right single quote
$data[4] = str_replace(chr(147), '"', $data[4]); // left double quote
$data[4] = str_replace(chr(148), '"', $data[4]); // right double quote
$data[4] = str_replace(chr(150), '', $data[4]); // tiret du 6
$data[5] = str_replace(chr(93), "]", $data[5]); // crochet fermant
$data[5] = str_replace(chr(92), "\\" , $data[5]); // anti slash
$data[5] = str_replace(chr(128), '€', $data[5]); // devise euros
$data[5] = str_replace(chr(130), ',', $data[5]); // baseline single quote
$data[5] = str_replace(chr(132), '"', $data[5]); // baseline double quote
$data[5] = str_replace(chr(133), '...', $data[5]); // ellipsis
$data[5] = str_replace(chr(145), "'", $data[5]); // left single quote
$data[5] = str_replace(chr(146), "'", $data[5]); // right single quote
$data[5] = str_replace(chr(147), '"', $data[5]); // left double quote
$data[5] = str_replace(chr(148), '"', $data[5]); // right double quote
$data[5] = str_replace(chr(150), '', $data[5]); // tiret du 6
$encode = mb_detect_encoding($data[4]); // detection de l'encodage.
$encode = mb_detect_encoding($data[5]); // detection de l'encodage.
$data[4] = mb_convert_encoding($data[4], $encode, 'UTF-8');
$data[5] = mb_convert_encoding($data[5], $encode, 'UTF-8');
// $Zdata4 = '"'.$db->->real_escape_string($data[4]);
// $Zdata4 = $db->quote($data[4]);
//$Zdata4 = mysqli_real_escape_string($db, $data[4]);
if ($data[5] == null)
{
$data[5] = 0;
}
$zdata4= $db->quote($data[4]);
$nbr++;
// ESSAI 1
$sql_insert = array
(
'code' => "$data[0]",
'langue' => "$data[1]",
'cycle' => "$data[2]",
'ligne' => "$data[3]",
'commentaire' => "$data[4]",
'tri' => "$data[5]",
'deleted' => "$null",
'idUser' => "$null",
'dateInsert' => "$null",
'dateUpdate' => "$null"
);
try
{
# $num = count($row); // On compte nombre de parti dans la phrase
# $row++; // à chaques tour de boucle j'ajoute 1 à $row
// ESSAI 2
/*
$sql_itc = $db->query("INSERT INTO $nomtable
(
code, langue, cycle, ligne, commentaire, tri, deleted, idUser, dateInsert, dateUpdate)
VALUES
(
".$data[0].",".$data[1].",".$data[2].",".$data[3].",".$Zdata4.",".$data[5].",'','','',)
");
*/
$db->insert($nomtable, $sql_insert);
//`
// Astuce !! La structure de $data[0] étant un int on retire les "
// Astuce !! La colonne 5 contenant des apostrophs étant interprété par le sql comme un nouveau champ il est necessaire de protéger ce champs, du coup in ajoute la fonction mysql_real_escape_string() pour insérer un antislash devant les caractères " NULL, \x00, \n, \r, \, ', " et \x1a. "
}
// Renseignement sur les erreurs possibles
#echo ("$sql_itt");
catch(Zend_Exception $e)
{
echo "\n" . $e->getMessage()."\n";
//echo "\n"."!!!!!!!!!!!!!!!!!!!!! Import de la table $nomtable echouee. !!!!!!!!!!!!!!!!!!!!!"."\n"."\n";
//$sql_erase = $db->query("DROP TABLE $nomtable;");
//echo "La table $nomtable a ete effacee !! \n ";
}
}
echo "\n"."Import de la table $nomtable . ok". "\n";
// comptage sql
$comptage = count($sql_itc_query);
echo "\n"."Nombre de lignes importees : "."$nbr"."\n";
exit;
}
elseif(strstr($nomtable,"formules"))
{
####################################################
// Création de la Table formules \\
####################################################
try{
$sql_ctf_query = $db->query("CREATE TABLE $nomtable
(
code int(8) NOT NULL DEFAULT '0',
ligne char(4) NOT NULL DEFAULT '',
remarque varchar(120) DEFAULT NULL,
operande varchar(7) DEFAULT NULL,
ope1 varchar(255) DEFAULT NULL,
operation varchar(9) DEFAULT NULL,
valeur varchar(255) DEFAULT NULL,
tri varchar(0) DEFAULT NULL,
deleted varchar(0) DEFAULT NULL,
idUser varchar(0) DEFAULT NULL,
dateInsert varchar(0) DEFAULT NULL,
dateUpdate varchar(0) DEFAULT NULL,
PRIMARY KEY (code,ligne)
)
ENGINE=MyISAM DEFAULT CHARSET=latin1 COMMENT='Criteres Valorisation - Formules de calculs' ;");
}
catch (Zend_Exception $e)
{
echo $e->getMessage()."\n";
echo "\n"."!!!!!!!!!!!!!!!!!!!!! CHARGEMENT ARRETE !!!!!!!!!!!!!!!!!!!!!"."\n"."\n";
}
echo "\n Table $nomtable cree.\n";
// Tant qu'il y a des lignes, lis les et fait en un tableau.
while (($data = fgetcsv($fileopen2,0,';','"')) !== FALSE)
{
####################################################
##### encodage et remplacement du contenu #####
####################################################
$data[2] = str_replace(chr(93), "]", $data[2]); // crochet fermant
$data[2] = str_replace(chr(92), "\\" , $data[2]); // anti slash
$data[2] = str_replace(chr(128), '€', $data[2]); // devise euros
$data[2] = str_replace(chr(130), ',', $data[2]); // baseline single quote
$data[2] = str_replace(chr(132), '"', $data[2]); // baseline double quote
$data[2] = str_replace(chr(133), '...', $data[2]); // ellipsis
$data[2] = str_replace(chr(145), "'", $data[2]); // left single quote
$data[2] = str_replace(chr(146), "'", $data[2]); // right single quote
$data[2] = str_replace(chr(147), '"', $data[2]); // left double quote
$data[2] = str_replace(chr(148), '"', $data[2]); // right double quote
$data[2] = str_replace(chr(150), '', $data[2]); // tiret du 6
$data[4] = str_replace(chr(93), "]", $data[4]); // crochet fermant
$data[4] = str_replace(chr(92), "\\" , $data[4]); // anti slash
$data[4] = str_replace(chr(128), '€', $data[4]); // devise euros
$data[4] = str_replace(chr(130), ',', $data[4]); // baseline single quote
$data[4] = str_replace(chr(132), '"', $data[4]); // baseline double quote
$data[4] = str_replace(chr(133), '...', $data[4]); // ellipsis
$data[4] = str_replace(chr(145), "'", $data[4]); // left single quote
$data[4] = str_replace(chr(146), "'", $data[4]); // right single quote
$data[4] = str_replace(chr(147), '"', $data[4]); // left double quote
$data[4] = str_replace(chr(148), '"', $data[4]); // right double quote
$data[4] = str_replace(chr(150), '', $data[4]); // tiret du 6
$data[5] = str_replace(chr(93), "]", $data[5]); // crochet fermant
$data[5] = str_replace(chr(92), "\\" , $data[5]); // anti slash
$data[5] = str_replace(chr(128), '€', $data[5]); // devise euros
$data[5] = str_replace(chr(130), ',', $data[5]); // baseline single quote
$data[5] = str_replace(chr(132), '"', $data[5]); // baseline double quote
$data[5] = str_replace(chr(133), '...', $data[5]); // ellipsis
$data[5] = str_replace(chr(145), "'", $data[5]); // left single quote
$data[5] = str_replace(chr(146), "'", $data[5]); // right single quote
$data[5] = str_replace(chr(147), '"', $data[5]); // left double quote
$data[5] = str_replace(chr(148), '"', $data[5]); // right double quote
$data[5] = str_replace(chr(150), '', $data[5]); // tiret du 6
$data[6] = str_replace(chr(93), "]", $data[6]); // crochet fermant
$data[6] = str_replace(chr(92), "\\" , $data[6]); // anti slash
$data[6] = str_replace(chr(128), '€', $data[6]); // devise euros
$data[6] = str_replace(chr(130), ',', $data[6]); // baseline single quote
$data[6] = str_replace(chr(132), '"', $data[6]); // baseline double quote
$data[6] = str_replace(chr(133), '...', $data[6]); // ellipsis
$data[6] = str_replace(chr(145), "'", $data[6]); // left single quote
$data[6] = str_replace(chr(146), "'", $data[6]); // right single quote
$data[6] = str_replace(chr(147), '"', $data[6]); // left double quote
$data[6] = str_replace(chr(148), '"', $data[6]); // right double quote
$data[6] = str_replace(chr(150), '', $data[6]); // tiret du 6
$encode = mb_detect_encoding($data[2]); // detection de l'encodage.
$encode = mb_detect_encoding($data[5]); // detection de l'encodage.
$encode = mb_detect_encoding($data[4]); // detection de l'encodage.
$encode = mb_detect_encoding($data[6]); // detection de l'encodage.
$data[2] = mb_convert_encoding($data[2], $encode, 'UTF-8');
$data[4] = mb_convert_encoding($data[4], $encode, 'UTF-8');
$data[5] = mb_convert_encoding($data[5], $encode, 'UTF-8');
$data[6] = mb_convert_encoding($data[6], $encode, 'UTF-8');
$sql_insert = array(
'code' => "$data[0]",
'ligne' => "$data[1]",
'remarque' => "$data[2]",
'operande' => "$data[3]",
'ope1' => "$data[4]",
'operation' => "$data[5]",
'valeur' => "$data[6]",
'tri' => "$null",
'deleted' => "$null",
'idUser' => "$null",
'dateInsert' => "$null",
'dateUpdate' => "$null"
);
$nbr++;
try{
$db->insert($nomtable, $sql_insert);
}
catch (Zend_Exception $e)
{
echo $e->getMessage()."\n";
echo "\n"."!!!!! ERREUR ! / CHARGEMENT ARRETE !!!!!"."\n"."\n";
}
}
echo "\n"." Import de la table $nomtable ok."."\n";
// comptage sql
$comptage = count($sql_insert);
echo "\n"." Nombre de lignes importees : "."$nbr"."\n";
fclose($fileopen2);
exit;
}
// Exécution de la requête
//$result = $db->query($sql_ctt);
// Renseignement sur les erreurs possibles
// echo "<strong>" . $Erreur . "</strong> <br /> <br />\n";
//
// if ($sql_ctt_query) // si code retour OK
// {
// echo "Création de la table $nomtable ok.<br />";
// }
// else
// {
// echo "Création de la table $nomtable échouée.<br />";
// }