<?php

class DOA_Tache_PopupAjoutDonnee
{

    public static $id_FORMULAIRE = 'FORMULAIRE_AJOUT_DONNEE';

    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_ID_DONNEE = 'ID_DONNEE';

    public static $id_ID_CAT = 'ID_CAT';

    //
    // Javascript
    //
    public static function &JavascriptOnChangeCategorie(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION)
    {
        $js = 'Traite(\'DOA_Tache.php?action=changeCategorie' . '&TYPE_OBJET=' . $TYPE_OBJET . '&ID_OBJET=' . $ID_OBJET . '&ID_TACHE=' . $ID_TACHE . '&ID_ACTION=' . $ID_ACTION . '\',this);';
        return $js;
    }

    public static function &JavascriptChangeCategorie(& $TYPE_OBJET, & $ID_OBJET, & $ID_CAT, & $ID_TACHE, & $ID_ACTION)
    {
        $listeDonnees = DOA_Tache_PopupAjoutDonnee::BuildXmlListeDonnees($TYPE_OBJET, $ID_OBJET, $ID_CAT, $ID_TACHE, $ID_ACTION);
        $js = '';
        if (is_array($listeDonnees))
            foreach ($listeDonnees as &$value) {
                $js .= '<option value=\'' . cnv_to_javascript($value['!ID']) . '\'>' . $value['!LIB'] . '</option>';
            }
        Affichage::setAttribut(DOA_Tache_PopupAjoutDonnee::$id_ID_DONNEE, 'innerHTML', $js);
    }

    //
    // Liste utilisées
    //
    public static function &BuildXmlListeCategories(& $TYPE_OBJET, & $ID_OBJET, & $ID_TACHE, & $ID_ACTION)
    {
        $array = null;
        
        if ($reqSql = SqlDoaTache::rqDOA_TacheGetListeCategoriePourObjet($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION)->TrouveTous())
            foreach ($reqSql as & $value)
                $array[] = array(
                    '!ID' => & $value['ID'],
                    '!LIB' => & $value['LIB']
                );
        return $array;
    }

    public static function &BuildXmlListeDonnees(& $TYPE_OBJET, & $ID_OBJET, & $ID_CAT, & $ID_TACHE, & $ID_ACTION)
    {
        $array = null;
        
        if ($reqSql = SqlDoaTache::rqDOA_TacheGetListeDonneesPourCategorie($TYPE_OBJET, $ID_OBJET, $ID_CAT, $ID_TACHE, $ID_ACTION)->TrouveTous())
            foreach ($reqSql as $value)
                $array[] = array(
                    '!ID' => & $value['ID_DONNEE'],
                    '!LIB' => & $value['NOM_DONNEE']
                );
        return $array;
    }

    //
    // Affichage de la popup
    //
    public static function &BuildXml(& $ID_TACHE, & $ID_ACTION)
    {
        $clSession = DoaBibSession::getSession();
        $TYPE_OBJET = $clSession->getTypeObject();
        $ID_OBJET = $clSession->getIdObject();
        
        $ID_DONNEE = '';
        
        $array['TYPE_OBJET'] = array(
            '!id' => DOA_Tache_PopupAjoutDonnee::$id_TYPE_OBJET,
            '!value' => $TYPE_OBJET
        );
        $array['ID_OBJET'] = array(
            '!id' => DOA_Tache_PopupAjoutDonnee::$id_ID_OBJET,
            '!value' => $ID_OBJET
        );
        $array['ID_TACHE'] = array(
            '!id' => DOA_Tache_PopupAjoutDonnee::$id_ID_TACHE,
            '!value' => $ID_TACHE
        );
        $array['ID_ACTION'] = array(
            '!id' => DOA_Tache_PopupAjoutDonnee::$id_ID_ACTION,
            '!value' => $ID_ACTION
        );
        
        /**
         * Liste des catégorie ayant au moins une data poossible a pouvoir ajouter
         */
        if ($listeCategories = DOA_Tache_PopupAjoutDonnee::BuildXmlListeCategories($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION)) {
            $ID_CAT = $listeCategories[0]['!ID'];
            $array['ID_CAT'] = array(
                '!id' => DOA_Tache_PopupAjoutDonnee::$id_ID_CAT,
                '!value' => $ID_CAT,
                'listeValeurs' => $listeCategories,
                '!onchange' => DOA_Tache_PopupAjoutDonnee::JavascriptOnChangeCategorie($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION)
            );
        } else {
            $ID_CAT = - 1;
        }
        
        if ($listeDonnees = DOA_Tache_PopupAjoutDonnee::BuildXmlListeDonnees($TYPE_OBJET, $ID_OBJET, $ID_CAT, $ID_TACHE, $ID_ACTION)) {
            $array['ID_DONNEE'] = array(
                '!id' => DOA_Tache_PopupAjoutDonnee::$id_ID_DONNEE,
                '!value' => $ID_DONNEE,
                'listeValeurs' => $listeDonnees
            );
        }
        
        $array['FORM'] = array(
            '!ID' => DOA_Tache_PopupAjoutDonnee::$id_FORMULAIRE,
            '!onclick' => (Param::canCreateDoaModele() ? 'Traite(\'DOA_Tache.php?action=EnregistrerActionDonnee\',document.' . DOA_Tache_PopupAjoutDonnee::$id_FORMULAIRE . '.elements[0]);return false;' : '')
        );
        return $array;
    }

    //
    // Enregistrement des données
    //
    public static function EnregistrerDonnees($GET)
    {
        $messageErreur = '';
        
        $TYPE_OBJET = trim($GET[DOA_Tache_PopupAjoutDonnee::$id_TYPE_OBJET]);
        $ID_OBJET = trim($GET[DOA_Tache_PopupAjoutDonnee::$id_ID_OBJET]);
        $ID_TACHE = trim($GET[DOA_Tache_PopupAjoutDonnee::$id_ID_TACHE]);
        $ID_ACTION = trim($GET[DOA_Tache_PopupAjoutDonnee::$id_ID_ACTION]);
        $ID_DONNEE = trim($GET[DOA_Tache_PopupAjoutDonnee::$id_ID_DONNEE]);
        
        // Est-ce que la donnée existe déjà?
        $reqSqlUniq = SqlDoaTache::rqODA_Tache_Action_TestExistenceActionDonnee($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_DONNEE)->Trouve1();
        if (0 == $reqSqlUniq['nb']) {
            // Si non, on insère
            $pileSql = new PileSql(DB_OXASQLDB);
            $requeteOk = true;
            if ($pileSql->AddRequeteSql(SqlDoaTache::rqDOA_Tache_Action_AjoutDonnee($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_DONNEE))) {
                // On insère aussi les DATA
                $reqSqlDonnee = SqlDoaTache::rq_DOA_TacheListeDATAdeDONNEE($TYPE_OBJET, $ID_OBJET, $ID_DONNEE)->TrouveTous();
                if (is_array($reqSqlDonnee))
                    foreach ($reqSqlDonnee as $value) {
                        $ID_DATA = $value['ID_DATA'];
                        
                        $LIE_A_OBJET = BoolSql($value['LIE_A_OBJET']);
                        $FLAG_ID_OBJET = BoolSql($value['FLAG_ID_OBJET']);
                        
                        $DATA_LIE_A_OBJ = BoolSql($value['DATA_LIE_A_OBJ']);
                        $ID_DATA_LIEE = $value['ID_DATA_LIEE'];
                        
                        $AFFICHEE = true; // Tout est affichable par défaut
                        
                        if (! $LIE_A_OBJET && ! $DATA_LIE_A_OBJ)
                            $MODIFIABLE = true;
                        else
                            $MODIFIABLE = ! ($LIE_A_OBJET && ! $FLAG_ID_OBJET) || ($DATA_LIE_A_OBJ && ($ID_DATA_LIEE != 0));
                        
                        if (! $pileSql->AddRequeteSql(SqlDoaTache::rqDOA_Tache_Action_AjoutData($TYPE_OBJET, $ID_OBJET, $ID_TACHE, $ID_ACTION, $ID_DONNEE, $ID_DATA, $AFFICHEE, $MODIFIABLE))) {
                            $messageErreur = Trad('Une erreur s\'est produite pendant l\'ajout des data de données.');
                            $requeteOk = false;
                            break;
                        }
                    }
                if ($requeteOk)
                    $pileSql->Commit();
            } else {
                $messageErreur = Trad('Une erreur s\'est produite pendant l\'ajout des données.');
            }
        } else {
            // Si oui, on ne fait rien
        }
        
        return array(
            'messageErreur' => $messageErreur
        );
    }
}
