PEEL Shopping
Open source ecommerce : PEEL Shopping
modules_handler.php
Go to the documentation of this file.
1 <?php
2 // This file should be in UTF8 without BOM - Accents examples: éèê
3 // +----------------------------------------------------------------------+
4 // | Copyright (c) 2004-2015 Advisto SAS, service PEEL - contact@peel.fr |
5 // +----------------------------------------------------------------------+
6 // | This file is part of PEEL Shopping 8.0.0, which is subject to an |
7 // | opensource GPL license: you are allowed to customize the code |
8 // | for your own needs, but must keep your changes under GPL |
9 // | More information: https://www.peel.fr/lire/licence-gpl-70.html |
10 // +----------------------------------------------------------------------+
11 // | Author: Advisto SAS, RCS 479 205 452, France, https://www.peel.fr/ |
12 // +----------------------------------------------------------------------+
13 // $Id: modules_handler.php 47350 2015-10-12 20:16:45Z gboussin $
14 
15 if (!defined('IN_PEEL')) {
16  die();
17 }
18 
19 
26 function load_modules($technical_code = null) {
27  $modules_to_check = array_keys(array_merge_recursive(vb($GLOBALS['site_parameters']['modules_front_office_functions_files_array'], array()), vb($GLOBALS['site_parameters']['modules_admin_functions_array'], array()), vb($GLOBALS['site_parameters']['modules_crons_functions_array'], array()), vb($GLOBALS['site_parameters']['modules_lang_folders_array'], array())));
28  foreach($modules_to_check as $this_module) {
29  if((empty($technical_code) || $technical_code == $this_module) && empty($GLOBALS['modules_installed'][$this_module])) {
30  // Pour la compatibilité avec d'anciennes versions, on stocke le chemin vers les fichiers de fonctions dans une variable globale
31  if(!empty($GLOBALS['site_parameters']['modules_front_office_functions_files_array'][$this_module])) {
32  $GLOBALS[vb($GLOBALS['site_parameters']['modules_fonctions_variable_array'][$this_module], 'fonctions'. $this_module)] = $GLOBALS['dirroot'] . str_replace(',', ',' . $GLOBALS['dirroot'], $GLOBALS['site_parameters']['modules_front_office_functions_files_array'][$this_module]);
33  }
34  if ((in_array($this_module, $GLOBALS['site_parameters']['modules_no_optional_array']) || !defined('LOAD_NO_OPTIONAL_MODULE') || (defined('LOAD_MODULE_FORCED') && in_array($this_module, LOAD_MODULE_FORCED))) && check_if_module_active($this_module)) {
35  // On a une protection pour éviter de charger deux fois le même fichier de fonctions en cas de doublon de configuration
36  // En revanche, rien n'empêche de charger plusieurs librairies de fonctions pour un même module
37  if((empty($GLOBALS['site_parameters']['modules_no_library_load_array']) || !in_array($this_module, $GLOBALS['site_parameters']['modules_no_library_load_array']))) {
38  if(!empty($GLOBALS['site_parameters']['modules_front_office_functions_files_array'][$this_module])) {
39  foreach(explode(',', $GLOBALS['site_parameters']['modules_front_office_functions_files_array'][$this_module]) as $this_file) {
40  if(String::strpos($this_file, '.php') !== false && !in_array($this_file, vb($GLOBALS['modules_loaded_functions'], array()))) {
41  if(String::strpos($this_file, 'administrer/') === false || (defined('IN_PEEL_ADMIN') || defined('IN_CRON'))) {
42  include($GLOBALS['dirroot'] . $this_file);
43  }
44  $GLOBALS['modules_loaded_functions'][] = $this_file;
45  $GLOBALS['modules_loaded_functions'][] = $this_file;
46  }
47  }
48  }
49  if((defined('IN_PEEL_ADMIN') || defined('IN_CRON')) && !empty($GLOBALS['site_parameters']['modules_admin_functions_array'][$this_module]) && !in_array($GLOBALS['site_parameters']['modules_admin_functions_array'][$this_module], vb($GLOBALS['modules_loaded_functions'], array()))) {
50  $GLOBALS['fonctions_admin_'. $this_module] = $GLOBALS['dirroot'] . $GLOBALS['site_parameters']['modules_admin_functions_array'][$this_module];
51  include($GLOBALS['fonctions_admin_'. $this_module]);
52  $GLOBALS['modules_loaded_functions'][] = $GLOBALS['site_parameters']['modules_admin_functions_array'][$this_module];
53  }
54  if(defined('IN_CRON') && !empty($GLOBALS['site_parameters']['modules_crons_functions_array'][$this_module]) && !in_array($GLOBALS['site_parameters']['modules_crons_functions_array'][$this_module], vb($GLOBALS['modules_loaded_functions'], array()))) {
55  $GLOBALS['fonctions_cron_'. $this_module] = $GLOBALS['dirroot'] . $GLOBALS['site_parameters']['modules_crons_functions_array'][$this_module];
56  include($GLOBALS['fonctions_cron_'. $this_module]);
57  $GLOBALS['modules_loaded_functions'][] = $GLOBALS['site_parameters']['modules_crons_functions_array'][$this_module];
58  }
59  }
60  if(!empty($GLOBALS['site_parameters']['modules_lang_folders_array'][$this_module])) {
61  $GLOBALS['modules_lang_folders_to_load_array'][] = $GLOBALS['site_parameters']['modules_lang_folders_array'][$this_module];
62  }
63  $GLOBALS['modules_installed'][$this_module] = $this_module;
64  }
65  }
66  }
67  if(empty($technical_code)) {
68  // On charge les fichiers de langue des modules
69  if (!empty($GLOBALS['site_parameters']['load_site_specific_lang_folders'])) {
70  foreach($GLOBALS['site_parameters']['load_site_specific_lang_folders'] as $this_key => $this_file_relative_path) {
71  if(!in_array($this_file_relative_path, vb($GLOBALS['modules_lang_folders_to_load_array'], array()))) {
72  if(file_exists($GLOBALS['dirroot'] . $this_file_relative_path)) {
73  // Ces fichiers de langue sont chargés en derniers grâce à leur clé élevée, et sont donc prioritaires
74  $GLOBALS['modules_lang_folders_to_load_array'][1000 + $this_key] = $this_file_relative_path;
75  }
76  }
77  }
78  }
79  }
80 }
81 
90 function check_if_module_active($module_name, $specific_file_name=null) {
91  $automatically_activate_if_no_configuration_available = array('thumbs');
92  if (empty($module_name) || !isset($GLOBALS['site_parameters']['modules_configuration_variable_array'])) {
93  // Nom du module vide ou pas renseigné - Ou pas de configuration valide disponible, comme lors de l'installation
94  return false;
95  }
96  $module_configuration_variable = vb($GLOBALS['site_parameters']['modules_configuration_variable_array'][$module_name], 'module_' . $module_name);
97  $module_configured = ((in_array($module_name, $automatically_activate_if_no_configuration_available) && !isset($GLOBALS['site_parameters'][$module_configuration_variable])) || !empty($GLOBALS['site_parameters'][$module_configuration_variable]));
98  $module_enable_for_this_lang = (empty($GLOBALS['site_parameters'][$module_name . '_allowed_langs_array']) || in_array($_SESSION['session_langue'], $GLOBALS['site_parameters'][$module_name . '_allowed_langs_array']));
99  if ($module_configured && $module_enable_for_this_lang) {
100  // Si le paramètre est absent, ou qu'il est activé en back office. La validité de l'absence du paramètre est nécessaire pour des raisons de compatibilité pour certains modules. Donc la désactivation du module est à faire depuis le back office, en passant la valeur à 0 ou false (selon le type de la configuration)
101  if (empty($specific_file_name)) {
102  // cas standard
103  if (file_exists($GLOBALS['dirroot'] . '/modules/'.$module_name)) {
104  // dossier trouvé et module actif, la fonction retourne un résultat positif
105  return true;
106  }
107  } elseif (file_exists($GLOBALS['dirroot'] . '/modules/' . $module_name . '/' . $specific_file_name)) {
108  // fichier trouvé et module actif, la fonction retourne un résultat positif
109  return true;
110  }
111  }
112  // Si on passe par ici, les tests qui permettent l'activation du module ont échoué. Soit la désactivation du module est faite depuis l'administration, ou aucun fichier respectant la norme de nommage n'est présent dans le module
113  return false;
114 }
115 
116 
123 function call_module_hook($hook, $params, $mode = 'boolean') {
124  if($mode == 'boolean') {
125  $output = true;
126  } elseif($mode == 'array') {
127  $output = array();
128  } else {
129  $output = null;
130  }
131  if (defined('PEEL_DEBUG') && PEEL_DEBUG) {
132  $start_time = microtime_float();
133  }
134  foreach(vb($GLOBALS['modules_installed'], array()) as $this_module) {
135  // On charge le hook, soit en tant que fonction, soit en tant que méthode de la classe du module
136  $function_name = $this_module . '_hook_' . $hook;
137  $class_name = String::ucfirst($this_module);
138  $method_name = 'hook_' . $hook;
139  unset($result);
140  if(function_exists($function_name)) {
141  $result = $function_name($params);
142  } elseif(method_exists($class_name, $method_name)) {
143  $result = $class_name::$method_name($params);
144  }
145  if(isset($result)) {
146  if($mode == 'boolean') {
147  $output = ($output && $result);
148  } elseif($mode == 'array') {
149  if(!is_array($result)) {
150  $result = array($result);
151  }
152  $output = array_merge_recursive($output, $result);
153  } elseif($mode == 'max') {
154  $output = max($output, $result);
155  } elseif($mode == 'min') {
156  if($output === null) {
157  $output = $result;
158  } else {
159  $output = min($output, $result);
160  }
161  } elseif($mode == 'unique') {
162  $output = $result;
163  } elseif($mode == 'add') {
164  $output += $result;
165  } else {
166  $output .= $result;
167  }
168  }
169  }
170  if (defined('PEEL_DEBUG') && PEEL_DEBUG) {
171  $end_time = microtime_float();
172  $GLOBALS['peel_debug'][] = array('text' => 'Hook ' . $hook, 'duration' => $end_time - $start_time, 'start' => $start_time - $GLOBALS['script_start_time']);
173  }
174  return $output;
175 }
$result
static strpos($haystack, $needle, $offset=0)
Returns the numeric position of the first occurrence of needle in the haystack string.
Definition: String.php:54
$mode
if(!defined('IN_PEEL')) load_modules($technical_code=null)
Charge les modules Pour obtenir des modules optionnels : Contactez PEEL sur https://www.peel.fr/ ou au 01 75 43 67 97.
microtime_float()
microtime_float()
Definition: fonctions.php:2776
vb(&$var, $default=null)
Variable blanche if $var n'est pas défini, retourne $default, sinon retourne $var.
Definition: format.php:97
if(strlen($date2)== '10') if($type== 'users-by-age'&&a_priv('admin_users', true)) elseif($type== 'forums-count'&&a_priv('admin_content', true)) elseif($type== 'forums-categories'&&a_priv('admin_content', true)) elseif($type== 'users-count'&&a_priv('admin_users', true)) elseif($type== 'product-categories'&&a_priv('admin_products', true)) elseif($type== 'users-by-sex'&&a_priv('admin_users', true)) elseif($type== 'users-by-country'&&a_priv('admin_users', true)) elseif($type== 'sales'&&a_priv('admin_sales', true))
Definition: chart-data.php:160
call_module_hook($hook, $params, $mode= 'boolean')
Appelle la fonction correspondant au $hook pour chaque module installé La fonction doit s'appeler : [...
$GLOBALS['page_columns_count']
check_if_module_active($module_name, $specific_file_name=null)
Renvoie si un module est présent et activé ou non - Peut être appelé avant ou après le chargement d'u...
static ucfirst($string)
Returns string with first letter uppercase.
Definition: String.php:173
if(defined('IN_PEEL_ADMIN')||IN_INSTALLATION) $_SESSION['session_langue']

This documentation for Open ecommerce PEEL Shopping and PEEL.fr has been generated by Doxygen on Thu Oct 15 2015 14:31:18 - Peel ecommerce is a product of Agence web Advisto SAS. All rights reserved.