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

$fichier_xsl = 'application/xsl/doa/DOA_Tache.xsl';
$id = getValue('ID');
$action = getValue('action');
$TYPE_OBJET = getValue('TYPE_OBJET');
$ID_OBJET = getValue('ID_OBJET');
$ID_TACHE = getValue('ID_TACHE');
$ID_TACHE_H = getValue('ID_TACHE_H');
$ID_ACTION = getValue('ID_ACTION');
$ID_ACTEUR = getValue('ID_ACTEUR');
$objSess = getValue('objSess');

switch ($action) {
    case 'ChangeEtat':
        DOA_Tache_PopupAjoutActeur::changeEtat($objSess);
        break;
    case 'objTache':
        $clSession = DoaBibSession::getSession();
        $TYPE_OBJET = $clSession->getTypeObject();
        $ID_OBJET = $clSession->getIdObject();
        
        if ($reqDoa = SqlDoa::rqGetInfoSuiviDoa($ID_OBJET)->Trouve1()) {
            $objectChange = getValue('OBJECT');
            $valeur = trim(getValue($objectChange));
            
            switch ($objectChange) {
                case 'DUREE_PREV':
                case 'DATE_DEB':
                    $duree = null;
                    $dateDeb = null;
                    $dateFin = null;
                    
                    $dureeUser = trim(getValue('DUREE_PREV'));
                    $dateDebUser = trim(getValue('DATE_DEB'));
                    $dateFinUser = trim(getValue('DATE_FIN'));
                    
                    if ($dureeUser != '' && is_numeric($dureeUser) && $valeur > 0 && $dureeUser < 1000 && ControleSaisie::isDateValideFormat($dateDebUser)) {
                        $duree = $dureeUser;
                        
                        // Recalcul de la date de fin
                        $dateDeb = convertDateUserToSql($dateDebUser);
                        $objDate = date_create($dateDeb);
                        
                        $objDate->modify('+' . $dureeUser . ' day');
                        // Recalcul de la date de debut si jour chome ou ferie
                        while (DOA::isJourChome($listJourChome ?? null, $objDate) || DOA::isJourFerie($reqDoa['ID_CAL'], $objDate))
                            $objDate->modify('+1 day');
                        $DATE_FIN_SQL = date_format($objDate, 'Ymd');
                        
                        $dateFinUser = convertDateSqlToFr($DATE_FIN_SQL);
                        
                        Affichage::setAttributForFieldForm(getValue('form'), 'DATE_FIN', 'value', $dateFinUser);
                    } else
                        Affichage::setAttributForFieldForm(getValue('form'), 'DATE_FIN', 'value', '');
                    break;
                
                case 'ID_TACHE_CIBLE':
                    $ID_TACHE = getValue('ID_TACHE');
                    $ID_TACHE_CIBLE = getValue('ID_TACHE_CIBLE');
                    $dureeUser = trim(getValue('DUREE_PREV'));
                    $dateFinUser = '';
                    $reqTache = null;
                    $dateDebUser = '';
                    
                    if ($valeur == 0) {
                        if (! is_null($ID_TACHE) && is_numeric($ID_TACHE)) {
                            $reqTache = SqlDoa::rqGetInfoTaches($TYPE_OBJET, $ID_OBJET, $ID_TACHE)->Trouve1();
                        }
                        
                        Affichage::setAttributForFieldForm(getValue('form'), 'DATE_DEB', 'disabled', false);
                    } else {
                        /*
                         * Recherche de la tache visé afin de pouvoir avoir sa date de début et l'afficher à la place de celle existante
                         * de plus il faut griser la zone de saisie ainsi que l'accès au calendrier
                         */
                        $reqTache = SqlDoa::rqGetInfoTaches($TYPE_OBJET, $ID_OBJET, $ID_TACHE_CIBLE)->Trouve1();
                        
                        Affichage::setAttributForFieldForm(getValue('form'), 'DATE_DEB', 'disabled', true);
                    }
                    if (! is_null($reqTache)) {
                        $dateDeb = $reqTache['DATE_DEB'];
                        $dateDebUser = convertDateSqlToFr($dateDeb);
                        
                        if (is_numeric($dureeUser)) {
                            $objDate = date_create($dateDeb);
                            
                            $objDate->modify('+' . $dureeUser . ' day');
                            // Recalcul de la date de debut si jour chome ou ferie
                            while (DOA::isJourChome($listJourChome ?? null, $objDate) || DOA::isJourFerie($reqDoa['ID_CAL'], $objDate))
                                $objDate->modify('+1 day');
                            $DATE_FIN_SQL = date_format($objDate, 'Ymd');
                            
                            $dateFinUser = convertDateSqlToFr($DATE_FIN_SQL);
                        }
                    }
                    Affichage::setAttributForFieldForm(getValue('form'), 'DATE_DEB', 'value', $dateDebUser);
                    Affichage::setAttributForFieldForm(getValue('form'), 'DATE_FIN', 'value', $dateFinUser);
                    break;
            }
        }
        break;
    // Monter / Descendre au niveau des taches
    case 'tache_up':
    case 'tache_down':
        $clSession = DoaBibSession::getSession();
        $TYPE_OBJET = $clSession->getTypeObject();
        $ID_OBJET = $clSession->getIdObject();
        if ($ID_TACHE = getValue('idTache')) {
            if ($elementData = SqlDoa::rqGetInfoTaches($TYPE_OBJET, $ID_OBJET, $ID_TACHE)->Trouve1()) {
                // Obtention de toutes les données de la catégorie trié par num_ordre
                if ($req = SqlDoaTache::rqDOATacheListeArbo($elementData['TYPE_OBJET'], $elementData['ID_OBJET'], $elementData['ID_TACHE_H'])->TrouveTous()) {
                    $switch = false;
                    foreach ($req as $index => & $element)
                        if (! $switch) {
                            $element['NUM_ORDRE'] = $index;
                            if ($element['ID_TACHE'] == $elementData['ID_TACHE']) {
                                if ($action == 'tache_up') {
                                    $req[$index - 1]['NUM_ORDRE'] = $index;
                                    $req[$index]['NUM_ORDRE'] = $index - 1;
                                    $switch = true;
                                } else if ($action == 'tache_down') {
                                    $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_TACHES ' . 'set NUM_ORDRE    =   ' . $element['NUM_ORDRE'] . ' ' . 'where TYPE_OBJET = \'' . $element['TYPE_OBJET'] . '\' ' . 'and   ID_OBJET   =   ' . $element['ID_OBJET'] . ' ' . 'and   ID_TACHE   =   ' . $element['ID_TACHE'] . ' ';
                        
                        $pile->addSql($sql);
                    }
                    
                    if ($pile->Commit())
                        DOA_Tache::refreshCurrentTache();
                }
            }
        }
        
        break;
    // Monter / Descendre au niveau hierachique
    case 'tacheHup':
    case 'tacheHdown':
        $clSession = DoaBibSession::getSession();
        $TYPE_OBJET = $clSession->getTypeObject();
        $ID_OBJET = $clSession->getIdObject();
        
        if ($ID_TACHE_H = getValue('idTacheH')) {
            if ($elementData = SqlDoaTache::rqDOA_TacheH_getInfo($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H)->Trouve1()) {
                // Obtention de toutes les données de la catégorie trié par num_ordre
                if ($req = SqlDoaTache::rqGetSqlDoaTacheFille($elementData['TYPE_OBJET'], $elementData['ID_OBJET'], $elementData['ID_PARENT'])->TrouveTous()) {
                    $switch = false;
                    foreach ($req as $index => & $element)
                        if (! $switch) {
                            $element['NUM_ORDRE'] = $index;
                            if ($element['ID_TACHE_H'] == $elementData['ID_TACHE_H']) {
                                if ($action == 'tacheHup') {
                                    $req[$index - 1]['NUM_ORDRE'] = $index;
                                    $req[$index]['NUM_ORDRE'] = $index - 1;
                                    $switch = true;
                                } else if ($action == 'tacheHdown') {
                                    $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_TACHES_H ' . 'set NUM_ORDRE    =   ' . $element['NUM_ORDRE'] . ' ' . 'where TYPE_OBJET = \'' . $element['TYPE_OBJET'] . '\' ' . 'and   ID_OBJET   =   ' . $element['ID_OBJET'] . ' ' . 'and   ID_TACHE_H  =   ' . $element['ID_TACHE_H'] . ' ';
                        
                        $pile->addSql($sql);
                    }
                    
                    if ($pile->Commit())
                        DOA_Tache::BuildAccueil($ancrage, $TYPE_OBJET, $ID_OBJET);
                }
            }
        }
        
        break;
    case 'selectCurrentIdTacheH':
        DOA_Tache::refreshCurrentTache();
        
        break;
    
    case 'selectTacheH':
        $cl = DoaBibSession::getSession();
        
        $objSess = getValue('objSess');
        if (! is_null($objSess)) {
            // L'utilisateur a séectionné un élément dans la hiérarchie des tâches
            $clCache = CatalogueSessionObject::getSessionObject($objSess);
            $elementXmlOrigine = $clCache->getCacheElement(getValue('select'));
            if (! is_null($elementXmlOrigine)) {
                
                $ID_TACHE_H = $elementXmlOrigine->getAttribute('uniqId');
                $ID_OBJET = $cl->getIdObject();
                
                $cl->setProperties(DOA_Tache::PROP_SESS_ID_TACHE_H, $ID_TACHE_H);
                $cl->saveSession();
                
                if (DOA_Tache::TacheHIsOk($cl->getTypeObject(), $cl->getIdObject(), $ID_TACHE_H)) {
                    $array = DOA_Tache::BuildListeTaches($ID_TACHE_H, $cl->getTypeObject(), $cl->getIdObject());
                    $array['ide']['!action'] = 'ListerTaches';
                    $genXsl = new GenXslt(true);
                    Affichage::innerHTMLPointeur(DOA_Tache::$IdListeTaches, $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array));
                } else {
                    /**
                     * EDP Dans le cas contrauire remettre à plein la poartie droite
                     */
                    Affichage::innerHTML(DOA_Tache::$IdListeTaches, '');
                }
            }
        } else {
            // L'utilisateur revient d'un ajout / modification / suppression
            $array = DOA_Tache::BuildListeTaches($ID_TACHE, $cl->getTypeObject(), $cl->getIdObject());
            $array['ide']['!action'] = 'ListerTaches';
            $genXsl = new GenXslt(true);
            Affichage::innerHTMLPointeur(DOA_Tache::$IdListeTaches, $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array));
        }
        break;
    case 'AfficherTache':
        $titrePopup = trad('Afficher une tâche');
        $mode = 'affichage';
    case 'ModifierTache':
        $titrePopup = $titrePopup ?? trad('Modifier une tâche');
        $mode = $mode ?? 'edition';
    case 'AjouterTache':
        $array['ide']['popup'] = DOA_Tache_PopupAjout::BuildXml($ID_TACHE_H, $ID_TACHE);
        $array['ide']['!action'] = $action;
        $array['ide']['!mode'] = $mode ?? 'ajout';
        $array['popup_title'] = $titrePopup ?? trad("Ajout d'une tâche");
        
        $genXsl = new GenXslt(true);
        echo $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array);
        
        // Préparation des calendriers
        echo '<script language="javascript">', "CLSuivi = new GnooCalendar('CLSuivi', 10, 3 ,'", $_SESSION['DATE_FORMAT'], "');", "CLSuivi.init('calend', document.", DOA_Tache_PopupAjout::$id_FORMULAIRE, ".DateDebut);", 'CLSuivi.isDragable(false);', '</script>';
        break;
    case 'EnregistrerTache':
        $resultat = DOA_Tache_PopupAjout::EnregistrerDonnees(getValueAll($_REQUEST));
        
        if ('' !== $resultat['messageErreur'])
            Affichage::messageJS($resultat['messageErreur']);
        else
            // Pas d'erreur : on ferme la popup et on rafraîchit la liste des données
            echo 'window.closePopup();', 'parent.', DOA_Tache::JavascriptRafraichirOnglet($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H);
        break;
    
    case 'SupprimerTache':
        $clSession = DoaBibSession::getSession();
        $TYPE_OBJET = $clSession->getTypeObject();
        $ID_OBJET = $clSession->getIdObject();
        $modeConfirmation = getValue('modeConfirmation');
        $modeConfirmation = (is_null($modeConfirmation)) ? true : BoolSql($modeConfirmation);
        $resultat = DOA_Tache::SupprimerTache($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $modeConfirmation);
        if ('' !== $resultat['messageErreur'])
            Affichage::messageJS($resultat['messageErreur']);
        else if ($modeConfirmation) {
            if ('' != $resultat['messageConfirmation'])
                echo 'if (window.confirm(\'', cnv_to_javascript($resultat['messageConfirmation']), '\')) Traite(\'DOA_Tache.php?action=', $action, '&ID_TACHE_H=', $ID_TACHE_H, '&ID_TACHE=', $ID_TACHE, '&modeConfirmation=false\');';
        } else
            // Pas d'erreur : on rafraîchit l'onglet
            // echo 'CallUrl(\'DOA.php?action=ChangeOnglet&ancrage=DOA_ONGLET&ID_ONGLET=',DOA_Entete::id_ONGLET_TAC,'\');';
            echo DOA_Tache::JavascriptRafraichirOnglet($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H);
        
        break;
    
    case 'SuiviTache':
        echo 'alert("' . trad('prochainement sur vos écrans...') . '");';
        break;
    case 'EnvoiMail':
        echo 'alert("' . trad('prochainement sur vos écrans...') . '");';
        break;
    //
    // Gestion des actions
    // 
    
    case 'ExecuterAction':
        if (isset($titrePopup))
            $titrePopup = trad('Exécuter une action');

        if (!isset($mode))
            $mode = 'LE';

    case 'AfficherAction':
        if (isset($titrePopup))
            $titrePopup = trad('Afficher une action');
        
        if (!isset($mode))
            $mode = 'affichage';
    case 'ModifierAction':
        if (isset($titrePopup))
            $titrePopup = trad('Modifier une action');
   
            
        if (!isset($mode))
            $mode = 'edition';
    case 'AjouterAction':
        $array['ide']['!action'] = $action;
        $array['popup_title'] = (empty($titrePopup)) ? trad('Création d\'une action') : $titrePopup;
        
     
        $array['ide']['!mode'] = $mode ?? 'ajout';
        $array['ide']['popup'] = DOA_Tache_Action_Popup::BuildXml('ENTETE', $action, $ID_TACHE, $ID_ACTION);
        
        $genXsl = new GenXslt(true);
        echo $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array);
        break;
    case 'EnregistrerAction':
        $resultat = DOA_Tache_Action_Popup::EnregistrerDonnees(getValueAll($_REQUEST));
        
        if ('' !== $resultat['messageErreur']) {
            Affichage::messageJS($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_Tache.php?action=selectTacheH&TYPE_OBJET='.$TYPE_OBJET.'&ID_OBJET='.$ID_OBJET.'&ID_TACHE='.$ID_TACHE.'\');';
            /**
             * Cette fonction raffraichi l'onglet donc evidemment on pert le contexte de la hierarchie de tache
             * echo 'window.closePopup();parent.', DOA_Tache::JavascriptRafraichirOnglet($TYPE_OBJET, $ID_OBJET, $ID_TACHE);
             */
            $cl = DoaBibSession::getSession();
            $ID_OBJET = $cl->getIdObject();
            $TYPE_OBJET = $cl->getTypeObject();
            $ID_TACHE_H = $cl->getProperties(DOA_Tache::PROP_SESS_ID_TACHE_H);
            
            if (DOA_Tache::TacheHIsOk($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H)) {
                $array = DOA_Tache::BuildListeTaches($ID_TACHE_H, $TYPE_OBJET, $ID_OBJET);
                $array['ide']['!action'] = 'ListerTaches';
                $genXsl = new GenXslt(true);
                if (! $resultat['modeModif']) {
                    // Nous étions en ajout, on réouvre la popup en modification
                    echo 'Oxa_getDevice().popList["win_pop"].winEvents.urlcall = "parent.OpenPopup(\'DOA_tache.php?action=ModifierAction&ID_TACHE=' . $ID_TACHE . '&ID_ACTION=' . $resultat['ID_ACTION'] . '\',\'win_pop_modif\',800,500);";';
                    // echo 'parent.CallUrlAsync("DOA_Tache.php?action=cacheUrl",\''.trad('Rafraichissement encours..., veuillez patienter...').'\');';
                } else {
                    echo 'try{';
                    echo 'window.closePopup("win_pop_modif");';
                    echo '} catch (e) { }';
                }
                echo 'window.closePopup("win_pop");';
                
                Affichage::innerHTMLPointeur(DOA_Tache::$IdListeTaches, $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array), true, true);
            } else if (! $resultat['modeModif']) {
                // Nous étions en ajout, on réouvre la popup en modification
                echo 'try{';
                echo 'Oxa_getDevice().popList["win_pop"].winEvents.urlcall = "parent.OpenPopup(\'DOA_tache.php?action=ModifierAction&ID_TACHE=' . $ID_TACHE . '&ID_ACTION=' . $resultat['ID_ACTION'] . '\',\'win_pop_modif\',800,500);";';
                echo '} catch (e) { }';
                echo 'window.closePopup("win_pop");';
            } else
                echo 'window.closePopup("win_pop");';
        }
        break;
    case 'DupliquerAction':
        echo 'alert("' . trad('prochainement sur vos écrans...') . '");';
        break;
    case 'MonterAction':
        $cl = DoaBibSession::getSession();
        $ID_OBJET = $cl->getIdObject();
        $TYPE_OBJET = $cl->getTypeObject();
        $ID_TACHE_H = $cl->getProperties(DOA_Tache::PROP_SESS_ID_TACHE_H);
        
        DOA_Tache::MonterAction($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION);
        // echo DOA_Tache::JavascriptRafraichirOnglet($TYPE_OBJET, $ID_OBJET, $ID_TACHE);
        
        if (DOA_Tache::TacheHIsOk($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H)) {
            $array = DOA_Tache::BuildListeTaches($ID_TACHE_H, $TYPE_OBJET, $ID_OBJET);
            $array['ide']['!action'] = 'ListerTaches';
            $genXsl = new GenXslt(true);
            Affichage::innerHTMLPointeur(DOA_Tache::$IdListeTaches, $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array));
        }
        
        break;
    case 'DescendreAction':
        $cl = DoaBibSession::getSession();
        $ID_OBJET = $cl->getIdObject();
        $TYPE_OBJET = $cl->getTypeObject();
        $ID_TACHE_H = $cl->getProperties(DOA_Tache::PROP_SESS_ID_TACHE_H);
        DOA_Tache::DescendreAction($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION);
        
        if (DOA_Tache::TacheHIsOk($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H)) {
            $array = DOA_Tache::BuildListeTaches($ID_TACHE_H, $TYPE_OBJET, $ID_OBJET);
            $array['ide']['!action'] = 'ListerTaches';
            $genXsl = new GenXslt(true);
            Affichage::innerHTMLPointeur(DOA_Tache::$IdListeTaches, $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array));
        }
        break;
    case 'SupprimerAction':
        $cl = DoaBibSession::getSession();
        $ID_OBJET = $cl->getIdObject();
        $TYPE_OBJET = $cl->getTypeObject();
        if (DOA_Tache::SupprimerAction($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION)) {
            $ID_TACHE_H = $cl->getProperties(DOA_Tache::PROP_SESS_ID_TACHE_H);
            
            if (DOA_Tache::TacheHIsOk($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H)) {
                $array = DOA_Tache::BuildListeTaches($ID_TACHE_H, $TYPE_OBJET, $ID_OBJET);
                $array['ide']['!action'] = 'ListerTaches';
                $genXsl = new GenXslt(true);
                Affichage::innerHTMLPointeur(DOA_Tache::$IdListeTaches, $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array));
            }
        }
        break;
    case 'EnvoiMailAction':
        echo 'alert("prochainement sur vos écrans...");';
        break;
    
    case 'SupprimerDonnee':
        $cl = DoaBibSession::getSession();
        $TYPE_OBJET = $cl->getTypeObject();
        $ID_OBJET = $cl->getIdObject();
        $ID_TACHE = getValue('ID_TACHE');
        $ID_ACTION = getValue('ID_ACTION');
        $ID_DONNEE = getValue('ID_DONNEE');
        
        $resultat = DOA_Tache_Action_Popup::SupprimerActionDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_DONNEE);
        if ('' !== $resultat['messageErreur']) {
            Affichage::messageJS($resultat['messageErreur']);
        } else {
            // Pas d'erreur : on ferme la popup et on rafraîchit la liste des données
            echo DOA_Tache_Action_Popup::JavascriptRafraichirOngletDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, false);
        }
        break;
    case 'ModifieModifiable':
    case 'ModifieAffichee':
        
        $tmpListe = explode('_', getValue('OBJECT'));
        
        if ($action == 'ModifieModifiable') {
            $champ = 'MODIFIABLE';
        } else if ($action == 'ModifieAffichee') {
            $champ = 'AFFICHEE';
        } else {
            Affichage::messageJS('Fonction DOA_tache.php action=' . $action . ' à faire');
            exit();
        }
        
        $valeur = BoolSql(getValue('AFFICHEE_' . $tmpListe[1]));
        $valeur2 = BoolSql(getValue('MODIFIABLE_' . $tmpListe[1]));
        
        // On vérifie que c'est OK
        $messageErreur = '';
        $js = '';
        switch ($champ) {
            case 'AFFICHEE':
                if (false == $valeur && true == $valeur2) {
                    $messageErreur = Trad('Vous ne pouvez pas masquer une data qui est modifiable.');
                    $js = 'document.getElementById(\'' . getValue('OBJECT') . '\').checked=true;';
                }
                break;
            case 'MODIFIABLE':
                break;
        }
        
        if ('' !== $messageErreur) {
            echo $js, 'alert("', $messageErreur, '");';
        } else {
            $cl = DoaBibSession::getSession();
            $TYPE_OBJET = $cl->getTypeObject();
            $ID_OBJET = $cl->getIdObject();
            $ID_TACHE = getValue('ID_TACHE');
            $ID_ACTION = getValue('ID_ACTION');
            $ID_DATA = getValue('ID_DATA');
            $ID_DONNEE = getValue('ID_DONNEE');
            $valeur = getValue(getValue('OBJECT'));
            
            $resultat = DOA_Tache_Action_Popup::ModifierAttribut($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_DONNEE, $ID_DATA, $champ, $valeur);
            if ('' !== $resultat['messageErreur']) {
                // Une erreur est survenue, on rafraîchit la page
                Affichage::messageJS($resultat['messageErreur']);
                echo DOA_Tache_Action_Popup::JavascriptRafraichirOngletDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, false);
            } elseif ('ModifieAffichee' == $action)
                // Si un élément est maintenant affiché, peut-être est-il modifiable ; on rafraîchit la page
                echo DOA_Tache_Action_Popup::JavascriptRafraichirOngletDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, false);
        }
        break;
    
    //
    // Popup Acteurs
    //
    case 'SupprimerActeur':
        $cl = DoaBibSession::getSession();
        $TYPE_OBJET = $cl->getTypeObject();
        $ID_OBJET = $cl->getIdObject();
        $resultat = DOA_Tache_Action_Popup::SupprimerActionActeur($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_ACTEUR);
        if ('' !== $resultat['messageErreur'])
            Affichage::messageJS($resultat['messageErreur']);
        else
            // Pas d'erreur : on rafraîchit la liste des données
            echo DOA_Tache_Action_Popup::JavascriptRafraichirOngletActeur($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, false);
        
        break;
    case 'ModifierActeur':
        $ID_ACTEUR = getValue('ID_ACTEUR');
        $properties = new Properties();
        $properties->setProperties('_mode', 'M')
            ->setProperties('ID_OBJET', $ID_OBJET)
            ->setProperties('ID_TACHE', $ID_TACHE)
            ->setProperties('ID_ACTION', $ID_ACTION)
            ->setProperties('ID_ACTEUR', $ID_ACTEUR);
        
        $properties->saveObjectSession(getValue('objSess'));

        $array['ide']['popup'] = DOA_Tache_PopupAjoutActeur::BuildXml($properties);
        $array['ide']['!action'] = $action;
        $array['ide']['!mode'] = 'edition';
        $array['popup_title'] = trad('Modifier un acteur');
        $array['popup_session'] = getValue('objSess');

        $genXsl = new GenXslt(true);
        echo $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array);
        break;
    case 'AjouterActeur':
        $ID_ACTEUR = null;
        $properties = new Properties();
        $properties->setProperties('_mode', 'A')
            ->setProperties('ID_OBJET', $ID_OBJET)
            ->setProperties('ID_TACHE', $ID_TACHE)
            ->setProperties('ID_ACTION', $ID_ACTION)
            ->setProperties('ID_ACTEUR', $ID_ACTEUR);
        
        $properties->saveObjectSession(getValue('objSess'));
        
        $array['ide']['popup'] = DOA_Tache_PopupAjoutActeur::BuildXml($properties);
        $array['ide']['!action'] = $action;
        $array['ide']['!mode'] = 'ajout';
        $array['popup_title'] = trad('Ajout d\'un acteur');
        $array['popup_session'] = getValue('objSess');
        
        $genXsl = new GenXslt(true);
        echo $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array);
        break;
    case 'EnregistrerActionActeur':
        $pileSql = new PileSql(DB_OXASQLDB);
        $resultat = DOA_Tache_PopupAjoutActeur::EnregistrerDonnees($pileSql, getValueAll($_REQUEST));
        
        if (! $pileSql->Commit() || '' !== $resultat['messageErreur']) {
            Affichage::messageJS($resultat['messageErreur']);
        } else {
            // Pas d'erreur : on ferme la popup et on rafraîchit la liste des données
            echo 'window.closePopup();';
            echo DOA_Tache_Action_Popup::JavascriptRafraichirOngletActeur($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, true);
        }
        break;
    
    case 'changeTypeElem':
        $TYPE_ELEM = getValue(DOA_Tache_PopupAjoutActeur::$id_TYPE_ELEM);
        DOA_Tache_PopupAjoutActeur::JavascriptChangeTypeElem($ID_OBJET, $TYPE_ELEM);
        break;
    case 'changeIdUser':
        $CODE_ACTEUR = trim(getValue(DOA_Tache_PopupAjoutActeur::$id_CODE_ACTEUR));
        $resultat = DOA_Tache_PopupAjoutActeur::JavascriptChangeCodeActeur($CODE_ACTEUR);
        if ('' !== $resultat['messageErreur'])
            Affichage::messageJS($resultat['messageErreur']);
        break;
    case 'changeMail':
        $EMAIL = trim(getValue('EMAIL'));
        $resultat = DOA_Tache_PopupAjoutActeur::JavascriptChangeEMail($EMAIL);
        if ('' !== $resultat['messageErreur'])
            Affichage::messageJS($resultat['messageErreur']);
        break;
    
    //
    // Popup Données
    //
    case 'VerifierAjoutDonnee':
        $cl = DoaBibSession::getSession();
        $TYPE_OBJET = $cl->getTypeObject();
        $ID_OBJET = $cl->getIdObject();
        
        $messageErreur = DOA_Tache_Action_Popup::VerifieAjouterDonnee($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION);
        
        if ('' != $messageErreur) {
            echo 'alert("', $messageErreur, '");';
        } else {
            echo DOA_Tache_Action_Popup::JavascriptOnclickAjouterDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION);
        }
        
        break;
    case 'AjouterDonnee':
        $array['ide']['popup'] = DOA_Tache_PopupAjoutDonnee::BuildXml($ID_TACHE, $ID_ACTION);
        $array['ide']['!action'] = $action;
        $array['popup_title'] = trad('Ajout d\'une donnée');
        $genXsl = new GenXslt(true);
        echo $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array);
        break;
    case 'changeCategorie':
        $cl = DoaBibSession::getSession();
        $TYPE_OBJET = getValue('TYPE_OBJET');
        $ID_OBJET = getValue('ID_OBJET');
        $ID_TACHE = getValue('ID_TACHE');
        $ID_ACTION = getValue('ID_ACTION');
        $ID_CAT = getValue(DOA_Tache_PopupAjoutDonnee::$id_ID_CAT);
        
        DOA_Tache_PopupAjoutDonnee::JavascriptChangeCategorie($TYPE_OBJET, $ID_OBJET, $ID_CAT, $ID_TACHE, $ID_ACTION);
        
        break;
    case 'EnregistrerActionDonnee':
        $resultat = DOA_Tache_PopupAjoutDonnee::EnregistrerDonnees(getValueAll($_REQUEST));
        if ('' !== $resultat['messageErreur']) {
            Affichage::messageJS($resultat['messageErreur']);
        } else {
            // Pas d'erreur : on ferme la popup et on rafraîchit la liste des données
            echo 'window.closePopup();';
            echo DOA_Tache_Action_Popup::JavascriptRafraichirOngletDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, true);
        }
        break;
    //
    // Gestion de l'arborescence des tâches
    //
    case 'ModifierTacheH':
    case 'AjouterTacheH':
        $array['ide']['!action'] = $action;
        
        if ($action == 'AjouterTacheH') {
            $titrePopup = trad('Ajout d\'une hiérarchie');
            $array['ide']['popup'] = DOA_Tache_PopupAjoutH::BuildXml(null);
        } else {
            $titrePopup = trad('Modifier une hiérarchie');
            $array['ide']['popup'] = DOA_Tache_PopupAjoutH::BuildXml($ID_TACHE_H);
        }
        
        $array['popup_title'] = & $titrePopup;
        
        $genXsl = new GenXslt(true);
        echo $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array);
        
        break;
    case 'EnregistrerTacheH':
        $resultat = DOA_Tache_PopupAjoutH::EnregistrerDonnees(getValueAll($_REQUEST));
        
        if ('' !== $resultat['messageErreur']) {
            Affichage::messageJS($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.php?action=ChangeOnglet&ancrage=DOA_ONGLET&ID_ONGLET=', DOA_Entete::id_ONGLET_TAC, '\');';
        }
        break;
    case 'SupprimerTacheH':
        $ID_TACHE_H = getValue('ID_TACHE_H');
        $clSession = DoaBibSession::getSession();
        $TYPE_OBJET = $clSession->getTypeObject();
        $ID_OBJET = $clSession->getIdObject();
        $modeConfirmation = getValue('modeConfirmation');
        $modeConfirmation = (is_null($modeConfirmation)) ? true : BoolSql($modeConfirmation);
        $resultat = DOA_Tache::SupprimerTacheH($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H, $modeConfirmation);
        if ('' !== $resultat['messageErreur'])
            Affichage::messageJS($resultat['messageErreur']);
        else {
            if ($modeConfirmation) {
                if ('' != $resultat['messageConfirmation'])
                    echo 'if (window.confirm(\'', cnv_to_javascript($resultat['messageConfirmation']), '\')) Traite(\'DOA_Tache.php?action=', $action, '&ID_TACHE_H=', $ID_TACHE_H, '&modeConfirmation=false\');';
            } else
                // Pas d'erreur : on rafraîchit l'onglet
                echo 'CallUrl(\'DOA.php?action=ChangeOnglet&ancrage=DOA_ONGLET&ID_ONGLET=', DOA_Entete::id_ONGLET_TAC, '\');';
        }
        break;
}
