public static function def_module_uninstall($model)
 {
     $node = Node::get_node(constant("{$model}::Root"));
     if ($node) {
         $node->remove();
     }
 }
Пример #2
0
 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;
 }
Пример #3
0
 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;
     // пустить если не установлено ни одного пароля
 }
Пример #4
0
 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');
     }
 }
Пример #5
0
 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;
 }