<?php

/**
 * Classe permettant la gestion des hiérarchie des tâches
 */
class DOA_Tache_PopupAjoutH
{

    public static $id_FORMULAIRE = 'FORMULAIRE_AJOUT_TACHEH';

    public static $id_TYPE_OBJET = 'TYPE_OBJET';

    public static $id_ID_OBJET = 'ID_OBJET';

    public static $id_ID_TACHE_H = 'ID_TACHE_H';

    public static $id_ID_PARENT = 'ID_PARENT';

    public static $id_LIB = 'LIB';

    public static $id_DESCR = 'DESCR';

    public static $id_COLOR = 'COLOR';

    /**
     *
     * @param unknown $TYPE_OBJET
     * @param unknown $ID_OBJET
     * @param string $ID_TACHE_H
     *            (Passé pour rendre l'information active)
     * @return multitype:number string multitype:unknown Ambigous <>
     */
    public static function &getXmlListeTacheH(& $TYPE_OBJET, & $ID_OBJET, $ID_TACHE_H = null)
    {
        $array[] = array(
            '!ID_OBJET' => 0,
            '!LIB' => 'Racine'
        );
        
        DOA_Tache_PopupAjoutH::makeListeTacheH($array, 0, $TYPE_OBJET, $ID_OBJET, 0);
        return $array;
    }

    /**
     *
     * @param unknown $array
     * @param unknown $decal
     * @param unknown $TYPE_OBJET
     * @param unknown $ID_OBJET
     * @param unknown $ID_PARENT
     */
    private static function makeListeTacheH(& $array, $decal, & $TYPE_OBJET, & $ID_OBJET, $ID_PARENT)
    {
        if ($reqSql = SqlDoaTache::rqDOA_Tache_GetAllTacheH($TYPE_OBJET, $ID_OBJET, $ID_PARENT)->TrouveTous()) {
            foreach ($reqSql as & $element) {
                $array[] = array(
                    '!ID_OBJET' => $element['ID_TACHE_H'],
                    '!LIB' => str_repeat('- ', $decal) . $element['LIB'],
                    '!tacheExiste' => $element['HASFILS']
                );
                DOA_Tache_PopupAjoutH::makeListeTacheH($array, $decal + 1, $TYPE_OBJET, $ID_OBJET, $element['ID_TACHE_H']);
            }
        }
    }

    public static function &BuildXml($ID_TACHE_H)
    {
        $array = null;
        
        $clSession = DoaBibSession::getSession();
        $TYPE_OBJET = $clSession->getTypeObject();
        $ID_OBJET = $clSession->getIdObject();
        
        if (is_null($ID_TACHE_H) || '' == $ID_TACHE_H) {
            // Valeurs par défaut
            $ID_TACHE_H = '-1';
            $LIB = '';
            $DESCR = '';
            $COLOR = '';
            
            $cl = DoaBibSession::getSession();
            $LAST_ID_TACHE_H = $cl->getProperties(DOA_Tache::PROP_SESS_ID_TACHE_H);
            
            if ($reqSql = SqlDoaTache::rqDOA_TacheH_getInfo($TYPE_OBJET, $ID_OBJET, $LAST_ID_TACHE_H)->Trouve1())
                $ID_PARENT = $reqSql['ID_PARENT'];
            else
                $ID_PARENT = '';
        } else {
            // On cherche les valeurs dans la base
            $reqSql = SqlDoaTache::rqDOA_TacheH_getInfo($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H)->Trouve1();
            $ID_PARENT = $reqSql['ID_PARENT'];
            $LIB = $reqSql['LIB'];
            $DESCR = $reqSql['DESCR'];
            $COLOR = $reqSql['COLOR'];
        }
        
        $array['TYPE_OBJET'] = array(
            '!id' => DOA_Tache_PopupAjoutH::$id_TYPE_OBJET,
            '!value' => $TYPE_OBJET
        );
        $array['ID_OBJET'] = array(
            '!id' => DOA_Tache_PopupAjoutH::$id_ID_OBJET,
            '!value' => $ID_OBJET
        );
        $array['ID_TACHE_H'] = array(
            '!id' => DOA_Tache_PopupAjoutH::$id_ID_TACHE_H,
            '!value' => $ID_TACHE_H
        );
        
        $array['ID_PARENT'] = array(
            '!id' => DOA_Tache_PopupAjoutH::$id_ID_PARENT,
            '!value' => $ID_PARENT,
            'option' => DOA_Tache_PopupAjoutH::GetXmlListeTacheH($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H)
        );
        $array['LIB'] = array(
            '!id' => DOA_Tache_PopupAjoutH::$id_LIB,
            '!value' => $LIB
        );
        $array['DESCR'] = array(
            '!id' => DOA_Tache_PopupAjoutH::$id_DESCR,
            '!value' => $DESCR
        );
        $array['COLOR'] = array(
            '!id' => DOA_Tache_PopupAjoutH::$id_COLOR,
            '!value' => $COLOR
        );
        $array['FORM'] = array(
            '!ID' => DOA_Tache_PopupAjoutH::$id_FORMULAIRE,
            '!onclick' => (Param::canCreateDoaModele() ? 'TraiteAsync(\'DOA_Tache.php?action=EnregistrerTacheH\',document.' . DOA_Tache_PopupAjoutH::$id_FORMULAIRE . '.elements[0],\'\',\'' . cnv_to_javascript(trad('Enregistrement des informations...')) . '\');return false;' : '')
        );
        return $array;
    }

    public static function VerifieUniciteLibelle($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H, & $LIB)
    {
        $reqSql = SqlDoaTache::rqDOA_Tache_VerifieUniciteLibH($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H, $LIB)->Trouve1();
        return ('0' == $reqSql['nb']);
    }

    public static function EnregistrerDonnees($GET)
    {
        $messageErreur = '';
        //
        // Récupération des données
        //
        $TYPE_OBJET = trim(getValue(DOA_Tache_PopupAjoutH::$id_TYPE_OBJET));
        $ID_OBJET = trim(getValue(DOA_Tache_PopupAjoutH::$id_ID_OBJET));
        $ID_TACHE_H = trim(getValue(DOA_Tache_PopupAjoutH::$id_ID_TACHE_H));
        $ID_PARENT = trim(getValue(DOA_Tache_PopupAjoutH::$id_ID_PARENT));
        $LIB = trim(getValue(DOA_Tache_PopupAjoutH::$id_LIB));
        $DESCR = trim(getValue(DOA_Tache_PopupAjoutH::$id_DESCR));
        $COLOR = trim(getValue(DOA_Tache_PopupAjoutH::$id_COLOR));
        $modeModif = ('-1' !== $ID_TACHE_H);
        
        //
        // Vérification des données
        //
        if ('' === $LIB) {
            $messageErreur = Trad('Vous devez remplir le libellé.');
        } elseif (mb_strlen($LIB) > 120) {
            $messageErreur = Trad('Le libellé doit faire moins de 120 caractères.');
        } elseif (! DOA_Tache_PopupAjoutH::VerifieUniciteLibelle($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H, $LIB)) {
            $messageErreur = Trad('Ce libellé existe déjà pour cet objet.');
        }
        if ('' === $messageErreur)
            if (mb_strlen($DESCR) > 3000)
                $messageErreur = Trad('La description doit faire moins de 3000 caractères.');
        
        if ('' === $messageErreur)
            if ('' != $COLOR)
                if (mb_strlen($COLOR) > 20)
                    $messageErreur = Trad('La couleur doit faire moins de 20 caractères.');
        
        if (0 != $ID_TACHE_H)
            if ($ID_TACHE_H == $ID_PARENT)
                $messageErreur = Trad('Un élément ne peut pas être son propre parent.');
        
        //
        // Enregistrement des données
        //
        
        if ($messageErreur == '') // Dossier 26987
            if ($modeModif) {
                if (! SqlDoaTache::rqDOA_TacheH_Modif($TYPE_OBJET, $ID_OBJET, $ID_TACHE_H, $ID_PARENT, $LIB, $DESCR, $COLOR)->ExecuteSql())
                    $messageErreur = Trad('Une erreur s\'est produite pendant la modification de l\'élément.');
            } else {
                if (! SqlDoaTache::rqDOA_TacheH_Ajout($TYPE_OBJET, $ID_OBJET, $ID_PARENT, $LIB, $DESCR, $COLOR)->ExecuteSql())
                    $messageErreur = Trad('Une erreur s\'est produite pendant l\'ajout de l\'élément.');
            }
        
        return array(
            'messageErreur' => $messageErreur
        );
    }
}