source: spip-zone/_plugins_/acs/inc/acs_onload.php @ 48965

Last change on this file since 48965 was 48965, checked in by webmaster@…, 10 years ago

ACS:

  • liste des widgets en partie privée : classement des composants en deux blocs: cadres et éléments.
  • suppression de exec/acs_page_source.php (devenu inutile).
  • formulaire administration enrichi d'un accès direct à l'édition de la page et du bouton inclusions.
  • choix du positionnement du formulaire administration de SPIP.
  • passage en ajax du bloc de configuration d'ACS (Onglet Administration).
  • nouvelle option de configuration : Désactiver le cache de SPIP.
  • nouvelle aide contextuelle
  • restauration du fonctionnement de controleurs/var.php suite au passage des controleurs en objets.


Cat :

  • évolution de l'usage de la balise #ACS_CHEMIN (dans tous les fichiers où elle est utilisée)
  • Carte: correction bug sur affichage des sous-rubriques géoreferencées. Correction d'un bug sur les popups ombrées introduit par le changement de comportement de la balise #ACS_CHEMIN.
  • Fond/entete: filtre textebrut sur le titre des pages.
  • Keys: nouvelles variables arrondi de bordure et ombre.
File size: 7.0 KB
Line 
1<?php
2#              ACS
3#          (Plugin Spip)
4#     http://acs.geomaticien.org
5#
6# Copyright Daniel FAIVRE, 2007-2011
7# Copyleft: licence GPL - Cf. LICENCES.txt
8
9/**
10 * @file acs_onload.php
11 * appellé depuis acs_options.php dans TOUS les cas
12 * acs_options est le premier fichier du plugin chargé, avant même autoriser.php de la dist
13 */
14
15// Dossier des paramètres et images utilisateur
16// User images and parameters
17// compatible mutualisation (_DIR_SITE defini)
18if (_DIR_SITE != '_DIR_SITE') {
19        $dir_site = _DIR_SITE;
20        $dir_site_absolu = _DIR_RACINE ? substr(_DIR_SITE, 3) : _DIR_SITE;
21}
22else {
23        $dir_site = _DIR_RACINE;
24        $dir_site_absolu = '';
25}
26
27// Racine des dossiers du site :
28define('_ACS_DIR_SITE_ROOT', $dir_site);
29
30// Dossier du cache ACS (par defaut: tmp/cache/acs)
31define('_ACS_TMP_DIR', _ACS_DIR_SITE_ROOT._NOM_TEMPORAIRES_INACCESSIBLES.'cache/acs/');
32
33// Desactivation du cache de SPIP
34if ($GLOBALS['meta']['ACS_CACHE_SPIP_OFF'] == 'on')
35  define('_NO_CACHE',-1); // Desactive totalement le cache de SPIP (aucune creation des pages en cache)
36
37// Modèle ACS par defaut - Default ACS model
38$GLOBALS['meta']['acsModel'] = isset($GLOBALS['meta']['acsModel']) ? $GLOBALS['meta']['acsModel'] : 'cat';
39
40// Dossier des images du modèle ACS actif - Active ACS model images directory
41$GLOBALS['ACS_CHEMIN'] = $dir_site_absolu._NOM_PERMANENTS_ACCESSIBLES.'_acs/'.$GLOBALS['meta']['acsModel'];
42
43define('_DIR_ACS', _DIR_PLUGINS.acs_get_from_active_plugin('ACS', 'dir').'/'); // Chemin valable espace public aussi, pas comme _DIR_PLUGIN_ACS, qui est à proscrire
44
45// Définition du dossier global des squelettes actifs d'ACS (avec override)
46// Global active ACS skeletons directory definition (with override)
47$dossiers_squelettes_avant_override = explode(':', $GLOBALS['dossier_squelettes']);
48if (isset($GLOBALS['meta']['acsSqueletteOverACS']) && $GLOBALS['meta']['acsSqueletteOverACS']) {
49  $tas = explode(':', $GLOBALS['meta']['acsSqueletteOverACS']);
50  foreach($tas as $dir) {
51    @include(_ACS_DIR_SITE_ROOT.$dir.'/mes_options.php');
52    @include(_ACS_DIR_SITE_ROOT.$dir.'/mes_fonctions.php');
53    if (in_array($dir_site_absolu.$dir, $dossiers_squelettes_avant_override))
54      continue;
55    if (isset($GLOBALS['dossier_squelettes']) && $GLOBALS['dossier_squelettes'])
56      $GLOBALS['dossier_squelettes'] .= ':';
57    $GLOBALS['dossier_squelettes'] .= $dir_site_absolu.$dir;
58  }
59}
60if (isset($GLOBALS['dossier_squelettes']) && $GLOBALS['dossier_squelettes'])
61  $GLOBALS['dossier_squelettes'] .= ':';
62// On ajoute le chemin du modèle cat actif
63$GLOBALS['dossier_squelettes'] .= 'plugins/'.acs_get_from_active_plugin('ACS', 'dir').'/'.'models/'.$GLOBALS['meta']['acsModel'];
64
65// dossier des composants :
66define('_DIR_COMPOSANTS', find_in_path('composants'));
67
68// dispatch public / privé
69if ((_DIR_RESTREINT != '') && ($_POST['action'] != 'poster_forum_prive')) {
70        // Sauts de ligne
71        $GLOBALS['spip_pipeline']['pre_propre'] .= '|post_autobr'; 
72}
73else {
74  require_once _DIR_ACS.'inc/acs_onload_ecrire.php';
75}
76include_spip('balise/acs_balises');
77
78// Retourne une variable d'un plugin actif
79function acs_get_from_active_plugin($plugin, $variable = false) {
80  $meta_plugin = unserialize($GLOBALS['meta']['plugin']);
81  $plugin = $meta_plugin[$plugin];
82
83  if (!$variable)
84    return isset($plugin['dir']);
85
86  if (isset($plugin[$variable]))
87    return $plugin[$variable];
88
89  return false;
90}
91
92// Vérifie que l'utilisateur connecté est un admin ACS autorisé, ou le(s) webmestre(s) si ACS n'est pas encore configuré
93// ou qu'il dispose des droits requis (_acs, _adm, _aut, ou _ide)
94function acs_autorise($requested_statut='_acs') {
95  // Si l'utilisateur n'est pas identifie, pas la peine d'aller plus loin
96  if (!isset($GLOBALS['auteur_session']['statut']))
97    return false;
98 
99  switch($requested_statut) {
100    case '_adm':
101      $rs = Array('0minirezo');
102      break;
103    case '_aut':
104      $rs = Array('0minirezo', '1redacteur');
105      break;
106    case '_ide':
107      $rs = Array('0minirezo', '1redacteur', '6visiteur');
108      break;
109  }
110  // Si un droit plus faible que "_acs" est demandé, on retourne le resultat
111  if (is_array($rs))
112    return in_array($GLOBALS['auteur_session']['statut'], $rs);
113 
114        // Si l'utilisateur n'est pas admin, pas la peine d'aller plus loin
115        if ($GLOBALS['auteur_session']['statut'] != "0minirezo")
116                return false;
117        // Cet admin est-il aussi admin ACS ?
118        $id_admin = $GLOBALS['auteur_session']['id_auteur'];
119  if (isset($GLOBALS['meta']['ACS_ADMINS']) && $GLOBALS['meta']['ACS_ADMINS'] != '')
120    return in_array($id_admin, explode(',', $GLOBALS['meta']['ACS_ADMINS']) );
121  elseif (defined(_ID_WEBMESTRES)) // Si le plugin Autorité est installé, les webmestres sont autorisés à configurer ACS
122    return in_array($id_admin, explode(':', _ID_WEBMESTRES) );
123  else  // A défaut, le créateur ET administrateur du site (auteur n°1) est toujours autorisé à configurer ACS
124    return ($id_admin == 1);
125  return false;
126}
127
128/**
129 * Makes directory, returns TRUE if exists or made
130 *
131 * @param string $pathname The directory path.
132 * @return boolean returns TRUE if exists or made or FALSE on failure.
133 */
134function mkdir_recursive($pathname) {
135    @is_dir(dirname($pathname)) || mkdir_recursive(dirname($pathname));
136    return @is_dir($pathname) || @mkdir($pathname);
137}
138
139/**
140 * Lit une variable meta à la façon de l'API cfg, suivant un chemin,
141 * avec en plus la récursivité ACS (une variable ACS peut référencer une autre variable ACS)
142 * Utilisé par la fonction balise_VAR()
143 * @param src : tableau source
144 * @param meta : nom de la variable meta à lire
145 * @return : valeur de la variable (récursive)
146 */
147function meta_recursive($src, $meta) {
148        $chemin = strtok($meta, '/');
149        $val = $src[$chemin];
150        // Si la valeur commence par "=", c'est une référence récursive à une autre variable ACS
151        if (substr($val, 0 ,1) == '=')
152                $val = meta_recursive($src, substr($val, 1).substr($meta, strlen($chemin)));
153        // On appelle récursivement la fonction tant que $val est un array ou un array serialise
154        if (is_array($val)) {
155                $val = meta_recursive($val, substr($meta, strlen($chemin)+1));
156        }
157        elseif (is_array(unserialize($val))) {
158                $val = meta_recursive(unserialize($val), substr($meta, strlen($chemin)+1));
159        }
160        return $val;
161}
162/**
163 * Journalise les actions du plugin ACS si _ACS_LOG vaut "true" dans acs_options.php
164 * @param : texte à journaliser
165 */
166function acs_log($txt) {
167        if (_ACS_LOG === true)
168                spip_log($txt, 'acs');
169}
170/**
171 * Retourne un objet ou un tableau sous forme de tableau affichable en html
172 * @param r : objet ou tableau
173 * @param html : retourne du html si vrai
174 * @return : objet ou tableau en mode texte ou html lisible
175 */
176function dbg($r, $html=false) {
177   if (is_object($r) or is_array($r)) {
178        ob_start();
179        print_r($r);
180        $r = ob_get_contents();
181        ob_end_clean();
182        if ($html)
183                $r = htmlentities($r);
184        $srch = array('/Array[\n\r]/', '/\s*[\(\)]+/', '/[\n\r]+/', '/ (?= )/s');
185        $repl = array(''             , ''            , "\n"       , ($html ? '&nbsp;' : ' '));
186        $r = preg_replace($srch, $repl, $r);
187        if ($html)
188                $r = nl2br($r);
189    }
190    return $r;
191}
192?>
Note: See TracBrowser for help on using the repository browser.