Browse Source

Ajout des fonctions d'information sur une noisette et sur le mode ajax.

svn/attic/tags/v010/106508
eric@smellup.net 6 years ago
parent
commit
6b8dbd05b9
  1. 79
      inc/ncore_cache.php
  2. 150
      ncore_fonctions.php
  3. 6
      paquet.xml

79
inc/ncore_cache.php

@ -0,0 +1,79 @@
<?php
if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
if (!defined('_NCORE_DIRCACHE')) {
define('_NCORE_DIRCACHE', _DIR_CACHE . 'ncore/');
}
if (!defined('_NCORE_DIR_CACHE')) {
define('_NCORE_NOMCACHE_NOISETTE_AJAX', 'noisettes_ajax.php');
}
if (!defined('_NCORE_DIR_CACHE')) {
define('_NCORE_NOMCACHE_NOISETTE_CONTEXTE', 'noisettes_contexte.php');
}
if (!defined('_NCORE_DIR_CACHE')) {
define('_NCORE_NOMCACHE_NOISETTE_INCLUSION', 'noisettes_inclusion.php');
}
/**
* @param string $service
* Le service permet de distinguer l'appelant qui peut-être un plugin comme le noiZetier ou
* un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
* La fonction utilisera les fonctions de lecture des md5 et de stockage des descriptions de noisettes
* spécifiques au service.
* @param string $nom_cache
* Nom et extension du fichier cache.
*
* @return array
* Contenu du fichier sous la forme d'un tableau ou tableau vide sinon.
*/
function cache_lire($service, $nom_cache) {
// Initialisation du contenu du cache
$cache = array();
// Détermination du nom du cache en fonction du service appelant et du type
$fichier_cache = _NCORE_DIRCACHE . "${service}/${nom_cache}";
include_spip('inc/flock');
if (lire_fichier_securise($fichier_cache, $contenu)) {
$cache = unserialize($contenu);
}
return $cache;
}
/**
* @param string $service
* Le service permet de distinguer l'appelant qui peut-être un plugin comme le noiZetier ou
* un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
* La fonction utilisera les fonctions de lecture des md5 et de stockage des descriptions de noisettes
* spécifiques au service.
* @param string $nom_cache
* Nom et extension du fichier cache.
*
* @return void
*/
function cache_ecrire($service, $nom_cache, $contenu_cache) {
// Création du répertoire du cache si besoin
$dir_cache = sous_repertoire(_DIR_CACHE, 'ncore');
$dir_cache = sous_repertoire($dir_cache, $service);
// Détermination du nom du cache en fonction du service appelant et du type
$fichier_cache = "${dir_cache}${nom_cache}";
// On vérifie que le contenu est bien un tableau. Si ce n'est pas le cas on le transforme en tableau.
if (!is_array($contenu_cache)) {
$contenu_cache = $contenu_cache ? array($contenu_cache) : array();
}
// Ecriture du fichier cache
include_spip('inc/flock');
ecrire_fichier_securise($fichier_cache, serialize($contenu_cache));
}

150
ncore_fonctions.php

@ -5,13 +5,6 @@ if (!defined('_ECRIRE_INC_VERSION')) {
return;
}
define('_NCORE_CACHE_AJAX_NOISETTES', _DIR_CACHE . 'noisettes_ajax.php');
define('_NCORE_CACHE_CONTEXTE_NOISETTES', _DIR_CACHE . 'noisettes_contexte.php');
define('_NCORE_CACHE_INCLUSION_NOISETTES', _DIR_CACHE . 'noisettes_inclusion.php');
define('_NCORE_NOISETTE_CACHE_MD5', _DIR_CACHE . 'noisettes_md5.php');
define('_NCORE_NOISETTE_CACHE_DESCRIPTION', _DIR_CACHE . 'noisettes_description.php');
// -------------------------------------------------------------------
// ------------------------- API NOISETTES ---------------------------
// -------------------------------------------------------------------
@ -23,6 +16,10 @@ define('_NCORE_NOISETTE_CACHE_DESCRIPTION', _DIR_CACHE . 'noisettes_description.
* en fonction des modifications, ajouts et suppressions de noisettes identifiés en comparant les md5
* des fichiers YAML.
*
* @package SPIP\NCORE\NOISETTE
* @api
* @filtre
*
* @param string $service
* Le service permet de distinguer l'appelant qui peut-être un plugin comme le noiZetier ou
* un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
@ -142,76 +139,131 @@ function ncore_noisette_charger($service, $dossier = 'noisettes/', $recharger =
/**
* Retourne la configuration de la noisette demandée.
* La configuration est stockée en base de données, certains champs sont recalculés avant d'être fournis.
* Retourne la description complète ou seulement une information précise d'une noisette donnée.
* Les données textuelles peuvent subir une traitement typo si demandé.
*
* @package SPIP\NOIZETIER\API\NOISETTE
* @package SPIP\NCORE\NOISETTE
* @api
* @filtre
*
* @param string $service
* Le service permet de distinguer l'appelant qui peut-être un plugin comme le noiZetier ou
* un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
* La fonction utilisera les fonctions de lecture des md5 et de stockage des descriptions de noisettes
* spécifiques au service.
* @param string $noisette
* Identifiant de la $noisette.
* @param boolean $traitement_typo
* @param string $information
* Information spécifique à retourner ou vide pour retourner toute la description.
* @param boolean $traiter_typo
* Indique si les données textuelles doivent être retournées brutes ou si elles doivent être traitées
* en utilisant la fonction _T_ou_typo.
* Les champs sérialisés sont toujours désérialisés.
* en utilisant la fonction _T_ou_typo. Par défaut l'indicateur vaut `false`.
* Les champs sérialisés sont eux toujours désérialisés.
*
* @return array
* @return array|string
*/
function ncore_noisette_informer($noisette, $traitement_typo = true) {
function ncore_noisette_informer($service, $noisette, $information = '', $traiter_typo = false) {
// On indexe pas le tableau des descriptions par le service appelant car on considère que dans
// le même hit on ne peut avoir qu'un seul service appelant.
// TODO : vérifier si ok, sinon on indexera
static $donnees_typo = array('nom', 'description');
static $description_noisette = array();
if (!isset($description_noisette[$traitement_typo][$noisette])) {
// Chargement de toute la configuration de la noisette en base de données.
$description = sql_fetsel('*', 'spip_noizetier_noisettes', array('noisette=' . sql_quote($noisette)));
// Stocker la description de la noisette si besoin
if (!isset($description_noisette[$noisette])) {
// Lecture de toute la configuration de la noisette: les données retournées sont brutes.
// -- On charge l'API du service appelant
include_spip("ncore/${service}");
$lire_description = "${service}_noisette_lire_description";
$description = $lire_description($noisette);
// Sauvegarde de la description de la page pour une consultation ultérieure dans le même hit.
if ($description) {
// Traitements des champs textuels
if ($traitement_typo) {
$description['nom'] = _T_ou_typo($description['nom']);
if (isset($description['description'])) {
$description['description'] = _T_ou_typo($description['description']);
}
}
// Traitements des champs tableaux sérialisés
$description['contexte'] = unserialize($description['contexte']);
$description['necessite'] = unserialize($description['necessite']);
$description['parametres'] = unserialize($description['parametres']);
// Stockage de la description
$description_noisette[$traitement_typo][$noisette] = $description;
$description_noisette[$noisette] = $description;
} else {
$description_noisette[$noisette] = array();
}
}
if ($information) {
if (isset($description_noisette[$noisette][$information])) {
if (in_array($information, $donnees_typo) and $traiter_typo) {
// Traitements de la donnée textuelle
$retour = _T_ou_typo($description_noisette[$noisette][$information]);
} else {
$retour = $description_noisette[$noisette][$information];
}
} else {
$description_noisette[$traitement_typo][$noisette] = array();
$retour = '';
}
} else {
$retour = $description_noisette[$noisette];
// Traitements des données textuels
if ($traiter_typo) {
$retour['nom'] = _T_ou_typo($retour['nom']);
if (isset($retour['description'])) {
$retour['description'] = _T_ou_typo($retour['description']);
}
}
}
return $description_noisette[$traitement_typo][$noisette];
return $retour;
}
function ncore_noisette_ajax($noisette) {
/**
* Détermine si la noisette spécifiée doit être incluse en AJAX ou pas.
*
* @package SPIP\NCORE\NOISETTE
* @api
* @filtre
*
* @param string $service
* Le service permet de distinguer l'appelant qui peut-être un plugin comme le noiZetier ou
* un script. Pour un plugin, le plus pertinent est d'utiliser le préfixe.
* La fonction utilisera les fonctions de lecture des md5 et de stockage des descriptions de noisettes
* spécifiques au service.
* @param string $noisette
* Identifiant de la $noisette.
*
* @return bool
* `true` si la noisette doit être ajaxée, `false` sinon.
*/
function ncore_noisette_ajax($service, $noisette) {
// On indexe pas le tableau des indicateurs ajax par le service appelant car on considère que dans
// le même hit on ne peut avoir qu'un seul service appelant.
// TODO : vérifier si ok, sinon on indexera
static $est_ajax = array();
if (!isset($est_ajax[$noisette])) {
// On détermine l'existence et le contenu du cache.
if (lire_fichier_securise(_CACHE_AJAX_NOISETTES, $contenu)) {
$est_ajax = unserialize($contenu);
}
// On détermine le cache en fonction du service, puis son existence et son contenu.
include_spip('inc/ncore_cache');
$est_ajax = cache_lire($service, _NCORE_NOMCACHE_NOISETTE_AJAX);
// On doit recalculer le cache.
if (!$est_ajax
or (_request('var_mode') == 'recalcul')
or (defined('_NO_CACHE') and (_NO_CACHE != 0))) {
// On détermine la valeur par défaut de l'ajax des noisettes
include_spip('inc/config');
$defaut_ajax = lire_config('noizetier/ajax_noisette') == 'on' ? true : false;
// On repertorie toutes les noisettes disponibles et on compare
// avec la valeur par défaut configurée pour le noiZetier.
if ($noisettes = sql_allfetsel('noisette, ajax', 'spip_noizetier_noisettes')) {
$noisettes = array_column($noisettes, 'ajax', 'noisette');
foreach ($noisettes as $_noisette => $_ajax) {
// On charge l'API du service appelant
include_spip("ncore/${service}");
// On détermine la valeur par défaut de l'ajax des noisettes pour le service appelant.
$config_ajax = "${service}_noisette_defaut_ajax";
$defaut_ajax = $config_ajax();
// On repertorie la configuration ajax de toutes les noisettes disponibles et on compare
// avec la valeur par défaut configurée pour le service appelant.
$lire_ajax = "${service}_noisette_lire_ajax";
if ($ajax_noisettes = $lire_ajax()) {
foreach ($ajax_noisettes as $_noisette => $_ajax) {
$est_ajax[$_noisette] = ($_ajax == 'defaut')
? $defaut_ajax
: ($_ajax == 'non' ? false : true);
@ -226,9 +278,7 @@ function ncore_noisette_ajax($noisette) {
}
// On met à jour in fine le cache
if ($est_ajax) {
ecrire_fichier_securise(_CACHE_AJAX_NOISETTES, serialize($est_ajax));
}
cache_ecrire($service, _NCORE_NOMCACHE_NOISETTE_AJAX, $est_ajax);
}
}
@ -236,6 +286,11 @@ function ncore_noisette_ajax($noisette) {
}
/**
* @param $noisette
*
* @return mixed
*/
function ncore_noisette_dynamique($noisette) {
static $est_dynamique = array();
@ -275,6 +330,11 @@ function ncore_noisette_dynamique($noisette) {
}
/**
* @param $noisette
*
* @return mixed
*/
function ncore_noisette_contexte($noisette) {
static $contexte = array();

6
paquet.xml

@ -3,7 +3,7 @@
categorie="outil"
version="0.1.0"
etat="dev"
compatibilite="[3.0.0;3.1.*]"
compatibilite="[3.2.0-dev;3.2.*]"
logo="ncore_logo-32.png"
>
<nom>N-Core</nom>
@ -13,10 +13,6 @@
<licence lien="http://www.gnu.org/licenses/gpl-3.0.html">GPL 3</licence>
<pipeline nom="recuperer_fond" inclure="noizetier_pipelines.php" />
<necessite nom="yaml" compatibilite="[1.5.2;[" />
<necessite nom="saisies" compatibilite="[2.2.3;[" />
<utilise nom="Z" compatibilite="[1.7.15;1.9.*]" />
</paquet>

Loading…
Cancel
Save