<?php

class DOA_BDD
{

    static $tableSector = array(
        'SECTIMPU',
        'CODGEST',
        'CODECOMP',
        'SSCPTANA',
        'DIRECTIO',
        'CENTRANA',
        'NATANA',
        'UO'
    );

    /**
     *
     * @return Ambigous <multitype:, mixed, NULL, string>
     */
    public static function &ListeObjetsPourDonnees()
    {
        if ($reqSql = SqlDoaBdd::rqGetListeObjetsPourDonnees()->TrouveTous())
            foreach ($reqSql as & $element)
                $element['LIBELLE'] = trad($element['LIBELLE'], 'notrad');
        
        return $reqSql;
    }

    /**
     *
     * @param string $BDD_TABLE
     * @return Ambigous <multitype:string , multitype:, mixed, NULL, string>
     */
    public static function &ListeObjetsPourObjetData($BDD_TABLE = null)
    {
        if ($array = SqlDoaBdd::rqGetListeObjetsPourObjetData($BDD_TABLE)->TrouveTous())
            // danger => $element['LIBELLE'] = trad($element['LIBELLE'],'notrad'); il faut pas traduire cette table
            foreach ($array as & $element)
                $element['LIBELLE'] = trad($element['LIBELLE'], 'notrad');
        
        // On vérifie si les conditions sont remplies pour intégrer les axes d'imputations
        $OBJET = 'SECTIMPU';
        $champsCles = DOA_BDD::GetListeChampsClePourObjet($OBJET);
        if (1 == count($champsCles))
            $array[] = array(
                'BDD_TABLE' => $OBJET
            );
        $OBJET = 'SSCPTANA';
        $champsCles = DOA_BDD::GetListeChampsClePourObjet($OBJET);
        if (1 == count($champsCles))
            $array[] = array(
                'BDD_TABLE' => $OBJET
            );
        $OBJET = 'SSCPTANA';
        $champsCles = DOA_BDD::GetListeChampsClePourObjet($OBJET);
        if (1 == count($champsCles))
            $array[] = array(
                'BDD_TABLE' => $OBJET
            );

        return $array;
    }

    /**
     *
     * @param unknown $nom_table
     * @return boolean
     */
    public static function &IsTableCS($nom_table)
    {
        $tableCS = SqlDoaBdd::rqIsObjetTableCS(DOA_Referentiel::getObjectDataSysteme($nom_table))->Trouve1();
        $nom_table = (is_array($tableCS) && '1' === $tableCS['nb']);
        return $nom_table;
    }

    public static function &getListeTableUser($TYPE_OBJET, $ID_OBJET, $ID_DONNEE, $OBJET_DATA)
    {
        $array = null;
        if (! is_null($OBJET_DATA) && $OBJET_DATA != '' && ($arrayCol = SqlDoaBdd::rqGetListeTableUser($TYPE_OBJET, $ID_OBJET, $ID_DONNEE, $OBJET_DATA)->TrouveTous()))
            foreach ($arrayCol as & $value)
                $array[] = array(
                    'ID_DATA' => $value['ID_DATA'],
                    'NOM_DATA' => $value['NOM_DATA']
                );
        
        return $array;
    }

    /**
     * VPA INFO SECTO voir dans le futur pour rapatrier la liste des tables en question
     *
     * @param unknown $objet
     * @return multitype:string unknown
     */
    static function &GetListeChampsClePourObjet($objetBase)
    {
        $array = array();
        /**
         * Transfert de l'objet demande en objet systeme
         *
         * Exemple cela permet de transferer une demande objet virtuel type CENTRE_F en CENTRE car c'est les champs de la table qui sont visé
         */
        $objet = DOA_Referentiel::getObjectDataSysteme($objetBase);
        // Est-on sur une table standard?
        if ($arrayCol = SqlDoaBdd::rqGetListeChampsClePourTable($objet)->TrouveTous()) {
            foreach ($arrayCol as & $value) {
                $colonne = $value['BDD_COL'];
                
                $array[] = $colonne;
            }
        } else {
            // est-on sur une table CS?
            if (DOA_BDD::IsTableCS($objet)) {
                /**
                 * On est sur une table CS, est-elle sectorisée?
                 * ATTENTION La notion de CS secto pas secto est défini par le client.
                 */
                $CSSecto = SqlDoaBdd::rqIsTableCSSecto($objet)->Trouve1();
                if ('1' === $CSSecto['nb'])
                    $array[] = 'COD_STE';
                $array[] = 'CODEDICO';
            }
        }
        return $array;
    }

    public static function &GetTypeChamp(& $BDD_TABLE, & $BDD_COL)
    {
        if (DOA_BDD::IsTableCS($BDD_TABLE)) {
            $resultat = DOA_Data::TYPE_ALPHA;
        } else {
            $reqSql = SqlDoaBdd::rqGetInfoChamp(DOA_Referentiel::getObjectDataSysteme($BDD_TABLE), $BDD_COL)->Trouve1();
            $resultat = (is_array($reqSql)) ? $reqSql['BDD_TYPE'] : '';
        }
        return $resultat;
    }

    public static function &GetListeChampsNonCles($BDD_TABLE)
    {
        $array = null;

        if (! DOA_BDD::IsTableCS($BDD_TABLE)) {
            // On cherche les champs clé
            $champsCleVal = null;
            if ($champsCle = DOA_BDD::GetListeChampsClePourObjet($BDD_TABLE))
                foreach ($champsCle as $key => $value)
                    $champsCleVal[$value] = $value;

            // On cherche tous les champs de la table

            if ($reqSql = SqlDoaBdd::rqDOAListeChampsTable(DOA_Referentiel::getObjectDataSysteme($BDD_TABLE))->TrouveTous())
            {
                foreach ($reqSql as $key => $value)
                    // On ajoute toutes les colonnes sauf les clés
                    if (is_null($champsCleVal) || ! array_key_exists($value['BDD_COL'], $champsCleVal))
                        $array[] = array(
                            '!CODE' => $value['BDD_COL'],
                            '!LIBELLE' => $value['BDD_COL']
                        );
            }
        } else {

            // $array[] = array( '!CODE' => 'TYPEDICO', '!LIBELLE' => 'TYPEDICO');
            // $array[] = array( '!CODE' => 'CODEDICO', '!LIBELLE' => 'CODEDICO'); // CODEDICO est un champ clé
            $array[] = array(
                '!CODE' => 'LIB01DICO',
                '!LIBELLE' => 'LIB01DICO'
            );
            $CSSecto = SqlDoaBdd::rqIsTableCSSecto($BDD_TABLE)->Trouve1();
            if ('1' === $CSSecto['nb'])
                $array[] = array(
                    '!CODE' => 'COD_STE',
                    '!LIBELLE' => 'COD_STE'
                );
        }

        return $array;
    }
}