<?php
//$Id$ 
//gen openMairie le 21/02/2022 17:35

require_once "../gen/obj/instruction_notification_document.class.php";

class instruction_notification_document extends instruction_notification_document_gen {

    /**
     * Redirige vers la vue permettant de télécharger le document
     * selon le type de document a télécharger.
     *
     * Pour cela, cette méthode utilise la clé fournie dans l'url d'accès au document
     * pour récupérer l'instance de l'élément auquel est rattaché le document.
     * Si pour cette instance, il existe une méthode permettant d'accèder
     * à la vue de téléchargement du document, cette méthode est appelée.
     * Sinon renvoie une erreur 404.
     */
    public function view_telecharger_document_anonym($openads_web) {
        $cle_acces_document = $this->f->get_submitted_get_value('key');
        if (empty($cle_acces_document)) {
            $cle_acces_document = $this->f->get_submitted_post_value('cle_acces_document');
        }

        // Par défaut on considère qu'on va afficher le formulaire
        // Flag d'erreur
        $error = false;
        // Message d'erreur
        $message = '';

        // Paramètres POST
        $validation = $this->f->get_submitted_post_value('validation');

        $email = $this->f->get_submitted_post_value('email');

        $timestamp_generation_formulaire = $this->f->get_submitted_post_value('timestamp_generation_formulaire');

        // Si au moins un des champs n'est pas renseignés
        if ($error !== true
            && $validation !== null
            && ($email === null || $email == '')
        ) {
            //
            $message = __("Tous les champs doivent etre remplis.");
            $error = true;
        }
        // Si le formulaire est expiré
        if ($error !== true
            && $validation !== null
            && time() >= strtotime('+5 minutes', $timestamp_generation_formulaire)) {
            //
            $message = __("Le formulaire a expire. Veuillez recharger la page.");
            $error = true;
        }

        if ( $error !== true && $validation !== null ) {

            $sql = 'SELECT courriel FROM %1$sinstruction_notification WHERE instruction_notification = (
                SELECT instruction_notification FROM %1$sinstruction_notification_document WHERE cle = \'%2$s\'
            )';
            $built_sql = sprintf(
                $sql,
                DB_PREFIXE,
                $cle_acces_document,
            );
            $qres = $this->f->get_one_result_from_db_query(
                sprintf($built_sql),
                array(
                    'origin' => 'web/notification.php -> instruction_notification_document.class.php'
                )
            );

            if ($qres["code"] == "OK" && !empty($qres["result"])
                && strtolower($qres["result"]) == strtolower($email)) {
                // Fait appel à la vue de prévisualisation des documents de l'instance
                $instanceDoc = $this->get_inst_document_type_by_key($cle_acces_document);
                if (!is_null($instanceDoc) && method_exists($instanceDoc, 'view_telecharger_document_anonym')) {
                    if ($instanceDoc->view_telecharger_document_anonym($cle_acces_document) === true) {
                        return;
                    }
                }
                // Flag d'erreur
                $error = true;
                // Page vide 404
                $message = 'Ressource non trouvée.';
            } else {
                // Flag d'erreur
                $error = true;
                // Message d'erreur
                $message = 'L\'adresse email ne correspond pas à celle attendue.';
            }
        }

        $openads_web->display();
        // Sinon on affiche le formulaire d'accès au portail citoyen
        $this->display_instruction_notification_document_form($message, $cle_acces_document);
        return;
    }

    /**
     * Affiche le formulaire d'accès au document de notification.
     *
     * @param string  $message      Message d'erreur.
     * @param boolean $content_only Affiche le contenu seulement.
     *
     * @return void
     */
    public function display_instruction_notification_document_form($message, $cle_acces_document = '') {
        $cle_acces_document = $this->f->get_submitted_get_value('key');
        if (empty($cle_acces_document)) {
            $cle_acces_document = $this->f->get_submitted_post_value('cle_acces_document');
        }

        // Affichage du message d'erreur
        if (isset($message) && $message != "") {
            printf('<div class="alert alert-danger" role="alert">%s</div>', $message);
        }

        // Ouverture du formulaire
        printf("<div class=\"formulaire\" id=\"formulaire\"><form class=\"form-signin\" method=\"POST\" id=\"instruction_notification_document\" action=\"notification.php\">");

        $champs = array('email', 'cle_acces_document', 'timestamp_generation_formulaire');

        //Pour accéder au document, saisissez l'adresse email à laquelle la notification a été reçue:
        echo "<p> ".__("Pour accéder au document, saisissez l'adresse email à laquelle la notification a été reçue.")." </p>";

        //
        $form = $this->f->get_inst__om_formulaire(array(
            "validation" => 0,
            "maj" => 0,
            "champs" => $champs,
        ));
        $form->setType('email', 'text');
        $form->setType('cle_acces_document', 'hidden'); // 'hidden'
        $form->setType('timestamp_generation_formulaire', 'hidden');// 'hidden'

        $form->setTaille("email", 30);
        $form->setTaille('cle_acces_document', 30);
        $form->setTaille('timestamp_generation_formulaire', 20);

        $form->setMax("email", 50);
        $form->setMax('cle_acces_document', 30);
        $form->setMax('timestamp_generation_formulaire', 20);

        $form->setLib('email', __('Email:'));
        $form->setLib('cle_acces_document', '');
        $form->setLib('timestamp_generation_formulaire', '');

        $form->setVal('cle_acces_document',  $cle_acces_document);
        $form->setVal('timestamp_generation_formulaire', time());

        $form->setBloc("email", "D", "", "group");
        $form->setBloc("timestamp_generation_formulaire", "F");
        $form->afficher($champs, 0, false, false);

        // Bouton de validation
        echo "<div class=\"formControls formControls-bottom\">";
        echo "<input type=\"submit\" class=\"btn btn-lg btn-primary btn-block\" value=\"".__("Valider")."\" name=\"validation\" />";
        echo "</div>";
        printf("</form>");

        // Fermeture du div formulaire
        printf("</div>");

    }

    /**
     * A partir de la clé passé en paramètre effectue une requête sql
     * pour récupérer le nom de la table a laquel est rattaché le document
     * notifié et l'identifiant de l'élément auquel il appartient.
     *
     * Instancie l'objet voulu à partir de ces informations et renvoie
     * cette instance.
     *
     * @param string clé unique d'accès à la pièce
     * @return objet instance de l'objet auquel est rattaché le document
     */
    protected function get_inst_document_type_by_key($key) {
        $qres = $this->f->get_all_results_from_db_query(
            sprintf(
                'SELECT 
                    instruction_notification_document.document_type as table,
                    instruction_notification_document.document_id as idx
                FROM
                    %1$sinstruction_notification_document
                WHERE
                    instruction_notification_document.cle = \'%2$s\'',
                DB_PREFIXE,
                $this->f->db->escapeSimple($key)
            ),
            array(
                "origin" => __METHOD__,
            )
        );
        if (is_array($qres["result"]) === true
            && array_key_exists(0, $qres["result"]) === true) {
            //
            return $this->f->get_inst__om_dbform(array(
                "obj" => $qres["result"][0]["table"],
                "idx" => $qres["result"][0]["idx"],
            ));
        }
        return null;
    }
}
