<?php

class GestFourniss_Adresses
{

    public static $id_onglet = 'pres_dyn_onglet_Adresses';

    public static $page_php = 'gest_fourniss_adresses.php';

    public static $id_Xml = 'ListAdresses';

    public static $fichier_xml = 'application/xsl/gest_fourniss/gest_fourniss_adresses.xsl';

    public static function &BuildXmlUneAdresse(& $codeFrs, & $tableauAdresse, $modifiableGlobal, & $listePays)
    {
        $idAdresse = urlencode($tableauAdresse['COD_ADR']['#text']);
        $lgChampTexte = GestFourniss::$longueurChampTexte;
        
        foreach ($tableauAdresse as $key => &$value) {
            if (is_array($value)) {
                $name = $key . '_' . $idAdresse;
                $longueurMax = ControleSaisie::getLongueurChamp($value['!Format']);
                $size = $longueurMax;
                $modifiable = (BoolSql($value['!Modifiable']) && 'L' != $modifiableGlobal);
                $valeur = array_key_exists('#text', $value) ? $value['#text'] : '';
                $jsCheckValeur = 'TraiteUrl(\'' . GestFourniss_Adresses::$page_php . '?action=checkValue&codeFrs=' . $codeFrs . '\', this);';
                $libelle_champ = FicheFournisseurXml::Transcode_Champs($key);
            } else {
                $valeur = $value;
            }
            switch ($key) {
                case '!Etat':
                    $name = 'ETAT_' . $idAdresse;
                    $adrCourante['ETAT'] = array(
                        '!name' => $name,
                        '!value' => $valeur
                    );
                    break;
                case 'CODPAYS':
                    $adrCourante[$key] = array(
                        '!libelle_chp' => $libelle_champ,
                        '!name' => $name,
                        '!actif' => $modifiable,
                        '!value' => $valeur,
                        '!action' => $jsCheckValeur,
                        'liste' => array(
                            'option' => $listePays
                        )
                    );
                    break;
                case 'ADRFOUR':
                    $adrCourante[$key] = array(
                        '!libelle_chp' => $libelle_champ,
                        '!name' => $name,
                        '!actif' => $modifiable,
                        '!value' => $valeur,
                        '!maxlength' => $longueurMax,
                        '!rows' => 2,
                        '!cols' => 35,
                        '!action' => $jsCheckValeur
                    );
                    break;
                case 'COD_ADR':
                case 'RAISOC':
                case 'CP':
                case 'VILLE':
                case 'TELEPHONE':
                case 'TELEX':
                case 'FAX':
                case 'EMAIL':
                    $adrCourante[$key] = array(
                        '!libelle_chp' => $libelle_champ,
                        '!name' => $name,
                        '!actif' => $modifiable,
                        '!value' => $valeur,
                        '!maxlength' => $longueurMax,
                        '!size' => $lgChampTexte,
                        '!action' => $jsCheckValeur
                    );
                    
                    break;
            }
        }
        
        return $adrCourante;
    }

    public static function &BuildXml($codeFrs, $mode)
    {
        $tableauXml = FicheFournisseurXml::ChargeSession($codeFrs);
        $typeFour = FicheFournisseurXml::GetTypeFournisseur($tableauXml);
        $modeCreation = FicheFournisseurXml::GetIsModeCreation($tableauXml);
        
        $modifiableLocal = BoolSql($tableauXml[GestFourniss_Adresses::$id_Xml]['!Modifiable']);
        if ('L' == $mode) {
            $modeLocal = 'L';
        } elseif ('LE' == $mode) {
            if ($_SESSION['AdminFournisseur'] || ('F' == $typeFour && ($_SESSION['AuthModifFournisseur'] || $_SESSION['GestionAdrFournisseur'])) || ('P' == $typeFour && ($_SESSION['AuthModifProspect'] || $_SESSION['GestionAdrProspect'])) || $modifiableLocal)
                $modeLocal = 'LE';
            else
                $modeLocal = 'L';
        }
        
        // 'liste' => array('option' => ListeComboGeneral::getArrayListePays())
        $listePays = ListeComboGeneral::getArrayListePays();
        
        if (is_array($tableauXml[GestFourniss_Adresses::$id_Xml]['Adresse']))
            foreach ($tableauXml[GestFourniss_Adresses::$id_Xml]['Adresse'] as $tmpAdresse)
                if (array_key_exists('!Etat', $tmpAdresse))
                    if ('S' != $tmpcontact['!Etat'])
                        $panelAdresses[] = GestFourniss_Adresses::BuildXmlUneAdresse($codeFrs, $tmpAdresse, $modeLocal, $listePays);
        
        $array['content']['adresses'] = $panelAdresses;
        
        // Pourquoi est-ce qu'on n'utilise pas "this" ou "document.forms.FORM_GEST_FOURNISS.elements[0]" ?
        // => parce que IE9 ne gère pas les éléments ajoutés dynamiquement de la même manière que les autres navigateurs
        $array['content']['!onclick_ajouter'] = ('L' != $modeLocal) ? 'TraiteUrl(\'' . GestFourniss_Adresses::$page_php . '?action=Ajoute&codeFrs=' . urlencode($codeFrs) . '&id=' . $name . '\', document.getElementById(\'tabInProgress\'));' : '';
        $array['content']['!mode'] = $mode;
        
        return $array;
    }

    public static function &CheckValue(& $codeFrs, & $codeTmp, & $value)
    {
        // Ne pas autoriser le code 'REG'?
        $valeurModifiee = '';
        $messageErreur = '';
        
        $values = explode('_', $codeTmp);
        $code = $values[0];
        $id = $values[count($values) - 1];
        
        $tableauXml = FicheFournisseurXml::ChargeSession($codeFrs);
        
        // On doit récupérer le format de la valeur ;
        // en théorie, on a toujours une adresse l'id 0
        $format = $tableauXml['ListAdresses']['Adresse'][0][$code]['!Format'];
        $objet = '';
        
        // On passe par la vérification standard
        $resultatTest = ControleSaisie::checkValueObjet($objet, $value);
        
        $valeurModifiee = $resultatTest['valeurModifiee'];
        $messageErreur = $resultatTest['messageErreur'];
        
        // Vérification spécialisée de l'écran
        if ('' == $messageErreur) {
            switch ($code) {
                case 'EMAIL':
                    if (! ControleSaisie::checkMail($value))
                        $messageErreur = Trad('L\'e-mail renseigné n\'est pas correct.');
                    break;
            }
        }
        if ('' == $messageErreur) {
            // On met à jour l'info dans le tableau xml
            foreach ($tableauXml['ListAdresses']['Adresse'] as & $adresse)
                if ($id == $adresse['COD_ADR']['#text']) {
                    // Nous avons trouvé le bon contact
                    $adresse[$code]['#text'] = $value;
                    FicheFournisseurXml::SauvegardeSession($tableauXml);
                    break;
                }
        }
        
        $result = array(
            'valeurModifiee' => $valeurModifiee,
            'messageErreur' => & $messageErreur
        );
        return $result;
    }
}
