{% extends 'base.html.twig' %} {% block title %}Propositions archivées OSM{% endblock %} {% block stylesheets %} {{ parent() }} {% endblock %} {% block body %}

Propositions archivées OpenStreetMap

Analyse des votes sur les propositions archivées du wiki OSM

{% if last_updated %}
Dernière mise à jour : {{ last_updated|date('d/m/Y H:i') }}
{% if limit %}
Les données sont limitées à {{ limit }} propositions. Voir toutes les propositions
{% endif %}
{% endif %} {% if statistics %}

Statistiques globales

{{ statistics.total_proposals|default(proposals|length) }}
Propositions analysées
{{ statistics.total_votes|default(0) }}
Votes au total
{{ statistics.avg_votes_per_proposal|default(0) }}
Votes par proposition (moyenne)
Excluant les propositions sans votes
{{ statistics.unique_voters|default(0) }}
Votants uniques
{{ statistics.median_votes_per_proposal|default(0) }}
Votes par proposition (médiane)
Excluant les propositions sans votes
{{ statistics.std_dev_votes_per_proposal|default(0) }}
Votes par proposition (écart type)
Excluant les propositions sans votes
{% if statistics.avg_vote_duration_days is defined %}
{{ statistics.avg_vote_duration_days }}
Durée moyenne des votes (jours)
{% endif %} {% if statistics.status_distribution is defined and statistics.status_distribution|length > 0 %}

Répartition par statut

Détail des statuts

{% for status, count in statistics.status_distribution %} {% endfor %}
Statut Nombre Pourcentage
{{ status }} {{ count }} {{ (count / statistics.total_proposals * 100)|round(1) }}%
{% endif %}

Répartition des années des propositions

Contributeurs les plus actifs

{% for voter in statistics.top_voters|default([]) %} {% endfor %}
# Utilisateur Total votes Approbations Abstentions Oppositions Répartition
{{ loop.index }} {{ voter.username }} {{ voter.total }} {{ voter.approve }} {{ voter.abstain }} {{ voter.oppose }}
{% if voter.approve > 0 %}
{{ (voter.approve / voter.total * 100)|round }}%
{% endif %} {% if voter.abstain > 0 %}
{{ (voter.abstain / voter.total * 100)|round }}%
{% endif %} {% if voter.oppose > 0 %}
{{ (voter.oppose / voter.total * 100)|round }}%
{% endif %}
{% endif %}

Liste des propositions archivées

{% for proposal in proposals %} {% set total_votes = proposal.votes.approve.count + proposal.votes.oppose.count + proposal.votes.abstain.count %} {% set is_approved = proposal.votes.approve.count > proposal.votes.oppose.count %} {% set is_rejected = proposal.votes.approve.count < proposal.votes.oppose.count %} {% set is_neutral = proposal.votes.approve.count == proposal.votes.oppose.count %}
{% if total_votes > 0 %}
Résultats des votes ({{ total_votes }} votes)
{% if proposal.votes.approve.count > 0 %}
{{ proposal.votes.approve.count }} ({{ proposal.approve_percentage }}%)
{% endif %} {% if proposal.votes.abstain.count > 0 %}
{{ proposal.votes.abstain.count }} ({{ proposal.abstain_percentage }}%)
{% endif %} {% if proposal.votes.oppose.count > 0 %}
{{ proposal.votes.oppose.count }} ({{ proposal.oppose_percentage }}%)
{% endif %}

{% if proposal.votes.approve.users|length > 0 %}
Approbations ({{ proposal.votes.approve.count }}):
{% for user in proposal.votes.approve.users %}
{{ user.username }} {% if user.comment is defined and user.comment is not empty %}
{{ user.comment }}
{% endif %}
{% endfor %}
{% endif %} {% if proposal.votes.abstain.users|length > 0 %}
Abstentions ({{ proposal.votes.abstain.count }}):
{% for user in proposal.votes.abstain.users %}
{{ user.username }} {% if user.comment is defined and user.comment is not empty %}
{{ user.comment }}
{% endif %}
{% endfor %}
{% endif %} {% if proposal.votes.oppose.users|length > 0 %}
Oppositions ({{ proposal.votes.oppose.count }}):
{% for user in proposal.votes.oppose.users %}
{{ user.username }} {% if user.comment is defined and user.comment is not empty %}
{{ user.comment }}
{% endif %}
{% endfor %}
{% endif %}
{% else %}
Aucun vote trouvé pour cette proposition.
{% endif %}
{% else %}
Aucune proposition archivée n'a été trouvée.
{% endfor %}
{% endblock %} {% block javascripts %} {{ parent() }} {% endblock %}