Changeset 107632 in spip-zone


Ignore:
Timestamp:
Nov 19, 2017, 3:52:11 PM (20 months ago)
Author:
eric@…
Message:

Mise au point et correction des fonction liées à un objet.
Nettoyage d'un fonction devenue inutile (vers vieilles_fonctions).
TODO : revoir l'ajax

Location:
_plugins_/noizetier/trunk
Files:
7 edited

Legend:

Unmodified
Added
Removed
  • _plugins_/noizetier/trunk/formulaires/lister_noisettes_page.php

    r107356 r107632  
    3434                $identifiant['objet'] = $page['objet'];
    3535                $identifiant['id_objet'] = $page['id_objet'];
     36                // Pour le squelette on ne retient que le bloc car il est inutile de répéter le type d'objet comme nom de page.
     37                // Cette information est de toute façon sans intérêt pour un objet, l'objectif de la structure du conteneur
     38                // est juste de permette le calcul de l'id unique du dit conteneur.
    3639                $conteneur['squelette'] = "${bloc}";
    3740                $conteneur = array_merge($conteneur, $identifiant);
  • _plugins_/noizetier/trunk/inc/noizetier_phraser.php

    r104967 r107632  
    44        return;
    55}
    6 
    7 function phraser_noisette($noisette, $options = array()) {
    8 
    9         // Initialisation de la description
    10         $description = array();
    11 
    12         // Initialiser le contexte de chargement
    13         if (!isset($options['recharger'])) {
    14                 $options['recharger'] = false;
    15         }
    16         if (!isset($options['md5']) or $options['recharger']) {
    17                 $options['md5'] = '';
    18         }
    19 
    20         // Initialiser les composants de l'identifiant de la noisette:
    21         // - type-noisette si la noisette est dédiée uniquement à une page
    22         // - type-composition-noisette si la noisette est dédiée uniquement à une composition
    23         // - noisette sinon
    24         $type = '';
    25         $composition = '';
    26         $identifiants = explode('-', $noisette);
    27         if (isset($identifiants[1])) {
    28                 $type = $identifiants[0];
    29         }
    30         if (isset($identifiants[2])) {
    31                 $composition = $identifiants[1];
    32         }
    33 
    34         // Initialisation de la description par défaut de la page
    35         $description_defaut = array(
    36                 'noisette'       => $noisette,
    37                 'type'           => $type,
    38                 'composition'    => $composition,
    39                 'nom'            => $noisette,
    40                 'description'    => '',
    41                 'icon'           => 'noisette-24.png',
    42                 'necessite'      => array(),
    43                 'contexte'       => array(),
    44                 'ajax'           => 'defaut',
    45                 'inclusion'      => 'statique',
    46                 'parametres'     => array(),
    47                 'signature'      => '',
    48         );
    49 
    50         // Recherche des noisettes par leur fichier YAML uniquement.
    51         $md5 = '';
    52         $fichier = isset($options['yaml']) ? $options['yaml'] : find_in_path("noisettes/${noisette}.yaml");
    53         if ($fichier) {
    54                 // il y a un fichier YAML de configuration, on vérifie le md5 avant de charger le contenu.
    55                 $md5 = md5_file($fichier);
    56                 if ($md5 != $options['md5']) {
    57                         include_spip('inc/yaml');
    58                         $description = yaml_charger_inclusions(yaml_decode_file($fichier));
    59                         // Traitements des champs pouvant être soit une chaine soit un tableau
    60                         if (!empty($description['necessite']) and is_string($description['necessite'])) {
    61                                 $description['necessite'] = array($description['necessite']);
    62                         }
    63                         if (!empty($description['contexte']) and is_string($description['contexte'])) {
    64                                 $description['contexte'] = array($description['contexte']);
    65                         }
    66                 }
    67         }
    68 
    69         // Si la description est remplie c'est que le chargement a correctement eu lieu.
    70         // Sinon, si la noisette n'a pas changée on renvoie une description limitée à un indicateur d'identité pour
    71         // distinguer ce cas avec une erreur de chargement qui renvoie une description vide.
    72         if ($description) {
    73                 // Mise à jour du md5
    74                 $description['signature'] = $md5;
    75                 // Complétude de la description avec les valeurs par défaut
    76                 $description = array_merge($description_defaut, $description);
    77                 // Sérialisation des champs necessite, contexte et parametres qui sont des tableaux
    78                 $description['necessite'] = serialize($description['necessite']);
    79                 $description['contexte'] = serialize($description['contexte']);
    80                 $description['parametres'] = serialize($description['parametres']);
    81         } elseif ($md5 == $options['md5']) {
    82                 $description['identique'] = true;
    83         }
    84 
    85         return $description;
    86 }
    87 
    886
    897function phraser_page($page, $options = array()) {
  • _plugins_/noizetier/trunk/ncore/noizetier.php

    r107341 r107632  
    249249                if (!empty($conteneur['squelette'])) {
    250250                        $squelette = strtolower($conteneur['squelette']);
    251                         $page = basename($squelette);
    252                         $identifiants_page = explode('-', $page, 2);
    253                         if (!empty($identifiants_page[1])) {
    254                                 // Forcément une composition
    255                                 $complement['type'] = $identifiants_page[0];
    256                                 $complement['composition'] = $identifiants_page[1];
     251
     252                        if (!empty($conteneur['objet']) and !empty($conteneur['id_objet']) and ($id = intval($conteneur['id_objet']))) {
     253                                // Objet
     254                                $complement['objet'] = $conteneur['objet'];
     255                                $complement['id_objet'] = $id;
     256                                $complement['bloc'] = $conteneur['squelette'];
    257257                        } else {
    258                                 // Page ou objet
    259                                 if (preg_match(',([a-z_]+)(\d+)$,s', $identifiants_page[0], $identifiants_objet)) {
    260                                         $complement['objet'] = $identifiants_objet[1];
    261                                         $complement['id_objet'] = $identifiants_objet[2];
     258                                $page = basename($squelette);
     259                                $identifiants_page = explode('-', $page, 2);
     260                                if (!empty($identifiants_page[1])) {
     261                                        // Forcément une composition
     262                                        $complement['type'] = $identifiants_page[0];
     263                                        $complement['composition'] = $identifiants_page[1];
    262264                                } else {
     265                                        // Page simple
    263266                                        $complement['type'] = $identifiants_page[0];
    264267                                }
    265                         }
    266 
    267                         $bloc = dirname($squelette);
    268                         if ($bloc != '.') {
    269                                 $complement['bloc'] = basename($bloc);
     268                                $bloc = dirname($squelette);
     269                                if ($bloc != '.') {
     270                                        $complement['bloc'] = basename($bloc);
     271                                }
    270272                        }
    271273                        $description = array_merge($description, $complement);
     
    495497
    496498                // L'objet et son id si on est en présence d'un objet.
    497                 if (!empty($conteneur['objet']) and !empty($conteneur['id_objet']) and ($id = intval($conteneur['id_objet']))) {
     499                if (!empty($conteneur['objet']) and !empty($conteneur['id_objet']) and intval($conteneur['id_objet'])) {
    498500                        $identifiant .= ($identifiant ? '|' : '') . "{$conteneur['objet']}|{$conteneur['id_objet']}";
    499501                }
  • _plugins_/noizetier/trunk/noizetier_fonctions.php

    r107356 r107632  
    697697 * @param string $id_objet
    698698 *              Id de l'objet ou 0.
     699 * @param string $information
     700 *              Champ précis à renvoyer ou chaine vide pour renvoyer toutes les champs de l'objet.
    699701 *
    700702 * @return array|string
     
    702704 *              Sinon, on renvoie le tableau des descriptions des pages de tous les contenus indexés par [type_objet][id_objet].
    703705 */
    704 function noizetier_objet_informer($type_objet = '', $id_objet = 0, $information = '') {
     706function noizetier_objet_lire($type_objet, $id_objet, $information = '') {
     707
     708        static $description_objet = array();
     709
     710        if ($type_objet and intval($id_objet) and !isset($description_objet[$type_objet][$id_objet])) {
     711                include_spip('inc/quete');
     712                include_spip('base/objets');
     713                $description = array();
     714
     715                // On calcule le titre de l'objet à partir de la fonction idoine
     716                $description['titre'] = generer_info_entite($id_objet, $type_objet, 'titre');
     717
     718                // On recherche le logo de l'objet si il existe sinon on stocke le logo du type d'objet
     719                // (le chemin complet)
     720                $description['logo'] = '';
     721                if ($type_objet != 'document') {
     722                        $logo_infos = quete_logo(id_table_objet($type_objet), 'on', $id_objet, 0, false);
     723                        $description['logo'] = isset($logo_infos['src']) ? $logo_infos['src'] : '';
     724                }
     725                if (!$description['logo']) {
     726                        $description['logo'] = noizetier_icone_chemin("${type_objet}.png");
     727                }
     728
     729                // On récupère le nombre de noisette déjà configurées dans l'objet.
     730                $description['noisettes'] = 0;
     731                $from = array('spip_noizetier');
     732                $where = array('objet=' . sql_quote($type_objet), 'id_objet=' . intval($id_objet));
     733                if ($noisettes = sql_countsel($from, $where)) {
     734                        $description['noisettes'] = $noisettes;
     735                }
     736
     737                // On rajoute les blocs du type de page dont l'objet est une instance
     738                $description['blocs'] = noizetier_page_lister_blocs($type_objet);
     739
     740                // On sauvegarde finalement la description complète.
     741                $description_objet[$type_objet][$id_objet] = $description;
     742        }
     743
     744        // On retourne les informations sur l'objet demandé.
     745        if (!$information) {
     746                $retour = isset($description_objet[$type_objet][$id_objet])
     747                        ? $description_objet[$type_objet][$id_objet]
     748                        : array();
     749        } else {
     750                $retour = isset($description_objet[$type_objet][$id_objet][$information])
     751                        ? $description_objet[$type_objet][$id_objet][$information]
     752                        : '';
     753        }
     754
     755        return $retour;
     756}
     757
     758
     759
     760/**
     761 * Lister les contenus ayant des noisettes spécifiquement configurées pour leur page.
     762 *
     763 * @package SPIP\NOIZETIER\API\OBJET
     764 * @api
     765 * @filtre
     766 *
     767 * @param string $objet
     768 *              Type d'objet ou chaine vide.
     769 * @param string $id_objet
     770 *              Id de l'objet ou 0.
     771 *
     772 * @return array|string
     773 *              Si le type et l'id du contenu sont fournis, on renvoie la description de la page de ce contenu.
     774 *              Sinon, on renvoie le tableau des descriptions des pages de tous les contenus indexés par [type_objet][id_objet].
     775 */
     776function noizetier_objet_repertorier($filtres = array()) {
    705777
    706778        static $objets = null;
    707         static $description_objet = array();
    708 
    709         if ((!$type_objet and !$id_objet and is_null($objets))
    710         or ($type_objet and $id_objet and !isset($description_objet[$type_objet][$id_objet]))) {
     779
     780        if (is_null($objets)) {
    711781                // On récupère le ou les objets ayant des noisettes dans la table spip_noizetier.
    712782                $from = array('spip_noizetier');
    713783                $select = array('objet', 'id_objet', "count(noisette) as 'noisettes'");
    714784                $where = array('id_objet>0');
    715                 if ($type_objet and $id_objet) {
    716                         $where = array('objet=' . sql_quote($type_objet), 'id_objet=' . intval($id_objet));
    717                 }
    718785                $group = array('objet', 'id_objet');
    719786                $objets_configures = sql_allfetsel($select, $from, $where, $group);
    720787                if ($objets_configures) {
    721                         include_spip('inc/quete');
    722                         include_spip('base/objets');
    723788                        foreach ($objets_configures as $_objet) {
    724                                 $description = array();
    725                                 // On calcule le titre de l'objet à partir de la fonction idoine
    726                                 $description['titre'] = generer_info_entite($_objet['id_objet'], $_objet['objet'], 'titre');
    727                                 // On recherche le logo de l'objet si il existe sinon on stocke le logo du type d'objet
    728                                 // (le chemin complet)
    729                                 $description['logo'] = '';
    730                                 if ($_objet['objet'] != 'document') {
    731                                         $logo_infos = quete_logo(id_table_objet($_objet['objet']), 'on', $_objet['id_objet'], 0, false);
    732                                         $description['logo'] = isset($logo_infos['src']) ? $logo_infos['src'] : '';
    733                                 }
    734                                 if (!$description['logo']) {
    735                                         $description['logo'] = noizetier_icone_chemin("{$_objet['objet']}.png");
    736                                 }
    737                                 $description['noisettes'] = $_objet['noisettes'];
    738 
    739                                 // On rajoute les blocs du type de page dont l'objet est une instance et on sauvegarde
    740                                 // la description complète.
    741                                 if ($type_objet and $id_objet) {
    742                                         $description['blocs'] = noizetier_page_lister_blocs($type_objet);
    743                                         $description_objet[$type_objet][$id_objet] = $description;
    744                                 } else {
    745                                         $description['blocs'] = noizetier_page_lister_blocs($_objet['objet']);
    746                                         $objets[$_objet['objet']][$_objet['id_objet']] = $description;
     789                                // On ne retient que les objets dont le type est activé dans la configuration du plugin.
     790                                if (noizetier_objet_type_active($_objet['objet'])) {
     791                                        $description = noizetier_objet_lire($_objet['objet'], $_objet['id_objet']);
     792                                        if ($description) {
     793                                                // Si un filtre existe on teste le contenu de l'objet récupéré avant de le garder
     794                                                // sinon on le sauvegarde immédiatement.
     795                                                $objet_a_retenir = true;
     796                                                if ($filtres) {
     797                                                        foreach ($filtres as $_critere => $_valeur) {
     798                                                                if (isset($description[$_critere]) and ($description[$_critere] == $_valeur)) {
     799                                                                        $objet_a_retenir = false;
     800                                                                        break;
     801                                                                }
     802                                                        }
     803                                                }
     804                                                if ($objet_a_retenir) {
     805                                                        $objets[$_objet['objet']][$_objet['id_objet']] = $description;
     806                                                }
     807                                        }
    747808                                }
    748809                        }
     
    750811        }
    751812
    752         if ($type_objet and $id_objet) {
    753                 if (!$information) {
    754                         return isset($description_objet[$type_objet][$id_objet])
    755                                 ? $description_objet[$type_objet][$id_objet]
    756                                 : array();
    757                 } else {
    758                         return isset($description_objet[$type_objet][$id_objet][$information])
    759                                 ? $description_objet[$type_objet][$id_objet][$information]
    760                                 : '';
    761                 }
    762         } else {
    763                 // Filtrage des objets répertoriés:
    764                 // - de façon systématique, on ne retient que les objets dont le type est activé dans la configuration du plugin.
    765                 $objets_repertories = $objets;
    766                 foreach ($objets_repertories as $_type_objet => $_objets) {
    767                         if (!noizetier_objet_type_active($_type_objet)) {
    768                                 unset($objets_repertories[$_type_objet]);
    769                         }
    770                 }
    771                 return $objets_repertories;
    772         }
     813        return $objets;
    773814}
    774815
  • _plugins_/noizetier/trunk/noizetier_vieilles_fonctions.php

    r107356 r107632  
    3838                }
    3939
    40                 include_spip('inc/noizetier_phraser');
    4140                foreach ($fichiers as $_squelette => $_chemin) {
    4241                        $noisette = basename($_squelette, '.yaml');
     
    13231322
    13241323        return true;
     1324}
     1325function phraser_noisette($noisette, $options = array()) {
     1326
     1327        // Initialisation de la description
     1328        $description = array();
     1329
     1330        // Initialiser le contexte de chargement
     1331        if (!isset($options['recharger'])) {
     1332                $options['recharger'] = false;
     1333        }
     1334        if (!isset($options['md5']) or $options['recharger']) {
     1335                $options['md5'] = '';
     1336        }
     1337
     1338        // Initialiser les composants de l'identifiant de la noisette:
     1339        // - type-noisette si la noisette est dédiée uniquement à une page
     1340        // - type-composition-noisette si la noisette est dédiée uniquement à une composition
     1341        // - noisette sinon
     1342        $type = '';
     1343        $composition = '';
     1344        $identifiants = explode('-', $noisette);
     1345        if (isset($identifiants[1])) {
     1346                $type = $identifiants[0];
     1347        }
     1348        if (isset($identifiants[2])) {
     1349                $composition = $identifiants[1];
     1350        }
     1351
     1352        // Initialisation de la description par défaut de la page
     1353        $description_defaut = array(
     1354                'noisette'       => $noisette,
     1355                'type'           => $type,
     1356                'composition'    => $composition,
     1357                'nom'            => $noisette,
     1358                'description'    => '',
     1359                'icon'           => 'noisette-24.png',
     1360                'necessite'      => array(),
     1361                'contexte'       => array(),
     1362                'ajax'           => 'defaut',
     1363                'inclusion'      => 'statique',
     1364                'parametres'     => array(),
     1365                'signature'      => '',
     1366        );
     1367
     1368        // Recherche des noisettes par leur fichier YAML uniquement.
     1369        $md5 = '';
     1370        $fichier = isset($options['yaml']) ? $options['yaml'] : find_in_path("noisettes/${noisette}.yaml");
     1371        if ($fichier) {
     1372                // il y a un fichier YAML de configuration, on vérifie le md5 avant de charger le contenu.
     1373                $md5 = md5_file($fichier);
     1374                if ($md5 != $options['md5']) {
     1375                        include_spip('inc/yaml');
     1376                        $description = yaml_charger_inclusions(yaml_decode_file($fichier));
     1377                        // Traitements des champs pouvant être soit une chaine soit un tableau
     1378                        if (!empty($description['necessite']) and is_string($description['necessite'])) {
     1379                                $description['necessite'] = array($description['necessite']);
     1380                        }
     1381                        if (!empty($description['contexte']) and is_string($description['contexte'])) {
     1382                                $description['contexte'] = array($description['contexte']);
     1383                        }
     1384                }
     1385        }
     1386
     1387        // Si la description est remplie c'est que le chargement a correctement eu lieu.
     1388        // Sinon, si la noisette n'a pas changée on renvoie une description limitée à un indicateur d'identité pour
     1389        // distinguer ce cas avec une erreur de chargement qui renvoie une description vide.
     1390        if ($description) {
     1391                // Mise à jour du md5
     1392                $description['signature'] = $md5;
     1393                // Complétude de la description avec les valeurs par défaut
     1394                $description = array_merge($description_defaut, $description);
     1395                // Sérialisation des champs necessite, contexte et parametres qui sont des tableaux
     1396                $description['necessite'] = serialize($description['necessite']);
     1397                $description['contexte'] = serialize($description['contexte']);
     1398                $description['parametres'] = serialize($description['parametres']);
     1399        } elseif ($md5 == $options['md5']) {
     1400                $description['identique'] = true;
     1401        }
     1402
     1403        return $description;
    13251404}
    13261405
  • _plugins_/noizetier/trunk/prive/squelettes/contenu/noizetier_page.html

    r105430 r107632  
    5555        /*\]\]>*/</script>
    5656
    57         [(#EVAL{_AJAX}|oui)
    58                 <script type="text/javascript">/*<!\[CDATA\[*/reloadExecPage('#ENV{exec}','#navigation,#chemin');/*\]\]>*/</script>
     57        [(#CONST{_AJAX}|oui)
     58                <script type="text/javascript">/*<!\[CDATA\[*/
     59                        reloadExecPage('#ENV{exec}','#navigation,#chemin');
     60                /*\]\]>*/</script>
    5961        ]
    6062</BOUCLE_page_contenu>
  • _plugins_/noizetier/trunk/public/noizetier_balises.php

    r105231 r107632  
    1414                $information = interprete_argument_balise(3, $p);
    1515                $information = isset($information) ? str_replace('\'', '"', $information) : '""';
    16                 $p->code = "noizetier_objet_informer($objet, $id_objet, $information)";
     16                $p->code = "noizetier_objet_lire($objet, $id_objet, $information)";
    1717        } else {
    18                 $p->code = "noizetier_objet_informer()";
     18                $p->code = "noizetier_objet_repertorier()";
    1919        }
    2020
Note: See TracChangeset for help on using the changeset viewer.