source: spip-zone/_plugins_/zcore_init/trunk/zcore_init_fonctions.php @ 90819

Last change on this file since 90819 was 90819, checked in by teddy.spip@…, 5 years ago

On met une sécu à chaque fois qu'on attend une valeur par défaut.

File size: 5.7 KB
Line 
1<?php
2
3/**
4 * Fonctions utiles au plugin Initialiser ses squelettes Zcore.
5 *
6 * @plugin     Initialiser ses squelettes Zcore
7 *
8 * @copyright  2015
9 * @author     Teddy Payet
10 * @licence    GNU/GPL
11 */
12if (!defined('_ECRIRE_INC_VERSION')) {
13    return;
14}
15
16/**
17 * Avoir la liste des blocs/répertoires pour zcore.
18 *
19 * @return array
20 *         Tableau des blocs définies par la globale 'z_blocs' ou une liste par défaut.
21 */
22function zi_repertoire_skel_defaut()
23{
24    // Si la globale 'z_blocs' n'est pas définie,
25    // on va donner une liste de dossiers par défaut.
26    if (!isset($GLOBALS['z_blocs'])) {
27        $repertoires = array('content', 'head', 'head_js');
28    } else {
29        // Sinon, on prend les valeurs données par 'z_blocs'.
30        $repertoires = $GLOBALS['z_blocs'];
31    }
32
33    return $repertoires;
34}
35
36/**
37 * Cette fonction va créer les répertoires pour le plugin.
38 */
39function zi_repertoire_skel_creer($repertoire_zcore = _ZI_DIR_SQUELETTES)
40{
41    $repertoires = zi_repertoire_skel_defaut();
42    if (is_null($repertoire_zcore) or empty($repertoire_zcore)) {
43        $repertoire_zcore = _ZI_DIR_SQUELETTES;
44    }
45    foreach ($repertoires as $repertoire) {
46        if (!is_dir($repertoire_zcore.$repertoire)) {
47            @mkdir($repertoire_zcore.$repertoire, _SPIP_CHMOD, true);
48        }
49    }
50
51    return true;
52}
53
54/**
55 * Mettre à jour la liste des répertoires présents dans 'squelettes_zcore'.
56 * Si des répertoires ne font plus partis des répertoires de la globale 'z_blocs',
57 * ces répertoires seront supprimés s'ils sont vides.
58 */
59function zi_repertoire_skel_maj($repertoire_zcore = _ZI_DIR_SQUELETTES)
60{
61    $repertoires_defaut = zi_repertoire_skel_defaut();
62    $black_list = array('..', '.', '.svn', '.DS_Store');
63    if (is_null($repertoire_zcore) or empty($repertoire_zcore)) {
64        $repertoire_zcore = _ZI_DIR_SQUELETTES;
65    }
66
67    if (is_dir($repertoire_zcore)) {
68        // On liste les répertoires qui ont été créés dans squelettes_zcore
69        $repertoires_crees = array_diff(scandir($repertoire_zcore), $black_list);
70        // On ne garde que les répertoires qui ne font plus partis des répertoires nécessaires à zcore.
71        $repertoires_obsoletes = array_diff($repertoires_crees, $repertoires_defaut);
72        if (is_array($repertoires_obsoletes) and count($repertoires_obsoletes) > 0) {
73            // On a bien une liste de répertoires obsolètes,
74            // alors, on les efface s'ils sont vides.
75            foreach ($repertoires_obsoletes as $repertoire) {
76                if (is_dir($repertoire_zcore.$repertoire) and (count(array_diff(scandir($repertoire_zcore.$repertoire), $black_list)) == 0)) {
77                    @rmdir($repertoire_zcore.$repertoire);
78                }
79            }
80        }
81    }
82
83    return;
84}
85
86/**
87 * Lister les répertoires de squelettes_zcore.
88 *
89 * @return bool|array
90 *         `false` : si le répertoire 'squelettes_zcore' n'a pas été créé.
91 *         `array` : liste des répertoires.
92 */
93function zi_repertoire_skel_lister($repertoire_zcore = _ZI_DIR_SQUELETTES)
94{
95    $repertoires = array();
96    if (is_null($repertoire_zcore) or empty($repertoire_zcore)) {
97        $repertoire_zcore = _ZI_DIR_SQUELETTES;
98    }
99    // On crée les répertoires.
100    zi_repertoire_skel_creer();
101    // On vérifie que $repertoire passé en paramètre est bien un répertoire existant.
102    // cf. ../IMG/orphelins qui ne serait pas encore créé.
103    if (is_dir($repertoire_zcore)) {
104        // Avec la fonction scandir, on liste le contenu (existant) du répertoire cible.
105        $repertoires_tmp = array_diff(scandir($repertoire_zcore), array('..', '.', '.svn', '.DS_Store')); // On ne liste pas le répertoire .svn
106        foreach ($repertoires_tmp as $repertoire) {
107            // On vérifie que c'est un répertoire et non un fichier.
108            if (is_dir($repertoire_zcore.$repertoire)) {
109                $repertoires[] = $repertoire_zcore.$repertoire;
110            }
111        }
112    } else {
113        return false;
114    }
115
116    return (array) $repertoires;
117}
118
119/**
120 * On liste toutes les tables qui ont une page de vue déterminée.
121 *
122 * @return array Liste des tables.
123 */
124function zi_lister_tables()
125{
126    include_spip('base/objets');
127
128    $tables_a_exclure = $GLOBALS['zi_tables_exclues'];
129
130    $tables_objets_sql = lister_tables_objets_sql();
131
132    foreach ($tables_objets_sql as $table => $champs) {
133        // Si l'objet n'a pas de page de vue pour le public,
134        // alors on ne garde pas cet objet pour zcore_init
135        if (is_null($champs['page']) or empty($champs['page'])) {
136            unset($tables_objets_sql[$table]);
137        }
138    }
139
140    return $tables_objets_sql;
141}
142
143function zi_template_skel_creer($cible = _ZI_DIR_SQUELETTES)
144{
145    $objets = zi_lister_tables();
146    if (is_null($cible) or empty($cible)) {
147        $cible = _ZI_DIR_SQUELETTES;
148    }
149
150    foreach ($objets as $table_sql => $descriptif) {
151        $contexte = array();
152        $contexte['objet'] = objet_type($table_sql);
153        $contexte['id_secteur'] = (isset($descriptif['field']['id_secteur']) ? true : false);
154        $contexte['id_rubrique'] = (isset($descriptif['field']['id_rubrique']) ? true : false);
155        $content = recuperer_fond('inclure/objet_template', $contexte);
156        $template = fopen($cible.$contexte['objet'].'.html', 'w+') or die('Unable to open file!');
157        fwrite($template, $content);
158        fclose($template);
159    }
160
161    return true;
162}
163
164/**
165 * Vérifier que la globale 'z_blocs' existe.
166 *
167 * @return bool
168 *         true : la globale est renseignée et est un tableau
169 *         false : la globale n'existe pas et/ou n'est pas un tableau.
170 */
171function zi_blocs_verifier()
172{
173    if (isset($GLOBALS['z_blocs']) and is_array($GLOBALS['z_blocs'])) {
174        return true;
175    } else {
176        return false;
177    }
178}
Note: See TracBrowser for help on using the repository browser.