Browse Source

Sauvegarde intermédiaire

svn/attic/tags/v010/106508
eric@smellup.net 6 years ago
parent
commit
ff6266b9d4
  1. 100
      inc/ncore_noisette.php
  2. 109
      ncore/ncore.php

100
inc/ncore_noisette.php

@ -0,0 +1,100 @@
<?php
/**
* Ce fichier contient l'API N-Core de gestion des noisette, c'est-à-dire les instances paramétrées
* de types de noisettes affectées à un squelette.
*
* @package SPIP\NCORE\NOISETTE
*/
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
/**
* Ajoute à un squelette, à un rang donné ou en dernier rang, une noisette d'un type donné.
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
* un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
* @param string $type_noisette
* Identifiant du type de noisette à ajouter au squelette.
* @param string $squelette
* Nom du bloc où ajouter la noisette.
* @param int $rang
* Rang dans le squelette où insérer la noisette. Si l'argument n'est pas fourni ou est égal à 0 on insère la
* noisette en fin de bloc.
* @param string $stockage
* Identifiant du service de stockage à utiliser si précisé. Dans ce cas, ni celui du plugin
* ni celui de N-Core ne seront utilisés. En général, cet identifiant est le préfixe d'un plugin
* fournissant le service de stockage souhaité.
*
* @return mixed
* Retourne l'identifiant de la nouvelle instance de noisette créée ou `false` en cas d'erreur.
**/
function ncore_noisette_ajouter($plugin, $type_noisette, $squelette, $rang = 0, $stockage = '') {
// Initialisation de la valeur de sortie.
$noisette_ajoutee = false;
if ($type_noisette) {
// On récupère les paramètres du type de noisette.
include_spip('inc/ncore_type_noisette');
$champs = ncore_type_noisette_informer(
$plugin,
$type_noisette,
'parametres',
false,
$stockage);
// Et on leur associe des valeurs par défaut.
include_spip('inc/saisies');
$parametres = saisies_lister_valeurs_defaut($champs);
// On initialise la description de la noisette à ajouter
$description = array(
'plugin' => $plugin,
'squelette' => $squelette,
'noisette' => $type_noisette,
'rang' => intval($rang),
'parametres' => serialize($parametres),
'balise' => 'defaut',
'css' => ''
);
// On charge l'API de N-Core.
// Ce sont ces fonctions qui aiguillent ou pas vers une fonction spécifique du service.
include_spip("ncore/ncore");
// On récupère les noisettes déjà affectées au squelette sous la forme d'un tableau indexé par l'identifiant
// de la noisette stocké dans l'index 'id_noisette'.
$noisettes = ncore_noisette_lister($plugin, $squelette, '', $stockage);
// On calcule le rang max déjà utilisé.
$rang_max = $noisettes ? max(array_column($noisettes, 'rang')) : 0;
if (!$rang) {
// Si, le rang est nul, on positionne la noisette à ajouter au rang max + 1.
$description['rang'] = $rang_max + 1;
} else {
// Si le rang est non nul c'est qu'on insère la noisette dans la liste existante. Néanmoins, si le rang
// est strictement supérieur au rang_max c'est que la nouvelle noisette est ajoutée après les noisettes
// existantes, donc on ne fait rien.
// Sinon, il faut décaler les noisettes de rang supérieur ou égal.
if ($rang <= $rang_max) {
$modification['squelette'] = $description['squelette'];
foreach ($noisettes as $_id_noisette => $_description) {
if ($_description['rang'] >= $rang) {
$modification['id_noisette'] = $_description['id_noisette'];
$modification['rang'] = $_description['rang'] + 1;
ncore_noisette_stocker($plugin, 'modification', $modification, $stockage);
}
}
}
}
// La description de la nouvelle noisette est prête à être stockée.
$noisette_ajoutee = ncore_noisette_stocker($plugin,'creation', $description, $stockage);
}
return $noisette_ajoutee;
}

109
ncore/ncore.php

@ -14,6 +14,10 @@ if (!defined('_ECRIRE_INC_VERSION')) {
}
// -----------------------------------------------------------------------
// ------------------------- TYPES DE NOISETTE ---------------------------
// -----------------------------------------------------------------------
/**
* Stocke les descriptions des types de noisette en distinguant les types de noisette obsolètes, les types de
* noisettes modifiés et les types de noisettes nouveaux.
@ -207,3 +211,108 @@ function ncore_type_noisette_lister($plugin, $information = '', $stockage = '')
return $types_noisettes;
}
// -----------------------------------------------------------------------
// ----------------------------- NOISETTES -------------------------------
// -----------------------------------------------------------------------
/**
* @param $plugin
* @param $description
* @param string $stockage
*
* @return string
*/
function ncore_noisette_stocker($plugin, $action, $description, $stockage = '') {
// On cherche le service de stockage à utiliser selon la logique suivante :
// - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
// - sinon, on utilise la fonction du plugin appelant si elle existe;
// - et sinon, on utilise la fonction de N-Core.
include_spip('inc/ncore_utils');
if ($stocker = ncore_chercher_fonction($plugin, 'noisette_stocker', $stockage)) {
// On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage.
$noisette = $stocker($plugin, $action, $description);
} else {
// Le plugin ne propose pas de fonction propre ou le stockage N-Core est explicitement demandé.
// -- N-Core stocke les noisettes dans une meta propre au plugin appelant contenant un tableau au format
// [squelette][rang] = description
// N-Core calcule un identifiant unique pour la noisette qui sera stocké à l'index 'id_noisette' et qui
// vaudra uniqid() avec comme préfixe le plugin appelant.
include_spip('inc/config');
// On lit la meta de stockage des noisettes pour le plugin appelant.
// Le tableau est au format [squelette][rang] = description.
$noisettes = lire_config("${plugin}_noisettes", array());
if ($action == 'creation') {
// Ajout de la noisette :
// -- la description est complète à l'exception de l'id unique qui est créé à la volée
// -- et on range la noisette avec les noisettes affectées au même squelette en fonction de son rang.
$description['id_noisette'] = uniqid("${plugin}_");
$noisettes[$description['squelette']][$description['rang']] = $description;
} elseif ($noisettes[$description['squelette']][$description['rang']]) {
// Modification de certains champs de la noisette :
// -- les informations identifiant sont toujours fournies, à savoir, l'id, le squelette et le rang.
// -- on utilise le squelette et le rang pour se positionner sur la noisette concernée.
$noisettes[$description['squelette']][$description['rang']] = array_merge(
$noisettes[$description['squelette']][$description['rang']],
$description);
}
// On met à jour la meta
ecrire_config("${plugin}_noisettes", $noisettes);
// On renvoie l'id de la noisette ajoutée ou modifiée.
$noisette = $description['id_noisette'];
}
return $noisette;
}
/**
* @param $plugin
* @param string $squelette
* @param string $information
* @param string $stockage
*
* @return array|mixed
*/
function ncore_noisette_lister($plugin, $squelette = '', $information = '', $stockage = '') {
// On cherche le service de stockage à utiliser selon la logique suivante :
// - si le service de stockage est non vide on l'utilise en considérant que la fonction existe forcément;
// - sinon, on utilise la fonction du plugin appelant si elle existe;
// - et sinon, on utilise la fonction de N-Core.
include_spip('inc/ncore_utils');
if ($lister = ncore_chercher_fonction($plugin, 'noisette_lister', $stockage)) {
// On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage.
$noisettes = $lister($plugin, $squelette, $information);
} else {
// Le plugin ne propose pas de fonction propre ou le stockage N-Core est explicitement demandé.
// -- N-Core stocke les noisettes dans une meta propre au plugin appelant contenant un tableau au format
// [squelette][rang] = description
include_spip('inc/config');
$noisettes = lire_config("${plugin}_noisettes", array());
if ($squelette) {
if (empty($noisettes[$squelette])) {
$noisettes = array();
} else {
$noisettes = $noisettes[$squelette];
if ($information) {
$noisettes = array_column($noisettes, $information, 'id_noisette');
}
}
} elseif ($noisettes) {
if ($information) {
$noisettes = array_column($noisettes, $information, 'id_noisette');
} else {
$noisettes = array_column($noisettes, null, 'id_noisette');
}
}
}
return $noisettes;
}

Loading…
Cancel
Save