<?php

abstract class DocumentsRattaches
{

    public static $callback_php = 'document_rattaches.php';

    public static $callback_php_old = 'ajout_doc_rattaches.php';

    public static $fichier_xsl = 'application/xsl/outils/document_rattaches.xsl';

    public static $actAffichePopup = 'AffichePopup';

    public static $actControler = 'controlerDocAtt';

    public static $actEnregistrer = 'Enregistrer';

    public static $form_id = 'form_doc_att';

    public static $fakeframeId = 'frm_res';

    public static $idTitreDoc = 'titreDoc';

    public static $idTypeDoc = 'typeDoc';

    public static $idFichierDoc = 'fichierDoc';

    public static $idDateParution = 'dateParution';

    public static $idDateValidite = 'dateValidite';

    public static $idAuteur = 'auteur';

    public static $idCentre = 'centre';

    public static $idCommentaire = 'commentaire';

    private $popup_title;

    private $titrePremiereLigne;

    private $champsCaches;

    private $formId;

    private $contexte;

    private $typeItem;

    private $codeItem;

    private $id_doc;

    private $id_bloc;

    private $titreDoc;

    protected $minWidth;

    function __construct()
    {
        $this->popup_title = trad('Ajout d\'un document rattaché');
        $this->titrePremiereLigne = $this->popup_title;
        $this->champsCaches = array();
        $this->formId = DocumentsRattaches::$form_id;
        $this->minWidth = 300;
        $this->titreDoc = '';
        $this->addChampCache('Modifier', false);
        $this->addChampCache('NO_ORDRE', '');
        $this->addChampCache('AvecHistorisation', '');
    }

    function setFormId(& $form_id)
    {
        $this->formId = $form_id;
    }

    function setContexte(& $contexte)
    {
        $this->contexte = $contexte;
    }

    function setTypeItem(& $typeItem)
    {
        $this->typeItem = $typeItem;
    }

    function setCodeItem(& $codeItem)
    {
        $this->codeItem = $codeItem;
    }

    function setIdDoc(& $idDoc)
    {
        $this->idDoc = $idDoc;
    }

    function setIdBloc(& $idBloc)
    {
        $this->id_bloc = $idBloc;
    }

    function setPopupTitle(& $popup_title)
    {
        $this->popup_title = $popup_title;
    }

    function setTitrePremiereLigne(& $titrePremiereLigne)
    {
        $this->titrePremiereLigne = $titrePremiereLigne;
    }

    function addChampCache($code, $valeur)
    {
        $this->champsCaches[$code] = $valeur;
    }

    function setTitreDocument(& $titreDoc)
    {
        $this->titreDoc = $titreDoc;
    }

    function &buildXml()
    {
        $minWidth = $this->minWidth;
        
        $array = array();
        $array['infos'] = array();
        $array['infos']['!titrePremiereLigne'] = $this->titrePremiereLigne;
        $array['infos']['!form_id'] = $this->formId;
        $array['infos']['!frame_id'] = DocumentsRattaches::$fakeframeId;
        $array['infos']['!actionSubmit'] = DocumentsRattaches::$callback_php_old . '?action=enregistrerDocAtt&id_bloc=' . $id_bloc . '&contexte=' . $this->contexte . '&id_doc=' . $this->id_doc;
        
        //
        // Champs cachés
        //
        $array['infos']['champsCaches'] = array();
        $array['infos']['champsCaches'][] = array(
            '!code' => 'contexte',
            '!valeur' => $this->contexte
        );
        $array['infos']['champsCaches'][] = array(
            '!code' => 'typeItem',
            '!valeur' => $this->typeItem
        );
        $array['infos']['champsCaches'][] = array(
            '!code' => 'codeItem',
            '!valeur' => $this->codeItem
        );
        $array['infos']['champsCaches'][] = array(
            '!code' => 'id_doc',
            '!valeur' => $this->id_doc
        );
        $array['infos']['champsCaches'][] = array(
            '!code' => 'id_bloc',
            '!valeur' => $this->id_bloc
        );
        
        foreach ($this->champsCaches as $code => & $valeur) {
            $array['infos']['champsCaches'][] = array(
                '!code' => $code,
                '!valeur' => $valeur
            );
        }
        
        //
        // Titre
        //
        $id = DocumentsRattaches::$idTitreDoc;
        $libelle = Trad('Titre');
        $size = '75';
        $format = 'A' . $size;
        $jsCheck = ControleSaisie::getJSCheckValue($this->formId, $id);
        if ('' != $this->titreDoc) {
            $valeur = $this->titreDoc;
            $actif = false;
        } else {
            $valeur = '';
            $actif = true;
        }
        
        $compXsl = new ComposantXslTexte($id, $actif, $format);
        $compXsl->setLibelle($libelle);
        $compXsl->setLibelleVisible(false);
        $compXsl->setSize($size);
        $compXsl->setAction($jsCheck);
        $compXsl->setValeur($valeur);
        $array['infos'][$id] = $compXsl->buildXml();
        
        //
        // Type doc
        //
        $id = DocumentsRattaches::$idTypeDoc;
        $libelle = Trad('Type');
        $jsCheck = ControleSaisie::getJSCheckValue($this->formId, $id);
        $valeur = 'PJ';
        $optionNative = TypeSuivi::getListeTypePJ(true, false);
        $options = array();
        foreach ($optionNative as $values) {
            $options[] = array(
                '!value' => $values['!code'],
                '!texte' => $values['!texte']
            );
        }
        
        $compXsl = new ComposantXslSelection($id);
        $compXsl->setLibelle($libelle);
        $compXsl->setLibelleVisible(false);
        $compXsl->setListeOptions($options);
        $compXsl->setValeur($valeur);
        $compXsl->setMinWidth($minWidth);
        $compXsl->setAction($jsCheck);
        $array['infos'][$id] = $compXsl->buildXml();
        
        //
        // Fichier
        //
        $id = DocumentsRattaches::$idFichierDoc;
        $libelle = Trad('Fichier');
        $compXsl = new ComposantXslFichier($id);
        $compXsl->setLibelle($libelle);
        $compXsl->setLibelleVisible(false);
        $array['infos'][$id] = $compXsl->buildXml();
        
        //
        // Date de parution
        //
        $id = DocumentsRattaches::$idDateParution;
        $jsCheck = ControleSaisie::getJSCheckValue($this->formId, $id);
        $libelle = Trad('Date de parution');
        $format = 'D';
        $valeur = convertDateSqlToFr(Date('Ymd'));
        $compXsl = new ComposantXslTexte($id, true, $format);
        $compXsl->setLibelle($libelle);
        $compXsl->setLibelleVisible(false);
        $compXsl->setAction($jsCheck);
        $compXsl->setValeur($valeur);
        $array['infos'][$id] = $compXsl->buildXml();
        
        //
        // Date de validité
        //
        $id = DocumentsRattaches::$idDateValidite;
        $jsCheck = ControleSaisie::getJSCheckValue($this->formId, $id);
        $libelle = Trad('Date de validité');
        $format = 'D';
        $compXsl = new ComposantXslTexte($id, true, $format);
        $compXsl->setLibelle($libelle);
        $compXsl->setLibelleVisible(false);
        $compXsl->setAction($jsCheck);
        $array['infos'][$id] = $compXsl->buildXml();
        
        //
        // Auteur
        //
        $id = DocumentsRattaches::$idAuteur;
        $jsCheck = ControleSaisie::getJSCheckValue($this->formId, $id);
        $libelle = Trad('Auteur');
        $size = 30;
        $format = 'A' . $size;
        $objet = 'HASTUTIL';
        $valeur = utilisateur::getCode();
        
        $popup_id = 'UTILISATEURS_STE';
        $popup = new AffichePopup($popup_id);
        $popup->setVariable('action', 'initPopup');
        $popup->setVariable('formName', $this->formId);
        $popup->setVariable('inputField', $id);
        $popup->setVariable('labelField', $id . '_lib');
        $popup->setToSession();
        $img_onclick = $popup->getUrl();
        
        $compXsl = new ComposantXslTexte($id, true, $format, $objet);
        $compXsl->setLibelle($libelle);
        $compXsl->setLibelleVisible(false);
        $compXsl->setValeur($valeur);
        $compXsl->setSize($size);
        $compXsl->setMinWidth($minWidth);
        $compXsl->setAction($jsCheck);
        $compXsl->setImgOnclick($img_onclick);
        $array['infos'][$id] = $compXsl->buildXml();
        
        //
        // Centre
        //
        $id = DocumentsRattaches::$idCentre;
        $jsCheck = ControleSaisie::getJSCheckValue($this->formId, $id);
        $libelle = Trad('Centre');
        $size = 7;
        $format = 'A' . $size;
        $objet = 'CENTRE_E';
        $valeur = utilisateur::getCtrEmet();
        
        $popup_id = 'CENTRE_E';
        $popup = new AffichePopup($popup_id);
        $popup->setVariable('action', 'initPopup');
        $popup->setVariable('formName', $this->formId);
        $popup->setVariable('inputField', $id);
        $popup->setVariable('labelField', $id . '_lib');
        $popup->setToSession();
        $img_onclick = $popup->getUrl();
        
        $compXsl = new ComposantXslTexte($id, true, $format, $objet);
        $compXsl->setLibelle($libelle);
        $compXsl->setLibelleVisible(false);
        $compXsl->setValeur($valeur);
        $compXsl->setSize($size);
        $compXsl->setImgOnclick($img_onclick);
        $compXsl->setMinWidth($minWidth);
        $compXsl->setAction($jsCheck);
        $array['infos'][$id] = $compXsl->buildXml();
        
        //
        // Commentaire
        //
        $id = DocumentsRattaches::$idCommentaire;
        $jsCheck = ControleSaisie::getJSCheckValue($this->formId, $id);
        $libelle = Trad('Commentaire');
        $format = 'A3000';
        $compXsl = new ComposantXslTexte($id, true, $format);
        $compXsl->setLibelle($libelle);
        $compXsl->setLibelleVisible(false);
        $compXsl->setRowsCols(4, 60);
        $compXsl->setAction($jsCheck);
        $array['infos'][$id] = $compXsl->buildXml();
        
        //
        // Bouton Enregistrer
        //
        $id = DocumentsRattaches::$actEnregistrer;
        $libelle = Trad('Enregistrer');
        $action = 'TraiteUrl(\'' . DocumentsRattaches::$callback_php_old . '?action=' . DocumentsRattaches::$actControler . '&contexte=' . $this->contexte . '\', document.forms[\'' . DocumentsRattaches::$form_id . '\'].elements[0]);';
        // $array_xml['docAtt']['actionSubmit'] = "ajout_doc_rattaches.php?action=enregistrerDocAtt&id_bloc=$id_bloc&contexte={$this->contexte}&id_doc=$this->numDoc";
        // $array_xml['docAtt']['enregistrer'] = "TraiteUrl('ajout_doc_rattaches.php?action=controlerDocAtt&contexte={$this->contexte}', document.forms.form_doc_att.typeItem);";
        
        $compXsl = new ComposantXslAction($idBtnEnregister);
        $compXsl->setLibelle($libelle);
        $compXsl->setAction($action);
        $compXsl->setEstPrimaire(true);
        $array['infos'][$id] = $compXsl->buildXml();
        
        $array['popup_title'] = $this->popup_title;
        $array['action'] = DocumentsRattaches::$actAffichePopup;
        return $array;
    }

    const TypeStd = 'Std';

    const TypeGestFourn = 'GestFourn';

    public static function &getObjetDocRattaches(& $type_doc_ratt = DocumentsRattaches::TypeStd)
    {
        $result = null;
        
        switch ($type_doc_ratt) {
            case DocumentsRattaches::TypeGestFourn:
                $result = new DocumentsRattachesGestFourn();
                break;
            case DocumentsRattaches::TypeStd:
            default:
                $result = new DocumentsRattachesStd();
                break;
        }
        return $result;
    }
}
