-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathModule.php
More file actions
123 lines (114 loc) · 2.64 KB
/
Module.php
File metadata and controls
123 lines (114 loc) · 2.64 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
119
120
121
122
123
<?php
/**
* @author : Jakiboy
* @package : FloatPHP
* @subpackage : Kernel Component
* @version : 1.5.x
* @copyright : (c) 2018 - 2025 Jihad Sinnaour <me@jihadsinnaour.com>
* @link : https://floatphp.com
* @license : MIT
*
* This file is a part of FloatPHP Framework.
*/
declare(strict_types=1);
namespace FloatPHP\Kernel;
use FloatPHP\Helpers\Framework\{Installer, Validator};
class Module extends BaseController
{
/**
* @access public
*/
public function __construct()
{
$this->loadModules();
}
/**
* Check permission.
*
* @access public
* @param string $role
* @return bool
*/
public function hasPermissions(?string $role = null) : bool
{
if ( $this->isPermissions() && $role ) {
return $this->hasRole($role);
}
return true;
}
/**
* Get modules routes.
*
* @access public
* @param array
*/
public function getModulesRoutes() : mixed
{
$wrapper = [];
if ( $this->getModules() ) {
foreach ($this->getModules() as $key => $name) {
$config = $this->parseJson("{$name}/module.json", isArray: 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 $path
* @param string $hook
* @return void
*/
protected function addJS(string $path, string $hook = 'add-js') : void
{
$this->addAction($hook, function () use ($path) : void {
$file = $this->applyFilter('module-view-js', 'system/js');
$this->render($file, ['js' => "{$this->getModuleUrl()}/{$path}"]);
});
}
/**
* Add module css.
*
* @access protected
* @param string $path
* @param string $hook
* @return void
*/
protected function addCSS(string $path, string $hook = 'add-css') : void
{
$this->addAction($hook, function () use ($path) : void {
$file = $this->applyFilter('module-view-css', 'system/css');
$this->render($file, ['css' => "{$this->getModuleUrl()}/{$path}"]);
});
}
/**
* Get modules routes.
*
* @access private
* @param array
*/
private function loadModules() : void
{
foreach ($this->getModules() as $name) {
$config = $this->parseJson("{$name}/module.json");
Validator::checkModuleConfig($config);
if ( $config->migrate ) {
(new Installer())->migrate("{$name}/migrate");
}
if ( $config->enable ) {
$basename = $this->basename($name);
$namespace = "{$this->getNamespace('module')}{$basename}\\{$basename}";
if ( $this->isFile("{$name}/{$basename}Module.php") ) {
$module = "{$namespace}Module";
new $module;
}
}
}
}
}