Browse Source

Ajout d'un champ maj à la table spip_controles.

Correction de la configuration du cache des dashboards.
Ajout de logs.
Utilisation d'icone par défaut en SVG.
PHPDoc et cohérence de nommage des variables de type identifiant.
master
Eric Lupinacci 3 months ago
parent
commit
818a903784
  1. 5
      base/ezcheck_declarations.php
  2. 2
      ezcache/ezcheck.php
  3. 4
      ezcheck_administrations.php
  4. 47
      inc/ezcheck_dashboard.php
  5. 5
      inc/ezcheck_observation.php
  6. 42
      inc/ezcheck_type_controle.php
  7. 6
      paquet.xml
  8. 1
      prive/squelettes/contenu/dashboard.html

5
base/ezcheck_declarations.php

@ -31,7 +31,7 @@ function ezcheck_declarer_tables_principales($tables_principales) {
'parametres' => "text DEFAULT '' NOT NULL", // Paramètres à fournir en entrée de la fonction et/ou du squelette sous forme de saisies
'anomalies' => "text DEFAULT '' NOT NULL", // Liste des identifiants d'anomalies rangée suivant les actions acquitter ou corriger et chemin de l'include des fonctions de correction
'squelette' => "varchar(255) DEFAULT '' NOT NULL", // Chemin relatif du squelette HTML permettant un affichage complémentaire spécifique au contrôle
'contexte' => "text DEFAULT '' NOT NULL", // Tableau de contexte spécifique au squelette (for future use)
'contexte' => "text DEFAULT '' NOT NULL", // Tableau de contexte spécifique au squelette
'actif' => "varchar(3) DEFAULT 'oui' NOT NULL", // Indicateur d'activité du contrôle. Si 'non', aucun contrôle de ce type ne peut être réalisé. Permet aussi de remonter des erreurs (nok, nof)
'signature' => "varchar(32) DEFAULT '' NOT NULL", // MD5 du fichier de configuration du contrôle
'maj' => 'timestamp DEFAULT current_timestamp ON UPDATE current_timestamp',
@ -77,6 +77,7 @@ function ezcheck_declarer_tables_objets_sql($tables_objet_sql) {
'etat_execution' => "varchar(32) DEFAULT 'exec_ok' NOT NULL", // Statut retourné en fin d'exécution : 'exec_ok', 'exec_nok_xxx'
'id_auteur' => 'bigint(21) NOT NULL', // Si activation 'user' id de l'admin sinon 0
'nb_anomalies' => 'smallint DEFAULT 0 NOT NULL', // Nombre d'anomalies ouvertes
'maj' => 'timestamp DEFAULT current_timestamp ON UPDATE current_timestamp',
),
'key' => array(
'PRIMARY KEY' => 'id_controle',
@ -122,7 +123,7 @@ function ezcheck_declarer_tables_objets_sql($tables_objet_sql) {
'est_anomalie' => "varchar(3) DEFAULT 'oui' NOT NULL", // Indicateur d'anomalie 'oui' ou 'non'
'gravite' => "varchar(1) DEFAULT 'e' NOT NULL", // Gravité de l'anomalie : 'e' pour erreur, 'a' pour avertissement et 'i' pour info
'code' => "varchar(127) DEFAULT '' NOT NULL", // Identifiant relatif d'une observation
'statut' => "varchar(10) DEFAULT 'publie' NOT NULL", // Statut de l'anomalie : 'publie', 'corrige', 'poubelle'
'statut' => "varchar(10) DEFAULT 'publie' NOT NULL", // Statut de l'anomalie : 'ouverte', 'fermee', 'poubelle'
'parametres' => "text DEFAULT '' NOT NULL", // Paramètres permettant d'expliquer l'observation
'date' => "datetime DEFAULT '0000-00-00 00:00:00' NOT NULL", // Date correspondant au statut courant
'maj' => 'timestamp DEFAULT current_timestamp ON UPDATE current_timestamp',

2
ezcache/ezcheck.php vendored

@ -23,7 +23,7 @@ function ezcheck_cache_configurer($plugin) {
'sous_dossier' => false,
'nom_obligatoire' => array('nom'),
'nom_facultatif' => array(),
'extension' => '.txt',
'extension' => '.php',
'securisation' => true,
'serialisation' => true,
'decodage' => false,

4
ezcheck_administrations.php

@ -38,6 +38,10 @@ function ezcheck_upgrade($nom_meta_base_version, $version_cible) {
array('sql_alter', "TABLE spip_types_controles ADD necessite text DEFAULT '' NOT NULL AFTER icone"),
);
$maj['4'] = array(
array('sql_alter', "TABLE spip_controles ADD maj timestamp DEFAULT current_timestamp ON UPDATE current_timestamp"),
);
include_spip('base/upgrade');
maj_plugin($nom_meta_base_version, $version_cible, $maj);
}

47
inc/ezcheck_dashboard.php

@ -30,14 +30,14 @@ function dashboard_charger() {
$extension = pathinfo($_config, PATHINFO_EXTENSION);
// L'identifiant du dashboard est son nom de fichier sans extension
$dashboard_id = basename($_config, ".$extension");
$id_dashboard = basename($_config, ".$extension");
// Initialisation de la description par défaut du type de contrôle
$description_defaut = array(
'identifiant' => $dashboard_id,
'nom' => $dashboard_id,
'identifiant' => $id_dashboard,
'nom' => $id_dashboard,
'description' => '',
'icone' => 'dashboard_defaut-24.png',
'icone' => 'dashboard_defaut-24.svg',
'groupes' => array(),
);
@ -65,14 +65,14 @@ function dashboard_charger() {
// des groupes et/ou des types de contrôle à un groupe.
$flux = array(
'args' => array(
'dashboard' => $dashboard_id,
'dashboard' => $id_dashboard,
),
'data' => $description
);
$description = pipeline('ezdashboard_declarer', $flux);
// On ajoute le dashboard nouveau ou modifié
$dashboards[$dashboard_id] = $description;
$dashboards[$id_dashboard] = $description;
}
// Etant donné que le nombre dashboard est réduit tout comme les informations qui le compose on choisit
@ -95,20 +95,20 @@ function dashboard_charger() {
*
* @api
*
* @param string $dashboard_id Identifiant du dashboard.
* @param string $id_dashboard Identifiant du dashboard.
* @param bool $traiter_typo Indique si les données textuelles doivent être retournées brutes ou si elles doivent
* être traitées en utilisant la fonction typo.
*
* @return array La description complète. Si demandé, les champs textuels peuvent être traités avec la fonction typo().
*/
function dashboard_lire($dashboard_id, $traiter_typo = false) {
function dashboard_lire($id_dashboard, $traiter_typo = false) {
// On met en cache mémoire statique les dashboards déjà lus.
static $dashboards_charges = array();
// On vérifie si le dashboard demandé n'est pas déjà stocké : si oui, la description est renvoyée immédiatement
if (isset($dashboards_charges[$traiter_typo][$dashboard_id])) {
$dashboard = $dashboards_charges[$traiter_typo][$dashboard_id];
if (isset($dashboards_charges[$traiter_typo][$id_dashboard])) {
$dashboard = $dashboards_charges[$traiter_typo][$id_dashboard];
} else {
// Il faut charger le dashboard depuis le cache. On initialise avec le tableau qui est indique une erreur.
$dashboard = array();
@ -117,9 +117,9 @@ function dashboard_lire($dashboard_id, $traiter_typo = false) {
$dashboards_caches = dashboard_repertorier();
// Sauvegarde de la description de la page pour une consultation ultérieure dans le même hit.
if (isset($dashboards_caches[$dashboard_id])) {
if (isset($dashboards_caches[$id_dashboard])) {
// Extraction du dashboard demandé
$dashboard = $dashboards_caches[$dashboard_id];
$dashboard = $dashboards_caches[$id_dashboard];
// Traitements des champs textuels
if ($traiter_typo) {
@ -133,10 +133,10 @@ function dashboard_lire($dashboard_id, $traiter_typo = false) {
}
// Stockage de la description du dashboard lu
$dashboards_charges[$traiter_typo][$dashboard_id] = $dashboard;
$dashboards_charges[$traiter_typo][$id_dashboard] = $dashboard;
} else {
// En cas d'erreur stocker un dashboard vide
$dashboards_charges[$traiter_typo][$dashboard_id] = array();
$dashboards_charges[$traiter_typo][$id_dashboard] = array();
}
}
@ -182,27 +182,28 @@ function dashboard_repertorier($information = '') {
/**
* Renvoie la configuration complète d’un dashboard ainsi que ainsi que des informations supplémentaires provenant
* de l'environnement de la page dashboard (groupe et type de contrôle à afficher par défaut).
*
*
* @param string $dashboard_id Identifiant du dashboard
* @param mixed $groupe_id Identifiant du groupe dont on souhaite récupérer la configuration
* @param mixed $type_controle
* @param string $id_dashboard Identifiant du dashboard
* @param mixed $id_groupe Identifiant du groupe affiché par défaut
* @param mixed $type_controle Identifiant du type de contrôle affiché par défaut
*
* @return array
*/
function dashboard_contextualiser($dashboard_id, $groupe_id, $type_controle) {
function dashboard_contextualiser($id_dashboard, $id_groupe, $type_controle) {
// On initialise le contexte à vide en cas d'erreur
$contexte = array();
// On récupère la description du dashboard désigné par son identifiant
include_spip('inc/ezcheck_dashboard');
if ($dashboard_id) {
$contexte = dashboard_lire($dashboard_id);
if ($id_dashboard) {
$contexte = dashboard_lire($id_dashboard);
// On rajoute le groupe à afficher ou à défaut le premier
if (isset($contexte['groupes'][$groupe_id])) {
$contexte['groupe_id_defaut'] = $groupe_id;
if (isset($contexte['groupes'][$id_groupe])) {
$contexte['groupe_id_defaut'] = $id_groupe;
} else {
$groupe = reset($contexte['groupes']);
$contexte['groupe_id_defaut'] = $groupe['identifiant'];

5
inc/ezcheck_observation.php

@ -147,8 +147,10 @@ function observation_cloturer($action, $id_observation, $id_auteur) {
// Exécuter la fonction de correction configurée qui existe forcément (si le contrôle n'est pas exécutable)
include_spip($type_controle['anomalies']['include']);
$corriger = "{$controle['type_controle']}_{$observation['code']}";
// La fonction de correction doit retourner '' si ok et un identifiant d'erreur non vide sinon.
if ($erreur = $corriger($id_observation, $id_auteur)) {
$pre_traitement_ok = false;
spip_log("Fonction de correction : `$corriger` en erreur ($erreur)", 'ezcheck' . _LOG_ERREUR);
}
}
@ -161,8 +163,9 @@ function observation_cloturer($action, $id_observation, $id_auteur) {
// Changement de statut
if ($erreur = objet_modifier('observation', $id_observation, $maj_observation)) {
$retour = false;
spip_log("Modification de l'observation `$id_observation` en erreur ($erreur)", 'ezcheck' . _LOG_ERREUR);
} elseif (
($action != 'supprimer')
($action !== 'supprimer')
and ($observation['est_anomalie'] === 'oui')
) {
// Traitements post changement de statut :

42
inc/ezcheck_type_controle.php

@ -77,7 +77,7 @@ function type_controle_charger($recharger = false) {
'identifiant' => $_type_controle,
'nom' => $_type_controle,
'description' => '',
'icone' => 'controle_defaut-24.png',
'icone' => 'controle_defaut-24.svg',
'necessite' => [],
'est_etat' => 'non',
'include' => '',
@ -295,7 +295,7 @@ function type_controle_charger($recharger = false) {
*
* @api
*
* @param string $identifiant La valeur de l'identifiant du type de contrôle.
* @param string $id_type_controle La valeur de l'identifiant du type de contrôle.
* @param array|string $champs Identifiant d'un champ ou de plusieurs champs de la description d'un type de contrôle.
* Si l'argument est vide, la fonction renvoie la description complète.
* Les tableaux sont désérialisés systématiquement.
@ -309,32 +309,32 @@ function type_controle_charger($recharger = false) {
* - `false` : l'objet demandé n'existe pas OU le champs demandé n'existe pas
* - `string|int` : valeur du champ pour l'objet demandé
*/
function type_controle_lire($identifiant, $champs = array()) {
function type_controle_lire($id_type_controle, $champs = array()) {
// Initialisation des tableaux statiques
static $types_controle = array();
if (!isset($types_controle[$identifiant])) {
if (!isset($types_controle[$id_type_controle])) {
// Condition sur l'identifiant
$where = array(
'identifiant=' . sql_quote($identifiant)
'identifiant=' . sql_quote($id_type_controle)
);
// Acquisition de tous les champs du type de contrôle et sauvegarde.
if ($types_controle[$identifiant] = sql_fetsel('*', 'spip_types_controles', $where)) {
if ($types_controle[$id_type_controle] = sql_fetsel('*', 'spip_types_controles', $where)) {
// Traitements des champs tableaux sérialisés
$types_controle[$identifiant]['necessite'] = unserialize($types_controle[$identifiant]['necessite']);
$types_controle[$identifiant]['parametres'] = unserialize($types_controle[$identifiant]['parametres']);
$types_controle[$identifiant]['anomalies'] = unserialize($types_controle[$identifiant]['anomalies']);
$types_controle[$identifiant]['contexte'] = unserialize($types_controle[$identifiant]['contexte']);
$types_controle[$id_type_controle]['necessite'] = unserialize($types_controle[$id_type_controle]['necessite']);
$types_controle[$id_type_controle]['parametres'] = unserialize($types_controle[$id_type_controle]['parametres']);
$types_controle[$id_type_controle]['anomalies'] = unserialize($types_controle[$id_type_controle]['anomalies']);
$types_controle[$id_type_controle]['contexte'] = unserialize($types_controle[$id_type_controle]['contexte']);
} else {
// L'objet n'existe pas, on renvoie false pour le préciser.
$types_controle[$identifiant] = false;
$types_controle[$id_type_controle] = false;
}
}
// On extrait la description correspondant à l'identifiant
$retour = $types_controle[$identifiant];
$retour = $types_controle[$id_type_controle];
if ($retour and !empty($champs)) {
// Extraction des seules informations demandées.
@ -403,7 +403,7 @@ function type_controle_repertorier($filtres = array(), $champ = '') {
* servant uniquement à l'affichage d'un squelette (ce n'est pas un état). Dans ce cas l'exécution ne fait que créer
* un contrôle en pass thru.
*
* @param string $identifiant Id tu type de contrôle
* @param string $id_type_controle Id tu type de contrôle
* @param int $id_auteur Id de l'auteur ayant lancé le contrôle (ou 0 pour le CRON)
* @param array $options Tableau des arguments valorisés de la fonction et/ou du squelette. Peut être vide, sinon
* possède deux index `fonction` et `squelette`. Seul l'index `fonction` est fourni à la
@ -411,7 +411,7 @@ function type_controle_repertorier($filtres = array(), $champ = '') {
*
* @return bool
*/
function type_controle_executer($identifiant, $id_auteur, $options = array()) {
function type_controle_executer($id_type_controle, $id_auteur, $options = array()) {
// On initialise le retour de la fonction à erreur
$retour = false;
@ -427,7 +427,7 @@ function type_controle_executer($identifiant, $id_auteur, $options = array()) {
);
$options = array_merge($parametres_defaut, $options);
$controle = array(
'type_controle' => $identifiant,
'type_controle' => $id_type_controle,
'parametres' => serialize($options),
'date' => date('Y-m-d H:i:s'),
'id_auteur' => $id_auteur,
@ -439,7 +439,7 @@ function type_controle_executer($identifiant, $id_auteur, $options = array()) {
// Le contrôle a bien été créé, on peut exécuter la fonction de contrôle qui coincide avec
// l'identifiant du type de contrôle.
// -- récupération de l'include et chargement.
$type_controle = type_controle_lire($identifiant);
$type_controle = type_controle_lire($id_type_controle);
// Il existe deux types de fonctions d'exécution:
// -- la fonction créée spécialement pour l'occasion et qui porte le nom du type : elle a forcément les
@ -448,7 +448,7 @@ function type_controle_executer($identifiant, $id_auteur, $options = array()) {
// De fait, il faut distinguer ces deux cas car l'appel et le retour sont différents
$maj_controle = array();
$fonction = $type_controle['fonction'];
if ($identifiant === $fonction) {
if ($id_type_controle === $fonction) {
// -- la fonction de contrôle ne fait que détecter et créer des observations et retourne une chaine vide
// ou un identifiant d'erreur suivant que le traitement s'est bien déroulé ou pas.
// Aucune information n'est fournie par la fonction sur le nombre d'anomalies détectées.
@ -493,16 +493,16 @@ function type_controle_executer($identifiant, $id_auteur, $options = array()) {
*
* @api
*
* @param string $identifiant Identifiant du type de contrôle.
* @param string $id_type_controle Identifiant du type de contrôle.
*
* @return string Idenfiant du dashboard de rattachement ou chaine vide sinon.
*/
function type_controle_identifier_dashboard($identifiant) {
function type_controle_identifier_dashboard($id_type_controle) {
// On renvoie chaine vide si pas trouvé
$id_dashboard = '';
if ($identifiant) {
if ($id_type_controle) {
// Acquérir tous les dashboards
include_spip('inc/ezcheck_dashboard');
$dashboards = dashboard_repertorier();
@ -511,7 +511,7 @@ function type_controle_identifier_dashboard($identifiant) {
foreach ($dashboards as $_id => $_dashboard) {
if (isset($_dashboard['groupes'])) {
foreach ($_dashboard['groupes'] as $_groupe) {
if (in_array($identifiant, $_groupe['controles'])) {
if (in_array($id_type_controle, $_groupe['controles'])) {
$id_dashboard = $_id;
$controle_trouve = true;
break;

6
paquet.xml

@ -1,10 +1,10 @@
<paquet
prefix="ezcheck"
version="1.1.3"
version="1.1.4"
etat="stable"
compatibilite="[4.0.0;4.1.*]"
logo="ezcheck.svg"
schema="3"
schema="4"
>
<nom>Check Factory</nom>
<!-- Faciliter la gestion de contrôles et d'anomalies -->
@ -24,7 +24,7 @@
<necessite nom="yaml" compatibilite="[3.0.1;[" />
<necessite nom="saisies" compatibilite="[4.0.0;[" />
<necessite nom="ezcache" compatibilite="[1.2.5;[" />
<necessite nom="ezcache" compatibilite="[1.2.6;[" />
<menu nom="ezcheck" titre="ezcheck:ezcheck_titre_page" parent="menu_administration" icone="images/ezcheck-16.png" action="ezcheck" />
</paquet>

1
prive/squelettes/contenu/dashboard.html

@ -111,6 +111,7 @@
</div>
</BOUCLE_non_etat>
[(#REM) <!-- Résultats d'exécution autres que les observations ou données de l'état -->]
<div class="resultats">
<BOUCLE_affichage(CONDITION){si #CHAMP_SQL{squelette}}>

Loading…
Cancel
Save