Sync changes v29.0.0 from IceHrmPro (https://icehrm.com/purchase-icehrmpro)
This commit is contained in:
146
core/src/Classes/ExtensionManager.php
Normal file
146
core/src/Classes/ExtensionManager.php
Normal file
@@ -0,0 +1,146 @@
|
||||
<?php
|
||||
|
||||
namespace Classes;
|
||||
|
||||
use Utils\LogManager;
|
||||
|
||||
class ExtensionManager
|
||||
{
|
||||
const GROUP = 'extension';
|
||||
protected function processExtensionInDB()
|
||||
{
|
||||
$dbModule = new \Modules\Common\Model\Module();
|
||||
$extensions = $dbModule->Find("mod_group = ?", array(self::GROUP));
|
||||
|
||||
$extensionsInDB = [];
|
||||
foreach ($extensions as $dbm) {
|
||||
$extensionsInDB[$dbm->name] = $dbm;
|
||||
ModuleAccessService::getInstance()->setModule($dbm->name, self::GROUP, $dbm);
|
||||
}
|
||||
|
||||
return $extensionsInDB;
|
||||
}
|
||||
|
||||
public function getExtensionsPath()
|
||||
{
|
||||
return APP_BASE_PATH.'../extensions/';
|
||||
}
|
||||
|
||||
public function getExtensionMetaData($extensionName)
|
||||
{
|
||||
return json_decode(file_get_contents($this->getExtensionsPath().$extensionName.'/meta.json'));
|
||||
}
|
||||
|
||||
public function setupExtensions()
|
||||
{
|
||||
$menu = [];
|
||||
$extensions = [];
|
||||
$extensionDirs = scandir($this->getExtensionsPath());
|
||||
$currentLocation = 0;
|
||||
|
||||
$extensionsInDB = $this->processExtensionInDB();
|
||||
|
||||
$needToInstall = false;
|
||||
|
||||
foreach ($extensionDirs as $extensionDir) {
|
||||
if (is_dir($this->getExtensionsPath().$extensionDir) && $extensionDir != '.' && $extensionDir != '..') {
|
||||
$meta = $this->getExtensionMetaData($extensionDir);
|
||||
|
||||
$arr = [];
|
||||
$arr['name'] = $extensionDir;
|
||||
$arr['label'] = $meta->label;
|
||||
$arr['icon'] = $meta->icon;
|
||||
$arr['menu'] = $meta->menu[0];
|
||||
$arr['order'] = 0;
|
||||
$arr['status'] = 'Enabled';
|
||||
$arr['user_levels'] = $meta->user_levels;
|
||||
$arr['user_roles'] = isset($meta->user_roles)?$meta->user_roles:"";
|
||||
$arr['model_namespace'] = $meta->model_namespace;
|
||||
$arr['manager'] = $meta->manager;
|
||||
|
||||
// Add menu
|
||||
$menu[$meta->menu[0]] = $meta->menu[1];
|
||||
|
||||
//Check in admin dbmodules
|
||||
if (isset($extensionsInDB[$arr['name']])) {
|
||||
$dbModule = $extensionsInDB[$arr['name']];
|
||||
|
||||
$arr['name'] = $dbModule->name;
|
||||
$arr['label'] = $dbModule->label;
|
||||
$arr['icon'] = $dbModule->icon;
|
||||
$arr['menu'] = $dbModule->menu;
|
||||
$arr['status'] = $dbModule->status;
|
||||
$arr['user_levels'] = json_decode($dbModule->user_levels);
|
||||
$arr['user_roles'] = empty($dbModule->user_roles)
|
||||
? [] : json_decode($dbModule->user_roles);
|
||||
$arr['user_roles_blacklist'] = empty($dbModule->user_roles_blacklist)
|
||||
? [] : json_decode($dbModule->user_roles_blacklist);
|
||||
} else {
|
||||
$dbModule = new \Modules\Common\Model\Module();
|
||||
$dbModule->menu = $arr['menu'];
|
||||
$dbModule->name = $arr['name'];
|
||||
$dbModule->label = $arr['label'];
|
||||
$dbModule->icon = $arr['icon'];
|
||||
$dbModule->mod_group = self::GROUP;
|
||||
$dbModule->mod_order = $arr['order'];
|
||||
$dbModule->status = "Enabled";
|
||||
$dbModule->version = isset($meta->version)?$meta->version:"";
|
||||
$dbModule->update_path = self::GROUP.">".$extensionDir;
|
||||
$dbModule->user_levels = isset($meta->user_levels)?json_encode($meta->user_levels):"";
|
||||
$dbModule->user_roles = isset($meta->user_roles)?json_encode($meta->user_roles):"";
|
||||
|
||||
$ok = $dbModule->Save();
|
||||
if (!$ok) {
|
||||
LogManager::getInstance()->error('Error saving module: '.$dbModule->name);
|
||||
}
|
||||
$needToInstall = $ok;
|
||||
}
|
||||
|
||||
/* @var \Classes\AbstractModuleManager */
|
||||
$manager = $this->includeModuleManager($extensionDir, $arr);
|
||||
if ($dbModule->status == 'Disabled') {
|
||||
continue;
|
||||
}
|
||||
|
||||
if ($needToInstall) {
|
||||
$manager->install();
|
||||
}
|
||||
|
||||
$menuName = $arr['menu'];
|
||||
if (!isset($extensions[$menuName])) {
|
||||
$extensions[$menuName] = array();
|
||||
}
|
||||
|
||||
if (!$meta->headless) {
|
||||
if ($arr['order'] == '0' || $arr['order'] == '') {
|
||||
$extensions[$menuName]["Z".$currentLocation] = $arr;
|
||||
$currentLocation++;
|
||||
} else {
|
||||
$extensions[$arr['menu']]["A".$arr['order']] = $arr;
|
||||
}
|
||||
}
|
||||
|
||||
$initializer = $manager->getInitializer();
|
||||
if ($initializer !== null) {
|
||||
$initializer->setBaseService(BaseService::getInstance());
|
||||
$initializer->init();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return [$menu, $extensions];
|
||||
}
|
||||
|
||||
public function includeModuleManager($name, $data)
|
||||
{
|
||||
include($this->getExtensionsPath().$name.'/'.$name.'.php');
|
||||
$moduleManagerClass = $data['manager'];
|
||||
/* @var \Classes\AbstractModuleManager $moduleManagerObj*/
|
||||
$moduleManagerObj = new $moduleManagerClass();
|
||||
$moduleManagerObj->setModuleObject($data);
|
||||
$moduleManagerObj->setModuleType(self::GROUP);
|
||||
$moduleManagerObj->setModulePath(CLIENT_PATH.'/'.self::GROUP.'/'.$name);
|
||||
\Classes\BaseService::getInstance()->addModuleManager($moduleManagerObj);
|
||||
return $moduleManagerObj;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user