<?php
require_once 'application/class/class_ManageSession.php';

global $connecteur;

/**
 * Lecture de l'arborescence des catégories
 * 
 * @param unknown $cl
 * @param unknown $nodeParent
 * @param unknown $idParent
 */

$doaBib = new DoaBiblioTheque();

$doaBib->setAction(getValue('action'));
$doaBib->setAncrage(getValue('ancrage'));

$typeAction = getValue('type');
$idCat = getValue('idCat');
$idOnglet = getValue('ID_ONGLET');

$etat = getValue('action');
if ($etat == 'changeEtatDonnee') {
    $object = getValue('OBJECT');
    if ($object == 'NOM_DONNEE' || $object == 'NOM_DATA') {
        if (! is_null(getValue('NOMSQLDW')) && trim(getValue('NOMSQLDW')) == '' || ($object == 'NOM_DONNEE' && (is_null(getValue('ID_DONNEE')) || getValue('ID_DONNEE') == '')) || ($object == 'NOM_DATA' && (is_null(getValue('ID_DATA')) || getValue('ID_DATA') == ''))) {
            $element = null;
            if ($object == 'NOM_DONNEE') {
                $element = DOA_Referentiel::calculMotOxaDw(getValue(getValue('OBJECT')), 'T');
                $sql = 'select * from DOA_STRUCT with (nolock) ' . 'where TYPE_OBJET = \'B\' ' . 'and   ID_OBJET = 0 ' . 'and   NOMSQLDW = \'' . ReplaceSqlPointeur($element) . '\' ' . (! is_null(getValue('ID_DONNEE')) && getValue('ID_DONNEE') != '' ? 'and   ID_DONNEE <> ' . getValue('ID_DONNEE') . ' ' : '');
                $requete = new RequeteSQL($sql, DB_OXASQLDB);
                if ($req = $requete->Trouve1()) { // Ce mot existe déjà au sein d'une donnée de la bibliotheque donc on va essayer d'en créer un autre
                                                 // On revient en arriere sur la zone calculé pour voir si des chiffre y sont présent et si oui on va faire un compteur dessus
                    $maxC = - 1;
                    for ($i = strlen($element) - 1; $i >= 0; $i --) {
                        $val = ord(substr($element, $i, 1));
                        if (48 <= $val && $val <= 57) {
                            $maxC = $i;
                        } else {
                            if (substr($element, $i, 1) == '_')
                                $maxC = $i;
                            break;
                        }
                    }
                    if ($maxC == - 1) {
                        $nb = 0;
                    } else {
                        $nb = trim(substr($element, $maxC), '_');
                        $element = substr($element, 0, $maxC);
                    }
                    
                    while (true) {
                        $nb ++;
                        $motCalcule = $element . '_' . $nb;
                        $sql = 'select * from DOA_STRUCT with (nolock) ' . 'where TYPE_OBJET = \'B\' ' . 'and   ID_OBJET = 0 ' . 'and   NOMSQLDW = \'' . ReplaceSqlPointeur($motCalcule) . '\' ' . (getValue('ID_DONNEE') != '' ? 'and   ID_DONNEE <> ' . getValue('ID_DONNEE') . ' ' : '');
                        $requete = new RequeteSQL($sql, DB_OXASQLDB);
                        if ($req = $requete->Trouve1()) {
                            // Zone trouvé donc il va falloir continuer
                        } else {
                            $element = $motCalcule;
                            break;
                        }
                    }
                }
                Affichage::setAttributForFieldForm(getValue('form'), 'NOMSQLDW', 'value', trim(substr($element, 0, 30)));
            } else if ($object == 'NOM_DATA') {
                $element = DOA_Referentiel::calculMotOxaDw(getValue(getValue('OBJECT')), 'D');
                
                $sql = 'select * from DOA_DATA with (nolock) ' . 'where TYPE_OBJET = \'B\' ' . 'and   ID_OBJET = 0 ' . 'and   NOMSQLDW = \'' . ReplaceSqlPointeur($element) . '\' ' . 'and   ID_DONNEE = ' . getValue('ID_DONNEE') . ' ' . (! is_null(getValue('ID_DATA')) && getValue('ID_DATA') != '' ? 'and ID_DATA <> ' . getValue('ID_DATA') . ' ' : '');
                $requete = new RequeteSQL($sql, DB_OXASQLDB);
                if ($req = $requete->Trouve1()) { // Ce mot existe déjà au sein d'une donnée de la bibliotheque donc on va essayer d'en créer un autre
                                                 // On revient en arriere sur la zone calculé pour voir si des chiffre y sont présent et si oui on va faire un compteur dessus
                    $maxC = - 1;
                    for ($i = strlen($element) - 1; $i >= 0; $i --) {
                        $val = ord(substr($element, $i, 1));
                        if (48 <= $val && $val <= 57) {
                            $maxC = $i;
                        } else {
                            if (substr($element, $i, 1) == '_')
                                $maxC = $i;
                            break;
                        }
                    }
                    if ($maxC == - 1) {
                        $nb = 0;
                    } else {
                        $nb = trim(substr($element, $maxC), '_');
                        $element = substr($element, 0, $maxC);
                    }
                    
                    while (true) {
                        $nb ++;
                        $motCalcule = $element . '_' . $nb;
                        $sql = 'select * from DOA_DATA with (nolock) ' . 'where TYPE_OBJET = \'B\' ' . 'and   ID_OBJET = 0 ' . 'and   NOMSQLDW = \'' . ReplaceSqlPointeur($motCalcule) . '\' ' . 'and   ID_DONNEE = ' . getValue('ID_DONNEE') . ' ' . (getValue('ID_DATA') != '' ? 'and   ID_DATA <> ' . getValue('ID_DATA') . ' ' : '');
                        $requete = new RequeteSQL($sql, DB_OXASQLDB);
                        if ($req = $requete->Trouve1()) {
                            // Zone trouvé donc il va falloir continuer
                        } else {
                            $element = $motCalcule;
                            break;
                        }
                    }
                }
                Affichage::setAttributForFieldForm(getValue('form'), 'NOMSQLDW', 'value', trim(substr($element, 0, 30)));
            }
        }
    }
} else if ($etat == 'change_etat') {
    $object = getValue('OBJECT');
    
    if ($object == 'DATA_LIE_A_OBJET' || $object == 'OBJET_DATA') {
        echo DOA_Bibliotheque_Popup_AjoutModif_Data::Javascript_DATA_LIE_A_OBJET_ONCHANGE($object, BoolSql(getValue('LIE_A_OBJET')), BoolSql(getValue('DATA_LIE_A_OBJET')));
    } else if ($object == 'ID_OBJET_DATA') {
        echo DOA_Bibliotheque_Popup_AjoutModif_Data::Javascript_DATA_LIE_A_OBJET_ONCHANGE($object, BoolSql(getValue('LIE_A_OBJET')), BoolSql(getValue('DATA_LIE_A_OBJET')));
    }
} else if ($etat == 'ContexteMiseAjour') {
    $clSession = DoaBibSession::getSession();
    switch (getValue('mode')) {
        case '0': // Sur les dossier en prépa
        case '1': // Uniquement sur les modèles
        case '2': // Nulle part
            $clSession->setProperties(DOA::MODE_CONSER_HERITAGE, getValue('mode'));
            $clSession->saveSession();
            
            // On continue l'action précédente
            if (getValue('direct') == '1') {
                // Rien car c'est l'interactif à stockée
            } else
                OxalysBib::getCallBackContexteWeb();
            break;
        default:
            Affichage::messageJS(trad('Veuillez indiquer votre choix avant de poursuivre'));
            break;
    }
} else
    switch ($doaBib->getAction()) {
        case 'accueil':
            /**
             * Mise en cache de l'object de travail
             */
            $mode = 'L';
            $cl = DoaBiblioTheque::saveSessionObject('B', 0);
            
            $cl->setProperties(DOA::MODE_CONSER_HERITAGE, null);
            $cl->saveSession();
            
            $array['ide']['!action'] = $doaBib->getAction();
            $array['ide']['!mode'] = $mode;
            $array['ide']['!onclickAjouter'] = 'window.open(\'DOA_Bibliotheque.php?action=AfficherAjoutCategorie&type=ajout&idCat=' . $idCat . '\',\'win_pop\',\'width=500,height=200\');';
            $array['ide']['!tooltipAjouter'] = trad('Ajouter une catégorie');
            $genXsl = new GenXslt(true);
            
            Affichage::innerHTMLPointeur($doaBib->getAncrage(), $genXsl->XslHtml(DoaBiblioTheque::fichier_xsl, $array));
            
            $TYPE_OBJET = 'B';
            $ID_OBJET = 0;
            if ($requete = SqlDoaReferentiel::rqGetSqlDoaCategorieFille($TYPE_OBJET, $ID_OBJET, 0)->Trouve1()) {
                DoaBiblioTheque::AfficherListeDonnees($requete['ID'], $TYPE_OBJET, $ID_OBJET);
                DOA::afficheOngletDonnee();
            }
            break;
        case 'AfficherCategoriesData':
            $ancrage = $doaBib->getAncrage();
            $clSession = DoaBibSession::getSession();
            
            $requeteDoa = SqlDoa::rqGetInfoSuiviDoa($clSession->getIdObject())->Trouve1();
            DOA_Referentiel::AfficherTreeviewCategorie($ancrage, 'DOA_Bibliotheque.php', 'selectCateg', is_null($requeteDoa) || DOA_Referentiel::STATUT_TERMINE != $requeteDoa['STATUT']);
            
            break;
        case 'AfficherCategoriesDonnee':
            $ancrage = $doaBib->getAncrage();
            $clSession = DoaBibSession::getSession();
            
            $requeteDoa = SqlDoa::rqGetInfoSuiviDoa($clSession->getIdObject())->Trouve1();
            
            DOA_Referentiel::AfficherTreeviewCategorie($ancrage, 'DOA_Bibliotheque.php', 'selectCateg', is_null($requeteDoa) || DOA_Referentiel::STATUT_TERMINE != $requeteDoa['STATUT']);
            
            DoaBiblioTheque::AfficherListeDonnees(null, $clSession->getTypeObject(), $clSession->getIdObject());
            
            break;
        case 'ModificationData':
            if (getValue('OBJECT') == 'ID_FMT_DOC') { // Changement de l'arborence donc réaffichage des elemnts de la maquette
                $array['ide']['popup'] = null;
                $array['ide']['!action'] = 'PopupModificationData';
                
                DOA_Bibliotheque_Popup_AjoutModif_Data::addArrayIdFormat($array['ide']['popup'], getValue(getValue('OBJECT')), 0, true);
                
                $genXsl = new GenXslt(true);
                $genXsl->XslHtml(DoaBiblioTheque::fichier_xsl, $array);
                
                $genXsl->echoHtml('id_td_ID_FORMAT');
            }
            break;
        case 'donneeup':
        case 'donneedown':
            // idData
            $ancrage = $doaBib->getAncrage();
            $clSession = DoaBibSession::getSession();
            $TYPE_OBJET = $clSession->getTypeObject();
            $ID_OBJET = $clSession->getIdObject();
            
            if ($ID_DONNEE = getValue('idDonnee')) {
                if ($elementData = SqlDoaBibliotheque::rqDOA_getDonneeObjet($TYPE_OBJET, $ID_OBJET, $ID_DONNEE)->Trouve1()) {
                    // Obtention de toutes les données de la catégorie trié par num_ordre
                    if ($req = SqlDoaBibliotheque::rqDOA_GetListeDonnee($TYPE_OBJET, $ID_OBJET, $elementData['ID_CAT'])->TrouveTous()) {
                        $switch = false;
                        foreach ($req as $index => & $element)
                            if (! $switch) {
                                $element['NUM_ORDRE'] = $index;
                                if ($element['ID_DONNEE'] == $elementData['ID_DONNEE']) {
                                    if ($doaBib->getAction() == 'donneeup') {
                                        $req[$index - 1]['NUM_ORDRE'] = $index;
                                        $req[$index]['NUM_ORDRE'] = $index - 1;
                                        $switch = true;
                                    } else if ($doaBib->getAction() == 'donneedown') {
                                        $req[$index + 1]['NUM_ORDRE'] = $index;
                                        $req[$index]['NUM_ORDRE'] = $index + 1;
                                        $switch = true;
                                    }
                                }
                            } else
                                $switch = false;
                        
                        $pile = new PileSql(DB_OXASQLDB);
                        foreach ($req as & $element) {
                            $sql = 'update DOA_STRUCT ' . 'set NUM_ORDRE    =   ' . $element['NUM_ORDRE'] . ' ' . 'where TYPE_OBJET = \'' . $element['TYPE_OBJET'] . '\' ' . 'and   ID_OBJET   =   ' . $element['ID_OBJET'] . ' ' . 'and   ID_DONNEE  =   ' . $element['ID_DONNEE'] . ' ';
                            
                            $pile->addSql($sql);
                        }
                        
                        if ($pile->Commit()) {
                            DoaBiblioTheque::AfficherListeDonnees($elementData['ID_CAT'], $elementData['TYPE_OBJET'], $elementData['ID_OBJET']);
                        }
                    }
                }
            }
            
            break;
        
        case 'dataup':
        case 'datadown':
            $ancrage = $doaBib->getAncrage();
            $clSession = DoaBibSession::getSession();
            $TYPE_OBJET = $clSession->getTypeObject();
            $ID_OBJET = $clSession->getIdObject();
            
            if ($ID_DATA = getValue('idData')) {
                if ($elementData = SqlDoaBibliotheque::rqDOA_GetInfoData($ID_DATA, $TYPE_OBJET, $ID_OBJET)->Trouve1()) {
                    if ($req = SqlDoaActions::rqGetInfoDoaData($elementData['TYPE_OBJET'], $elementData['ID_OBJET'], $elementData['ID_DONNEE'])->TrouveTous()) {
                        $reqDonnee = SqlDoaBibliotheque::rqDOA_getDonneeObjet($elementData['TYPE_OBJET'], $elementData['ID_OBJET'], $elementData['ID_DONNEE'])->Trouve1();
                        
                        $switch = false;
                        foreach ($req as $index => & $element)
                            if (! $switch) {
                                $element['NUM_ORDRE'] = $index;
                                if ($element['ID_DATA'] == $elementData['ID_DATA']) {
                                    if ($doaBib->getAction() == 'dataup') {
                                        $req[$index - 1]['NUM_ORDRE'] = $index;
                                        $req[$index]['NUM_ORDRE'] = $index - 1;
                                        $switch = true;
                                    } else if ($doaBib->getAction() == 'datadown') {
                                        $req[$index + 1]['NUM_ORDRE'] = $index;
                                        $req[$index]['NUM_ORDRE'] = $index + 1;
                                        $switch = true;
                                    }
                                }
                            } else
                                $switch = false;
                        
                        $pile = new PileSql(DB_OXASQLDB);
                        foreach ($req as & $element) {
                            $sql = 'update DOA_DATA ' . 'set NUM_ORDRE    =   ' . $element['NUM_ORDRE'] . ' ' . 'where TYPE_OBJET = \'' . $element['TYPE_OBJET'] . '\' ' . 'and   ID_OBJET   =   ' . $element['ID_OBJET'] . ' ' . 'and   ID_DONNEE  =   ' . $element['ID_DONNEE'] . ' ' . 'and   ID_DATA =   ' . $element['ID_DATA'] . ' ';
                            
                            $pile->addSql($sql);
                        }
                        
                        if ($pile->Commit())
                            DoaBiblioTheque::AfficherListeDonnees($reqDonnee['ID_CAT'], $reqDonnee['TYPE_OBJET'], $reqDonnee['ID_OBJET']);
                    }
                }
            }
            break;
        
        case 'catup':
        case 'catdown':
            $ancrage = $doaBib->getAncrage();
            $clSession = DoaBibSession::getSession();
            $TYPE_OBJET = $clSession->getTypeObject();
            $ID_OBJET = $clSession->getIdObject();
            
            if (! DOA_Referentiel::iSDoaEnExecution($TYPE_OBJET, $ID_OBJET))
                if ($ID_CAT = getValue('idCat')) {
                    // recherche de l'element courant
                    if ($reqCategorieCourante = DOA_Referentiel::GetInfoCategorie($TYPE_OBJET, $ID_OBJET, $ID_CAT)) {
                        if ($req = SqlDoaReferentiel::rqGetSqlDoaCategorieFille($TYPE_OBJET, $ID_OBJET, $reqCategorieCourante['ID_PARENT'])->TrouveTous()) {
                            $switch = false;
                            foreach ($req as $index => & $element)
                                if (! $switch) {
                                    $element['NUM_ORDRE'] = $index;
                                    if ($element['ID'] == $reqCategorieCourante['ID']) {
                                        if ($doaBib->getAction() == 'catup') {
                                            $req[$index - 1]['NUM_ORDRE'] = $index;
                                            $req[$index]['NUM_ORDRE'] = $index - 1;
                                            $switch = true;
                                        } else if ($doaBib->getAction() == 'catdown') {
                                            $req[$index + 1]['NUM_ORDRE'] = $index;
                                            $req[$index]['NUM_ORDRE'] = $index + 1;
                                            $switch = true;
                                        }
                                    }
                                } else
                                    $switch = false;
                            
                            $pile = new PileSql(DB_OXASQLDB);
                            foreach ($req as & $element) {
                                $sql = 'update DOAR_CAT ' . 'set NUM_ORDRE = ' . $element['NUM_ORDRE'] . ' ' . 'where TYPE_OBJET = \'' . $element['TYPE_OBJET'] . '\' ' . 'and   ID_OBJET   =   ' . $element['ID_OBJET'] . ' ' . 'and   ID         =   ' . $element['ID'] . ' ';
                                $pile->AddSql($sql);
                            }
                            
                            if ($pile->Commit())
                                DOA::afficheOngletDonnee();
                        }
                    }
                }
            
            break;
        
        case 'selectCateg':
            $objSess = getValue('objSess');
            if (! is_null($objSess)) {
                $cl = CatalogueSessionObject::getSessionObject($objSess);
                $elementXmlOrigine = $cl->getCacheElement(getValue('select'));
                if (! is_null($elementXmlOrigine)) {
                    $clSession = DoaBibSession::getSession();
                    $idCat = $elementXmlOrigine->getAttribute('uniqId');
                    $clSession->setProperties("current_id_cat", $idCat);
                    $clSession->saveSession();
                    
                    $idDoaExecution = DOA_Referentiel::iSDoaEnExecution($clSession->getTypeObject(), $clSession->getIdObject());
                    if ($idDoaExecution) {
                        DOA_Action::saveSessionAction(null, null, $clSession->getIdObject(), null, null, null);
                        DoaBiblioTheque::AfficherListeData($idCat, $clSession->getTypeObject(), $clSession->getIdObject());
                    } else
                        DoaBiblioTheque::AfficherListeDonnees($idCat, $clSession->getTypeObject(), $clSession->getIdObject());
                }
                exit();
            }
            
            break;
        case 'selectCurrentIdCat':
            $clSession = DoaBibSession::getSession();
            $idCat = $clSession->getProperties('current_id_cat');
            
            $idDoaExecution = DOA_Referentiel::iSDoaEnExecution($clSession->getTypeObject(), $clSession->getIdObject());
            if ($idDoaExecution)
                DoaBiblioTheque::AfficherListeData($idCat, $clSession->getTypeObject(), $clSession->getIdObject());
            else
                DoaBiblioTheque::AfficherListeDonnees($idCat, $clSession->getTypeObject(), $clSession->getIdObject());
            
            break;
        case 'PopupAjoutDonnee':
            $ID_CAT = getValue('ID_CAT');
            $ID_DONNEE = 0;
            $array['ide']['!action'] = $doaBib->getAction();
            $array['ide']['popup'] = DOA_Bibliotheque_Popup_AjoutModif::BuildXmlPopupAjoutModifDeDonnee($ID_CAT);
            $array['popup_title'] = trad('Ajout d\'une donnée');
            $genXsl = new GenXslt(true);
            echo $genXsl->XslHtml(DoaBiblioTheque::fichier_xsl, $array);
            
            break;
        
        case 'EnregistrerEnteteDonnee':
            /**
             * Si cette donnée est lié a quelque choses, il faut regarder si l'utilisateur a possitionner son choix
             */
            if (is_null(getValue('ID_DONNEE')) || getValue('ID_DONNEE') == '' || ! DOA_Donnee::questionHeritage()) {
                $ID_CAT = getValue('ID_CAT');
                /*
                 * Danger $_GET fail de sécurité
                 */
                $resultat = DOA_Bibliotheque_Popup_AjoutModif::EnregistrerDonnee($_GET);
                
                if ('' !== $resultat['messageErreur']) {
                    echo 'alert("', $resultat['messageErreur'], '")';
                } else {
                    // Pas d'erreur : on ferme la popup et on rafraîchit la liste des données
                    echo 'window.closePopup();', 'parent.CallUrl(\'DOA_Bibliotheque.php?action=AfficherListeDonnees&ancrage=ListeDonnees&ID_CAT=', $ID_CAT, '\');';
                }
            }
            break;
        
        case 'AfficherListeDonnees':
            
            $cuurentObject = DoaBibSession::getSession();
            
            $TYPE_OBJET = $cuurentObject->getTypeObject();
            $ID_OBJET = $cuurentObject->getIdObject();
            
            DoaBiblioTheque::AfficherListeDonnees(getValue('ID_CAT'), $TYPE_OBJET, $ID_OBJET);
            break;
        
        // Demande de suppression de l'heritage
        case 'BriserHeritageDonnee':
            $clSession = DoaBibSession::getSession();
            $ID_DONNEE = getValue('ID_DONNEE');
            
            if ($reqSql = SqlDoaBibliotheque::rqDOA_GetListeDonnee($clSession->getTypeObject(), $clSession->getIdObject(), null, $ID_DONNEE)->Trouve1()) {
                echo 'if(window.confirm("' . cnv_to_javascript(trad('Confirmez vous la suppression de l\héritage?')) . '"))' . '{CallUrl("DOA_Bibliotheque.php?action=SupprimerHeritageDonnes&ID_DONNEE=' . $ID_DONNEE . '");}';
            }
            break;
        case 'BriserHeritageData':
            $clSession = DoaBibSession::getSession();
            $ID_DONNEE = getValue('ID_DONNEE');
            $ID_DATA = getValue('ID_DATA');
            
            if ($reqSql = SqlDoaBibliotheque::rqDOA_GetListeDonnee($clSession->getTypeObject(), $clSession->getIdObject(), null, $ID_DONNEE)->Trouve1()) {
                echo 'if(window.confirm("' . cnv_to_javascript(trad('Confirmez vous la suppression de l\héritage?')) . '"))' . '{CallUrl("DOA_Bibliotheque.php?action=SupprimerHeritageData' . '&ID_DONNEE=' . $ID_DONNEE . '&ID_DATA=' . $ID_DATA . '");}';
            }
            break;
        // Suppresion reelle de l'heritage sur la donnée et les datas associés
        case 'SupprimerHeritageDonnes':
            $clSession = DoaBibSession::getSession();
            $ID_DONNEE = getValue('ID_DONNEE');
            
            if ($reqSql = SqlDoaBibliotheque::rqDOA_GetListeDonnee($clSession->getTypeObject(), $clSession->getIdObject(), null, $ID_DONNEE)->Trouve1()) {
                $newPile = new PileSql(DB_OXASQLDB);
                DOA_Struct::supprimeLienIdStruct($newPile, $reqSql);
                if ($newPile->Commit()) {
                    $idDoaExecution = DOA_Referentiel::iSDoaEnExecution($clSession->getTypeObject(), $clSession->getIdObject());
                    if ($idDoaExecution)
                        DoaBiblioTheque::AfficherListeData($reqSql['ID_CAT'], $clSession->getTypeObject(), $clSession->getIdObject());
                    else
                        DoaBiblioTheque::AfficherListeDonnees($reqSql['ID_CAT'], $clSession->getTypeObject(), $clSession->getIdObject());
                }
            }
            break;
        case 'SupprimerHeritageData':
            $clSession = DoaBibSession::getSession();
            $ID_DONNEE = getValue('ID_DONNEE');
            $ID_DATA = getValue('ID_DATA');
            
            if ($reqSql = SqlDoaBibliotheque::rqDOA_GetInfoData($ID_DATA, $clSession->getTypeObject(), $clSession->getIdObject(), $ID_DONNEE)->Trouve1())
                if ($reqSqlData = SqlDoaBibliotheque::rqDOA_GetListeDonnee($clSession->getTypeObject(), $clSession->getIdObject(), null, $ID_DONNEE)->Trouve1()) {
                    $newPile = new PileSql(DB_OXASQLDB);
                    DOA_Struct::supprimeLienIdStructData($newPile, $reqSql);
                    if ($newPile->Commit()) {
                        $idDoaExecution = DOA_Referentiel::iSDoaEnExecution($clSession->getTypeObject(), $clSession->getIdObject());
                        if ($idDoaExecution)
                            DoaBiblioTheque::AfficherListeData($reqSqlData['ID_CAT'], $clSession->getTypeObject(), $clSession->getIdObject());
                        else
                            DoaBiblioTheque::AfficherListeDonnees($reqSqlData['ID_CAT'], $clSession->getTypeObject(), $clSession->getIdObject());
                    }
                }
            break;
        case 'PopupModificationDonnee':
            $ID_CAT = getValue('ID_CAT');
            $ID_DONNEE = getValue('ID_DONNEE');
            
            $array['ide']['popup'] = DOA_Bibliotheque_Popup_AjoutModif::BuildXmlPopupAjoutModifDeDonnee($ID_CAT, $ID_DONNEE);
            $array['ide']['!action'] = $doaBib->getAction();
            $array['popup_title'] = trad('Modification d\'une donnée');
            $genXsl = new GenXslt(true);
            echo $genXsl->XslHtml(DoaBiblioTheque::fichier_xsl, $array);
            
            break;
        case 'SupprimerDonnee':
            
            $ID_DONNEE = getValue('ID_DONNEE');
            
            $clSession = DoaBibSession::getSession();
            
            // Controle si la donnée est présente au travers d'une donnée d'une action de type d'object
            if (DOA_Action::existeDonneAction($clSession->getTypeObject(), $clSession->getIdObject(), $ID_DONNEE)) {
                Affichage::messageJS('Suppression impossible, cette donnée existe déjà au travers d\'une action');
            } else {
                if (! DOA_Donnee::questionHeritage()) {
                    $newPile = new PileSql(DB_OXASQLDB);
                    
                    DOA_Struct::SupprimerDonnee($newPile, $clSession->getTypeObject(), $clSession->getIdObject(), $ID_DONNEE);
                    
                    if ($newPile->Commit())
                        $messageErreur = '';
                    else
                        $messageErreur = Trad('Une erreur a eu lieu pendant la suppression de la donnée.');
                    
                    if ('' !== $messageErreur) {
                        echo 'alert("', $resultat['messageErreur'], '")';
                    } else {
                        // Pas d'erreur : on ferme la popup et on rafraîchit la liste des données
                        echo 'window.closePopup();';
                        echo 'parent.CallUrl(\'DOA_Bibliotheque.php?action=selectCurrentIdCat\')';
                    }
                }
            }
            break;
        case 'PopupAjoutData':
            $ID_DONNEE = getValue('ID_DONNEE');
            $ID_CAT = getValue('ID_CAT');
            $ID_DATA = '';
            $array['ide']['popup'] = DOA_Bibliotheque_Popup_AjoutModif_Data::BuildXmlPopup($ID_DONNEE, $ID_DATA, $ID_CAT);
            $array['ide']['!action'] = $doaBib->getAction();
            $array['popup_title'] = trad('Ajout d\'une data de donnée');
            $genXsl = new GenXslt(true);
            echo $genXsl->XslHtml(DoaBiblioTheque::fichier_xsl, $array);
            
            break;
        case 'PopupModificationData':
            $ID_DONNEE = getValue('ID_DONNEE');
            $ID_DATA = getValue('ID_DATA');
            $ID_CAT = getValue('ID_CAT');
            // Question : est-on sur une donnée simple ou multiple?
            // Pour l'instant : simple
            $array['ide']['popup'] = DOA_Bibliotheque_Popup_AjoutModif_Data::BuildXmlPopup($ID_DONNEE, $ID_DATA, $ID_CAT);
            $array['ide']['!action'] = $doaBib->getAction();
            $array['popup_title'] = trad("Modification d'une data de donnée");
            $genXsl = new GenXslt(true);
            echo $genXsl->XslHtml(DoaBiblioTheque::fichier_xsl, $array);
            break;
        case 'MAJ_combo_id_objet_data':
            $OBJET_DATA = getValue('OBJET_DATA');
            $xml = DOA_Bibliotheque_Popup_AjoutModif_Data::BuildXml_MAJ_combo_id_objet_data($OBJET_DATA);
            Affichage::innerHTMLPointeur($doaBib->getAncrage(), $xml);
            
            break;
        case 'EnregistrerData':
            if (! DOA_Donnee::questionHeritage()) {
                $resultat = DOA_Bibliotheque_Popup_AjoutModif_Data::EnregistrerDonnee(getValueAll($_REQUEST));
                
                if ('' !== $resultat['messageErreur']) {
                    echo 'alert("', $resultat['messageErreur'], '")';
                } else {
                    // Pas d'erreur : on ferme la popup et on rafraîchit la liste des données
                    echo 'window.closePopup();';
                    echo 'parent.CallUrl(\'DOA_Bibliotheque.php?action=selectCurrentIdCat\');';
                }
            }
            break;
        case 'SupprimerData':
            if (! DOA_Donnee::questionHeritage()) {
                $cuurentObject = DoaBibSession::getSession();
                
                $TYPE_OBJET = $cuurentObject->getTypeObject();
                $ID_OBJET = $cuurentObject->getIdObject();
                
                $ID_DATA = getValue('ID_DATA');
                
                // Controle si la data est présente au travers d'une data d'une action de type d'object
                /**
                 * Dossier 25767 lors de la suppression d'une data NE pas verifier que des action de data sont déjà présente
                 * par contre le traitement de data doit supprimer ces informations en cas de delete
                 * if (DOA_Action::existeDataAction($TYPE_OBJET,$ID_OBJET,$ID_DATA))
                 */
                $messageErreur = DOA_Struct::SupprimerData($ID_DATA, $TYPE_OBJET, $ID_OBJET);
                if ('' !== $messageErreur) {
                    Affichage::messageJS($resultat['messageErreur']);
                } else {
                    // Pas d'erreur : on ferme la popup et on rafraîchit la liste des données
                    echo 'parent.CallUrl(\'DOA_Bibliotheque.php?action=selectCurrentIdCat\');';
                }
            }
            break;
        
        case 'PopupImportDonnee':
            $clDaImport = new DoaImport();
            $clDaImport->saveSession();
            
            $array = DOA_Donnee::BuildXmlDonnee($doaBib->getAction(), 'B', 0);
            $array['popup_title'] = trad('Importation de données');
            
            $genXsl = new GenXslt(true);
            echo $genXsl->XslHtml(DoaBiblioTheque::fichier_xsl, $array);
            echo '<script language=\'javascript\'>', DOA_Donnee::JavascriptRafraichirArborescence(), '</script>';
            break;
        case 'CheckImportCat':
            $typeObjet = 'B';
            $idObjet = 0;
            
            if ($idParent = getValue('idCat')) {
                DOA_Bibliotheque_ListeDonnees::saveSelectionCat($typeObjet, $idObjet, $idParent, getValue(getValue('OBJECT')));
                $doaBib->AfficherListeDonneesImport($idParent);
            }
            break;
        case 'selectItem':
            // Selection recursive de toutes les données de toutes les catégorie
            $typeObjet = 'B';
            $idObjet = 0;
            
            if ($idParent = getValue('idCat')) {
                DOA_Bibliotheque_ListeDonnees::saveSelectionCat($typeObjet, $idObjet, $idParent);
            }
            break;
        
        case 'AfficherCategoriesImport':
            /**
             * L'importation des elements se fait sur la base du referentiel attachés à la bilbliotheque donc 'B'
             */
            $ancrage = $doaBib->getAncrage();
            if (is_null(getValue('canModify')))
                $canModify = BoolSql(getValue('canModify'));
            else
                $canModify = true;
            
            DOA_Referentiel::AfficherTreeviewCategorie($ancrage, 'DOA_Bibliotheque.php', 'selectCategImport', false, true, $canModify);
            break;
        
        case 'selectCategImport':
            $objSess = getValue('objSess');
            if (! is_null($objSess)) {
                $cl = CatalogueSessionObject::getSessionObject($objSess);
                $elementXmlOrigine = $cl->getCacheElement(getValue('select'));
                if (! is_null($elementXmlOrigine))
                    $doaBib->AfficherListeDonneesImport($elementXmlOrigine->getAttribute('uniqId'));
                exit();
            }
            
            break;
        
        case 'EnregistrerCategoriesImport':
            $clSession = DoaBibSession::getSession();
            $TYPE_OBJET = $clSession->getTypeObject();
            $ID_OBJET = $clSession->getIdObject();
            
            $mesretour = DoaImport::copyModeleVersDoa();
            if ($mesretour == '') {
                // Close de la popup et refresh de l'onglet
                echo 'window.closePopup();';
                echo 'parent.CallUrl("DOA.php?action=ChangeOnglet&ancrage=DOA_ONGLET&ID_ONGLET=ONG_DONNEES&ID=', $ID_OBJET, '&est_modele=', ($TYPE_OBJET == 'D' ? 'false' : 'true'), '");';
            } else {
                Affichage::messageJS($mesretour);
            }
            
            break;
        
        case 'CheckImport':
            $nomDonnee = getValue('OBJECT');
            $value = getValue($nomDonnee);
            
            $clSessionImport = DoaImport::getSession();
            $clSessionImport->setValueNomDonnee($nomDonnee, $value);
            
            break;
        
        case 'AfficherInfoCategorie':
            $clSessionCat = DoaBiblioTheque::saveSessionCat($idCat);
            break;
        
        case 'AfficherAjoutCategorie':
            $mode = 'LE';
            $clSession = DoaBibSession::getSession();
            $TYPE_OBJET = $clSession->getTypeObject();
            $ID_OBJET = $clSession->getIdObject();
            $ID_ONGLET = $clSession->getIdOnglet();
            
            $clSessionCat = DoaCatSession::getSession();
            $ID_CAT = (! is_null($clSessionCat)) ? $clSessionCat->getIdCat() : 0;
            
            if ($ID_ONGLET == '') {
                DoaBiblioTheque::saveSessionOnglet($idOnglet);
            } else {
                DoaBiblioTheque::saveSessionOnglet($ID_ONGLET);
            }
            
            $array['ide']['!action'] = $doaBib->getAction();
            $array['ide']['!mode'] = $mode;
            $array['ide']['!type_action'] = $typeAction;
            
            if ($typeAction == 'ajout') {
                $array['ide']['categorie'] = DOA_Categorie::BuildXmlListeCategorie($TYPE_OBJET, $ID_OBJET, $typeAction, $ID_CAT);
                $array['ide']['categorie']['option'] = DOA_Categorie::BuildXmlListeCategoriePere($typeAction, null, $TYPE_OBJET, $ID_OBJET);
                $array['fenetre']['!titre'] = Trad('Ajout de catégorie');
            }
            if ($typeAction == 'modif') {
                $array['ide']['categorie'] = DOA_Categorie::BuildXmlListeCategorie($TYPE_OBJET, $ID_OBJET, $typeAction, $idCat);
                $array['ide']['categorie']['option'] = DOA_Categorie::BuildXmlListeCategoriePere($typeAction, $idCat, $TYPE_OBJET, $ID_OBJET);
                $array['fenetre']['!titre'] = Trad('Modification de la catégorie');
            }
            
            $genXsl = new GenXslt(true);
            echo $genXsl->XslHtml(DoaBiblioTheque::fichier_xsl, $array);
            break;
        
        case 'EnregistrerCategorie':
            $clSession = DoaBibSession::getSession();
            $TYPE_OBJET = $clSession->getTypeObject();
            $ID_OBJET = $clSession->getIdObject();
            $ID_ONGLET = $clSession->getIdOnglet();
            $resultat = DOA_Categorie::EnregistrerCategorie($typeAction);
            
            if ('' !== $resultat['messageErreur']) {
                Affichage::messageJS($resultat['messageErreur']);
            } else {
                echo 'window.closePopup();';
                switch ($TYPE_OBJET) {
                    case 'B':
                        echo 'parent.CallUrl("DOA_Bibliotheque.php?ancrage=men_gene&action=accueil");';
                        break;
                    case 'D':
                    case 'M':
                        echo 'parent.CallUrl("DOA.php?action=ChangeOnglet&ancrage=DOA_ONGLET&ID_ONGLET=', $ID_ONGLET, '&ID=', $ID_OBJET, '&est_modele=', ($TYPE_OBJET == 'D' ? 'false' : 'true'), '");';
                        break;
                }
            }
            break;
        
        case 'SupprimerCategorie':
            $clSession = DoaBibSession::getSession();
            $TYPE_OBJET = $clSession->getTypeObject();
            $ID_OBJET = $clSession->getIdObject();
            $ID_ONGLET = $clSession->getIdOnglet();
            
            if (! DOA_Donnee::questionHeritage()) {
                $resultat = DOA_Categorie::SupprimerCategorie($TYPE_OBJET, $ID_OBJET, $idCat);
                
                if ('' !== $resultat['messageErreur']) {
                    echo 'alert("', $resultat['messageErreur'], '")';
                } else {
                    switch ($TYPE_OBJET) {
                        case 'B':
                            echo 'parent.CallUrl("DOA_Bibliotheque.php?ancrage=men_gene&action=accueil");';
                            break;
                        case 'D':
                        case 'M':
                            echo 'parent.CallUrl("DOA.php?action=ChangeOnglet&ancrage=DOA_ONGLET&ID_ONGLET=', $ID_ONGLET, '&ID=', $ID_OBJET, '&est_modele=', ($TYPE_OBJET == 'D' ? 'false' : 'true'), '");';
                            break;
                    }
                }
            }
            break;
    }

$connecteur->disconnect();
exit();
