Repository navigation
Expand file tree
/
Copy pathModule.php
More file actions
118 lines (110 loc) · 2.51 KB
/
Copy pathModule.php
File metadata and controls
118 lines (110 loc) · 2.51 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
<?php
/**
* @author : JIHAD SINNAOUR
* @package : FloatPHP
* @subpackage: Kernel Component
* @version : 1.0.0
* @category : PHP framework
* @copyright : (c) 2017 - 2021 JIHAD SINNAOUR <mail@jihadsinnaour.com>
* @link : https://www.floatphp.com
* @license : MIT License
*
* This file if a part of FloatPHP Framework
*/
namespace FloatPHP\Kernel;
use FloatPHP\Classes\Filesystem\File;
use FloatPHP\Classes\Filesystem\Json;
use FloatPHP\Helpers\Configurator;
class Module extends BaseController
{
/**
* @param void
*/
public function __construct()
{
// Init configuration
$this->initConfig();
// Load modules
$this->loadModules();
}
/**
* Get modules routes
*
* @access public
* @param void
* @param array
*/
public function getModulesRoutes()
{
$wrapper = [];
if ( $this->getModules() ) {
foreach ( $this->getModules() as $key => $name ) {
$json = new Json("{$name}/module.json");
$config = $json->parse(true);
if ( $config['enable'] == true ) {
foreach ($config['router'] as $route) {
$wrapper[] = $route;
}
}
}
}
return $this->applyFilter('module-routes',$wrapper);
}
/**
* Add module js
*
* @access protected
* @param string $js
* @param string $hook
* @return void
*/
protected function addJS($js, $hook = 'add-js')
{
$this->addAction($hook, function() use($js) {
$tpl = $this->applyFilter('module-view-js','system/js');
$this->render(['js' => "{$this->getModulesUrl()}/{$js}"],$tpl);
});
}
/**
* Add module css
*
* @access protected
* @param string $css
* @param string $hook
* @return void
*/
protected function addCSS($css, $hook = 'add-css')
{
$this->addAction($hook, function() use($css){
$tpl = $this->applyFilter('module-view-css','system/css');
$this->render(['css' => "{$this->getModulesUrl()}/{$css}"],$tpl);
});
}
/**
* Get modules routes
*
* @access private
* @param void
* @param array
*/
private function loadModules()
{
foreach ( $this->getModules() as $name ) {
$json = new Json("{$name}/module.json");
Validator::checkModuleConfig($json);
$config = $json->parse();
if ( $config->migrate ) {
$configurator = new Configurator();
$configurator->migrate("{$name}/migrate");
}
if ( $config->enable ) {
$basename = basename($name);
$namespace = "{$this->getModuleNamespace()}{$basename}\\{$basename}";
if ( File::exists("{$name}/{$basename}Module.php") ) {
$module = "{$namespace}Module";
new $module;
}
}
}
}
}