<?php
/**
 * Ce script définit la classe 'tranche'.
 *
 * @package openresultat
 * @version SVN : $Id$
 */

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

/**
 * Définition de la classe 'tranche'.
 *
 * Cette classe gère les tranches horaires utilisées pour le suivi de la
 * participation électorale. Elle hérite de la classe générée tranche_gen
 * et ajoute la validation du format horaire et l'exposition JSON.
 */
class tranche extends tranche_gen {

    /**
     * Définition des actions disponibles sur la classe.
     *
     * Ajoute les actions JSON permettant d'exposer les données des tranches
     * horaires via une API REST :
     * - json_list (997) : liste de toutes les tranches
     * - json_data (998) : données d'une tranche spécifique
     *
     * @return void
     */
    function init_class_actions() {
        parent::init_class_actions();
        // ACTION - 997 - json_list
        // Expose la liste des tranches horaires au format JSON
        $this->class_actions[997] = array(
            "identifier" => "json_list",
            "view" => "view_json_list",
            "permission_suffix" => "tab",
        );
        // ACTION - 998 - json_data
        // Expose les données d'une tranche horaire au format JSON
        $this->class_actions[998] = array(
            "identifier" => "json_data",
            "view" => "view_json_data",
            "permission_suffix" => "consulter",
        );
    }

    /**
     * SETTER FORM - setOnchange.
     * 
     * @param formulaire $form Instance formulaire.
     * @param integer $maj Identifant numérique de l'action.
     * 
     * @return void
     */
    function setOnchange(&$form, $maj) {
        parent::setOnchange($form, $maj);
        // format du type : 00:00:00
        $form->setOnchange('libelle', 'ftime(this)');
    }

    /**
     * Vérifie la validité des valeurs en mode CREATE & UPDATE.
     *
     * - Vérifie que le libellé a bien le format d'un date
     * 
     * @param array $val Tableau des valeurs brutes.
     * @param null &$dnu1 @deprecated  Ne pas utiliser.
     * @param null $dnu2 @deprecated  Ne pas utiliser.
     *
     * @return void
     */
    function verifier($val = array(), &$dnu1 = null, $dnu2 = null) {
        parent::verifier($val);
        if (! is_string($val['libelle']) ||
            (preg_match('{^[0-9]{1,2}:[0-9]{2}\z}', $val['libelle']) == false &&
            preg_match('{^[0-9]{1,2}:[0-9]{2}:[0-9]{2}\z}', $val['libelle']) == false)
        ) {
            $this->addToMessage('Le format du libellé est incorrect');
            $this->correct = false;
        }
    }
}
