/application/core/Modules.php

https://gitlab.com/fredec/ionizecms-1.0.8.x · PHP · 278 lines · 150 code · 67 blank · 61 comment · 17 complexity · b3c23107618581f58d6d26690a66e1e8 MD5 · raw file

  1. <?php
  2. /**
  3. * Modules Class
  4. *
  5. * @package Ionize CMS
  6. * @subpackage User
  7. * @author Ionize Dev Team
  8. *
  9. */
  10. namespace Ionize {
  11. if ( ! defined('BASEPATH')) exit('No direct script access allowed');
  12. class Modules {
  13. private static $ci;
  14. /**
  15. * Contains the Modules instance.
  16. *
  17. * @var Modules
  18. */
  19. private static $instance;
  20. /**
  21. * All modules definition
  22. *
  23. * @var null|array
  24. */
  25. private static $modules = NULL;
  26. /**
  27. * Installed modules definition
  28. *
  29. * @var null|array
  30. */
  31. private static $installed_modules = NULL;
  32. private static $resources = NULL;
  33. // --------------------------------------------------------------------
  34. /**
  35. * Constructor
  36. *
  37. */
  38. public function __construct()
  39. {
  40. self::$instance =& $this;
  41. log_message('debug', 'Class Module initialized');
  42. static::get_modules();
  43. }
  44. // --------------------------------------------------------------------
  45. public static function get_module_config($module_folder)
  46. {
  47. $modules = static::get_modules();
  48. if (isset($modules[ucfirst($module_folder)]))
  49. {
  50. return $modules[ucfirst($module_folder)];
  51. }
  52. return array();
  53. }
  54. // --------------------------------------------------------------------
  55. public static function get_module_config_from_uri($module_uri)
  56. {
  57. $module_folder = NULL;
  58. // Modules from config file
  59. $modules = $aliases = $disable_controller = array();
  60. include APPPATH . 'config/modules.php';
  61. if(in_array($module_uri, array_keys($modules)) && ( ! in_array($module_uri, $disable_controller)))
  62. $module_folder = $modules[$module_uri];
  63. $all_modules = static::get_modules();
  64. if (isset($all_modules[ucfirst($module_folder)]))
  65. {
  66. return $all_modules[ucfirst($module_folder)];
  67. }
  68. return array();
  69. }
  70. // --------------------------------------------------------------------
  71. public static function get_resources()
  72. {
  73. if ( is_null(static::$resources))
  74. {
  75. $resources = array();
  76. $modules = static::get_installed_modules();
  77. foreach($modules as $module_key => $module)
  78. {
  79. $module_key = strtolower($module_key);
  80. $base_module_resource = 'module/' . $module_key;
  81. // Basic Module resource (root)
  82. $resources[] = array(
  83. 'id_resource' => $base_module_resource,
  84. 'id_parent' => '',
  85. 'resource' => $base_module_resource,
  86. 'actions' => '',
  87. 'title' => $module['name'],
  88. 'description' => '',
  89. );
  90. if (isset($module['resources']))
  91. {
  92. foreach($module['resources'] as $resource => $data)
  93. {
  94. // Root module actions
  95. if ( empty($resource))
  96. {
  97. $resources[0]['id_resource'] = $base_module_resource;
  98. $resources[0]['actions'] = ! empty($data['actions']) ? $data['actions'] : '';
  99. $resources[0]['title'] = ! empty($data['title']) ? $data['title'] : '';
  100. $resources[0]['description'] = ! empty($data['description']) ? $data['description'] : '';
  101. }
  102. else
  103. {
  104. $resources[] = array(
  105. 'id_resource' => $base_module_resource .'/' . $resource,
  106. 'id_parent' => ! empty($data['parent']) ? $base_module_resource .'/'.$data['parent'] : $base_module_resource,
  107. 'resource' => $base_module_resource .'/' . $resource,
  108. 'actions' => ! empty($data['actions']) ? $data['actions'] : '',
  109. 'title' => ! empty($data['title']) ? $data['title'] : '',
  110. 'description' => ! empty($data['description']) ? $data['description'] : $resource,
  111. );
  112. }
  113. }
  114. }
  115. }
  116. static::$resources = $resources;
  117. }
  118. return static::$resources;
  119. }
  120. // --------------------------------------------------------------------
  121. /**
  122. * Get all modules
  123. *
  124. * @return array|null
  125. *
  126. */
  127. public static function get_modules()
  128. {
  129. if (is_null(static::$modules))
  130. {
  131. static::$modules = array();
  132. static::$installed_modules = array();
  133. // Installed modules, stored in application/config/modules.php
  134. $modules = array();
  135. include(APPPATH.'config/modules.php');
  136. // All modules folders
  137. $folders = glob(MODPATH.'*');
  138. if ( ! empty($folders))
  139. {
  140. foreach($folders as $folder)
  141. {
  142. if (is_dir($folder))
  143. {
  144. $file = $folder .'/config/config.php';
  145. if (is_file($file))
  146. {
  147. $config = include($file);
  148. if ( isset($config) && is_array($config))
  149. {
  150. $folder_name = array_pop(explode('/', $folder));
  151. $config['path'] = $folder;
  152. $config['folder'] = $folder_name;
  153. $config['key'] = strtolower($folder_name);
  154. $config['installed'] = FALSE;
  155. if ( ! isset($config['uri'])) $config['uri'] = $config['key'];
  156. if (in_array($folder_name, $modules))
  157. {
  158. $config['installed'] = TRUE;
  159. $config['front_uri'] = array_search($folder_name, $modules);
  160. static::$installed_modules[$folder_name] = $config;
  161. }
  162. static::$modules[$folder_name] = $config;
  163. }
  164. unset($config);
  165. }
  166. }
  167. }
  168. }
  169. }
  170. return static::$modules;
  171. }
  172. // --------------------------------------------------------------------
  173. /**
  174. * Returns installed modules
  175. *
  176. * @return array|null
  177. *
  178. */
  179. public static function get_installed_modules()
  180. {
  181. static::get_modules();
  182. return static::$installed_modules;
  183. }
  184. // --------------------------------------------------------------------
  185. /**
  186. * Get the instance of the Lib
  187. *
  188. */
  189. public static function get_instance()
  190. {
  191. if( ! isset(self::$instance))
  192. {
  193. new Modules();
  194. self::$ci->load->_ci_loaded_files[] = APPPATH.'core/Modules.php';
  195. }
  196. return self::$instance;
  197. }
  198. }
  199. }
  200. // --------------------------------------------------------------------
  201. namespace {
  202. /**
  203. * Returns the authentication object, short for Modules::get_instance().
  204. *
  205. * @return Ionize\Modules
  206. */
  207. function Modules()
  208. {
  209. return Ionize\Modules::get_instance();
  210. }
  211. }