Browse Source

Mise à jour des services N-Core pour les noisettes.

svn/attic/tags/v010/106508
eric@smellup.net 5 years ago
parent
commit
f3bc05b4d8
  1. 26
      inc/ncore_noisette.php
  2. 85
      ncore/ncore.php

26
inc/ncore_noisette.php

@ -17,6 +17,7 @@ if (!defined('_ECRIRE_INC_VERSION')) {
* @uses type_noisette_lire()
* @uses ncore_noisette_lister()
* @uses ncore_noisette_stocker()
* @uses ncore_noisette_ranger()
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
@ -90,15 +91,14 @@ function noisette_ajouter($plugin, $type_noisette, $squelette, $rang = 0, $stock
if ($rang <= $rang_max) {
foreach ($noisettes as $_id_noisette => $_description) {
if ($_description['rang'] >= $rang) {
$_description['rang'] += 1;
ncore_noisette_stocker($plugin, 'modification', $_description, $stockage);
ncore_noisette_ranger($plugin, $_description, $_description['rang'] + 1, $stockage);
}
}
}
}
// La description de la nouvelle noisette est prête à être stockée.
$noisette_ajoutee = ncore_noisette_stocker($plugin,'creation', $description, $stockage);
$noisette_ajoutee = ncore_noisette_stocker($plugin, $description, $stockage);
}
return $noisette_ajoutee;
@ -112,7 +112,7 @@ function noisette_ajouter($plugin, $type_noisette, $squelette, $rang = 0, $stock
* @uses ncore_noisette_decrire()
* @uses ncore_noisette_destocker()
* @uses ncore_noisette_lister()
* @uses ncore_noisette_stocker()
* @uses ncore_noisette_ranger()
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
@ -156,8 +156,7 @@ function noisette_supprimer($plugin, $noisette, $stockage = '') {
if ($autres_noisettes) {
foreach ($autres_noisettes as $_id_noisette => $_autre_description) {
if ($_autre_description['rang'] > $description['rang']) {
$_autre_description['rang'] -= 1;
ncore_noisette_stocker($plugin, 'modification', $_autre_description, $stockage);
ncore_noisette_ranger($plugin, $_autre_description, $_autre_description['rang'] - 1, $stockage);
}
}
}
@ -257,9 +256,8 @@ function noisette_lire($plugin, $noisette, $information = '', $traiter_typo = fa
*
* @api
* @uses ncore_noisette_decrire()
* @uses ncore_noisette_destocker()
* @uses ncore_noisette_lister()
* @uses ncore_noisette_stocker()
* @uses ncore_noisette_ranger()
*
* @param string $plugin
* Identifiant qui permet de distinguer le module appelant qui peut-être un plugin comme le noiZetier ou
@ -295,8 +293,7 @@ function noisette_deplacer($plugin, $noisette, $rang_destination, $stockage = ''
// Si les rangs origine et destination sont identiques on ne fait rien !
if ($rang_destination != $rang_origine) {
// On efface le rang de la noisette à déplacer pour permettre son affectation à une autre noisette.
$description['rang'] = 0;
ncore_noisette_stocker($plugin, 'modification', $description, $stockage);
ncore_noisette_ranger($plugin, $description, 0, $stockage);
// On récupère les noisettes affectées au même squelette sous la forme d'un tableau indexé par l'identifiant
// de la noisette stocké dans l'index 'id_noisette' et on déplace les noisettes impactées.
@ -308,21 +305,18 @@ function noisette_deplacer($plugin, $noisette, $rang_destination, $stockage = ''
if ($rang_destination < $rang_origine) {
// On "descend" les noisettes du rang destination au rang origine non compris.
if (($_description['rang'] >= $rang_destination) and ($_description['rang'] < $rang_origine)) {
$_description['rang'] += 1;
ncore_noisette_stocker($plugin, 'modification', $_description, $stockage);
ncore_noisette_ranger($plugin, $_description, $_description['rang'] + 1, $stockage);
}
} else {
// On "remonte" les noisettes du rang destination au rang origine non compris.
if (($_description['rang'] <= $rang_destination) and ($_description['rang'] > $rang_origine)) {
$_description['rang'] -= 1;
ncore_noisette_stocker($plugin, 'modification', $_description, $stockage);
ncore_noisette_ranger($plugin, $_description, $_description['rang'] - 1, $stockage);
}
}
}
// On positionne le rang de la noisette à déplacer au rang destination.
$description['rang'] = $rang_destination;
ncore_noisette_stocker($plugin, 'modification', $description, $stockage);
ncore_noisette_ranger($plugin, $description, $rang_destination, $stockage);
}
}

85
ncore/ncore.php

@ -227,14 +227,13 @@ function ncore_type_noisette_lister($plugin, $information = '', $stockage = '')
*
* @package SPIP\NCORE\SERVICE\NOISETTE
*
* @param $plugin
* @param $action
* @param $description
* @param string $plugin
* @param array $description
* @param string $stockage
*
* @return string
*/
function ncore_noisette_stocker($plugin, $action, $description, $stockage = '') {
function ncore_noisette_stocker($plugin, $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;
@ -243,7 +242,7 @@ function ncore_noisette_stocker($plugin, $action, $description, $stockage = '')
include_spip('inc/ncore_utils');
if ($stocker = ncore_chercher_service($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);
$noisette = $stocker($plugin, $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
@ -256,7 +255,7 @@ function ncore_noisette_stocker($plugin, $action, $description, $stockage = '')
// Le tableau est au format [squelette][rang] = description.
$noisettes = lire_config("${plugin}_noisettes", array());
if ($action == 'creation') {
if (empty($description['id_noisette'])) {
// 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.
@ -266,18 +265,9 @@ function ncore_noisette_stocker($plugin, $action, $description, $stockage = '')
// Modification 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.
// -- pour un changement de rang il faut mettre à jour toute la description.
// -> Il faut traiter le cas où la fonction de déplacement stocke temporairement la noisette déplacée
// au rang 0 qui n'est jamais utilisé autrement. Si l'index 0 n'est pas utilisé c'est la sauvegarde
// si l'index est déjà utilisé il faut le supprimer
if (!isset($noisettes[$description['squelette']][$description['rang']])) {
// Cas cas est forcément un changement de rang.
$noisettes[$description['squelette']][$description['rang']] = $description;
// On regarde si la valeur temporaire rang=0 est présente, alors on la supprime.
if ($description['rang'] and isset($noisettes[$description['squelette']][0])) {
unset($noisettes[$description['squelette']][0]);
}
} else {
// -- Les modifications ne concernent que les paramètres d'affichage, cette fonction n'est jamais utilisée
// pour le changement de rang.
if (isset($noisettes[$description['squelette']][$description['rang']])) {
$noisettes[$description['squelette']][$description['rang']] = array_merge(
$noisettes[$description['squelette']][$description['rang']],
$description);
@ -294,6 +284,65 @@ function ncore_noisette_stocker($plugin, $action, $description, $stockage = '')
return $noisette;
}
/**
*
* @package SPIP\NCORE\SERVICE\NOISETTE
*
* @param $plugin
* @param $action
* @param $description
* @param string $stockage
*
* @return string
*/
function ncore_noisette_ranger($plugin, $description, $rang, $stockage = '') {
// Initialisation de la sortie.
$retour = false;
// 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 ($ranger = ncore_chercher_service($plugin, 'noisette_ranger', $stockage)) {
// On passe le plugin appelant à la fonction car cela permet ainsi de mutualiser les services de stockage.
$retour = $ranger($plugin, $description, $rang);
} 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());
// Modification de la noisette :
// La description est complète et comprends donc l'identifiant de la noisette et le rang actuellement
// occupé.
if (!isset($noisettes[$description['squelette']][$description['rang']])) {
// On supprime la noisette du rang qu'elle occupe.
unset($noisettes[$description['squelette']]['rang']);
// On ajoute la noisette au rang choisi
if (!isset($noisettes[$description['squelette']][$rang])) {
$description['rang'] = $rang;
$noisettes[$description['squelette']][$rang] = $description;
// On met à jour la meta
ecrire_config("${plugin}_noisettes", $noisettes);
$retour = true;
}
}
}
return $retour;
}
/**
* @param $plugin
* @param $description

Loading…
Cancel
Save