<?php

//
// Gestion des actions
//
class DOA_Tache_Action_Popup
{

    public static $id_FORMULAIRE = 'FORMULAIRE_AJOUT_ACTION';

    public static $id_TYPE_OBJET = 'TYPE_OBJET';

    public static $id_ID_OBJET = 'ID_OBJET';

    public static $id_ID_TACHE = 'ID_TACHE';

    public static $id_ID_ACTION = 'ID_ACTION';

    public static $id_LIB = 'LIB';

    public static $id_COMMENTAIRE = 'COMMENTAIRE';

    public static $id_NUM_ORDRE = 'NUM_ORDRE';

    public static $id_ID_TYPE_ACT = 'ID_TYPE_ACT';

    public static $id_ONGLET_ACTEURS = 'ONGLET_ACTEUR';

    public static $id_ONGLET_DONNEES = 'ONGLET_DONNEES';

    public static $id_ONGLET_ACTEURS_CONTENT = 'ONGLET_ACTEUR_CONTENT';

    public static $id_ONGLET_DONNEES_CONTENT = 'ONGLET_DONNEES_CONTENT';

    public static $id_INFO_ONGLET = 'INFO_ONGLET';

    const NOM_WIN_POP_ACTEUR = 'pop_win_acteur';

    //
    // Gestion du javascript
    //
    public static function &JavascriptOnclickOngletActeurs()
    {
        $js = 'javascript:
				document.getElementById("' . DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS . '").className="select";
				document.getElementById("' . DOA_Tache_Action_Popup::$id_ONGLET_DONNEES . '").className="onglet";
				document.getElementById("' . DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS_CONTENT . '").style.display = "";
				document.getElementById("' . DOA_Tache_Action_Popup::$id_ONGLET_DONNEES_CONTENT . '").style.display = "none";
				';
        return $js;
        // Affichage::setAttribut(DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS, 'className', 'select');
        // Affichage::setAttribut(DOA_Tache_Action_Popup::$id_ONGLET_DONNEES, 'className', 'onglet');
        // Affichage::setAttribut(DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS_CONTENT, 'style.display', '');
        // Affichage::setAttribut(DOA_Tache_Action_Popup::$id_ONGLET_DONNEES_CONTENT, 'style.display', 'none');
    }

    public static function &JavascriptOnclickOngletDonnees()
    {
        $js = 'javascript:
				document.getElementById("' . DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS . '").className="onglet";
				document.getElementById("' . DOA_Tache_Action_Popup::$id_ONGLET_DONNEES . '").className="select";
				document.getElementById("' . DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS_CONTENT . '").style.display = "none";
				document.getElementById("' . DOA_Tache_Action_Popup::$id_ONGLET_DONNEES_CONTENT . '").style.display = "";
				';
        return $js;
        // Affichage::setAttribut(DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS, 'className', 'onglet');
        // Affichage::setAttribut(DOA_Tache_Action_Popup::$id_ONGLET_DONNEES, 'className', 'select');
        // Affichage::setAttribut(DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS_CONTENT, 'style.display', 'none');
        // Affichage::setAttribut(DOA_Tache_Action_Popup::$id_ONGLET_DONNEES_CONTENT, 'style.display', '');
    }

    public static function &JavascriptOnclickAjouterActeurs(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION)
    {
        $js = 'var win_pop = OpenPopup(\'DOA_Tache.php?action=AjouterActeur&objSess=' . DOA_Tache_Action_Popup::NOM_WIN_POP_ACTEUR . '&TYPE_ACTION=' . $TYPE_OBJET . '&ID_OBJET=' . $ID_OBJET . '&ID_TACHE=' . $ID_TACHE . '&ID_ACTION=' . $ID_ACTION . '\',\'' . DOA_Tache_Action_Popup::NOM_WIN_POP_ACTEUR . '\',500,175);';
        return $js;
    }

    public static function &JavascriptOnclickModifierActeurs(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION, & $ID_ACTEUR)
    {
     
        $js = 'var win_pop = OpenPopup(\'DOA_Tache.php?action=ModifierActeur&objSess=' . DOA_Tache_Action_Popup::NOM_WIN_POP_ACTEUR . '&TYPE_ACTION=' . $TYPE_OBJET . '&ID_OBJET=' . $ID_OBJET . '&ID_TACHE=' . $ID_TACHE . '&ID_ACTION=' . $ID_ACTION . '&ID_ACTEUR=' . $ID_ACTEUR . '\',\'' . DOA_Tache_Action_Popup::NOM_WIN_POP_ACTEUR . '\',500,150);';
        return $js;
    }

    public static function &JavascriptOnclickSupprimerActeurs(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION, & $ID_ACTEUR)
    {
        $js = 'if (window.confirm(\'' . cnv_to_javascript(Trad('Confirmez-vous la suppression de cet acteur ?')) . '\')) Traite(\'DOA_Tache.php?action=SupprimerActeur&TYPE_ACTION=' . $TYPE_OBJET . '&ID_OBJET=' . $ID_OBJET . '&ID_TACHE=' . $ID_TACHE . '&ID_ACTION=' . $ID_ACTION . '&ID_ACTEUR=' . $ID_ACTEUR . '\');';
        return $js;
    }

    public static function &JavascriptOnclickVerificationAjouterDonnees(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION)
    {
        $js = 'CallUrl(\'DOA_Tache.php?action=VerifierAjoutDonnee&TYPE_ACTION=' . $TYPE_OBJET . '&ID_OBJET=' . $ID_OBJET . '&ID_TACHE=' . $ID_TACHE . '&ID_ACTION=' . $ID_ACTION . '\');';
        return $js;
    }

    public static function &JavascriptOnclickAjouterDonnees(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION)
    {
        $js = 'var win_pop = OpenPopup(\'DOA_Tache.php?action=AjouterDonnee&TYPE_ACTION=' . $TYPE_OBJET . '&ID_OBJET=' . $ID_OBJET . '&ID_TACHE=' . $ID_TACHE . '&ID_ACTION=' . $ID_ACTION . '\',\'ajout_donnee\',500,175);';
        return $js;
    }

    public static function JavascriptRafraichirOngletActeur(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION, $js_rafraichit_parent)
    {
        $array['ide']['!action'] = 'onglet_acteurs';
        $contenuActeurs = DOA_Tache_Action_Popup::BuildXmlOngletActeurs($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION);
        
        if (! is_null($contenuActeurs))
            $array['ONGLET_ACTEURS_CONTENT']['tableau'] = &$contenuActeurs;
        
        $array['ONGLET_ACTEURS_CONTENT']['!onclickAjouter'] = (Param::canCreateDoaModele() ? DOA_Tache_Action_Popup::JavascriptOnclickAjouterActeurs($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION) : '');
        $array['ONGLET_ACTEURS_CONTENT']['!tooltipAjouter'] = trad('Ajouter');
        
        $genXsl = new GenXslt(true);
        $tableau = $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array);
        
        Affichage::innerHTML(DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS_CONTENT, $tableau, true, $js_rafraichit_parent, true);
    }

    public static function JavascriptRafraichirOngletDonnees(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION, $js_rafraichit_parent)
    {
        $array['ide']['!action'] = 'onglet_donnees';
        $array['ide']['ONGLET_DONNEES_CONTENT']['!onclickAjouter'] = DOA_Tache_Action_Popup::JavascriptOnclickVerificationAjouterDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION);
        $array['ide']['ONGLET_DONNEES_CONTENT']['!tooltipAjouter'] = trad('Ajouter');
        
        $contenuDonnees = DOA_Tache_Action_Popup::BuildXmlOngletDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION);
        if (! is_null($contenuDonnees))
            $array['ONGLET_DONNEES_CONTENT']['tableau'] = &$contenuDonnees;
        
        $genXsl = new GenXslt(true);
        $tableau = $genXsl->XslHtml(DOA_Tache::$fichier_xsl, $array);
        Affichage::innerHTML(DOA_Tache_Action_Popup::$id_ONGLET_DONNEES_CONTENT, $tableau, true, $js_rafraichit_parent, true);
    }

    public static function &BuildXmlOngletActeurs(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION)
    {
        $array = null;
        if ($reqSql = SqlDoaTache::rqDOA_Tache_InfoActeurs($TYPE_OBJET, $ID_OBJET, $ID_ACTION)->TrouveTous()) {
            //
            // Préparation des données connexes
            //
            $listeRoles = DOA_Referentiel::ListeRoles();
            
            //
            // Tableau de données
            //
            
            foreach ($reqSql as & $value) {
                $ID_ACTEUR = $value['ID_ACTEUR'];
                
                $ROLE = $listeRoles[$value['ROLE']];
                
                $CODE_ACTEUR = $value['CODE_ACTEUR'];
                
                if ($infosUtilisateur = utilisateur::getInfoForUser($CODE_ACTEUR))
                    $CODE_ACTEUR = $infosUtilisateur['NOM'];
                
                $TYPE_ELEM = $value['TYPE_ELEM'];
                if ('' != $TYPE_ELEM && ($reqSqlTable = SqlDoaTache::rqDOA_GetListeCSTypeActeur($TYPE_ELEM)->Trouve1()))
                    $TYPE_ELEM = $reqSqlTable['NOM'];
                
                if ($TYPE_ELEM == DOA::ACTEUR_TACHE_CODE_PROPRIETAIRE) {
                    $TYPE_ELEM = trad('Propriétaire du DOA');
                } else if ($TYPE_ELEM == DOA::ACTEUR_TACHE_CODE_PRESCRIPTEUR) {
                    $TYPE_ELEM = trad('Prescripteur du DOA');
                }
                
                $TYPE_ACTEUR = $value['TYPE_ACTEUR'];
                if ('' != $TYPE_ACTEUR && ($reqSqlTable = SqlDoaTache::rqDOA_GetListeCSTypeActeur($TYPE_ACTEUR)->Trouve1()))
                    $TYPE_ACTEUR = $reqSqlTable['NOM'];
                
                if (Param::canCreateDoaModele())
                    $array[] = array(
                        '!ROLE' => $ROLE,
                        '!CODE_ACTEUR' => $CODE_ACTEUR,
                        '!EMAIL' => $value['EMAIL'],
                        '!TYPE_ELEM' => $TYPE_ELEM,
                        '!ID_ELEM' => $value['ID_ELEM'],
                        '!TYPE_ACTEUR' => $TYPE_ACTEUR,
                        '!onclickModifier' => DOA_Tache_Action_Popup::JavascriptOnclickModifierActeurs($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_ACTEUR),
                        '!onclickSupprimer' => ('R' !== $value['ROLE']) ? DOA_Tache_Action_Popup::JavascriptOnclickSupprimerActeurs($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_ACTEUR) : '',
                        '!tooltipModifier' => trad('Modifier'),
                        '!tooltipSupprimer' => trad('Supprimer')
                    );
                else
                    $array[] = array(
                        '!ROLE' => $ROLE,
                        '!CODE_ACTEUR' => $CODE_ACTEUR,
                        '!EMAIL' => $value['EMAIL'],
                        '!TYPE_ELEM' => $TYPE_ELEM,
                        '!ID_ELEM' => $value['ID_ELEM'],
                        '!TYPE_ACTEUR' => $TYPE_ACTEUR
                    );
            }
        }
        return $array;
    }

    public static function &BuildXmlOngletDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION)
    {
        $arrayDONNEES = null;
        
        $isDoaExec = DOA_Referentiel::iSDoaEnExecution($TYPE_OBJET, $ID_OBJET);
        
        if ($reqSql = SqlDoaTache::rqDOA_Tache_Actions_ListeDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION)->TrouveTous()) {
            $urlBase1 = 'Traite(\'DOA_Tache.php?action=';
            $urlBase2 = '&TYPE_OBJET=' . $TYPE_OBJET . '&ID_OBJET=' . $ID_OBJET . '&ID_TACHE=' . $ID_TACHE . '&ID_ACTION=' . $ID_ACTION;
            $urlBase3 = ',this);';
            //
            // 1. On récupère dans les données les informations sur les DONNEES
            //
            
            foreach ($reqSql as &$value)
                if (is_null($arrayDONNEES) || ! array_key_exists($value['ID_DONNEE'], $arrayDONNEES)) {
                    $element = array(
                        '!ID_DONNEE' => $value['ID_DONNEE'],
                        '!NOM_DONNEE' => $value['NOM_DONNEE'],
                        '!DESCR' => $value['DESCR']
                    );
                    
                    if (! $isDoaExec && Param::canCreateDoaModele()) {
                        
                        $element['!onclickSupprimer'] = 'if (window.confirm(\'' . cnv_to_javascript(Trad('Confirmez-vous la suppression de cette donnée ?')) . '\')) ' . $urlBase1 . 'SupprimerDonnee' . $urlBase2 . '&ID_DONNEE=' . $value['ID_DONNEE'] . '\'' . $urlBase3;
                        $element['!tooltipSupprimer'] = trad('Supprimer');
                    }
                    
                    $arrayDONNEES[$value['ID_DONNEE']] = $element;
                }
            //
            // 2. On parcoure le tableau ainsi créé et on l'alimente avec les DATA
            //
            foreach ($arrayDONNEES as $keyDONNEES => &$valueDONNEES) {
                $arrayDATATmp = array();
                foreach ($reqSql as & $valueDATA) {
                    if ($valueDATA['ID_DONNEE'] == $keyDONNEES) {
                        // LIE_A_OBJET = true et non ID => (CLE_UNIQUE = false) => Affiche / modifiable
                        $LIE_A_OBJET = BoolSql($valueDATA['LIE_A_OBJET']);
                        $FLAG_ID_OBJET = BoolSql($valueDATA['FLAG_ID_OBJET']);
                        
                        $DATA_LIE_A_OBJ = BoolSql($valueDATA['DATA_LIE_A_OBJ']);
                        $ID_DATA_LIEE = $valueDATA['ID_DATA_LIEE'];
                        
                        $TYPE_DATA = & $valueDATA['TYPE_DATA'];
                        $OBJET_DATA = & $valueDATA['OBJET_DATA'];
                        $NOM_DATA = & $valueDATA['NOM_DATA'];
                        $AFFICHEE = BoolSql($valueDATA['AFFICHEE']);
                        
                        if (! $AFFICHEE)
                            $MODIFIABLE_disabled = true;
                        elseif (! $LIE_A_OBJET && ! $DATA_LIE_A_OBJ) // Pour les datas lié sur data ne peut être modifier que la valeur unique, les autres champs sont des dépendances
                            $MODIFIABLE_disabled = false;
                        else
                            $MODIFIABLE_disabled = ($LIE_A_OBJET && ! $FLAG_ID_OBJET) || ($DATA_LIE_A_OBJ && ($ID_DATA_LIEE != 0)); // EDP ????? Comprend pas du tout le 2 eme test
                        
                        $idCBAffichee = 'AFFICHEE_' . $valueDATA['ID_DATA'];
                        $idCBModifiable = 'MODIFIABLE_' . $valueDATA['ID_DATA'];
                        
                        $arrayDATATmp = array(
                            '!ID_DATA' => & $valueDATA['ID_DATA'],
                            '!NOM_DATA' => & $valueDATA['NOM_DATA'],
                            
                            '!ID_AFFICHEE' => $idCBAffichee,
                            '!AFFICHEE' => BoolSql($valueDATA['AFFICHEE']),
                            
                            '!ID_MODIFIABLE' => $idCBModifiable,
                            '!MODIFIABLE' => BoolSql($valueDATA['MODIFIABLE']),
                            '!MODIFIABLE_disabled' => $MODIFIABLE_disabled
                        );
                        
                        if (! $isDoaExec) {
                            $arrayDATATmp['!onchangeAffichee'] = $urlBase1 . 'ModifieAffichee&ID_DONNEE=' . $valueDATA['ID_DONNEE'] . $urlBase2 . '&ID_DATA=' . $valueDATA['ID_DATA'] . '\'' . $urlBase3;
                            $arrayDATATmp['!onchangeModifiable'] = $urlBase1 . 'ModifieModifiable&ID_DONNEE=' . $valueDATA['ID_DONNEE'] . $urlBase2 . '&ID_DATA=' . $valueDATA['ID_DATA'] . '\'' . $urlBase3;
                        }
                        
                        $valueDONNEES['DATA'][] = $arrayDATATmp;
                    }
                }
            }
        }
        return $arrayDONNEES;
    }

    /**
     *
     * @param unknown $origine
     *            permet de savoir quel type de fonctionnalité d'appel : ENTETE /
     * @param unknown $action
     * @param unknown $ID_TACHE
     * @param unknown $ID_ACTION
     * @return Ambigous <string, NULL, multitype:string unknown , multitype:string multitype:unknown string multitype:string multitype:string Ambigous <string, unknown> multitype:Ambigous string Ambigous <string, unknown> multitype:string unknown unknown multitype:string Ambigous <string, unknown, string, NULL> >
     */
    public static function &BuildXml($origine, & $action, & $ID_TACHE, & $ID_ACTION)
    {
        $clSession = DoaBibSession::getSession();
        $TYPE_OBJET = $clSession->getTypeObject();
        $ID_OBJET = $clSession->getIdObject();
        
        if ('' == $ID_ACTION || $ID_ACTION == null) {
            $ID_ACTION = '-1';
            $LIB = '';
            $COMMENTAIRE = '';
            $ID_TYPE_ACT = '';
        } else {
            $reqSql = SqlDoaTache::rqDOA_ListeActionsDeTache($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION)->Trouve1();
            $LIB = $reqSql['LIB'];
            $COMMENTAIRE = $reqSql['COMMENTAIRE'];
            $ID_TYPE_ACT = $reqSql['ID_TYPE_ACT'];
        }
        
        $reqDoa = SqlDoa::rqGetInfoSuiviDoa($ID_OBJET)->Trouve1();
        //
        // Préparation des données
        //
        
        $array['TYPE_OBJET'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_TYPE_OBJET,
            '!value' => $TYPE_OBJET
        );
        $array['ID_OBJET'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_ID_OBJET,
            '!value' => $ID_OBJET
        );
        $array['ID_TACHE'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_ID_TACHE,
            '!value' => $ID_TACHE
        );
        $array['ID_ACTION'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_ID_ACTION,
            '!value' => $ID_ACTION
        );
        $array['LIB'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_LIB,
            '!value' => $LIB
        );
        $array['COMMENTAIRE'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_COMMENTAIRE,
            '!value' => $COMMENTAIRE
        );
        
        $array['ONGLET_ACTEUR'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS,
            '!class' => 'onglet',
            '!onclick' => DOA_Tache_Action_Popup::JavascriptOnclickOngletActeurs()
        );
        $array['ONGLET_DONNEES'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_ONGLET_DONNEES,
            '!class' => 'select',
            '!onclick' => DOA_Tache_Action_Popup::JavascriptOnclickOngletDonnees()
        );
        
        $array['ONGLET_ACTEURS_CONTENT'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_ONGLET_ACTEURS_CONTENT,
            '!style' => 'display:none',
            '!onclickAjouter' => (Param::canCreateDoaModele() ? DOA_Tache_Action_Popup::JavascriptOnclickAjouterActeurs($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION) : ''),
            '!tooltipAjouter' => trad('Ajouter')
        );
        
        if ($contenuActeurs = DOA_Tache_Action_Popup::BuildXmlOngletActeurs($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION))
            $array['ONGLET_ACTEURS_CONTENT']['tableau'] = &$contenuActeurs;


        
        $array['ID_TYPE_ACT'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_ID_TYPE_ACT,
            '!value' => $ID_TYPE_ACT,
            'listeValeurs' => DOA_Referentiel::BuildXmlListetypesAction()
        );
        
        $array['INFO_ONGLET'] = array(
            '!id' => DOA_Tache_Action_Popup::$id_INFO_ONGLET
        
        );
        
        $array['FORM'] = array(
            '!ID' => DOA_Tache_Action_Popup::$id_FORMULAIRE,
            '!onclick' => 'Traite(\'DOA_Tache.php?action=EnregistrerAction\',document.' . DOA_Tache_Action_Popup::$id_FORMULAIRE . '.elements[0]);return false;'
        );
        
        if ($action == 'ExecuterAction' || ($action == 'AfficherAction' && $reqDoa['STATUT'] != DOA_Referentiel::STATUT_INITIAL)) {
            // //ide/action/tableau
           
            $array['ONGLET_DONNEES_CONTENT'] = DOA_Action::BuildXmlActionExecuter_v2($origine, $TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, true, $action);
      
            
            $array['ONGLET_DONNEES_CONTENT']['!id'] = DOA_Tache_Action_Popup::$id_ONGLET_DONNEES_CONTENT;
            $array['ONGLET_DONNEES_CONTENT']['!style'] = 'display:';
        } else {
            
            //
            // Partie présentation
            //
            $array['ONGLET_DONNEES_CONTENT'] = array(
                '!id' => DOA_Tache_Action_Popup::$id_ONGLET_DONNEES_CONTENT,
                '!style' => 'display:',
                '!onclickAjouter' => (Param::canCreateDoaModele() ? DOA_Tache_Action_Popup::JavascriptOnclickVerificationAjouterDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION) : ''),
                '!tooltipAjouter' => trad('Ajouter')
            );
            
            if ($contenuDonnees = DOA_Tache_Action_Popup::BuildXmlOngletDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION))
                $array['ONGLET_DONNEES_CONTENT']['tableau'] = $contenuDonnees;

                
        }
        
        
        return $array;
    }

    public static function &VerifieAjouterDonnee($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION)
    {
        $messageErreur = '';
        $listeCategories = DOA_Tache_PopupAjoutDonnee::BuildXmlListeCategories($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION);
        if (is_null($listeCategories)) {
            $messageErreur = Trad('Il n\'y a pas encore de catégorie(s)/donnée(s) pour ce DOA.');
        }
        return $messageErreur;
    }

    public static function EnregistrerDonnees($GET)
    {
        $messageErreur = '';
        $TYPE_OBJET = trim($GET[DOA_Tache_Action_Popup::$id_TYPE_OBJET]);
        $ID_OBJET = trim($GET[DOA_Tache_Action_Popup::$id_ID_OBJET]);
        $ID_TACHE = trim($GET[DOA_Tache_Action_Popup::$id_ID_TACHE]);
        $ID_ACTION = trim($GET[DOA_Tache_Action_Popup::$id_ID_ACTION]);
        $LIB = trim($GET[DOA_Tache_Action_Popup::$id_LIB]);
        $COMMENTAIRE = trim($GET[DOA_Tache_Action_Popup::$id_COMMENTAIRE]);
        // $ID_TYPE_ACT = trim($GET[DOA_Tache_Action_Popup::$id_ID_TYPE_ACT]);
        $ID_TYPE_ACT = 0;
        
        $modeModif = ($ID_ACTION != - 1);
        
        $reqDoa = SqlDoa::rqGetInfoSuiviDoa($ID_OBJET)->Trouve1();
        //
        // Vérification des données
        //
        if ('' === $LIB)
            $messageErreur = Trad('Vous devez entrer un libellé.');
        elseif (mb_strlen($LIB) > 120)
            $messageErreur = Trad('Le libellé doit faire moins de 120 caractères.');
        
        if ('' === $messageErreur)
            if (mb_strlen($COMMENTAIRE) > 3000)
                $messageErreur = Trad('Le commentaire doit faire moins de 3000 caractères.');
        
        //
        // Enregistrement des données
        //
        if ($messageErreur == '') {
            if ($modeModif) {
                if (! SqlDoaTache::rqDOA_ModifAction($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $LIB, $COMMENTAIRE, $ID_TYPE_ACT)->ExecuteSql())
                    $messageErreur = Trad('Une erreur s\'est produite pendant la modification de l\'action.');
            } else {
                $pileSql = new PileSql(DB_OXASQLDB);
                // On insère l'action
                if ($pileSql->AddRequeteSql(SqlDoaTache::rqDOA_AjoutAction($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $LIB, $COMMENTAIRE, $ID_TYPE_ACT))) {
                    // Ici, pas de transaction possible pour l'ajout de l'acteur ;
                    // Puisqu'on fait une lecture après un insert, SQL SERVER s'auto-verrouille
                    
                    $reqSqlAction = SqlDoaTache::rqDOA_chercheActionParLibelle($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $LIB)->Trouve1();
                    if (is_array($reqSqlAction)) {
                        $ID_ACTION = $reqSqlAction['ID_ACTION'];
                        // On recherche les informations relatives au responsable de la tâche
                        if ($reqSqlTache = SqlDoaTache::rqDOA_Tache_Liste($TYPE_OBJET, $ID_OBJET, null, $ID_TACHE)->Trouve1()) {
                            $RESPONSABLE = $reqSqlTache['RESPONSABLE'];
               
                            if (BoolSql($reqDoa['MODELE'])) { // Si MODELE alors RIEN a créer en plus DECIS YA le 23/10/2015
                                $arrayAjoutActeur = array(
                                    DOA_Tache_PopupAjoutActeur::$id_TYPE_OBJET => $TYPE_OBJET,
                                    DOA_Tache_PopupAjoutActeur::$id_ID_OBJET => $ID_OBJET,
                                    DOA_Tache_PopupAjoutActeur::$id_ID_TACHE => $ID_TACHE,
                                    DOA_Tache_PopupAjoutActeur::$id_ID_ACTEUR => - 1,
                                    DOA_Tache_PopupAjoutActeur::$id_ID_ACTION => $ID_ACTION,
                                    DOA_Tache_PopupAjoutActeur::$id_CODE_ACTEUR => '',
                                    DOA_Tache_PopupAjoutActeur::$id_TYPE_ELEM => ($RESPONSABLE == DOA::TACHE_CODE_PROPRIETAIRE) ? DOA::ACTEUR_TACHE_CODE_PROPRIETAIRE : (($RESPONSABLE == DOA::TACHE_CODE_PRESCRIPTEUR) ? DOA::ACTEUR_TACHE_CODE_PRESCRIPTEUR : $RESPONSABLE),
                                    DOA_Tache_PopupAjoutActeur::$id_ROLE => 'R'
                                );
                            } else {
                                $arrayAjoutActeur = array(
                                    DOA_Tache_PopupAjoutActeur::$id_TYPE_OBJET => $TYPE_OBJET,
                                    DOA_Tache_PopupAjoutActeur::$id_ID_OBJET => $ID_OBJET,
                                    DOA_Tache_PopupAjoutActeur::$id_ID_TACHE => $ID_TACHE,
                                    DOA_Tache_PopupAjoutActeur::$id_ID_ACTEUR => - 1,
                                    DOA_Tache_PopupAjoutActeur::$id_ID_ACTION => $ID_ACTION,
                                    DOA_Tache_PopupAjoutActeur::$id_CODE_ACTEUR => $RESPONSABLE,
                                    DOA_Tache_PopupAjoutActeur::$id_ROLE => 'R'
                                );
                            }
                            
                            // On créé un nouvel acteur pour la tâche, qui est de type responsable
                            /**
                             * Dossier 26914 Dans le cas de sélection à saisir dans le DOA alors pas de creation de DOA_ACTION_ACTEURS
                             */
                            if (! BoolSql($reqDoa['MODELE']) || $RESPONSABLE != '') {
                                $resultatAjoutActeur = DOA_Tache_PopupAjoutActeur::EnregistrerDonnees($pileSql, $arrayAjoutActeur);
                                if ('' !== $resultatAjoutActeur['messageErreur']) {
                                    $messageErreur = $resultatAjoutActeur['messageErreur'];
                                    $pileSql->setPileError();
                                }
                            }
                        }
                    }
                }
                
                if (! $pileSql->Commit()) {
                    if ($messageErreur == '')
                        $messageErreur = Trad('Une erreur s\'est produite pendant l\'ajout de l\'action.');
                }
            }
        }
        
        return array(
            'messageErreur' => $messageErreur,
            'modeModif' => $modeModif,
            'ID_ACTION' => $ID_ACTION
        );
    }

    public static function SupprimerActionActeur(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION, & $ID_ACTEUR)
    {
        $messageErreur = '';
        
        if (! SqlDoaTache::rqDOA_Tache_SupprimerActeur($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_ACTEUR)->ExecuteSql())
            $messageErreur = Trad('Erreur pendant la suppression de l\'acteur');
        
        return array(
            'messageErreur' => $messageErreur
        );
    }

    public static function SupprimerActionDonnees($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_DONNEE)
    {
        $messageErreur = '';
        
        $erreur = false;
        $pileSql = new PileSql(DB_OXASQLDB);
        if ($pileSql->AddRequeteSql(SqlDoaTache::rqDOA_Tache_ActionSupprimeActionDon($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_DONNEE)))
            if ($pileSql->AddRequeteSql(SqlDoaTache::rqDOA_Tache_ActionSupprimeActionData($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_DONNEE)))
                if ($pileSql->AddRequeteSql(SqlDoaTache::rqDOA_Tache_ActionSupprimeActionRecord($ID_OBJET, $ID_TACHE, $ID_DONNEE)))
                    if ($pileSql->AddRequeteSql(SqlDoaTache::rqDOA_Tache_ActionSupprimeActionRecordVal($ID_OBJET, $ID_TACHE, $ID_DONNEE)))
                        $pileSql->Commit();
                    else
                        $erreur = true;
                else
                    $erreur = true;
            else
                $erreur = true;
        else
            $erreur = true;
        
        if ($erreur)
            $messageErreur = Trad('Une erreur s\'est produite pendant la suppression des données');
        
        return array(
            'messageErreur' => $messageErreur
        );
    }

    public static function ModifierAttribut(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION, & $ID_DONNEE, & $ID_DATA, & $champ, & $valeur)
    {
        $messageErreur = '';
        
        // Est-ce que nous sommes en modification ou en ajout?
        if ($reqSql = SqlDoaTache::rqDOA_Tache_InfoDonnees($TYPE_OBJET, $ID_OBJET, $ID_ACTION, $ID_DONNEE, $ID_DATA)->Trouve1()) {
            // Nous sommes en modification
            if (! SqlDoaTache::rqDOA_Tache_Modifier_Attribut($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_DATA, $champ, $valeur)->ExecuteSql())
                $messageErreur = Trad('Une erreur a eu lieu pendant l\'enregistrement de la modification.');
        } else {
            // Nous sommes en ajout
            if ('AFFICHEE' == $champ) {
                $AFFICHEE = $valeur;
                $MODIFIABLE = false;
            } else {
                $AFFICHEE = true;
                $MODIFIABLE = $valeur;
            }
            if (! SqlDoaTache::rqDOA_Tache_Action_AjoutData($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_DONNEE, $ID_DATA, $AFFICHEE, $MODIFIABLE)->ExecuteSql())
                $messageErreur = Trad('Une erreur a eu lieu pendant l\'enregistrement de la modification.');
        }
        return array(
            'messageErreur' => $messageErreur
        );
    }
}