<?php
/**
 * Gestion de la capacité et des rôles autorisés.
 */

defined( 'ABSPATH' ) || exit;

/**
 * Attribue ou retire MAIRIE_AFFICHE_INFORMATION_CAP aux rôles du site en cours.
 */
class Mairie_Affiche_Information_Capacites {

	/**
	 * Aligne la capacité sur la liste de rôles fournie.
	 *
	 * Les rôles absents de la liste perdent la capacité : cocher/décocher
	 * dans les réglages suffit donc à ouvrir ou fermer l'accès.
	 *
	 * @param array $roles_autorises Identifiants de rôles.
	 */
	public static function synchroniser( $roles_autorises ) {
		$roles_autorises = array_map( 'sanitize_key', (array) $roles_autorises );
		$roles_autorises[] = 'administrator';

		foreach ( wp_roles()->get_names() as $slug => $nom ) {
			$role = get_role( $slug );
			if ( ! $role ) {
				continue;
			}
			if ( in_array( $slug, $roles_autorises, true ) ) {
				$role->add_cap( MAIRIE_AFFICHE_INFORMATION_CAP );
			} else {
				$role->remove_cap( MAIRIE_AFFICHE_INFORMATION_CAP );
			}
		}
	}

	/**
	 * Retire la capacité de tous les rôles (désactivation, désinstallation).
	 */
	public static function retirer_partout() {
		foreach ( array_keys( wp_roles()->get_names() ) as $slug ) {
			$role = get_role( $slug );
			if ( $role ) {
				$role->remove_cap( MAIRIE_AFFICHE_INFORMATION_CAP );
			}
		}
	}

	/**
	 * Liste des rôles du site, pour l'écran de réglages.
	 *
	 * @return array slug => nom traduit.
	 */
	public static function roles_du_site() {
		return wp_roles()->get_names();
	}
}
