111 lines
3.4 KiB
PHP
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>' ;
|
|
|
|
}
|
|
|
|
} |