|
|
|
@ -1,6 +1,6 @@
|
|
|
|
|
<?php |
|
|
|
|
/** |
|
|
|
|
* Ce fichier contient l'API N-Core de gestion des types de noisettes (squelettes). |
|
|
|
|
* Ce fichier contient l'API N-Core de gestion des types de noisette, c'est-à-dire les squelettes et leur YAML. |
|
|
|
|
* |
|
|
|
|
* @package SPIP\NCORE\TYPE_NOISETTE |
|
|
|
|
*/ |
|
|
|
@ -13,10 +13,12 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
|
|
|
|
* Charge ou recharge les descriptions des types de noisette à partir des fichiers YAML. |
|
|
|
|
* Les types de noisettes (squelettes) sont recherchés dans un répertoire relatif fourni en argument. |
|
|
|
|
* La fonction optimise le chargement en effectuant uniquement les traitements nécessaires |
|
|
|
|
* en fonction des modifications, ajouts et suppressions des types de noisettes identifiés en comparant les md5 |
|
|
|
|
* des fichiers YAML. |
|
|
|
|
* en fonction des modifications, ajouts et suppressions des types de noisettes identifiés en comparant |
|
|
|
|
* les md5 des fichiers YAML. |
|
|
|
|
* |
|
|
|
|
* @api |
|
|
|
|
* @uses ncore_type_noisette_lister() |
|
|
|
|
* @uses ncore_type_noisette_stocker() |
|
|
|
|
* |
|
|
|
|
* @param string $plugin |
|
|
|
|
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier |
|
|
|
@ -27,7 +29,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
|
|
|
|
|
* @param bool $recharger |
|
|
|
|
* Si `true` force le rechargement de toutes les types de noisettes, sinon le chargement se base sur le |
|
|
|
|
* md5 des fichiers YAML. Par défaut vaut `false`. |
|
|
|
|
* @param string $stockage |
|
|
|
|
* @param string $stockage |
|
|
|
|
* `stockage` : impose le type de stockage à utiliser pour les descriptions d'types de noisette et |
|
|
|
|
* les signatures des fichiers YAML. Par défaut, la fonction cherche à utiliser le stockage fourni par le |
|
|
|
|
* le plugin appelant et, à défaut, celui fourni par N-Core. |
|
|
|
@ -51,7 +53,7 @@ function ncore_type_noisette_charger($plugin, $dossier = 'noisettes/', $recharge
|
|
|
|
|
include_spip("ncoredata/ncore"); |
|
|
|
|
|
|
|
|
|
// Initialisation des tableaux de types de noisette. |
|
|
|
|
$types_a_ajouter = $types_a_changer = $types_a_effacer = array(); |
|
|
|
|
$types_noisette_a_ajouter = $types_noisette_a_changer = $types_noisette_a_effacer = array(); |
|
|
|
|
|
|
|
|
|
// Récupération des signatures md5 des noisettes déjà enregistrées. |
|
|
|
|
// Si on force le rechargement il est inutile de gérer les signatures et les noisettes modifiées ou obsolètes. |
|
|
|
@ -59,7 +61,7 @@ function ncore_type_noisette_charger($plugin, $dossier = 'noisettes/', $recharge
|
|
|
|
|
if (!$recharger) { |
|
|
|
|
$signatures = ncore_type_noisette_lister($plugin, 'signature', $stockage); |
|
|
|
|
// On initialise la liste des types de noisette à supprimer avec l'ensemble des types de noisette déjà stockés. |
|
|
|
|
$types_a_effacer = $signatures ? array_keys($signatures) : array(); |
|
|
|
|
$types_noisette_a_effacer = $signatures ? array_keys($signatures) : array(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
foreach ($fichiers as $_squelette => $_chemin) { |
|
|
|
@ -150,13 +152,13 @@ function ncore_type_noisette_charger($plugin, $dossier = 'noisettes/', $recharge
|
|
|
|
|
if (!$md5_stocke or $recharger) { |
|
|
|
|
// Le type de noisette est soit nouveau soit on est en mode rechargement forcé: |
|
|
|
|
// => il faut le rajouter. |
|
|
|
|
$types_a_ajouter[] = $description; |
|
|
|
|
$types_noisette_a_ajouter[] = $description; |
|
|
|
|
} else { |
|
|
|
|
// La description stockée a été modifiée et le mode ne force pas le rechargement: |
|
|
|
|
// => il faut mettre à jour le type de noisette. |
|
|
|
|
$types_a_changer[] = $description; |
|
|
|
|
$types_noisette_a_changer[] = $description; |
|
|
|
|
// => et il faut donc le supprimer de la liste de types de noisette obsolètes |
|
|
|
|
$types_a_effacer = array_diff($types_a_effacer, array($type_noisette)); |
|
|
|
|
$types_noisette_a_effacer = array_diff($types_noisette_a_effacer, array($type_noisette)); |
|
|
|
|
} |
|
|
|
|
} else { |
|
|
|
|
// Le type de noisette ne peut plus être utilisé car un des plugins qu'il nécessite n'est plus actif. |
|
|
|
@ -166,7 +168,7 @@ function ncore_type_noisette_charger($plugin, $dossier = 'noisettes/', $recharge
|
|
|
|
|
} else { |
|
|
|
|
// Le type de noisette n'a pas changé et n'a donc pas été réchargé: |
|
|
|
|
// => Il faut donc juste indiquer qu'il n'est pas obsolète. |
|
|
|
|
$types_a_effacer = array_diff($types_a_effacer, array($type_noisette)); |
|
|
|
|
$types_noisette_a_effacer = array_diff($types_noisette_a_effacer, array($type_noisette)); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
@ -177,11 +179,11 @@ function ncore_type_noisette_charger($plugin, $dossier = 'noisettes/', $recharge
|
|
|
|
|
// -- Update des types de noisette modifiés. |
|
|
|
|
// -- Insertion des nouveaux types de noisette. |
|
|
|
|
if ($recharger |
|
|
|
|
or (!$recharger and ($types_a_ajouter or $types_a_effacer or $types_a_changer))) { |
|
|
|
|
$types_noisette = array('a_ajouter' => $types_a_ajouter); |
|
|
|
|
or (!$recharger and ($types_noisette_a_ajouter or $types_noisette_a_effacer or $types_noisette_a_changer))) { |
|
|
|
|
$types_noisette = array('a_ajouter' => $types_noisette_a_ajouter); |
|
|
|
|
if (!$recharger) { |
|
|
|
|
$types_noisette['a_effacer'] = $types_a_effacer; |
|
|
|
|
$types_noisette['a_changer'] = $types_a_changer; |
|
|
|
|
$types_noisette['a_effacer'] = $types_noisette_a_effacer; |
|
|
|
|
$types_noisette['a_changer'] = $types_noisette_a_changer; |
|
|
|
|
} |
|
|
|
|
$retour = ncore_type_noisette_stocker($plugin, $types_noisette, $recharger, $stockage); |
|
|
|
|
} |
|
|
|
@ -270,99 +272,3 @@ function ncore_type_noisette_informer($plugin, $noisette, $information = '', $tr
|
|
|
|
|
|
|
|
|
|
return $retour; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
* Phrase le fichier YAML d'une espece de noisette et renvoie sa description si celle-ci a changé |
|
|
|
|
* sinon renvoie un indicateur permettant de savoir que le YAML est identique. |
|
|
|
|
* |
|
|
|
|
* @param string $noisette |
|
|
|
|
* @param array $options |
|
|
|
|
* |
|
|
|
|
* @return array |
|
|
|
|
*/ |
|
|
|
|
function noisette_phraser($noisette, $options = array()) { |
|
|
|
|
|
|
|
|
|
// Initialisation de la description |
|
|
|
|
$description = array(); |
|
|
|
|
|
|
|
|
|
// Initialiser le contexte de chargement |
|
|
|
|
if (!isset($options['dossier'])) { |
|
|
|
|
$options['dossier'] = 'noisettes/'; |
|
|
|
|
} |
|
|
|
|
if (!isset($options['recharger'])) { |
|
|
|
|
$options['recharger'] = false; |
|
|
|
|
} |
|
|
|
|
if (!isset($options['md5']) or $options['recharger']) { |
|
|
|
|
$options['md5'] = ''; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Initialiser les composants de l'identifiant de la noisette: |
|
|
|
|
// - type-noisette si la noisette est dédiée uniquement à une page |
|
|
|
|
// - type-composition-noisette si la noisette est dédiée uniquement à une composition |
|
|
|
|
// - noisette sinon |
|
|
|
|
$type = ''; |
|
|
|
|
$composition = ''; |
|
|
|
|
$identifiants = explode('-', $noisette); |
|
|
|
|
if (isset($identifiants[1])) { |
|
|
|
|
$type = $identifiants[0]; |
|
|
|
|
} |
|
|
|
|
if (isset($identifiants[2])) { |
|
|
|
|
$composition = $identifiants[1]; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Initialisation de la description par défaut de la page |
|
|
|
|
$description_defaut = array( |
|
|
|
|
'noisette' => $noisette, |
|
|
|
|
'type' => $type, |
|
|
|
|
'composition' => $composition, |
|
|
|
|
'nom' => $noisette, |
|
|
|
|
'description' => '', |
|
|
|
|
'icon' => 'noisette-24.png', |
|
|
|
|
'necessite' => array(), |
|
|
|
|
'contexte' => array(), |
|
|
|
|
'ajax' => 'defaut', |
|
|
|
|
'inclusion' => 'statique', |
|
|
|
|
'parametres' => array(), |
|
|
|
|
'signature' => '', |
|
|
|
|
); |
|
|
|
|
|
|
|
|
|
// Recherche des noisettes par leur fichier YAML uniquement. |
|
|
|
|
$md5 = ''; |
|
|
|
|
$fichier = isset($options['yaml']) ? $options['yaml'] : find_in_path("{$options['dossier']}${noisette}.yaml"); |
|
|
|
|
if ($fichier) { |
|
|
|
|
// il y a un fichier YAML de configuration, on vérifie le md5 avant de charger le contenu. |
|
|
|
|
$md5 = md5_file($fichier); |
|
|
|
|
if ($md5 != $options['md5']) { |
|
|
|
|
include_spip('inc/yaml'); |
|
|
|
|
$description = yaml_charger_inclusions(yaml_decode_file($fichier)); |
|
|
|
|
// Traitements des champs pouvant être soit une chaine soit un tableau |
|
|
|
|
if (!empty($description['necessite']) and is_string($description['necessite'])) { |
|
|
|
|
$description['necessite'] = array($description['necessite']); |
|
|
|
|
} |
|
|
|
|
if (!empty($description['contexte']) and is_string($description['contexte'])) { |
|
|
|
|
$description['contexte'] = array($description['contexte']); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// Si la description est remplie c'est que le chargement a correctement eu lieu. |
|
|
|
|
// Sinon, si la noisette n'a pas changée on renvoie une description limitée à un indicateur d'identité pour |
|
|
|
|
// distinguer ce cas avec une erreur de chargement qui renvoie une description vide. |
|
|
|
|
if ($description) { |
|
|
|
|
// Mise à jour du md5 |
|
|
|
|
$description['signature'] = $md5; |
|
|
|
|
// Complétude de la description avec les valeurs par défaut |
|
|
|
|
$description = array_merge($description_defaut, $description); |
|
|
|
|
// Sérialisation des champs necessite, contexte et parametres qui sont des tableaux |
|
|
|
|
$description['necessite'] = serialize($description['necessite']); |
|
|
|
|
$description['contexte'] = serialize($description['contexte']); |
|
|
|
|
$description['parametres'] = serialize($description['parametres']); |
|
|
|
|
} elseif ($md5 == $options['md5']) { |
|
|
|
|
$description['identique'] = true; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
return $description; |
|
|
|
|
} |
|
|
|
|