public static function def_module_uninstall($model) { $node = Node::get_node(constant("{$model}::Root")); if ($node) { $node->remove(); } }
public static function get_setting($name, $def = '') { if (!self::$_loaded_settings) { $settings_node = Node::get_node(self::Root, __CLASS__); if (!$settings_node) { self::$_loaded_settings = array(); } else { self::$_loaded_settings = SJson::deserialize($settings_node->data); } } return array_key_exists($name, self::$_loaded_settings) ? self::$_loaded_settings[$name] : $def; }
public static function is_empty_users() { $users = Node::get_node('users'); if (!$users) { return true; } // пустить, если модуль не активен if (!count($users->childs)) { return true; } // пустить если нет ни одного пользователя $has_pwd = false; foreach ($users->childs as $child) { if (strlen($child->attr('pwd_hash'))) { $has_pwd = true; break; } } return !$has_pwd; // пустить если не установлено ни одного пароля }
protected function install($module) { $node = Node::get_node('site'); if (!$node) { $this->message('Creating root node'); Node::create_node(Node::Folder, 'site', conf_get('sitename'), Node::Visible | Node::System); } else { $this->message('Updating root node'); $node->title = conf_get('sitename'); $node->save(); } if ($module) { $this->call_module_method($module, 'module_install', 'Installing'); return; } if (!($dh = opendir(CMS . 'modules/'))) { $this->message('"' . CMS . 'modules/" not found'); return; } $avail_modules = array(); while (($module = readdir($dh)) !== false) { if (!is_dir(CMS . "modules/{$module}") || !is_readable(CMS . "modules/{$module}/admin.php")) { continue; } require_once CMS . "modules/{$module}/admin.php"; $class_name = Cms::capitalize_words($module) . 'AdminModule'; if (!is_callable(array($class_name, 'module_install'))) { continue; } $before = array(); $after = array(); if (is_callable(array($class_name, '_before'))) { $before = call_user_func(array($class_name, '_before')); if (!is_array($before)) { $before = array($before); } } if (is_callable(array($class_name, '_after'))) { $after = call_user_func(array($class_name, '_after')); if (!is_array($after)) { $after = array($after); } } $avail_modules[$module] = array('class' => $class_name, 'before' => $before, 'after' => $after); } closedir($dh); foreach ($avail_modules as $mod_name => $item) { foreach ($item['after'] as $name) { if (!array_key_exists($name, $avail_modules)) { $this->message("\"{$mod_name}\" depends on \"{$name}\", but \"{$name}\" not found"); return; } } } foreach ($avail_modules as $mod_name => $item) { foreach ($item['before'] as $name) { if (array_key_exists($name, $avail_modules)) { if (!in_array($mod_name, $avail_modules[$name]['after'])) { $avail_modules[$name]['after'][] = $mod_name; } } } } $modules_list = array(); $modules_hash = array(); for (;;) { $has_changes = false; $has_modules = false; foreach ($avail_modules as $mod_name => $item) { if (array_key_exists($mod_name, $modules_hash)) { continue; } $has_modules = true; $can_insert = true; foreach ($item['after'] as $name) { if (!array_key_exists($name, $modules_hash)) { $can_insert = false; break; } } if (!$can_insert) { continue; } $class_name = $item['class']; $modules_hash[$mod_name] = true; $modules_list[] = $mod_name; $has_changes = true; } if (!$has_modules) { break; } if (!$has_changes) { $this->message("Can't resolve modules dependencies"); return; } } foreach ($modules_list as $module) { $this->call_module_method($module, 'module_install', 'Installing'); } }
protected function can_put($parent_path, $name, $type, $parent_node = null, $check_names = true) { if ($parent_node == null) { $parent_node = Node::get_node($parent_path); if ($parent_node == null) { return 'Parent node not found'; } } else { $parent_path = $parent_node->full_path; } if ($check_names) { if (array_key_exists($parent_node->type, $this->modules)) { if (!$this->modules[$parent_node->type]->can_has_childs($parent_node)) { return '@denied'; } } foreach ($parent_node->childs as $nd) { if ($nd->name == $name) { return "Путь \"{$nd->full_path}\" уже существует"; } } } $res = $this->modules[$type]->can_put($parent_path, $parent_node); return $res === null || $res === false ? '@denied' : $res; }