<?php
class CControllerModuleUpdate extends CController {
private $modules = [];
protected function checkInput() {
$fields = [
'moduleids' => 'required|array_db module.moduleid',
'status' => 'in 1',
'form_refresh' => 'int32'
];
$ret = $this->validateInput($fields);
if (!$ret) {
$this->setResponse(new CControllerResponseFatal());
}
return $ret;
}
protected function checkPermissions() {
if (!$this->checkAccess(CRoleHelper::UI_ADMINISTRATION_GENERAL)) {
return false;
}
$moduleids = $this->getInput('moduleids');
$this->modules = API::Module()->get([
'output' => [],
'moduleids' => $moduleids,
'preservekeys' => true
]);
return (count($this->modules) == count($moduleids));
}
protected function doAction() {
$set_status = ($this->getAction() === 'module.update')
? ($this->hasInput('status') ? MODULE_STATUS_ENABLED : MODULE_STATUS_DISABLED)
: ($this->getAction() === 'module.enable' ? MODULE_STATUS_ENABLED : MODULE_STATUS_DISABLED);
$db_modules = API::Module()->get([
'output' => ['relative_path', 'status'],
'sortfield' => 'relative_path',
'preservekeys' => true
]);
$module_manager_enabled = new CModuleManager(APP::ModuleManager()->getModulesDir());
foreach ($db_modules as $moduleid => $db_module) {
$new_status = array_key_exists($moduleid, $this->modules) ? $set_status : $db_module['status'];
if ($new_status == MODULE_STATUS_ENABLED) {
$manifest = $module_manager_enabled->addModule($db_module['relative_path']);
}
}
$errors = $module_manager_enabled->checkConflicts()['conflicts'];
array_map('error', $errors);