Browse Source

Sauvegarde intermédiaire de la fonction déplacer une noisette.

svn/attic/tags/v010/106508
eric@smellup.net 5 years ago
parent
commit
212174eb97
  1. 80
      inc/ncore_noisette.php
  2. 15
      ncore/ncore.php

80
inc/ncore_noisette.php

@ -149,7 +149,7 @@ function noisette_supprimer($plugin, $noisette, $stockage = '') {
$retour = ncore_noisette_destocker($plugin, $description, $stockage);
// On récupère les noisettes restant affectées au squelette sous la forme d'un tableau indexé par l'identifiant
// de la noisette stocké dans l'index 'id_noisette'.
// de la noisette stocké dans l'index 'id_noisette' mais toujours trié de façon à ce que les rangs soient croissants.
$autres_noisettes = ncore_noisette_lister($plugin, $description['squelette'], '', $stockage);
// Si il reste des noisettes, on tasse d'un rang les noisettes qui suivaient la noisette supprimée.
@ -250,3 +250,81 @@ function noisette_lire($plugin, $noisette, $information = '', $traiter_typo = fa
return $retour;
}
/**
* Supprime un noisette donnée d’un squelette.
* La fonction met à jour les rangs des autres noisettes si nécessaire.
*
* @api
* @uses ncore_noisette_decrire()
* @uses ncore_noisette_destocker()
* @uses ncore_noisette_lister()
* @uses ncore_noisette_stocker()
*
* @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 mixed $noisette
* Identifiant de la noisette qui peut prendre soit la forme d'un entier ou d'une chaine unique, soit la forme
* d'un couple (squelette, rang).
* @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 bool
*/
function noisette_deplacer($plugin, $noisette, $rang_destination, $stockage = '') {
// Initialisation du retour
$retour = false;
// 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");
// L'identifiant d'une noisette peut être fourni de deux façons :
// - par une valeur unique, celle créée lors de l'ajout et qui peut-être un entier (id d'une table SPIP) ou
// une chaine unique par exemple générée par uniqid().
// - ou par un tableau à deux entrées fournissant le squelette et le rang (qui est unique pour un squelette donné).
if (!empty($noisette) and (is_string($noisette) or is_numeric($noisette) or is_array($noisette))) {
// Avant de deplacer la noisette on sauvegarde sa description et son rang origine.
$description = ncore_noisette_decrire($plugin, $noisette, $stockage);
$rang_origine = $description['rang'];
// 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);
// 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.
$noisettes = ncore_noisette_lister($plugin, $description['squelette'], '', $stockage);
// Suivant la position d'origine et de destination de la noisette déplacée on renumérote les noisettes
// du squelette.
foreach ($noisettes as $_id_noisette => $_description) {
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);
}
} 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);
}
}
}
// On positionne le rang de la noisette à déplacer au rang destination.
$description['rang'] = $rang_destination;
ncore_noisette_stocker($plugin, 'modification', $description, $stockage);
}
}
return $retour;
}

15
ncore/ncore.php

@ -267,8 +267,16 @@ function ncore_noisette_stocker($plugin, $action, $description, $stockage = '')
// -- 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 {
$noisettes[$description['squelette']][$description['rang']] = array_merge(
$noisettes[$description['squelette']][$description['rang']],
@ -286,6 +294,13 @@ function ncore_noisette_stocker($plugin, $action, $description, $stockage = '')
return $noisette;
}
/**
* @param $plugin
* @param $description
* @param string $stockage
*
* @return bool
*/
function ncore_noisette_destocker($plugin, $description, $stockage = '') {
// Initialisation de la sortie.

Loading…
Cancel
Save