<?php
/**
 * OM_LETTRETYPE - Surcharge du core
 *
 * @package openads
 * @version SVN : $Id$
 */

require_once PATH_OPENMAIRIE."obj/om_lettretype.class.php";

class om_lettretype extends om_lettretype_core {

    public function get_var_sql_forminc__champs() {
        $fields = parent::get_var_sql_forminc__champs();
        $fields[] = "'' as extra_data";
        return $fields;
    }

    public function setLib(&$form, $maj) {
        parent::setLib($form, $maj);
        $form->setLib('extra_data', __("Données supplémentaires"));
    }

    public function setType(&$form, $maj) {
        parent::setType($form, $maj);
        $form->setType('extra_data', 'textareastatic');
        if ($maj == 3) {
            $form->setType('extra_data', 'hidden');
        }
    }

    public function setLayout(&$form, $maj) {
        parent::setLayout($form, $maj);
        //$form->setFieldset('om_sql','D', __('Champ(s) de fusion'), "collapsible");
        unset($form->layout['substitution_vars']);
        $form->setFieldset('extra_data', 'F', '');
    }

    public function setVal(&$form, $maj, $validation, &$dnu1 = null, $dnu2 = null) {
        parent::setVal($form, $maj, $validation);
        $this->form->setVal('extra_data', $this->get_displayed_labels_extra_data());
    }

    /**
     * SURCHARGE - om_dbform::setValFFromVal()
     *
     * Méthode permettant de remplir valF avant validation du formulaire
     *
     * @return void
     */
    public function setValFFromVal() {
        parent::setValFFromVal();
        // Dans le cas de l'action de copie, suppression du champs extra_data
        // qui ne fait pas partie de la table om_lettretype
        if ($this->getParameter('maj') == 4) {
            unset($this->valF["extra_data"]);
        }
    }

    /**
     * Définition des actions disponibles sur la classe.
     *
     * @return void
     */
    function init_class_actions() {
        parent::init_class_actions();


        // ACTION - 001 - modifier
        //
        $this->class_actions[1]["condition"] = array("is_user_multi_or_is_object_mono");

        // ACTION - 002 - supprimer
        //
        $this->class_actions[2]["condition"] = array("is_user_multi_or_is_object_mono");
    }

    /**
     *
     * @return string
     */
    function get_var_sql_forminc__sql_om_logo_by_id() {
        return "select id, (libelle||' ('||id||')') from ".DB_PREFIXE."om_logo WHERE id = '<idx>'";
    }

    /**
     * Permet de modifier les valeurs d'un objet pour le copier.
     *
     * @param array  $valCopy Liste des valeurs à copier
     * @param string $objsf   Liste des objets liés
     * @param mixed  $DEBUG   Mode debug
     *
     * @return array
     */
    function update_for_copy($valCopy, $objsf, $DEBUG) {
        // Libellé du duplicata
        $libelle = __("Copie de %s du %s");
        $valCopy['libelle'] = sprintf($libelle, $valCopy['libelle'], date('d/m/Y H:i:s'));
        // Tronque le libellé si celui est trop long
        $valCopy['libelle'] = mb_substr($valCopy['libelle'], 0, 100, "UTF8");

        // La lettre-type ne doit pas être actif
        $valCopy['actif'] = 'f';

        // Message à retourner
        $valCopy['message'] = '';

        // Retourne les valeurs
        return $valCopy;
    }

    /**
     * Retourne l'affichage de l'aide à la saisie des variables de remplacement.
     *
     * @return string
     */
    protected function get_displayed_labels_extra_data() {

        $mode = 'label';
        $use_champ_fusion = true;
        $xd_store = $this->f->get_extra_data_store();
        $xd_kv_dossier = $xd_store->list_data('dossier', $mode, '', $use_champ_fusion);
        //$this->f->log(__METHOD__, "dossier data:".var_export($xd_kv_dossier, true));
        if (! empty($xd_kv_dossier->error_message)) {
            $err_msg = __("Échec de la récupération des données supplémentaires du dossier.").' '.
                __("Détail:").' '.$xd_kv_dossier->error_message;
            $this->f->log(__METHOD__, $err_msg, 'ERROR');
            throw new RuntimeException($err_msg);
        }

        $xd_kv = $xd_kv_dossier->items;

        $this->f->log(__METHOD__, "new extra data:".var_export($xd_kv, true));

        if (empty($xd_kv)) {
            return __("Aucune données supplémentaires.");
        }

        $display = "<table><thead>";
        $display .= "<tr><th>".__("Champ")."</th><th>".__("Libellé")."</th></tr></thead><tbody>";
        foreach ($xd_kv as $cf => $libelle) {
            $display .= "<tr><td>[$cf]</td><td>$libelle</td></tr>";
        }
        $display .= "</tbody></table>";
        return $display;
    }
}
