source: spip-zone/_plugins_/squelettes_par_mots_cle/trunk/squelettesmots.php @ 55006

Last change on this file since 55006 was 55006, checked in by cedric@…, 8 years ago

Fin du portage pour SPIP3 a minima :
on ne recode pas la page de config en squelette+CVT, ce qui serait le mieux, mais on assure le fonctionnel et la secu
on renomme l'exec pour qu'il soit linke du panneau plugin
on met une icone derivee de fatcow
on insere les css inline uniquement dans la page de config et pas dans tout l'espace prive

File size: 3.5 KB
Line 
1<?php
2//    Fichier créé pour SPIP avec un bout de code emprunté à celui ci.
3//    Distribué sans garantie sous licence GPL./
4//    Copyright (C) 2006  Pierre ANDREWS
5//
6//    This program is free software; you can redistribute it and/or modify
7//    it under the terms of the GNU General Public License as published by
8//    the Free Software Foundation; either version 2 of the License, or any later version.
9//
10//    This program is distributed in the hope that it will be useful,
11//    but WITHOUT ANY WARRANTY; without even the implied warranty of
12//    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13//    GNU General Public License for more details.
14//
15//    You should have received a copy of the GNU General Public License
16//    along with this program; if not, write to the Free Software
17//    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
18
19
20// Selection du squelette par mot cle
21function squelettesmots_styliser($flux) {
22        // quand le selecteur doit il s'activer ?
23        // pas de fond=rep/nom (inclusions)
24        if ($fond = $flux['args']['fond']
25        and false === strpos($fond, '/')) {
26                // on cherche si le squelette a deja trouve un fond particulier specifique
27                // c'est a dire different de $fond.html.
28                // Si c'est le cas, on ne cherche pas de squelette specifique par mot.
29                $skel = basename($flux['data']);
30                if ($skel == $fond) {
31                        $fonds = unserialize($GLOBALS['meta']['SquelettesMots:fond_pour_groupe']);
32                        // array ($base_fond = array($id_groupe, $table, $_id_table))
33                        // on teste qu'on a bien un fond
34                        if (is_array($fonds) and isset($fonds[$fond])) {
35                                // si un identifiant du meme type est bien passe
36                                list($id_groupe, $table, $_id_table) = $fonds[$fond];
37                                $ext = $flux['args']['ext'];
38                                $id_rub = $flux['args']['id_rubrique'];
39                                if ($id = intval($flux['args']['contexte'][$_id_table])) {
40                                        // premier cas : mot sur l'article
41                                        if ($mot = quete_mot_squelette($id, $id_groupe, $table, $_id_table)
42                                        and   ($squelette = test_squelette_motcle($fond, $ext, $mot, '=')
43                                                or $squelette = test_squelette_motcle($fond, $ext, $mot))) {
44                                                        $flux['data'] = $squelette;
45                                        }
46                                        // second cas : mot sur une rubrique parente
47                                        elseif ($mot = quete_mot_squelette($id_rub, $id_groupe, 'rubriques', 'id_rubrique', true)
48                                                and $squelette = test_squelette_motcle($fond, $ext, $mot)) {
49                                                        $flux['data'] = $squelette;
50                                        }
51                                }
52
53                        }
54                }
55        }       
56        return $flux;
57}
58
59function test_squelette_motcle($fond, $ext, $mot, $separateur = '-') {
60        if ($squelette = find_in_path($fond . $separateur . $mot . '.' . $ext)) {
61                return substr($squelette, 0, -strlen(".$ext"));
62        }
63        return false;
64}
65
66// smc: on ajoute la fonction qui va chercher les mots
67// associes aux items dans le groupe qui va bien
68// recursion : seulement si $id de rubrique
69function quete_mot_squelette($id ,$id_groupe, $table, $_id_table, $recurse=false) {
70  $select1 = 'titre';
71  $from1 = array('spip_mots AS mots',
72                                 "spip_mots_$table AS lien");
73  while($id > 0) {
74        $where1 = array("$_id_table=$id",
75                                        'mots.id_mot=lien.id_mot',
76                                        "id_groupe=$id_groupe");
77       
78        // attention getfetsel ne renvoie qu'un mot !
79        // si quelqu'un a mis plusieurs mots sur l'objet, tant pis pour lui,
80        // on ne peut pas predire lequel sera retourne
81        if ($titre = sql_getfetsel($select1,$from1,$where1)) {
82                include_spip("inc/charsets");
83                include_spip("inc/filtres");
84                return translitteration(preg_replace('/["\'.\s]/', '_', extraire_multi($titre)));       
85        }
86        if(!$recurse) return '';
87        // attention identifiant de rubrique ici uniquement
88        $id = quete_parent($id);
89  }
90  return '';
91}
92?>
Note: See TracBrowser for help on using the repository browser.