<?php
/*
  Fichier : TEMPLATEPATH. '/inc/modules/tcp-reservations.inc.php'
  Objet : Création d'un TCP
  Nom : TCP Réservations
  Description : Crée un nouveau TCP pour la gestion des réservations
 */

// Note : Pour les fonctions Timepicker importer le fichiers css et js dans le thème
// Création du TCP
function at111_init_TCP_Reservations() {
    $labels = array(
        'name' => 'Réservations',
        'singular_name' => 'Reservations',
        'add_new' => 'Ajouter',
        'add_new_item' => 'Ajouter une reservation',
        'edit_item' => 'Modifier',
        'new_item' => 'Nouveau',
        'all_items' => 'Toutes les reservations',
        'view_item' => 'Visualiser',
        'search_items' => 'Rechercher',
        'not_found' => 'Aucune reservation trouvée',
        'not_found_in_trash' => 'Aucune reservation trouvée dans la corbeille',
        'parent_item_colon' => '',
        'menu_name' => 'Réservations'
    );
    $args = array(
        'labels' => $labels,
        'public' => true,
        'exclude_from_search' => true,
        'publicly_queryable' => false,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'reservation'),
        'has_archive' => true,
        'hierarchical' => false,
        'menu_position' => 19,
        'menu_icon' => 'dashicons-calendar-alt',
        'supports' => array('title', 'editor', 'revisions', 'author')
    );
    // Enregistrement du TCP
    register_post_type('reservation', $args);


    // Labels des rubriques.
    $rubLabels = array(
        'name' => 'Objets',
        'singular_name' => 'Objet',
        'search_items' => 'Rechercher',
        'popular_items' => 'Objets souvent utilisées',
        'all_items' => 'Tous les objets',
        'edit_item' => 'Modifier un objet',
        'update_item' => 'Mettre à jour un objet',
        'add_new_item' => 'Ajouter un objet',
        'new_item_name' => 'Nouvel objet',
    );

    // Rubriques.
    register_taxonomy('reservations-rubrique', 'reservation', array(
        'hierarchical' => true,
        'label' => 'Reservations',
        'labels' => $rubLabels,
        'rewrite' => array('slug' => 'reservations-rubrique'),
        'show_in_nav_menus' => true,
        'show_admin_column' => true,
        'show_in_quick_edit' => true,
        'show_ui' => true
    ));
}

add_action('init', 'at111_init_TCP_Reservations');

// Création des entêtes de colonnes
add_filter('manage_edit-reservation_columns', 'my_edit_reservations_columns');

function my_edit_reservations_columns($columns) {
    $columns = array(
        'cb' => '<input type="checkbox" />',
        'title' => __('Titre'),
        'reservations-rubrique' => __('Objet de la réservation'),
        'datedebut' => __('Date de début'),
        'datefin' => __('Date de fin'),
        //'author' => __('Emetteur'),
        'date' => __('Date de la demande')
    );
    return $columns;
}

function remove_date_drop(){
    $screen = get_current_screen();
    if ( 'reservation' == $screen->post_type ){
        add_filter('months_dropdown_results', '__return_empty_array');
    }
}

add_action('admin_head', 'remove_date_drop');

add_action('restrict_manage_posts', 'a111_filter_by_taxonomy');
function a111_filter_by_taxonomy() {
    ?>

    <select name="ADMIN_FILTER_FIELD_VALUE">
        <option value="">Toutes les dates</option>
        <?php

        $dateValue = array();
        for($i=0;$i<=23;$i++){
            echo '<option value="'.date('Ym', strtotime('+'.$i.' months')).'">';
            //$value = date('Ym', strtotime('+'.$i.' months'));
            echo ucfirst(date_i18n('F Y', strtotime('+'.$i.' months')));
            echo '</option>';
            // $dateValue[$value] = date_i18n('F Y', strtotime('+'.$i.' months'));
        }
        ?>
    </select>
    <?php

    global $typenow;
    $post_type = 'reservation'; // change to your post type
    $taxonomy = 'reservations-rubrique'; // change to your taxonomy
    if ($typenow == $post_type) {
        $selected = isset($_GET[$taxonomy]) ? $_GET[$taxonomy] : '';
        $info_taxonomy = get_taxonomy($taxonomy);
        wp_dropdown_categories(array(
            'show_option_all' => __("Tous les {$info_taxonomy->label}" ),
            'taxonomy' => $taxonomy,
            'name' => $taxonomy,
            'orderby' => 'name',
            'selected' => $selected,
            'show_count' => false,
            'hide_empty' => false,
            'value_field' => 'slug'
        ));
    }
}

add_filter( 'parse_query', 'a111_reservation_filter' );
function a111_reservation_filter( $query ){
    global $pagenow;
    $type = 'reservation';
    if (isset($_GET['post_type'])) {
        $type = $_GET['post_type'];
    }

    if ( 'reservation' == $type && is_admin() && $pagenow=='edit.php' && isset($_GET['ADMIN_FILTER_FIELD_VALUE']) && $_GET['ADMIN_FILTER_FIELD_VALUE'] != '') {
        $query->query_vars['meta_key'] = 'datedebut';
        $query->query_vars['meta_value'] = $_GET['ADMIN_FILTER_FIELD_VALUE'];
        $query->query_vars['meta_compare'] = 'LIKE';
    }
}

/*
add_filter('parse_query', 'a111_convert_id_to_term_in_query');
function a111_convert_id_to_term_in_query($query) {
    global $pagenow;
    $post_type = 'team'; // change to your post type
    $taxonomy = 'group'; // change to your taxonomy
    $q_vars = &$query->query_vars;
    if ( $pagenow == 'edit.php' && isset($q_vars['post_type']) && $q_vars['post_type'] == $post_type && isset($q_vars[$taxonomy]) && is_numeric($q_vars[$taxonomy]) && $q_vars[$taxonomy] != 0 ) {
        $term = get_term_by('id', $q_vars[$taxonomy], $taxonomy);
        $q_vars[$taxonomy] = $term->slug;
    }

}
*/

// Remplissage des lignes du tableau
add_action('manage_reservation_posts_custom_column', 'my_manage_reservations_columns', 10, 2);

function my_manage_reservations_columns($column, $post_id) {
    global $post;
    switch ($column) {
        case 'datedebut' :
            $dateDebut = get_post_meta($post_id, 'datedebut', true);
            $heure = get_post_meta($post_id, 'heure', true);
            if ($dateDebut != '' && $heure != '') {
                echo substr($dateDebut, 6, 2) . '/' . substr($dateDebut, 4, 2) . '/' . substr($dateDebut, 0, 4) . ' à ' . $heure;
            } else {
                echo '<span style="color:#c00;">Aucune date de début</span>';
            }
            break;
        case 'datefin' :
            $dateJour = date('Ymd');
            $dateFin = get_post_meta($post_id, 'datefin', true);
            $formatedDateFin = substr($dateFin, 6, 2) . '/' . substr($dateFin, 4, 2) . '/' . substr($dateFin, 0, 4);
            $heureFin = get_post_meta($post_id, 'heureFin', true);
            if ($dateFin == '') {
                echo '<span style="color:#c00;">Aucune date de fin</span>';
            } else {
                if ($dateJour > $dateFin) {
                    echo '<span style="color:#c00;">' . $formatedDateFin . ' (fini)</span> à ' . $heureFin;
                } else {
                    echo '<span style="color:#0c0;">' . $formatedDateFin . '</span> à ' . $heureFin;
                    ;
                }
            }
            break;
        case 'reservations-rubrique' :
            $terms = get_the_terms($post_id, 'reservations-rubrique');
            /* Si des taxonomies sont trouvées */
            if (!empty($terms)) {
                $out = array();
                /* On boucle sur chacune des taxonomies et on place un lien */
                foreach ($terms as $term) {
                    $out[] = sprintf('<a href="%s">%s</a>', esc_url(add_query_arg(array('post_type' => $post->post_type, 'reservations-rubrique' => $term->slug), 'edit.php')), esc_html(sanitize_term_field('name', $term->name, $term->term_id, 'reservations-rubrique', 'display')));
                }
                /* On associe les taxonomies, séparées par une virgule */
                echo join(', ', $out);
            }
            /* Si aucune taxonomie n'est trouvée, on affiche un message */ else {
                _e('Aucune rubrique trouvée');
            }
            break;
        /* Break out */
        default :
            break;
    }
}

// Enregistrer la meta box dates début/fin
function a111_meta_box_reservation() {
    remove_meta_box('reservations-rubriquediv', 'reservation', 'side');
    add_meta_box('a111-meta-box-rubrique', 'Choisir la reservation', 'a111_create_meta_box_rubrique', 'reservation', 'side');
    add_meta_box('a111-meta-box', 'Choisir les dates de début et de fin', 'a111_create_meta_box_reservation', 'reservation', 'side');
    add_meta_box('a111-meta-box-email-reservation', 'E-mail du demandeur', 'a111_create_meta_box_email_reservation', 'reservation', 'advanced');
    //add_meta_box('a111-meta-box-infos_plus', 'Information de réservation', 'a111_create_meta_infos_plus', 'reservation', 'advanced');
}

add_action('add_meta_boxes_reservation', 'a111_meta_box_reservation');

// Création de la boite méta
function a111_create_meta_box_email_reservation($post) {
    $emailReservation = get_post_meta($post->ID, 'email_reservation', true);

    echo '<input type="text" placeholder="E-mail du demandeur" name="email_reservation" value="'.$emailReservation.'" size="64"/>';
}
/*
function a111_create_meta_infos_plus ($post) {
     $text= get_post_meta($post->ID, 'info_plus' , true );

     
    wp_editor( wpautop( $text ), 'a111-meta-box-infos_plus_editor', $settings = array('textarea_name'=>'info_plus') );

}*/

// Création de la boite méta
function a111_create_meta_box_reservation($post) {
    // Afficher les dates déjà enregistrées (le cas échéant).
    $datedebut = get_post_meta($post->ID, 'datedebut', true);
    $datefin = get_post_meta($post->ID, 'datefin', true);
    $heure = get_post_meta($post->ID, 'heure', true);
    $heureFin = get_post_meta($post->ID, 'heureFin', true);
    // Utilisation de Nonce pour la vérification des champs (sécurité)
    wp_nonce_field(plugin_basename(__FILE__), 'a111_nonce');
    // Opérations sur les dates pour obtenir un format de comparaison
    ?>
    <script type="text/javascript">
        jQuery(document).ready(function () {
            var today = new Date();
            jQuery('.datepicker').datepicker({dateFormat: 'dd/mm/yy', minDate: today});
            jQuery('.datetimepicker').timepicker({
                controlType: 'select',
                oneLine: true,
                timeFormat: 'HH:mm'
            });
        });
        function verifDate() {
            var dateDebut = $.datepicker.parseDate('dd/mm/yy',$("#date-debut").val());
            var dateFin = $.datepicker.parseDate('dd/mm/yy', $("#date-fin").val());
            if (dateDebut > dateFin) {
                alert("Date de fin inférieure à date de début");
                document.getElementById("date-fin").setAttribute("style", "border-color:red");
                document.getElementById("publish").disabled = true;
            } else {
                document.getElementById("date-fin").setAttribute("style", "border-color:#eee");
                document.getElementById("publish").disabled = false;
            }
        }
    </script>
    <p>Date de début : <br /><input class="datepicker" readonly="readonly" id="date-debut" name="date-debut" type="text" value="<?php
        if ($datedebut) {
            echo substr($datedebut, 6, 2) . '/' . substr($datedebut, 4, 2) . '/' . substr($datedebut, 0, 4);
        }
        ?>" required/>
    </p>
    <p>Date de fin : <br /><input onchange="verifDate()" readonly="readonly" class="datepicker" id="date-fin" name="date-fin" type="text" value="<?php
        if ($datefin) {
            echo substr($datefin, 6, 2) . '/' . substr($datefin, 4, 2) . '/' . substr($datefin, 0, 4);
        }
        ?>" required/>
    </p>
    <p>Horaire de début : <br /><input class="datetimepicker" readonly="readonly" id="heure" name="heure" type="text" value="<?php
        if ($heure) {
            echo $heure;
        }
        ?>" required/>
    </p>
    <p>Horaire de fin : <br /><input class="datetimepicker" readonly="readonly" id="heureFin" name="heureFin" type="text" value="<?php
        if ($heureFin) {
            echo $heureFin;
        }
        ?>" required/>
    </p>
    <style type="text/css">
        #date-debut, #date-fin, #heure, #heureFin {
            background-color: #fff;
        }
    </style>
    <?php
}

// Enregistrer les valeurs saisies.
function a111_save_meta_box_reservation($post_id) {

    // Vérifier si la méta existe. Sinon, et bien on va l'ajouter !
    // on utilise d'abord add_post_meta, qui s'exécute uniquement si la méta n'existe pas encore pour ce contenu, dans la BDD
    if (isset($_POST['date-debut'])) {
        $datedebut = $_POST['date-debut'];
        $formatedDateDebut = explode("/", $datedebut);
        $formatedDateDebut = $formatedDateDebut[2] . $formatedDateDebut[1] . $formatedDateDebut[0];
        add_post_meta($post_id, 'datedebut', $formatedDateDebut, true);
        update_post_meta($post_id, 'datedebut', $formatedDateDebut);
    }
    if (isset($_POST['date-fin'])) {
        $datefin = $_POST['date-fin'];
        $formatedDateFin = explode("/", $datefin);
        $formatedDateFin = $formatedDateFin[2] . $formatedDateFin[1] . $formatedDateFin[0];
        add_post_meta($post_id, 'datefin', $formatedDateFin, true);
        update_post_meta($post_id, 'datefin', $formatedDateFin);
    }
    if (isset($_POST['heure'])) {
        $heure = $_POST['heure'];
        add_post_meta($post_id, 'heure', $heure, true);
        update_post_meta($post_id, 'heure', $heure);
    }
    if (isset($_POST['heureFin'])) {
        $heureFin = $_POST['heureFin'];
        add_post_meta($post_id, 'heureFin', $heureFin, true);
        update_post_meta($post_id, 'heureFin', $heureFin);
    }
    if (isset($_POST['cat-resa'])) {
        update_option('event_' . $post_id . '', $_POST['cat-resa'], false);
        wp_set_object_terms($post_id, $_POST['cat-resa'], 'reservations-rubrique', false);
    }
    if (isset($_POST['email_reservation'])){
        add_post_meta($post_id, 'email_reservation', $_POST['email_reservation'], true);
        update_post_meta($post_id, 'email_reservation', $_POST['email_reservation']);
    }
    /*if (isset($_POST['info_plus'])){
        add_post_meta($post_id, 'info_plus', '<p>'.implode('</p><p>', array_filter(explode("\n", $_POST['info_plus']))).'</p>', true);
        update_post_meta($post_id, 'info_plus', '<p>'.implode('</p><p>', array_filter(explode("\n", $_POST['info_plus']))).'</p>');
    }*/
}

add_action('save_post_reservation', 'a111_save_meta_box_reservation');

add_action('transition_post_status', 'a111_draft_to_publish', 10, 3 );

function a111_draft_to_publish( $new_status, $old_status, $post ){
    if($new_status == 'publish' && $old_status == 'draft'){
        $info = get_post_info($post);
        $headers = array(
            'Content-Type: text/html; charset=UTF-8');
        $body = 'Votre réservation : <b>' . $post->post_title . '</b>, du ' . $info['dateDebut'] . ' (' . $info['heureDebut'] . ') au ' . $info['dateFin'] . ' (' . $info['heureFin'] . ') a été validée. </br><br />Ceci est un e-mail automatique. Merci de ne pas y répondre.';

        if(function_exists('content_mail')) {
            $body = content_mail($body);
        }

        wp_mail($info['to'], $info['subject'], $body, $headers);
    }
}


add_action('wp_trash_post', 'a111_post_to_trash');

function a111_post_to_trash($postID){
    $post = get_post($postID);

    $info = get_post_info($post);

    $headers = array(
        'Content-Type: text/html; charset=UTF-8');
    $body = 'Votre réservation : <b>' . $post->post_title . '</b>, du ' . $info['dateDebut'] . ' (' . $info['heureDebut'] . ') au ' . $info['dateFin'] . ' (' . $info['heureFin'] . ') n\'a pas été validée.</br> Merci de nous contacter si vous souhaitez plus de précisions.<br />'.get_bloginfo('name').'</br><br />Ceci est un e-mail automatique. Merci de ne pas y répondre.';

    if(function_exists('content_mail')) {
        $body = content_mail($body);
    }

    wp_mail($info['to'], $info['subject'], $body, $headers);

}


function get_post_info($post){
    $arrayInfo = array();

    $arrayInfo['to'] = current(get_post_meta($post->ID, 'email_reservation'));
    $arrayInfo['subject'] = 'Votre réservation sur le site '.get_bloginfo('name');
    $responsableResa = get_option('respo_resa');
    $tabResponsableResa = explode(';', $responsableResa);
    $arrayInfo['from'] = $tabResponsableResa[0];
    $datedebut = current(get_post_meta($post->ID, 'datedebut'));
    $datefin = current(get_post_meta($post->ID, 'datefin'));
    $arrayInfo['dateDebut'] =  substr($datedebut, 6, 2) . '/' . substr($datedebut, 4, 2) . '/' . substr($datedebut, 0, 4);
    $arrayInfo['dateFin'] =  substr($datefin, 6, 2) . '/' . substr($datefin, 4, 2) . '/' . substr($datefin, 0, 4);
    $arrayInfo['heureDebut'] = current(get_post_meta($post->ID, 'heure'));
    $arrayInfo['heureFin'] = current(get_post_meta($post->ID, 'heureFin'));

    return $arrayInfo;

}

// Ajout du script jQuery UI datePicker pour les nouveaux posts
function a111_jquery_datepicker_reservation() {
    wp_enqueue_script('jquery-ui-core');
    wp_enqueue_script('jquery-ui-datepicker');
    wp_register_style('jquery-ui', 'https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/base/jquery-ui.css');
    wp_enqueue_style('jquery-ui');
}

// Ajout du script jQuery UI datePicker pour les nouveaux posts
function a111_jquery_datetimepicker_reservation() {

    if(!solutionWebco) {
        wp_register_style('jquery-ui-timepicker-addon-css', plugins_url() . '/gestionTcpAtelier111/assets/jquery/jquery-ui-timepicker-addon.css');
        wp_register_script('jquery-ui-timepicker-addon-js', plugins_url() . '/gestionTcpAtelier111/assets/jquery/jquery-ui-timepicker-addon.js');
        wp_register_script('jquery-ui-timepicker-addon-i18n-js', plugins_url() . '/gestionTcpAtelier111/assets/jquery/jquery-ui-timepicker-addon-i18n.min.js');
    }else{
        wp_register_style('jquery-ui-timepicker-addon-css', WEBCO_URL . '/includes/libs/jquery/jquery-ui-timepicker-addon.css');
        wp_register_style('fullcalendar-css', WEBCO_URL . 'includes/libs/fullcalendar/fullcalendar.css');
        wp_register_script('jquery-ui-timepicker-addon-js', WEBCO_URL . '/includes/libs/jquery/jquery-ui-timepicker-addon.js');
        wp_register_script('jquery-ui-timepicker-addon-i18n-js', WEBCO_URL . '/includes/libs/jquery/jquery-ui-timepicker-addon-i18n.min.js');
        wp_register_script('select2-js', WEBCO_URL . 'includes/libs/select2/js/select2.js');
        wp_register_script('moment-js', 'https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.29.4/moment.min.js');
        wp_register_script('fullcalendar-js', WEBCO_URL . 'includes/libs/fullcalendar/fullcalendar.js');
        wp_register_script('locale-fullcalendar-js', WEBCO_URL . 'includes/libs/fullcalendar/locale-all.js');
        wp_register_script('calendrier-js', WEBCO_URL . 'modules/gestionTcp/js/calendrier.js');
        
    }

    wp_enqueue_script('jquery-ui-core');
    wp_enqueue_script('jquery-ui-datepicker');
    wp_enqueue_style('jquery-ui-timepicker-addon-css');
    wp_enqueue_style('fullcalendar-css');
    wp_enqueue_script('jquery-ui-timepicker-addon-js');
    wp_enqueue_script('jquery-ui-timepicker-addon-i18n-js');
    wp_enqueue_script('select2-js');
    wp_enqueue_script('moment-js');
    wp_enqueue_script('fullcalendar-js');
    wp_enqueue_script('locale-fullcalendar-js');
    wp_enqueue_script('calendrier-js');

}

add_action('admin_print_scripts-post-new.php', 'a111_jquery_datepicker_reservation');
add_action('admin_print_scripts-post.php', 'a111_jquery_datepicker_reservation');

add_action('admin_print_scripts-post-new.php', 'a111_jquery_datetimepicker_reservation');
add_action('admin_print_scripts-post.php', 'a111_jquery_datetimepicker_reservation');

function clivern_plugin_top_menu() {
    add_submenu_page("edit.php?post_type=reservation", "Options", "Options", "manage_options", '/options_reservation', "mail_reservation");
}

function mail_reservation() {
    if (isset($_POST['mails']) && !empty($_POST['mails'])) {
        add_option('respo_resa', $_POST['mails']);
        update_option('respo_resa', $_POST['mails']);
    }
    if (isset($_POST['delete_respo_resa']) && !empty($_POST['delete_respo_resa'])) {
        delete_option('respo_resa');
    }
	
	if(isset($_POST['valid_message']) && !empty($_POST['valid_message'])){
		add_option('custom_message', $_POST['custom_message']);
        update_option('custom_message', $_POST['custom_message']);
	}

    ?>
    <style type="text/css">
        .button-primary.button-delete {
            background: #d9534f;
            border-color: #FF5955 #d9534f #d9534f;
            box-shadow: 0 1px 0 #d9534f;
            color: #fff;
            text-decoration: none;
            text-shadow: 0 -1px 1px #d9534f, 1px 0 1px #d9534f, 0 1px 1px #d9534f, -1px 0 1px #d9534f;
        }

        .button-primary.button-delete:hover {
            background-color: #FF5955;
            border: #b74945
        }

    </style>
    <div class='wrap'>
        <form method="post">
            <h3>Responsable(s) de la validation</h3>
            <p>Renseignez l'adresse mail. Vous pouvez enregistrer plusieurs adresses en les séparant par des points virgules, sans espace. Les destinataires recevront les alertes de réservation.</p>
            <input type="text" placeholder="exempleA@domaine.fr;exempleB@domaine.fr" size="80" name="mails" required="required"/>
            <button type="submit" class="button-primary">Valider</button>
        </form>
        <form method="post">
            <button type="submit" name="delete_respo_resa" class="button-primary button-delete" value="delete_respo_resa">Suprimer les adresses enregistrées</button>
        </form>
    </div>
    <h4>Destinataire(s) actuellement enregistré(s) :</h4>
    <?php
    if (!get_option('inputs_resa')) {
        $arrayInput = array("email" => true, "numero_et_rue" => false, "code_postal" => false, "commune" => false, "message" => false, "nom" => false, "telephone" => false);
        add_option('inputs_resa', $arrayInput);
    }
    echo get_option('respo_resa');
    if (isset($_POST['more_input'])) {
        $arrayInput = array("email" => true, "numero_et_rue" => false, "code_postal" => false, "commune" => false, "message" => false, "nom" => false, "telephone" => false); // A ADAPTER
        //$arrayInput = get_option('inputs_resa');
        foreach ($_POST as $idx => $a) {
            if ($idx !== "more_input" && $idx !== "mails") {
                $arrayInput[$idx] = true;
            }
        }
        update_option('inputs_resa', $arrayInput);
    }
    ?>
    <br />
    <br />
    <form method="post">
        <div class='wrap'>
            <h3>Vous pouvez ajouter des champs supplémentaires</h3>
            <p>Les champs suivants peuvent être ajoutés au formulaire de réservation.</p><p><strong>Attention&nbsp;!</strong> Si vous cochez la case "Afficher", les informations saisies seront visibles par tout le monde. Sauf besoin spécifique, nous vous conseillons donc de ne pas activer l'affichage public. A noter que les administrateurs connectés, et seulement eux, ont accès à toutes les informations saisies lorsqu'ils consultent le calendrier des résas, que la case soit cochée ou pas.</p><p>Le champ "Email" est obligatoire pour vous permettre de contacter le demandeur.</p>
            <div class="">
                <?php
                foreach (get_option('inputs_resa') as $idx => $value) {
                    if (strpos($idx, "afficher_") === false) {
                        echo '<div>';
                        if ($value == true) {
                            if ($idx == "email") {
                                echo '<p><input type="checkbox" name="' . $idx . '" checked disabled/>' . ucfirst(str_replace('_', ' ', $idx)) . '</p>';
                            } else {
                                echo '<p><input type="checkbox" name="' . $idx . '" checked/>' . ucfirst(str_replace('_', ' ', $idx)) . '</p>';
                            }
                            if (isset(get_option('inputs_resa')['afficher_' . $idx])) {
                                echo '<p><input type="checkbox" name="afficher_' . $idx . '" checked />Afficher cette information dans le calendrier</p>';
                            } else {
                                echo '<p><input type="checkbox" name="afficher_' . $idx . '"/>Afficher cette information dans le calendrier</p>';
                            }
                        } else {
                            echo '<p><input type="checkbox" name="' . $idx . '"/>' . ucfirst($idx) . '</p>';
                        }
                        echo '<div style="clear:both"></div>';
                        echo '</div>';

                    }
                }
                ?>
                <button type="submit" name="more_input" class="button-primary">Enregistrer</button>
            </div>
        </div>
    </form>
	
	<form method="post">
            <h3>Message de confirmation</h3>
            <p>Voici le texte qui sera envoyé par mail aux demandeurs&nbsp;:</p>
			<p>"Vous avez fait une demande de réservation du [Date réservation] à [Heure] au [Date de fin de réservation] à [Heure].<br />
				Vous recevrez une réponse prochainement. Dans le cas contraire merci de nous contacter."</p>
				<p>Le cas échéant, vous pouvez compléter ce message ci-dessous (exemple : détails pour la finalisation des réservations, réglement, infos pratiques...)</p>
            <textarea name="custom_message" rows="12" cols="64" placeholder="Saisissez ici le texte personnalisé que vous souhaitez ajouter à l'email de confirmation"><?php if(get_option('custom_message')){echo get_option('custom_message');} ?></textarea>
			<div>
            <button type="submit" name="valid_message" value="valid_message" class="button-primary">Valider</button>
			</div>
        </form>
	
    <style type="text/css">
        .wrap div p {
            float: left;
            min-width: 150px;;
        }
    </style>
    <?php
}

add_action('admin_menu', 'clivern_plugin_top_menu');

function a111_create_meta_box_rubrique($post) {
    $args = array(
        'hide_empty' => 0,
        'taxonomy' => 'reservations-rubrique'
    );
    $categories = get_categories($args);
    $id = $post->ID;
    echo '<div>';
    foreach ($categories as $categorie) {
        $resa = get_option('event_' . $id . '');
        if ($categorie->slug) {
            if ($resa === $categorie->slug) {
                echo '<p><label for="' . $categorie->slug . '"><input type="radio" name="cat-resa" id="' . $categorie->slug . '" value="' . $categorie->slug . '" required checked/>' . $categorie->name . '</label></p>';
            } else {
                echo '<p><label for="' . $categorie->slug . '"><input type="radio" name="cat-resa" id="' . $categorie->slug . '" value="' . $categorie->slug . '" required/>' . $categorie->name . '</label></p>';
            }
        } else {
            echo '<p><label for="' . $categorie->slug . '"><input type="radio" name="cat-resa" id="' . $categorie->slug . '" value="' . $categorie->slug . '" required/>' . $categorie->name . '</label></p>';
        }
    }
    echo '</div>';
}

/*
 * Tableau des slugs des groupes aux quels appartient l'utilisateur courant
 */

function a111_array_group_slug_reservation() {
    $tabGroup = get_option('liste_groupe');
    $idUser = get_current_user_id();
    $arrayGroupe = array();
    //$arrayGroupe = $tabGroup;
    // Si l'utilisateur n'est pas administrateur
    if (!current_user_can('administrator') && $idUser != null) {
        foreach ($tabGroup as $value) {
            $tabIdUser = explode(',', get_option($value . '_users'));
            $tabDossier = explode(',', get_option($value));
            if (in_array($idUser, $tabIdUser)) {
                foreach ($tabDossier as $i) {
                    if (!in_array($i, $arrayGroupe)) {
                        $arrayGroupe[] = $value;
                    }
                }
            }
        }
    } else {
        $arrayGroupe = $tabGroup;
    }
    return $arrayGroupe;
}

/* * * AJAX ** */

/**
 * Supprime une resa dont l'id a été passé en parametre
 */
function delete_resa() {
    $id_elmt = $_POST['param'];

    $args = array(
        'post_type' => array('attachment', 'reservation'),
        'post_status' => array('publish', 'inherit', 'draft'), //['publish','draft'],
        'ID' => $id_elmt
    );

    header('Content-type: application/json');

    $ajax_query = new WP_Query($args);

    if ($ajax_query->have_posts()) {
        $response = array();
        while ($ajax_query->have_posts()) {
            $ajax_query->the_post();
            $response = wp_update_post(array('ID' => $id_elmt, 'post_status' => 'trash'));
            delete_post_meta($id_elmt, 'heure'); // A ADAPTER
            delete_post_meta($id_elmt, 'heureFin');
            delete_post_meta($id_elmt, 'datedebut');
            delete_post_meta($id_elmt, 'datefin');
            delete_post_meta($id_elmt, 'info_plus');
        }
    }

    echo json_encode($response);
    exit();
}

add_action('wp_ajax_delete_resa', 'delete_resa');
add_action('wp_ajax_nopriv_delete_resa', 'delete_resa');

/**
 * Créer une resa
 */
function create_resa() {
    global $wpdb, $post;
    $tab = $_POST['param'];

    // var_dump($tab);

    $nom = '';

    $chaine_infos_plus = '';
    
    //$userLog = get_userdata(get_current_user_id())->ID;
    header('Content-type: application/json');
    $response = false;

    // Gestion de l'envoi d'une réservation (svg dans bd)
    // On reformate les dates en aaaa/mm/jj
    foreach ($tab as $value) {
        $a = explode('|', $value);
        if ($a[0] == "dateDebut") {
            $datedebut = $a[1];
            $formatedDateDebut = explode("/", $datedebut);
            $formatedDateDebut = $formatedDateDebut[2] . $formatedDateDebut[1] . $formatedDateDebut[0];
        }
        if ($a[0] == "dateFin") {
            $datefin = $a[1];
            $formatedDateFin = explode("/", $datefin);
            $formatedDateFin = $formatedDateFin[2] . $formatedDateFin[1] . $formatedDateFin[0];
        }
        if ($a[0] == "heureDebut") {
            $heure = $a[1];
            if(strlen($heure) == 4){
                $heure = substr($heure, 0,2).':'.substr($heure,2,2);
            }
        }
        if ($a[0] == "minuteDebut") {
            $minute = $a[1];
        }
        if ($a[0] == "heureFin") {
            $heureFin = $a[1];
            $formatedHeureFin = str_replace(':', '', $heureFin);
            if(strlen($heureFin) == 4){
                $heureFin = substr($heureFin, 0,2).':'.substr($heureFin,2,2);
            }
        }
        if ($a[0] == "minuteFin") {
            $minuteFin = $a[1];
        }
        if ($a[0] == "rubrique-select") {
            $objet = $a[1];
        }
        if ($a[0] == "email") {
            $email = $a[1];
        }
        if($a[0] == "recursive-frequence" && !is_null($a[1]) && $a[1] != ''){
            $frequence = $a[1];
        }
        $iteration = 0;
        if($a[0] == "recursive-iteration" && !is_null($a[1]) && $a[1] != ''){
            $iteration = $a[1];
        }

        if($a[0] == 'nom'){
            $nom = $a[1];
        }

        $infos_plus = 'Infos resa:';
        if ($a[0] != "dateDebut" && $a[0] != "dateFin" && $a[0] != "heureDebut" && $a[0] != "heureFin" && $a[0] != "rubrique-select" && $a[0] != "recursive-frequence" && $a[0] != "recursive-iteration" ) {
            //$infos_plus .= '<p><strong>' . ucfirst($a[0]) . '</strong> : ' . $a[1] . '<p/>';
            foreach (get_option('inputs_resa') as $idx => $value) {
                if ( $a[0] == $idx && $value == true) {
                    $chaine_infos_plus .= '<p><strong>' . ucfirst($a[0]) . '</strong> : ' . $a[1] . '<p/>';
                }
            }
        }


    }
        
    $formatedHeure = $heure.$minute;
    $formatedHeureFin = $heureFin.$minuteFin;

    $tabNomResa = explode('|', $tab[0]);

    if (isset($formatedDateDebut) && isset($formatedDateFin) && isset($heure) && isset($heureFin)) {

        $tabResa = array();
        $tabErreurResa = array();
        $erreurResa = false;

        for($i=0;$i<=$iteration;$i++) {

            $erreurResa = false;

            if($i != 0){
                $newTimeDateDebut =  strtotime("+".$i." ".$frequence, strtotime(str_replace('/', '-',$datedebut)));
                $formatedDateDebut = date('Ymd', $newTimeDateDebut);

                $newTimeDateFin =  strtotime("+".$i." ".$frequence, strtotime(str_replace('/', '-',$datefin)));
                $formatedDateFin = date('Ymd', $newTimeDateFin);
            }

            $args = array(
                'post_type' => 'reservation',
                'post_status' => array('publish', 'draft'),
                'posts_per_page' => -1,
                'tax_query' => array(
                    array(
                        'taxonomy' => 'reservations-rubrique',
                        'field' => 'slug',
                        'terms' => $tabNomResa[1],
                    ),
                ),
            );

            $ajax_query = new WP_Query($args);
            if ($ajax_query->have_posts()) {
                // Récupération de l'ID du term de l'objet que l'on veut réserver
                $objTerm = get_term_by('slug', $tabNomResa[1], 'reservations-rubrique');

                while ($ajax_query->have_posts()) {
                    $ajax_query->the_post();
                    $id = $post->ID;
                    $temp = get_post_meta($id);
                    $arrayPostTerm = wp_get_post_terms($id, 'reservations-rubrique');
                    $postTerm = current($arrayPostTerm);

                    $tempFormatedHeure = str_replace(':', '', $temp['heure'][0]);
                    $tempFormatedHeureFin = str_replace(':', '', $temp['heureFin'][0]);

                    if ($objTerm->term_id == $postTerm->term_id) {
                        
                        // Lorsque la date de debut et de fin sont déjà comprises entre le début et la fin d'une résa ou
                        // Lorsque la date de début est comprise entre le début et la fin d'une résa OU
                        // Lorsque la date de fin est comprise entre le début et la fin d'une résa OU
                        if($temp['datedebut'][0] < $formatedDateDebut && $formatedDateFin < $temp['datefin'][0] ||
                            $temp['datedebut'][0] < $formatedDateDebut && $formatedDateDebut < $temp['datefin'][0] ||
                            $temp['datedebut'][0] < $formatedDateFin && $formatedDateFin < $temp['datefin'][0]){
                            if ($i == $iteration) {
                                    echo json_encode($response);
                                    exit();
                                } else {
                                    $erreurResa = true;
                                    $tabErreurResa[] = array(
                                        'id' => $id,
                                        'heure' => $heure,
                                        'heureFin' => $heureFin,
                                        'datedebut' => substr($formatedDateDebut, 6, 2) . '-' . substr($formatedDateDebut, 4, 2) . '-' . substr($formatedDateDebut, 0, 4),
                                        'datefin' => $formatedDateFin,
                                        'resaOk' => false
                                    );
                                    continue;
                                }
                        // Lorsque la date de début est comprise entre le début et la fin d'une résa
                        } elseif ($temp['datedebut'][0] < $formatedDateFin && $formatedDateDebut < $temp['datefin'][0]) {

                            if(($tempFormatedHeure <= $formatedHeure && $formatedHeure < $tempFormatedHeureFin) ||
                                ($tempFormatedHeure <= $formatedHeureFin && $formatedHeureFin <= $tempFormatedHeureFin)) {
                                if ($i == $iteration) {
                                    echo json_encode($response);
                                    exit();
                                } else {
                                    $erreurResa = true;
                                    $tabErreurResa[] = array(
                                        'id' => $id,
                                        'heure' => $heure,
                                        'heureFin' => $heureFin,
                                        'datedebut' => substr($formatedDateDebut, 6, 2) . '-' . substr($formatedDateDebut, 4, 2) . '-' . substr($formatedDateDebut, 0, 4),
                                        'datefin' => $formatedDateFin,
                                        'resaOk' => false
                                    );
                                    continue;
                                }
                            }

                            if( $temp['datedebut'][0] == $formatedDateDebut) {

                                if ($temp['datefin'][0] == $formatedDateDebut) {
                                    if ($formatedHeure < $tempFormatedHeureFin) {

                                        if ($i == $iteration) {
                                            echo json_encode($response);
                                            exit();
                                        } else {
                                            $erreurResa = true;
                                            $tabErreurResa[] = array(
                                                'id' => $id,
                                                'heure' => $heure,
                                                'heureFin' => $heureFin,
                                                'datedebut' => substr($formatedDateDebut, 6, 2) . '-' . substr($formatedDateDebut, 4, 2) . '-' . substr($formatedDateDebut, 0, 4),
                                                'datefin' => $formatedDateFin,
                                                'resaOk' => false
                                            );
                                            continue;
                                        }
                                    }
                                } elseif ($temp['datefin'][0] > $formatedDateDebut) {

                                    if ($i == $iteration) {
                                        echo json_encode($response);
                                        exit();
                                    } else {
                                        $erreurResa = true;
                                        $tabErreurResa[] = array(
                                            'id' => $id,
                                            'heure' => $heure,
                                            'heureFin' => $heureFin,
                                            'datedebut' => substr($formatedDateDebut, 6, 2) . '-' . substr($formatedDateDebut, 4, 2) . '-' . substr($formatedDateDebut, 0, 4),
                                            'datefin' => $formatedDateFin,
                                            'resaOk' => false
                                        );
                                        continue;
                                    }
                                }
                            }

                        }
                        // Deux evenements qui commencent et se terminent le même jour
                        elseif($temp['datedebut'][0] == $formatedDateDebut && $temp['datefin'][0] == $formatedDateFin){

                            if(($tempFormatedHeure < $formatedHeureFin && $formatedHeureFin < $tempFormatedHeureFin) ||
                                ($tempFormatedHeure < $formatedHeure && $formatedHeure < $tempFormatedHeureFin) ||
                                ($tempFormatedHeure >= $formatedHeure && $tempFormatedHeureFin <= $formatedHeureFin) ||
                                ($tempFormatedHeure == $formatedHeure && $tempFormatedHeureFin == $formatedHeureFin) ){

                                if($i == $iteration) {
                                    echo json_encode($response);
                                    exit();
                                }else{
                                    $erreurResa = true;
                                    $tabErreurResa[] = array(
                                        'id' => $id,
                                        'heure' => $heure,
                                        'heureFin' => $heureFin,
                                        'datedebut' => substr($temp['datefin'][0], 6, 2).'-'.substr($temp['datefin'][0], 4, 2).'-'.substr($temp['datefin'][0], 0, 4),
                                        'datefin' => $formatedDateFin,
                                        'resaOk' => false
                                    );
                                    continue;
                                }
                            }
                        } elseif ($temp['datedebut'][0] == $formatedDateFin) {


                            if($tempFormatedHeure < $formatedHeureFin){

                                if($i == $iteration) {
                                    echo json_encode($response);
                                    exit();
                                }else{
                                    $erreurResa = true;
                                    $tabErreurResa[] = array(
                                        'id' => $id,
                                        'heure' => $heure,
                                        'heureFin' => $heureFin,
                                        'datedebut' => substr($temp['datefin'][0], 6, 2).'-'.substr($temp['datefin'][0], 4, 2).'-'.substr($temp['datefin'][0], 0, 4),
                                        'datefin' => $formatedDateFin,
                                        'resaOk' => false
                                    );
                                    continue;
                                }
                            }
                        } elseif ($temp['datefin'][0] == $formatedDateDebut) {

                            if($formatedHeure < $tempFormatedHeureFin){

                                if($i == $iteration) {
                                    echo json_encode($response);
                                    exit();
                                }else{
                                    $erreurResa = true;
                                    $tabErreurResa[] = array(
                                        'id' => $id,
                                        'heure' => $heure,
                                        'heureFin' => $heureFin,
                                        'datedebut' => substr($formatedDateDebut, 6, 2).'-'.substr($formatedDateDebut, 4, 2).'-'.substr($formatedDateDebut, 0, 4),
                                        'datefin' => $formatedDateFin,
                                        'resaOk' => false
                                    );
                                    continue;
                                }
                            }
                        } elseif( $temp['datedebut'][0] == $formatedDateDebut) {

                            if($temp['datefin'][0] == $formatedDateDebut){
                                if($formatedHeure < $tempFormatedHeureFin){

                                    if($i == $iteration) {
                                        echo json_encode($response);
                                        exit();
                                    }else{
                                        $erreurResa = true;
                                        $tabErreurResa[] = array(
                                            'id' => $id,
                                            'heure' => $heure,
                                            'heureFin' => $heureFin,
                                            'datedebut' => substr($formatedDateDebut, 6, 2).'-'.substr($formatedDateDebut, 4, 2).'-'.substr($formatedDateDebut, 0, 4),
                                            'datefin' => $formatedDateFin,
                                            'resaOk' => false
                                        );
                                        continue;
                                    }
                                }
                            }elseif($temp['datefin'][0] > $formatedDateDebut){

                                if($i == $iteration) {
                                    echo json_encode($response);
                                    exit();
                                }else{
                                    $erreurResa = true;
                                    $tabErreurResa[] = array(
                                        'id' => $id,
                                        'heure' => $heure,
                                        'heureFin' => $heureFin,
                                        'datedebut' => substr($formatedDateDebut, 6, 2).'-'.substr($formatedDateDebut, 4, 2).'-'.substr($formatedDateDebut, 0, 4),
                                        'datefin' => $formatedDateFin,
                                        'resaOk' => false
                                    );
                                    continue;
                                }
                            }
                        }
                    }
                }
            }

            if(!$erreurResa){
                $tabResa[] = array(
                    'heure' => $heure,
                    'heureFin' => $heureFin,
                    'datedebut' => $formatedDateDebut,
                    'datefin' => $formatedDateFin,
                    'resaOk' => true
                );
            }

        }

        if(!empty($tabErreurResa)){
            echo json_encode($tabErreurResa);
            exit();
        }

        foreach($tabResa as $resa) {

            $status = 'draft';

            if(is_user_logged_in() && current_user_can('administrator')){
                $status = "publish";
            }

            $title = $objet;

            if($nom != ''){
                $title = $objet.' - '.$nom;
            }

            $resa_id = wp_insert_post(array(
                'post_title' => $title,
                'post_author' => 1,
                'post_status' => $status,
                'post_author' => $email,
                'post_date' => date('Y-m-d H:i:s'),
                'post_date_gmt' => date('Y-m-d H:i:s'),
                'post_modified' => date('Y-m-d H:i:s'),
                'post_modified_gmt' => date('Y-m-d H:i:s'),
                'post_type' => 'reservation',
                'post_content' => $infos_plus.$chaine_infos_plus,
                'ping_status' => 'closed',
                'comment_status' => 'closed'
            ));

            wp_set_object_terms($resa_id, $objet, 'reservations-rubrique', true);
            add_post_meta($resa_id, 'heure', $heure.':'.$minute, true);
            add_post_meta($resa_id, 'heureFin', $heureFin.':'.$minuteFin, true);
            add_post_meta($resa_id, 'datedebut', $resa['datedebut'], true);
            add_post_meta($resa_id, 'datefin', $resa['datefin'], true);
            add_post_meta($resa_id, 'info_plus', $chaine_infos_plus, true);
            add_post_meta($resa_id, 'email_reservation', $email, true);
            add_option('event_' . $resa_id . '', $objet);

        }
        
        // Mail administrateur
        $to = explode(";", get_option('respo_resa'));
        $subject = 'Demande de réservation';
        $body = 'Une nouvelle reservation a été effectuée.<br />'
            . 'Pensez à donner une réponse aux réservations en attente (statut brouillon), '.get_admin_url().'/edit.php?post_type=reservation';

        $body .= '<br /> --- ';

        $body .= '<br /> IMPORTANT : pour envoyer une réponse au demandeur, utilisez l\'adresse renseignée dans la demande. ';

        $headers = array(
            'Content-Type: text/html; charset=UTF-8',
            'From: ' . get_bloginfo() . ' <' . get_bloginfo('admin_email') . '>'
        );

        if(function_exists('content_mail')) {
            $body = content_mail($body);
        }

        wp_mail($to, $subject, $body, $headers);
                
        // Mail demandeur
        $to = explode(";", get_option('respo_resa'));
        $subject = 'Votre demande de réservation';
		
		$customMessage = get_option('custom_message');
		
		
			$body = 'Vous avez fait une demande de réservation du '.substr($resa['datedebut'], 6, 2) . '/' . substr($resa['datedebut'], 4, 2) . '/' . substr($resa['datedebut'], 0, 4).' à '.$heure.':'.$minute.' au '.substr($resa['datefin'], 6, 2) . '/' . substr($resa['datefin'], 4, 2) . '/' . substr($resa['datefin'], 0, 4).' à '.$heureFin.':'.$minuteFin.'<br />'
				. 'Vous recevrez une réponse prochainement. Dans le cas contraire merci de nous contacter.';
		
		if($customMessage && !empty($customMessage)){
			$body .= nl2br($customMessage);	
		}
		
        $body .= '<br /> Ceci est un e-mail automatique. Merci de ne pas y répondre. ';

        $headers = array(
            'Content-Type: text/html; charset=UTF-8',
            'From: ' . get_bloginfo() . ' <' . get_bloginfo('admin_email') . '>'
        );

        if(function_exists('content_mail')) {
            $body = content_mail($body);
        }

        wp_mail($email, $subject, $body, $headers);
        
        $response = true;

        $_SESSION['ResaValidee'] = true;


    }
    
    echo json_encode($response);
    exit();
}

add_action('wp_ajax_create_resa', 'create_resa');
add_action('wp_ajax_nopriv_create_resa', 'create_resa');
