<?php
/*
  Fichier : GESTION TCP PLUGIN DIR . '/tcp/tcp-agenda.inc.php'
  Objet : Création d'un TCP
  Nom : TCP Agenda
  Description : Crée un nouveau TCP pour la gestion des agendas
 */

// Création du TCP
function at111_init_TCP_Agenda() {
    $labels = array(
        'name' => 'Agenda',
        'singular_name' => 'Agenda',
        'add_new' => 'Ajouter',
        'add_new_item' => 'Ajouter un contenu',
        'edit_item' => 'Modifier',
        'new_item' => 'Nouveau',
        'all_items' => 'Tous les contenu',
        'view_item' => 'Visualiser',
        'search_items' => 'Rechercher',
        'not_found' => 'Aucun contenu trouvé',
        'not_found_in_trash' => 'Aucun contenu trouvé dans la corbeille',
        'parent_item_colon' => '',
        'menu_name' => 'Agenda'
    );
    $args = array(
        'labels' => $labels,
        'public' => true,
        'publicly_queryable' => true,
        'show_ui' => true,
        'show_in_menu' => true,
        'query_var' => true,
        'rewrite' => array('slug' => 'agenda'),
        'has_archive' => true,
//    	'hierarchical' => false,
        'menu_position' => 20,
        'menu_icon' => 'dashicons-calendar',
        'supports' => array('title', 'editor', 'thumbnail', 'revisions', 'comments'),
        'show_in_rest' => true,
        'rest_base' => 'agenda',
        'rest_controller_class' => 'WP_REST_Posts_Controller'
    );
    // Enregistrement du TCP
    register_post_type('agenda', $args);

    // Labels des rubriques.
    $rubLabels = array(
        'name' => 'Thématiques',
        'singular_name' => 'Thématique',
        'search_items' => 'Rechercher',
        'popular_items' => 'Thématiques souvent utilisées',
        'all_items' => 'Toutes les thématiques',
        'edit_item' => 'Modifier une thématique',
        'update_item' => 'Mettre à jour une thématique',
        'add_new_item' => 'Ajouter une thématique',
        'new_item_name' => 'Nouvelle thématique'
    );

    // Rubriques.
    register_taxonomy('agenda-thematique', 'agenda', array(
        'hierarchical' => true,
        'label' => 'Thématiques',
        'labels' => $rubLabels,
        'rewrite' => array('slug' => 'agenda-thematique'),
        'show_in_nav_menus' => false,
        'show_admin_column' => true
    ));
}

add_action('init', 'at111_init_TCP_Agenda');

// Gestion des colonnes de la liste de contenus
// Pour créer un filtre sur les métadonnées ou autres, voir : http://justintadlock.com/archives/2011/06/27/custom-columns-for-custom-post-types
// Création des entêtes de colonnes
add_filter('manage_edit-agenda_columns', 'my_edit_agenda_columns');

function my_edit_agenda_columns($columns) {
    $columns = array(
        'cb' => '<input type="checkbox" />',
        'title' => __('Titre'),
        'agenda-thematique' => __('Thématique(s)'),
        'datedebut' => __('Date de début'),
        'datefin' => __('Date de fin'),
        'date' => __('Date de publication')
    );
    return $columns;
}

// Remplissage des lignes du tableau
add_action('manage_agenda_posts_custom_column', 'my_manage_agenda_columns', 10, 2);

function my_manage_agenda_columns($column, $post_id) {
    global $post;
    switch ($column) {
        case 'agenda-thematique' :
            $terms = get_the_terms($post_id, 'agenda-thematique');
            /* 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, 'agenda-thematique' => $term->slug), 'edit.php')), esc_html(sanitize_term_field('name', $term->name, $term->term_id, 'agenda-thematique', '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;
        case 'datedebut' :
            $dateDebut = get_post_meta($post_id, 'datedebut', true);
            echo substr($dateDebut, 6, 2) . '/' . substr($dateDebut, 4, 2) . '/' . substr($dateDebut, 0, 4);
            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;
        /* Break out */
        default :
            break;
    }
}

// Enregistrer la meta box dates début/fin
function a111_meta_box_agenda() {
    add_meta_box('a111-meta-box', 'Pérennité de ce contenu', 'a111_create_meta_box_agenda', 'agenda', 'side', 'high');
}

add_action('add_meta_boxes', 'a111_meta_box_agenda');

// création de la boite méta
function a111_create_meta_box_agenda($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);

    // 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 () {
            jQuery('.datepicker').datepicker({dateFormat: 'dd/mm/yy'});
        });
        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 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
}

// Enregistrer les valeurs saisies.
function a111_save_meta_box_agenda($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['date-debut'])) {
        $explodedDatedebutTri = explode("/", $datedebut);
        $datedebutTri = $explodedDatedebutTri[2] . $explodedDatedebutTri[1] . $explodedDatedebutTri[0];
        add_post_meta($post_id, 'tridatedebut', $datedebutTri, true);
        update_post_meta($post_id, 'tridatedebut', $datedebutTri);
    }
}

add_action('save_post', 'a111_save_meta_box_agenda');

// Ajout du script jQuery UI datePicker pour les nouveaux posts
function a111_jquery_datepicker_agenda() {
    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');
}

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