Новости | FAQ | Авторы | Документация | В действии | Библиотека |
Инструменты | Полезные ссылки | Хостинги | Скачать | Примеры | Форум |
Никита Козин 25.06.2005 18:38
При загрузке модуля, я смотрю какие к нему прилагаются классы и записываю информацию о модулях и классах в табличку:^rem{ *** Устанавливаем классы *** } ^module_info.classes.menu{ ^MAIN:pSQL.void{ INSERT INTO engine_classes ( class_name, module_id ) VALUES ( '$module_info.classes.name', ^MAIN:pSQL.last_insert_id[engine_modules] ) } } ^dir_copy[$temp.dir/classes/;/classes/;$.is_recursive(1)]При удалении надо проверять, используются ли классы удаляемого модуля другими модулями, и если нет, то удалить их. И здесь я запутался :(
@uninstallModule[module_id][classes] $module_id(^module_id.int(0)) ^if($module_id){ ^rem{ *** Удаляем информацию о модуле из базы данных *** } ^MAIN:pSQL.table{ DELETE FROM engine_modules WHERE module_id = $module_id } ^rem{ *** Смотрим: какие классы использовал модуль... *** } $classes[^MAIN:pSQL.table{ SELECT module_id, class_name FROM engine_classes }] $classes[ ^rem{ *** Хэш всех классов всех модулей *** } $.names[^classes.hash[class_name]] ^rem{ *** Таблица классов удаляемого модуля *** } $.module[^classes.select($classes.module_id==$module_id)] ^rem{ *** Пустой таблица. Сюда будем добавлять имя класса, подлежащего удалению *** } $.delete[^table::create{class_name}] ] ^classes.module.menu{ ^if( $classes.names.[$classes.module.class_name].count[] == 1 && $classes.names.[$classes.module.class_name].module_id == $module_id ){ ^classes.delete.append{$classes.module.class_name} } } ^classes.delete.menu{ ^file:delete[/classes/$classes.delete.class_name] } ^MAIN:pSQL.void{ DELETE FROM engine_classes WHERE class_name IN (^classes.delete.menu{$classes.delete.class_name}[,]) } } # end @uninstallModule[]