<?php
require_once 'application/class/class_ManageSession.php';
require_once 'application/helpers/class_supervision.php';
// Permet de ne pas afficher l'entete dans l'Iframe
$_POST['THROUGH'] = 'TRUE';

$isHttp = (GetValue('THROUGH') == 'TRUE');

$mode_popup = getValue('mode_popup');
$mode_popup = (is_null($mode_popup) || '' == $mode_popup) ? false : BoolSql($mode_popup);

$type_import = getValue('type_import');
$type_import = (is_null($type_import) || '' == $type_import) ? 'panier' : $type_import;

$no_ao = getValue('no_ao');
$no_ao = (is_null($no_ao) || '' == $no_ao) ? '' : $no_ao;

/**
 * Script permettant de récupérer les lignes de données articles d'un fichier CSV
 * et de les injecter dans le panier en cours.
 */
// Création de l'objet utilisé pour l'import
$xsl_import = 'application/xsl/iframe_import_csv_v10.xsl';
if ($isHttp) {
    $obj_xml = new GenXslt();
    
    switch (GetValue('MODE')) {
        // Mode appserveur
        case 'httpreq': // mode reponse sur les updates
            $object = GetValue('OBJECT');
            $form_parent = GetValue('form_parent');
            $champ = GetValue('champ');
            $prg_appel = GetValue('prg_appel');
            
            if (getValue('OBJECT') == 'aide') {
                // Affichage de l'aide permettant la saisie des differents item
            } else if (stripos(getValue('action'), 'select_') === 0) {
                $importCsv = unserializeSecure($_SESSION['import_csv']);
                list ($fonction, $idProfil) = explode('_', getValue('action'));
                
                $array = & $importCsv->array_scr;
                $array['profil']['!valeur'] = $idProfil;
                // Dossier 26769
                $importCsv->setIdProfil($idProfil);
                
                $importCsv->array_scr = $array;
                $_SESSION['import_csv'] = serializeSecure($importCsv);
                
                $obj_xml->XslHtml($xsl_import, $importCsv->array_scr);
                
                $obj_xml->echoHtml('id_td_fav_import');
                $obj_xml->echoHtml('id_td_structure_import');
                
                echo ";switchDisplay('id_td_liste_profil');";
            } else if (stripos(getValue('action'), 'fav_') === 0) {
                $importCsv = unserializeSecure($_SESSION['import_csv']);
                list ($fonction, $idProfil) = explode('_', getValue('action'));
                // On va chercher
                // Si le paramétrage n'existe pas alors on initialise cette valeur avec 'OR
                $reqSql = SqlContexte::rqTrouveContexteDisposition('PROFIL', 'IMPORT');
                if ($reqSql->Trouve1()) {
                    $reqSql = SqlContexte::rqUpdateContexteDisposition('PROFIL', 'IMPORT', $idProfil);
                } else {
                    $reqSql = SqlContexte::rqInsertContexteDisposition('PROFIL', 'IMPORT', $idProfil);
                }
                $reqSql->ExecuteSql();
                
                $array = & $importCsv->array_scr;
                
                $ref = null;
                foreach ($array['profil']['liste'] as & $profil) {
                    if ($profil['ID_PROFIL'] == $idProfil)
                        $profil['is_fav'] = 1;
                    else
                        $profil['is_fav'] = 0;
                    
                    $ref[] = $profil['_favid'];
                }
                
                $importCsv->array_scr = $array;
                $_SESSION['import_csv'] = serializeSecure($importCsv);
                
                $obj_xml->XslHtml($xsl_import, $importCsv->array_scr);
                foreach ($ref as $value)
                    $obj_xml->echoHtml($value);
                
                $obj_xml->echoHtml('id_td_fav_import');
                $obj_xml->echoHtml('id_td_structure_import');
            } else if (stripos(getValue('action'), 'accueil') === 0) {
                initEnvCsv();
                $xslt = new GenXslt(true);
                $importCsv->array_scr = $array;
                $_SESSION['import_csv'] = serializeSecure($importCsv);
                
                echo 'document.getElementById("men_gene").innerHTML="', HttpReplacePointeur($obj_xml->XslHtml($xsl_import, $array)), '";';
            }
            break;
        default:
            // Si l'utilisateur clique sur le bouton 'ok' pour importer les lignes du fichier CSV dans le panier
            if (getValue('action') == 'import_ligne') {
                
                Supervision::setHeureDebut();
                Supervision::setIdUser($_SESSION['Session_Login']);
                Supervision::setTypeTraitement('IFCSV');
                Supervision::setCodeCtrEmetteur($_SESSION['Session_CodeCtrEmetteur']);
                Supervision::setCodeCtrLivraison($_SESSION['Session_CodeCtrLivraison']);
                Supervision::setCodeSociete($_SESSION['Session_SocUsr']);
                Supervision::setCodeSectionImputation($_SESSION['Session_SectionImputation']);
                
                $importCsv = unserializeSecure($_SESSION['import_csv']);
                
                $array = & $importCsv->array_scr;
                
                $erreur = '';
                // Si récupértion du fichier cvs
                if (isset($_FILES['file_import'])) {
                    // On récupère le fichier CSV
                    $file = $_FILES['file_import']['tmp_name'];
                    
                    // On teste si le fichier en est véritablement un
                    $file_info = pathinfo($_FILES['file_import']['name']);
                    
                    $erreur = null;
                    if ($file_info['filename'] == '') {
                        $erreur = trad('La sélection d\'un fichier d\'import est obligatoire ');
                        Affichage::messageJS($erreur, true);
                        $connecteur->disconnect();
                        exit();
                    } else if (('csv' == strtolower($file_info['extension']) || 'txt' == strtolower($file_info['extension']) || 'xls' == strtolower($file_info['extension']) || 'xlsx' == strtolower($file_info['extension']) || 'log' == strtolower($file_info['extension'])) && fopen($file, 'r+')) {
                        
                        // On récupère le contenu du fichier
                        $file_destination = $_SESSION['dir_tmp'];
                        
                        $tblRet = null;
                        if (Param::isDirModify($file_destination, true)) {
                            // On enregistre le chemin d'accès au fichier dans le répertoire temporaire
                            $fileSys = microtime(true) . '.' . $file_info['extension'];
                            $chemin_final = $file_destination . $fileSys;
                            
                            if (move_uploaded_file($file, $chemin_final)) {
                                if ($result = Wsdl::wsdlFileToXml($fileSys)) {
                                    if (array_key_exists('MsgErreur', $result)) {
                                        if ($result['MsgErreur'] == '') {
                                            // Conversion xml en xsl
                                            $fileOut = $result['FichierOut'];
                                            // Chargement du fichier
                                            // /Excel/Feuille
                                            $domDocument = new DOMDocument();
                                            if ($domDocument->load($file_destination . $fileOut)) {
                                                $xpath = new DOMXPath($domDocument);
                                                if ($listeCells = $xpath->query("//Excel/Feuille[@NumFeuille='1']/Cell"))
                                                {
                                                    foreach ($listeCells as $item) {

                                                        foreach ($item->childNodes as $child)
                                                        {
                                                            if ($child->nodeName == 'Line')
                                                                $line = $child->textContent;
                                                            else if ($child->nodeName == 'Col')
                                                                $col = $child->textContent;
                                                            else if ($child->nodeName == 'Value')
                                                            {
                                                                $value = $child->textContent;
                                                                // 30364
                                                                $value = str_replace('⁄', '/', $value);
                                                            }
                                                        }
                                                        $tblRet[$line][$col - 1] = $value;
                                                    }
                                                    $lastLine =    $line;
                                                    
                                                    Supervision::setNbLigneObjet($lastLine);
                                                    Supervision::setNomFichier($file_info['filename']);
                                                }
                                            } else
                                                $erreur = trad('Erreur en lecture du fichier XML sur le serveur');
                                        } else
                                            $erreur = strBuild(Trad('Erreur en retour du WSDL : @1@'), $result['MsgErreur']);
                                    } else
                                        $erreur = Trad('Erreur en lecture du fichier WSDL sur le serveur tag MsgErreur Absent');
                                } else
                                    $erreur = Trad('Erreur pendant l\'appel du WSDL');
                            } else
                                $erreur = Trad('Erreur Impossible de deplacer le fichier sur le serveur');
                        } else
                            $erreur = strBuild(trad("Répertoire @1@ non accessible ou interdit en écriture "), $_SESSION['dir_tmp']);
                        
                        if (! is_null($erreur)) {
                            Affichage::messageJS($erreur, true);
                            $connecteur->disconnect();
                            exit();
                        }
                        
                        if (is_array($tblRet)) {
                            
                            // Vérifications globale du fichier
                            $urlRedirection = '';
                            $messageErreur = '';
                            
                            $importCsv->verifStructurelle($tblRet);
                            
                            // est-ce que dans la liste des champs il y a le code société?
                            if ('panier' == $type_import) {
                                // todo : le champ est-il obligatoire?
                                if ($importCsv->champDansListe('CODE_STE', false)) {
                                    // $messageTest = 'Code société présent';
                                    $resultVerif = $importCsv->verificationCodeSociete();
                                    $messageErreur = $resultVerif['messageErreur'];
                                    $urlRedirection = $resultVerif['url'];
                                    $changementSociete = $resultVerif['changementSociete'];
                                    if ($changementSociete) {
                                        echo '<script type="text/javascript">', Menu::refreshMenuUtilisateur('parent.parent.'), '</script>';
                                    }
                                }
                            }
                            
                            if ($messageErreur !== '')
                                Affichage::messageJS($messageErreur, true);
                            
                            if ($urlRedirection !== '') {
                                // On gère la redirection
                                echo '<script type="text/javascript">' . 'Oxa_getDevice().CallUrl("', $urlRedirection, '");</script>';
                            }
                            
                            if ($messageErreur === '' && $urlRedirection === '') {
                                $importCsv->getContentCSV($file);

                                $clTraitement = new TraitementAsync();
                                $clTraitement->addVariable('journal', getValue('journal') == 'on');
                                
                                switch ($type_import) {
                                    case 'panier':
                                        $clTraitement->addVariable('clImportCsv', serializeSecure($importCsv));
                                        $clTraitement->setTypeTraitement('ImportCsv');
                                        $clTraitement->setReference('imp_init_csv');
                                        $clTraitement->setDestroySession(false);
                                        $clTraitement->setMessage(Trad('Import ligne'));
                                        break;
                                    case 'ao':
                                        $clTraitement->addVariable('clImportCsv', serializeSecure($importCsv));
                                        $clTraitement->addVariable('no_ao', serializeSecure($no_ao));
                                        $clTraitement->setTypeTraitement('ImportAO');
                                        $clTraitement->setReference('imp_init_csv');
                                        $clTraitement->setDestroySession(false);
                                        $clTraitement->setMessage(Trad('Import ligne'));
                                        break;
                                }
                                
                                $clTraitement->start();

                            }
                            
                            $connecteur->disconnect();
                            exit();
                        } else
                            // Flag indiquant que le fichier n'est pas exploitable
                            $error_not_a_file = true;
                    } else
                        // Flag indiquant que le fichier n'est pas exploitable
                        $error_not_a_file = true;
                } // Flag indiquant que la récupération du fichier a echoué
else
                    $error_upload_fichier = true;
            } // Si le journal doit être affiché
elseif (getValue('action') == 'journal') {
                // On récupère l'objet en le déserialisant
                $importCsv = unserializeSecure($_SESSION['importCsv']);
                
                $array = & $importCsv->array_scr;
                
                $importCsv->buildBackupFile();
                
                // On construit le tableau XML des erreurs
                $xml_log = $importCsv->buildXmlError();
                
                // On affiche les erreurs dans une popup
                $xslt = new GenXslt();
                $xsl = 'application/xsl/log_import_csv_v10.xsl';
                
                echo '<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">';
                echo $xslt->XslHtml($xsl, $xml_log);
                
                // On supprime l'objet sérialisé dans la variable de session
                $connecteur->disconnect();
                exit();
            } else
                initEnvCsv();
            
            // Prechargement des differents type de format avec leur contenu
            $array['import']['!type_import'] = $type_import;
            $array['import']['!mode_popup'] = $mode_popup;
            $array['import']['!no_ao'] = $no_ao;
            
            if ($mode_popup)
                // Ne peut pas fonctionner, renvoyer sur EDP si demande à ce sujet
                $array['popup_title'] = Trad('Import de fichier');
            
            $xslt = new GenXslt(true);
            $importCsv->array_scr = $array;
            $_SESSION['import_csv'] = serializeSecure($importCsv);
            
            echo $xslt->XslHtml($xsl_import, $importCsv->array_scr);
            
            // Si le fichier récupéré n'est pas exploitable
            if ($error_not_a_file) {
                $message = trad("Le fichier sélectionné n'est pas au format CSV XLS XLSX, veuillez vérifier");
                echo "<script type='text/javascript'>window.alert(\"" . JsValue($message) . "\");</script>";
            } // Si le fichier n'a pu être récupéré
elseif ($error_upload_fichier)
                echo "<script type='text/javascript'> alert(\"" . trad('Une erreur est survenu lors du chargement du fichier, veuillez essayer à nouveau') . "\");</script>";
            
            $connecteur->disconnect();
            break;
    }
}

/**
 * Enter description here ...
 */
function initEnvCsv()
{
    global $importCsv;
    global $array;
    global $type_import;
    global $mode_popup;
    
    $base_commande = '?mode_popup=' . $mode_popup . '&type_import=' . $type_import;
    
    $importCsv = new ImportCSV(4096, ';', 'quickDevis');
    /**
     * Section exécutée lors du premier appel de la page
     */
    $array['bouton_action']['annuler_import'] = array(
        '!value' => "window.parent.document.getElementById('panel_import_fichier').style.display = 'none';"
    );
    $array['bouton_action']['lancer_import'] = array(
        '!value' => "Traite('import_csv_v10.php?action=submit',document.forms.frm_saisie_panier.file_import);"
    );
    
    // Obtention de la liste des imports
    $array['profil']['liste'] = $importCsv->getProfilImport();
    //
    $array['profil']['!valeur'] = $importCsv->getProfilBase();
    
    if (is_array($array['profil']['liste']))
        foreach ($array['profil']['liste'] as & $profil) {
            $profil['_id'] = 'td_id_profil_' . $profil['ID_PROFIL'];
            $profil['_select'] = "SelectPage('SEL_ID_PROFIL','" . $profil['_id'] . "',this);";
            $profil['_fav'] = 'CallUrl(\'import_csv_v10.php' . $base_commande . '\', \'action=fav_' . $profil['ID_PROFIL'] . '\');';
            $profil['_select'] = 'CallUrl(\'import_csv_v10.php' . $base_commande . '\', \'action=select_' . $profil['ID_PROFIL'] . '\');';
            $profil['_favid'] = 'td_id_fav_' . $profil['ID_PROFIL'];
            $profil['_helpid'] = 'td_id_help_' . $profil['ID_PROFIL'];
            $profil['_helpclick'] = "SelectPage('aide_imp_csv','{$profil['_helpid']}');";
            $profil['is_fav'] = ($profil['ID_PROFIL'] == $array['profil']['!valeur'] ? '1' : '0');
            
            if ($liste = $importCsv->getSructure($profil['ID_PROFIL'])) {
                foreach ($liste as & $tmp)
                    $profil['champ'][] = array(
                        '!nom' => array_key_exists('NOM_CHAMP', $tmp) ? $tmp['NOM_CHAMP'] : '',
                        '!num_col' => array_key_exists('NUM_COL', $tmp) ? $tmp['NUM_COL'] : '',
                        '!code_champ' => array_key_exists('CODE_CHAMP', $tmp) ? $tmp['CODE_CHAMP'] : '',
                        '!oblig' => array_key_exists('OBLIG', $tmp) ? $tmp['OBLIG'] : '',
                        '!type_champ' => array_key_exists('type_champ', $tmp) ? $tmp['type_champ'] : '',
                        '!use' => array_key_exists('_use', $tmp) ? $tmp['_use'] : '',
                        '!format' => array_key_exists('ATTRIBUT', $tmp) ? $tmp['ATTRIBUT'] : '',
                        '!max' => array_key_exists('MASQUE', $tmp) ? $tmp['MASQUE'] : ''
                    );
            }
        }
}

