cent-filtres/Views/FiltersView.php
2021-02-19 19:14:50 +01:00

111 lines
3.4 KiB
PHP

<?php
/**
* Class FiltersView
* Gère l'affichage des filtres de mesures
*/
class FiltersView {
public function __construct() {
add_shortcode('graph_mesures', __CLASS__.'::create_measures_filters');
/**
** Ajout des scripts et styles
**/
// TODO : Réfléchir à un moyen de n'inclure tout ce bouzin uniquement si nécessaire (quand filtres appelés)
add_action('wp_enqueue_scripts', __CLASS__.'::enqueue_filters_scripts', 20);
add_action( 'wp_enqueue_scripts', __CLASS__.'::enqueue_filters_style' );
}
static public function enqueue_filters_scripts() {
wp_register_script('filtersJS', plugin_dir_url(__FILE__) . 'inc/filters.js', array('jquery'),'1.1', true);
wp_enqueue_script('filtersJS');
}
static public function enqueue_filters_style() {
wp_enqueue_style( 'filters-style', plugin_dir_url(__FILE__) . 'inc/filters.css' );
}
/**
* Génère la liste des filtres pour les mesures affichées
*/
public static function create_measures_filters() {
// Total des articles
$total = wp_count_posts('post')->publish;
// Ensuite, pour chaque catégorie donnée, on va :
// récupérer le nombre de posts de cette cat
// récupérer la couleur associée
// calculer le pourcentage sur le total de mesures
// créer un bloc html avec la data correspondante
$stats = ["validated", "partially-validated", "discussed", "danger", "rejected", "undiscussed"];
$obj_total = 0;
$html = "";
// C'parti pour le cacamembert
$pie_chart = '<div class="pie">';
$labels = "<div class='home-legend-items'>";
foreach ($stats as $stat) {
// TODO : Sortir la requête du foreach et monter un modèle pour les taxonomies (pour embarquer la couleur)
$stat = get_term_by('slug', $stat, 'post-status');
$color = get_field('couleur', "category_" . $stat->term_id);
$percent = $stat->count * 100 / $total;
$huge = $percent > 50 ? 1 : 0;
static $offset = 0;
$pie_chart .= "<div class='pie__segment $stat->slug' status='$stat->slug'
style='--offset: $offset; --value: $percent; --bg: $color; --over50: $huge;'
filter-label='$stat->name'
filter-id='$stat->slug'>
<p class='label statusTotal $stat->slug'>$stat->count</p>
</div>";
$offset += $percent;
$labels .= "<div class='home-legend-item'>";
$labels .= "<div class='legend-color' style='background-color: $color;'></div>";
$labels .= "<p class='status-title'
status='". $stat->slug ."'
filter-label='$stat->name'
filter-id='$stat->slug'>
$stat->name ( <span class='statusTotal $stat->slug'>$stat->count</span> )</p>";
$labels .= "</div>";
if (in_array($stat->slug, ['validated', 'partially-validated'])) {
$obj_total += $stat->count;
}
}
$pie_chart .= '</div>';
$labels .= '</div>';
//ok, on monte les filtres par catégorie maintenant
$cats_title = "<p class='filters-cats-label'> Thématique </p>";
$cats = "<div class='filters-categories'>
<select name='cat' id='filters_cat_select' class='postform'>
<option value='' selected='selected'>Toutes les thématiques</option>";
foreach (get_categories(['parent' => 0]) as $the_cat) {
$cats .= "<option class='topic'
value='$the_cat->term_id'
filter-label='$the_cat->name'
filter-id='$the_cat->term_id'>
$the_cat->name</option>";
}
$cats .= "</select></div>";
return '<div id="measures-filters-container">' . $cats_title . $cats . $pie_chart . $labels . '</div>' ;
}
}