<?php
/**
 * OM_WIDGET - Surcharge du core
 *
 * L'objectif de la surcharge est de coder les vues spécifiques des widgets
 * de type 'file'.
 *
 * @package openads
 * @version SVN : $Id: om_widget.class.php 5673 2015-12-21 19:35:24Z nmeucci $
 */

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

class om_widget extends om_widget_core {
    var $template_panel = '
    <div class="panel panel-box %s">
        <div class="list-justified-container">
            <ul class="list-justified text-center">
                %s
            </ul>
        </div>
    </div>';
    /**
     *
     */
    var $template_panel_elem_box = '
            <li>
                <span class="size-h3 box-icon %s">%s</span>
                <p class="text-muted">%s</p>
            </li>';

    /**
     * Cet méthode permet de formater, la chaîne de caractères reçue du
     * paramétrage du widget en un tableau de valeurs dont les clés
     * correspondent aux clés passées en paramètre.
     *
     * @param string $content
     * @param array $params
     *
     * @return array
     */
    function get_arguments($content = null, $params = array()) {
        //
        $arguments = array();
        // On explose les paramètres reçus avec un élément par ligne
        $params_tmp1 = explode("\n", $content);
        // On boucle sur chaque ligne de paramètre
        foreach ($params_tmp1 as $key => $value) {
            // On explose le paramètre de sa valeur avec le séparateur '='
            $params_tmp2[] = explode("=", $value);
        }
        // On boucle sur chaque paramètre reçu pour vérifier si la valeur reçue
        // est acceptable ou non
        foreach ($params_tmp2 as $key => $value) {
            //
            if (!isset($value[0]) || !isset($value[1])) {
                continue;
            }
            //
            if (in_array(trim($value[0]), $params)) {
                $arguments[trim($value[0])] = trim($value[1]);
            }
        }
        //
        return $arguments;
    }

    public function view_widget_reprise_abandon($content = null) {
        // Déclaration des paramètres
        $params = array(
            "reprise_abandon" => array(
                "valeur" => "",
                "table" => "reprise_abandon",
                "colonne" => "reprise_abandon"
            ),
            "statut" => array(
                "valeur" => "",
                "table" => "reprise_abandon",
                "colonne" => "statut"
            ),
            "etat" => array(
                "valeur" => "",
                "table" => "reprise_abandon",
                "colonne" => "etat"
            ),
            "datecreation_min" => array(
                "valeur" => "",
                "table" => "declaration",
                "colonne" => "datecreation"
            ),
            "datecreation_max" => array(
                "valeur" => "",
                "table" => "declaration",
                "colonne" => "datecreation"
            ),
            "dateconvocationvisite1_min" => array(
                "valeur" => "",
                "table" => "declaration",
                "colonne" => "dateconvocationvisite1"
            ),
            "dateconvocationvisite1_max" => array(
                "valeur" => "",
                "table" => "declaration",
                "colonne" => "dateconvocationvisite1"
            ),
            "datenotificationpv1_min" => array(
                "valeur" => "",
                "table" => "declaration",
                "colonne" => "datenotificationpv1"
            ),
            "datenotificationpv1_max" => array(
                "valeur" => "",
                "table" => "declaration",
                "colonne" => "datenotificationpv1"
            ),
            "datenotificationpv2_min" => array(
                "valeur" => "",
                "table" => "declaration",
                "colonne" => "datenotificationpv2"
            ),
            "datenotificationpv2_max" => array(
                "valeur" => "",
                "table" => "declaration",
                "colonne" => "datenotificationpv2"
            ),
            "dateconvocationvisite2_min" => array(
                "valeur" => "",
                "table" => "declaration",
                "colonne" => "dateconvocationvisite2"
            ),
            "dateconvocationvisite2_max" => array(
                "valeur" => "",
                "table" => "declaration",
                "colonne" => "dateconvocationvisite2"
            ),
            "finaffichage3pv1_min" => array(
                "valeur" => "",
                "table" => "reprise_abandon",
                "colonne" => "finaffichage3pv1"
            ),
            "finaffichage3pv1_max" => array(
                "valeur" => "",
                "table" => "reprise_abandon",
                "colonne" => "finaffichage3pv1"
            ),
        );

        $champs_date_possibles = array(
            'datecreation',
            'dateconvocationvisite1',
            'datenotificationpv1',
            'datenotificationpv2',
            'dateconvocationvisite2',
            'finaffichage3pv1',
        );

        // Formatage des arguments reçus en paramètres
        $arguments = $this->get_arguments($content, array_keys($params));
        $conditions = array();

        // Assignation des clauses WHERE de la requête finale et des valeurs des arguments
        if (isset($arguments["statut"])) {
            $params["statut"]["valeur"] = $arguments["statut"];
            $conditions[] = DB_PREFIXE . "reprise_abandon.statut = '".$arguments["statut"]."'";
        }
        if (isset($arguments["etat"])) {
            $params["etat"]["valeur"] = $arguments["etat"];
            $conditions[] = DB_PREFIXE . "reprise_abandon.etat = '".$arguments["etat"]."'";
        }

        // Gestion des filtres sur les dates
        // On ne récupère que les argument <champ_date>_min ou <champ_date>_max
        // La valeur de l'argument doit forcément commencer par today
        // on peut ajouter des jours ou des mois à ce "today" en respectant la syntaxe anglaise
        // (days ou months)
        foreach ($champs_date_possibles as $champ_date) {
            $valeur_champ_date = '';
            foreach (array('_min', '_max') as $suffixe) {
                if (isset($arguments[$champ_date.$suffixe])) {
                    $valeur_champ_date = trim(strtolower($arguments[$champ_date.$suffixe]));
                    if (preg_match('/^today*./', $valeur_champ_date) == true) {
                        $valeur_champ_date=str_replace('today', date('Y-m-d'), $valeur_champ_date);
                        $valeur_champ_date_calculee = date('Y-m-d', strtotime($valeur_champ_date));
                        $conditions[] = sprintf('%1$s %2$s \'%3$s\' ',
                            $champ_date,
                            $suffixe == '_min' ? '>=' : '<=',
                            $valeur_champ_date_calculee);
                        $params[$champ_date.$suffixe]['valeur'] = $valeur_champ_date_calculee;
                    }
                }
            }
        }

        // Construction de la requête finale de calcul du nombre de demandes de reprise sur abandon concernées
        $sql = "SELECT COUNT(*) FROM " . DB_PREFIXE . "reprise_abandon";

        // Jointures conditionnelles + concaténation totale avant la requête
        if (!empty($conditions)) {
            $sql .= " WHERE " . implode(" AND ", $conditions);
        }

        // Exécution de la requête
        $res = $this->f->db->query($sql);
        if (!$this->f->isDatabaseError($res)) {
            $nb = array("result" => $res->fetchRow(DB_FETCHMODE_DEFAULT)[0]);
            // Affichage tenant compte de la mise au pluriel
            $reprise_abandon_resultat_string = "Reprises sur abandon";
            $cles_arguments = array_keys($arguments);
            $filtres = "";
            // On construit les filtres qui seront appliqué à la recherche avancée
            // lors de l'accès au listing
            foreach ($cles_arguments as $cle_argument) {
                $filtres .= sprintf(
                    '&%s=%s',
                    $cle_argument,
                    $params[$cle_argument]['valeur']
                );
            }
            printf(
                $this->template_panel,
                "panel-reprise_abandon",
                sprintf(
                    '%s',
                    sprintf(
                        $this->template_panel_elem_box,
                        "bg-default",
                        sprintf(
                            '<a href="../app/index.php?module=form&obj=reprise_abandon&action=601%s">%s</a>',
                            $filtres,
                            intval($nb["result"])
                        ),
                        __($reprise_abandon_resultat_string)
                    )
                )
            );
        }
        return false;
    }
}