<?php
/*
Fichier : TEMPLATEPATH. '/inc/modules/tcp-evenements.inc.php'
Objet : Création d'un TCP
Nom : TCP Evénements
Description : Crée un nouveau TCP pour la gestion des événements de l'extranet
*/

// Note : Pour les fonctions Timepicker importer le fichiers css et js dans le thème
// Création du TCP

function at111_init_TCP_Evenements() {

    $labels = array(
        'name' => 'Evénements',
        'singular_name' => 'Evenements',
        'add_new' => 'Ajouter',
        'add_new_item' => 'Ajouter un evenement',
        'edit_item' => 'Modifier',
        'new_item' => 'Nouveau',
        'all_items' => 'Tous les evenements',
        'view_item' => 'Visualiser',
        'search_items' => 'Rechercher',
        'not_found' => 'Aucun evenement trouvé',
        'not_found_in_trash' => 'Aucun evenement trouvé dans la corbeille',
        'parent_item_colon' => '',
        'menu_name' => 'Evénements'
    );

    $args = array(
        'labels' => $labels,
        'public' => true,
        'exclude_from_search' => false,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'evenement'),
        'has_archive' => true,
        'hierarchical' => false,
        'menu_position' => 19,
        'menu_icon' => 'dashicons-warning',
        'supports' => array('title', 'editor', 'revisions')
    );

    // Enregistrement du TCP
    register_post_type('evenement', $args);
}

add_action('init', 'at111_init_TCP_Evenements');



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

function my_edit_evenements_columns($columns) {

    $columns = array(
        'cb' => '<input type="checkbox" />',
        'title' => __('Titre'),
        'datedebut' => __('Date de début'),
        'datefin' => __('Date de fin'),
        'heure' => __('Heure début'),
        'heureFin' => __('Heure fin'),
        'date' => __('Date de publication')
    );
    return $columns;
}

// Remplissage des lignes du tableau
add_action('manage_evenement_posts_custom_column', 'my_manage_evenements_columns', 10, 2);

function my_manage_evenements_columns($column, $post_id) {

    global $post;
    switch ($column) {

        case 'datedebut' :

            $dateDebut = get_post_meta($post_id, 'datedebut', true);
            if ($dateDebut != '') {
                echo substr($dateDebut, 6, 2) . '/' . substr($dateDebut, 4, 2) . '/' . substr($dateDebut, 0, 4);
            } 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);

            if ($dateFin == '') {

                echo '<span style="color:#c00;">Aucune date de fin</span>';
            } else {
                if ($dateJour > $dateFin) {
                    echo '<span style="color:#c00;">' . $formatedDateFin . ' (fini)</span>';
                } else {
                    echo '<span style="color:#0c0;">' . $formatedDateFin . '</span>';
                }
            }
            break;
        case 'heure' :
            $heure = get_post_meta($post_id, 'heure', true);
            if ($heure != '') {
                echo $heure;
            } else {
                echo '<span style="color:#c00;">Aucune heure</span>';
            }
            break;
        case 'heureFin' :
            $heureFin = get_post_meta($post_id, 'heureFin', true);
            if ($heureFin != '') {
                echo $heureFin;
            } else {
                echo '<span style="color:#c00;">Aucune heure</span>';
            }
            break;
        /* Break out */
        default :
            break;
    }
}

// Enregistrer la meta box dates début/fin

function a111_meta_box() {
    add_meta_box('a111-meta-box', 'Choisir les dates de début et de fin', 'a111_create_meta_box', 'evenement', 'side');
    add_meta_box('a111-meta-box-group', 'Groupes', 'a111_create_meta_box_group', 'evenement', 'side');
}

add_action('add_meta_boxes', 'a111_meta_box');

// Création de la boite méta
function a111_create_meta_box($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
    $datejour = date('Ymd');
    if ($datefin != '') {
        if ($datejour > $datefin) {
            // C'est fini
            echo '<p style="color: #c00;">Ce contenu ne s\'affiche plus sur le site car sa date de fin est inférieure à celle d\'aujourd\'hui.<br /><br />Vous pouvez modifier ces dates si vous le souhaitez.</p>';
        } else {
            // C'est encore d'actualité
            echo '<p style="color: #0c0;">Ce contenu est actuellement affiché sur le site. Vous pouvez modifier les dates de début et de fin à volonté.</p>';
        }
    }
    ?>

    <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" 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);
        }
        ?>" />

    </p>
    <p>Date de fin : <br /><input onchange="verifDate()" 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);
        }
        ?>" />

    </p>
    <p>Horaire de début : <br /><input class="datetimepicker" id="heure" name="heure" type="text" value="<?php
        if ($heure) {

            echo $heure;
        }
        ?>" />

    </p>
    <p>Horaire de fin : <br /><input class="datetimepicker" id="heureFin" name="heureFin" type="text" value="<?php
        if ($heureFin) {

            echo $heureFin;
        }
        ?>" />
    </p>
    <p style="font-style: italic; color: #777;">La date de fin est utilisée pour l'arrêt de l'affichage du contenu sur le site.</p>
    <?php
}

// Création de la boite méta pour choisir les groupes

function a111_create_meta_box_group($post) {
    echo '<div id="taxonomy-dossiers-documents-extranet" class="categorydiv">';
    echo '<ul class="categorychecklist form-no-clear">';
    $listeGroupe = get_option('liste_groupe');
    $id = $post->ID;
    if ($listeGroupe != false) {
        foreach ($listeGroupe as $slugGroupe) {
            $nomGroupe = get_option($slugGroupe);
            $event = get_option('event_' . $id . '');
            if ($event) {
                if (in_array($slugGroupe, $event)) {
                    echo '<li class="popular-category"><label class="selectit" for="' . $slugGroupe . '" ><input id="' . $slugGroupe . '" value="' . $slugGroupe . '" name="group-event[]" checked="checked" type="checkbox" /> ' . $nomGroupe . '</label></li>';
                } else {
                    echo '<li class="popular-category"><label class="selectit" for="' . $slugGroupe . '"><input id="' . $slugGroupe . '" value="' . $slugGroupe . '" name="group-event[]" type="checkbox" /> ' . $nomGroupe . '</label></li>';
                }
            } else {
                echo '<li class="popular-category"><label class="selectit" for="' . $slugGroupe . '"><input id="' . $slugGroupe . '" value="' . $slugGroupe . '" name="group-event[]" type="checkbox" /> ' . $nomGroupe . '</label></li>';
            }
        }
    }
    echo '</ul>';
    echo '</div>';
}
// Enregistrer les valeurs saisies.
function a111_save_meta_box($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);
    }
}
add_action('save_post', 'a111_save_meta_box');
// Ajout du script jQuery UI datePicker pour les nouveaux posts
function a111_jquery_datepicker() {
    wp_enqueue_script(
        'field-date-js', 'Field_Date.js', array('jquery', 'jquery-ui-core', '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() {
    wp_enqueue_script(
        'field-date-js', 'Field_Date.js', array('jquery', 'jquery-ui-core', 'jquery-ui-datetimepicker')
    );
    wp_register_style('jquery-ui-timepicker-addon-css', get_template_directory_uri() . '/assets/jquery/jquery-ui-timepicker-addon.css');
    wp_enqueue_style('jquery-ui-timepicker-addon-css');
    wp_register_script('jquery-ui-timepicker-addon-js', get_template_directory_uri() . '/assets/jquery/jquery-ui-timepicker-addon.js');
    wp_enqueue_script('jquery-ui-timepicker-addon-js');
    wp_register_script('jquery-ui-timepicker-addon-i18n-js', get_template_directory_uri() . '/assets/jquery/jquery-ui-timepicker-addon-i18n.min.js');
    wp_enqueue_script('jquery-ui-timepicker-addon-i18n-js');
}
add_action('admin_print_scripts-post-new.php', 'a111_jquery_datepicker');
add_action('admin_print_scripts-post.php', 'a111_jquery_datepicker');
add_action('admin_print_scripts-post-new.php', 'a111_jquery_datetimepicker');
add_action('admin_print_scripts-post.php', 'a111_jquery_datetimepicker');
function a111_group_select() {
    if (!empty($_POST) && isset($_POST['group-event'])) {
        $tabEventGroup = $_POST['group-event'];
        $id = $_POST['post_ID'];
        update_option('event_' . $id . '', $tabEventGroup, false);
    }
}
add_action('save_post', 'a111_group_select');
/*
 * Tableau des slugs des groupes aux quels appartient l'utilisateur courant
 */
function a111_array_group_slug() {
    $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;
}
function a111_query_event() {
    $args_event = array('post_type' => 'evenement',
        'post_status' => 'publish',
        'posts_per_page' => -1
    );
    return $the_query = new WP_Query($args_event);
}
/**
 * @return Tableau des groupes aux quels appartient chaque événements
 */
function a111_group_by_event() {
    global $post;
    $the_query = a111_query_event();
    $arrayEvent = array();
    if ($the_query->have_posts()) {
        while ($the_query->have_posts()) {
            $the_query->the_post();

            $id = $post->ID;
            if (get_option('event_' . $id . '')) {
                $arrayEvent[$id] = get_option('event_' . $id . '');
            }
        }
    }
    return $arrayEvent;
}

/**
 *
 */
function a111_array_event_prive_and_all(){
    global $post;
    $the_query = a111_query_event();
    $arrayPrive = array();
    if ($the_query->have_posts()) {
        while ($the_query->have_posts()) {
            $the_query->the_post();

            $id = $post->ID;
            if($post->post_author == get_userdata(get_current_user_id())->ID) {
                if (get_option('event_' . $id . '')) {
                    foreach (get_option('event_' . $id . '') as $groupe) {
                        if ($groupe == 'prive' || $groupe == 'tous') {
                            $arrayPrive[] = $id;
                        }
                    }
                }
            }
        }
    }

    return $arrayPrive;
}

add_action('admin_menu', 'tcp_top_menu_evenement');
function tcp_top_menu_evenement() {
    add_submenu_page("edit.php?post_type=evenement", "Options", "Options", "manage_options", '/options_evenements', "mail_evenement");
}
function mail_evenement() {
    if (isset($_POST['mails']) && !empty($_POST['mails'])) {
        add_option('respo_event', $_POST['mails']);
        update_option('respo_event', $_POST['mails']);
    }
    if (isset($_POST['delete_respo_event']) && !empty($_POST['delete_respo_event'])) {
        delete_option('respo_event');
    }

    ?>
    <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">
            <h2>Choississez la/les personne(s) responsable(s) de la validation des événements</h2>
            <p>Renseignez l'adresse mail, si vous souhaitez en renseigner plusieurs, séparez les par des points virgules.</p>
            <input type="text" placeholder="Mail(s) : mailA;mailB" size="80" name="mails" required="required"/>
            <button type="submit" class="button-primary">Valider</button>
        </form>
        <form method="post">
            <button type="submit" name="delete_respo_event" class="button-primary button-delete" value="delete_respo_event">Effacer les adresses mails</button>
        </form>
    </div>
    <h4>Destinataire(s) :</h4>
    <?php
    echo get_option('respo_event');
    ?>
    <p><strong>NB: </strong>La première adresse sera utilisée pour recevoir des alertes si des demandes de réservations ne sont pas traitées d'ici 3 et 10jours</p>
    <br />
    <br />
    <form method="post">
        <div class='wrap'>
            <h3>Accepter automatiquement les événements:</h3>
            <div class="">
                <?php
                if(isset($_POST['submit-accept_all_event']) && !empty($_POST['submit-accept_all_event'])) {
                    if (isset($_POST['accept_all_event']) && !empty($_POST['accept_all_event'])) {
                        add_option('accept_all_event', $_POST['accept_all_event']);
                        update_option('accept_all_event', $_POST['accept_all_event']);
                    }else{
                        add_option('accept_all_event', false);
                        update_option('accept_all_event', false);
                    }
                }
                $checked = '';
                $allResa = get_option('accept_all_event');
                if($allResa){
                    $checked = ' checked="checked" ';
                }
                ?>
                <input type="checkbox" name="accept_all_event" value="true" <?php echo $checked; ?> />En cochant cette case les événements seront automatiquement acceptés (les chevauchements de date et horaires sont toujours pris en comprte).
                <br />
                <br />
                <button type="submit" name="submit-accept_all_event" value="submit" class="button-primary">Enregistrer</button>
            </div>
        </div>
    </form>
    <form method="post">
        <div class='wrap'>
            <h3>Envoyer des notifications par mail:</h3>
            <div class="">
                <?php

                if(isset($_POST['submit-send_tpc_evenement_notifications']) && !empty($_POST['submit-send_tpc_evenement_notifications'])) {
                    if (isset($_POST['send_tpc_evenement_notifications']) && !empty($_POST['send_tpc_evenement_notifications'])) {
                        add_option('send_tpc_evenement_notifications', $_POST['send_tpc_evenement_notifications']);
                        update_option('send_tpc_evenement_notifications', $_POST['send_tpc_evenement_notifications']);
                    }else{
                        add_option('send_tpc_evenement_notifications', false);
                        update_option('send_tpc_evenement_notifications', false);
                    }
                }
                $checked = '';
                $mailNotif = get_option('send_tpc_evenement_notifications');
                if($mailNotif){
                    $checked = ' checked="checked" ';
                }
                ?>
                <input type="checkbox" name="send_tpc_evenement_notifications" value="true" <?php echo $checked; ?> />En cochant cette case les personnes liées à l'événement recevront une alerte par mail pour les informer qu'un message les attends sur l'extranet
                <br />
                <br />
                <button type="submit" name="submit-send_tpc_evenement_notifications" value="submit" class="button-primary">Enregistrer</button>
            </div>
        </div>
    </form>
    <?php
}

add_action( 'transition_post_status', 'send_mail_evenements', 10, 3 );
function send_mail_evenements( $new_status, $old_status, $post )
{

    $sendNotif = get_option('send_tpc_evenement_notifications');

    if($new_status == 'publish' && $old_status == 'draft' && $post->post_type == 'evenement' && $sendNotif == true){

        $listGroupEvent = get_option('event_'.$post->ID);

        $arrMailUser = array();

        foreach($listGroupEvent as $group){
            $userGroup = get_option($group.'_users');

            $arrUserGroup = explode(',', $userGroup);

            foreach($arrUserGroup as $idUser){
                $dataUser = get_user_by('ID', $idUser);
                if(!in_array($dataUser->data->user_email, $arrMailUser)) {
                    $arrMailUser[] = $dataUser->data->user_email;
                }
            }
        }


        $sujet = 'Nouvel événement publié';
        $message = "Un nouvel événement a été publié sur l'extranet. Nous vous invitons à vous y connecter pour en prendre connaissance.<br /><br />";
        $message .= "<i>Ceci est un message automatique, il n'est pas nécessaire d'y répondre.</i>";

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

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

        wp_mail($arrMailUser, $sujet, $message, $headers);

    }
}