diff --git a/modules/admin/admin.admin.controller.php b/modules/admin/admin.admin.controller.php index 37d0c3716..ea8e3f98d 100644 --- a/modules/admin/admin.admin.controller.php +++ b/modules/admin/admin.admin.controller.php @@ -1,22 +1,17 @@ */ /** - * adminAdminController class - * admin controller class of admin module - * @author NAVER (developers@xpressengine.com) - * @package /modules/admin - * @version 0.1 + * Preserved for backward compatibility + * + * @deprecated */ class AdminAdminController extends Admin { /** - * initialization - * @return void + * Initialization */ public function init() { - // forbit access if the user is not an administrator if (!$this->user->isAdmin()) { throw new Rhymix\Framework\Exceptions\NotPermitted('admin.msg_is_not_administrator'); @@ -24,335 +19,102 @@ class AdminAdminController extends Admin } /** - * Admin menu reset - * @return void + * Remove an icon. + * + * @deprecated */ - public function procAdminMenuReset() + public function procAdminRemoveIcons() { - $oMenuAdminModel = getAdminModel('menu'); - $oMenuAdminController = getAdminController('menu'); - for ($i = 0; $i < 100; $i++) + $site_info = Context::get('site_module_info'); + $icon_name = Rhymix\Framework\Filters\FilenameFilter::clean(Context::get('iconname')); + if (Rhymix\Modules\Admin\Models\Icon::deleteIcon($site_info->domain_srl, $icon_name)) { - $output = $oMenuAdminModel->getMenuByTitle($this->getAdminMenuName()); - $admin_menu_srl = $output->menu_srl ?? 0; - if ($admin_menu_srl) - { - $output = $oMenuAdminController->deleteMenu($admin_menu_srl); - if (!$output->toBool()) - { - return $output; - } - } - else - { - break; - } - } - - Rhymix\Framework\Cache::delete('admin_menu_langs:' . Context::getLangType()); - Rhymix\Framework\Storage::deleteDirectory(\RX_BASEDIR . 'files/cache/menu/admin_lang/'); - - $this->setRedirectUrl(Context::get('error_return_url')); - } - - public function procAdminInsertDefaultDesignInfo() - { - $vars = Context::getRequestVars(); - - // create a DesignInfo file - $this->updateDefaultDesignInfo($vars); - $this->setRedirectUrl(Context::get('error_return_url')); - } - - public function updateDefaultDesignInfo($vars) - { - $siteDesignPath = RX_BASEDIR . 'files/site_design/'; - - $vars->module_skin = json_decode($vars->module_skin); - - if(!is_dir($siteDesignPath)) - { - FileHandler::makeDir($siteDesignPath); - } - - $siteDesignFile = RX_BASEDIR . 'files/site_design/design_0.php'; - - $layoutTarget = 'layout_srl'; - $skinTarget = 'skin'; - - if($vars->target_type == 'M') - { - $layoutTarget = 'mlayout_srl'; - $skinTarget = 'mskin'; - } - - if(is_readable($siteDesignFile)) - { - include($siteDesignFile); + $this->setMessage('success_deleted'); } else { - $designInfo = new stdClass(); - } - - $layoutSrl = (!$vars->layout_srl) ? 0 : $vars->layout_srl; - - $designInfo->{$layoutTarget} = $layoutSrl; - - foreach($vars->module_skin as $moduleName => $skinName) - { - if($moduleName == 'ARTICLE') - { - $moduleName = 'page'; - } - - if(!isset($designInfo->module->{$moduleName})) $designInfo->module->{$moduleName} = new stdClass(); - $designInfo->module->{$moduleName}->{$skinTarget} = $skinName; - } - - $this->makeDefaultDesignFile($designInfo); - } - - public function makeDefaultDesignFile($designInfo) - { - $buff = array(); - $buff[] = 'layout_srl) - { - $buff[] = sprintf('$designInfo->layout_srl = %s; ', var_export(intval($designInfo->layout_srl), true)); - } - - if($designInfo->mlayout_srl) - { - $buff[] = sprintf('$designInfo->mlayout_srl = %s;', var_export(intval($designInfo->mlayout_srl), true)); - } - - $buff[] = '$designInfo->module = new stdClass;'; - - foreach($designInfo->module as $moduleName => $skinInfo) - { - $buff[] = sprintf('$designInfo->module->{%s} = new stdClass;', var_export(strval($moduleName), true)); - foreach($skinInfo as $target => $skinName) - { - $buff[] = sprintf('$designInfo->module->{%s}->{%s} = %s;', var_export(strval($moduleName), true), var_export(strval($target), true), var_export(strval($skinName), true)); - } - } - - $siteDesignFile = RX_BASEDIR . 'files/site_design/design_0.php'; - FileHandler::writeFile($siteDesignFile, implode(PHP_EOL, $buff)); - } - - /** - * Toggle favorite - * @return void - */ - public function procAdminToggleFavorite() - { - $moduleName = Context::get('module_name'); - - // check favorite exists - $output = Rhymix\Modules\Admin\Models\Favorite::isFavorite($moduleName); - if(!$output->toBool()) - { - return $output; - } - - // if exists, delete favorite - if($output->get('result')) - { - $favoriteSrl = $output->get('favoriteSrl'); - $output = $this->_deleteFavorite($favoriteSrl); - $result = 'off'; - } - // if not exists, insert favorite - else - { - $output = $this->_insertFavorite(0, $moduleName); - $result = 'on'; - } - - if(!$output->toBool()) - { - return $output; - } - - $this->add('result', $result); - - return $this->setRedirectUrl(Context::get('error_return_url'), $output); - } - - /** - * Cleanning favorite - * @return object|void - */ - public function cleanFavorite() - { - $output = Rhymix\Modules\Admin\Models\Favorite::getFavorites(); - if(!$output->toBool()) - { - return $output; - } - - $favoriteList = $output->get('favoriteList'); - if(!$favoriteList) - { - return; - } - - $deleteTargets = array(); - foreach($favoriteList as $favorite) - { - if($favorite->type == 'module') - { - $modulePath = RX_BASEDIR . 'modules/' . $favorite->module; - if(!is_dir($modulePath)) - { - $deleteTargets[] = $favorite->admin_favorite_srl; - } - } - } - - if(!count($deleteTargets)) - { - return; - } - - $args = new stdClass(); - $args->admin_favorite_srls = $deleteTargets; - $output = executeQuery('admin.deleteFavorites', $args); - if(!$output->toBool()) - { - return $output; + throw new Exception('fail_to_delete'); } } /** - * Admin logo delete - * @return void + * Delete the admin logo. + * + * @deprecated */ public function procAdminDeleteLogo() { - $oModuleModel = getModel('module'); - $oAdminConfig = $oModuleModel->getModuleConfig('admin'); + $config = ModuleModel::getModuleConfig('admin'); + if (!empty($config->adminLogo)) + { + Rhymix\Framework\Storage::delete(RX_BASEDIR . $config->adminLogo); + unset($config->adminLogo); + } - Rhymix\Framework\Storage::delete(RX_BASEDIR . $oAdminConfig->adminLogo); - unset($oAdminConfig->adminLogo); - - $oModuleController = getController('module'); - $oModuleController->insertModuleConfig('admin', $oAdminConfig); - - $this->setMessage('success_deleted', 'info'); + ModuleController::getInstance()->insertModuleConfig('admin', $config); + $this->setMessage('success_deleted'); $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup'); $this->setRedirectUrl($returnUrl); } /** - * Remove admin icon - * @return object|void + * Aliases for backward compatibility. */ - public function procAdminRemoveIcons() + public function procAdminInsertDefaultDesignInfo() { - $site_info = Context::get('site_module_info'); - $virtual_site = ''; - if($site_info->site_srl) - { - $virtual_site = $site_info->site_srl . '/'; - } - - $iconname = Context::get('iconname'); - $file_exist = FileHandler::readFile(RX_BASEDIR . 'files/attach/xeicon/' . $virtual_site . $iconname); - if($file_exist) - { - @Rhymix\Framework\Storage::delete(RX_BASEDIR . 'files/attach/xeicon/' . $virtual_site . $iconname); - } - else - { - throw new Exception('fail_to_delete'); - } - $this->setMessage('success_deleted'); + $vars = Context::getRequestVars(); + Rhymix\Modules\Admin\Controllers\Design::getInstance()->updateDefaultDesignInfo($vars); + $this->setRedirectUrl(Context::get('error_return_url')); } - - /** - * Update FTP configuration. - * - * @deprecated - */ + + public function updateDefaultDesignInfo($vars) + { + return Rhymix\Modules\Admin\Controllers\Design::getInstance()->updateDefaultDesignInfo($vars); + } + + public function makeDefaultDesignFile($designInfo) + { + return Rhymix\Modules\Admin\Controllers\Design::getInstance()->makeDefaultDesignFile($designInfo); + } + public function procAdminUpdateFTPInfo() { throw new Rhymix\Framework\Exceptions\FeatureDisabled; } - /** - * Remove FTP configuration. - * - * @deprecated - */ public function procAdminRemoveFTPInfo() { throw new Rhymix\Framework\Exceptions\FeatureDisabled; } - /** - * Enviroment gathering agreement - * - * @deprecated - */ - public function procAdminEnviromentGatheringAgreement() - { - $redirectUrl = getNotEncodedUrl('', 'module', 'admin'); - $this->setRedirectUrl($redirectUrl); - } - - /** - * Reset cache - * - * @deprecated - */ - public function procAdminRecompileCacheFile() - { - return Rhymix\Modules\Admin\Controllers\CacheReset::getInstance()->procAdminRecompileCacheFile(); - } - - /** - * Update admin module config - * - * @deprecated - */ public function procAdminUpdateConfig() { return new BaseObject; } - /** - * Insert favorite. - * - * @deprecated - */ + public function procAdminRecompileCacheFile() + { + return Rhymix\Modules\Admin\Controllers\CacheReset::getInstance()->procAdminRecompileCacheFile(); + } + public function _insertFavorite($site_srl, $module, $type = 'module') { return Rhymix\Modules\Admin\Models\Favorite::insertFavorite($module, $type); } - /** - * Delete favorite. - * - * @deprecated - */ public function _deleteFavorite($favoriteSrl) { return Rhymix\Modules\Admin\Models\Favorite::deleteFavorite($favoriteSrl); } - /** - * Delete all favorites. - * - * @deprecated - */ public function _deleteAllFavorite() { return Rhymix\Modules\Admin\Models\Favorite::deleteAllFavorites(); } + + public function cleanFavorite() + { + return Rhymix\Modules\Admin\Models\Favorite::deleteInvalidFavorites(); + } } diff --git a/modules/admin/admin.admin.view.php b/modules/admin/admin.admin.view.php index 9bb713999..7ec1217fc 100644 --- a/modules/admin/admin.admin.view.php +++ b/modules/admin/admin.admin.view.php @@ -1,13 +1,9 @@ */ /** - * adminAdminView class - * Admin view class of admin module - * - * @author NAVER (developers@xpressengine.com) - * @package /modules/admin - * @version 0.1 + * Preserved for backward compatibility + * + * @deprecated */ class AdminAdminView extends Admin { @@ -30,17 +26,4 @@ class AdminAdminView extends Admin { throw new Rhymix\Framework\Exceptions\FeatureDisabled; } - - /** - * Display Admin Menu Configuration(settings) page - */ - public function dispAdminSetup() - { - $oMenuAdminModel = getAdminModel('menu'); - $output = $oMenuAdminModel->getMenuByTitle($this->getAdminMenuName()); - - Context::set('menu_srl', $output->menu_srl); - Context::set('menu_title', $output->title); - $this->setTemplateFile('admin_setup'); - } } diff --git a/modules/admin/conf/module.xml b/modules/admin/conf/module.xml index 1c74f3978..16d806c76 100644 --- a/modules/admin/conf/module.xml +++ b/modules/admin/conf/module.xml @@ -31,22 +31,19 @@ - - - - - - - - - + + + + + - + + diff --git a/modules/admin/controllers/AdminMenu.php b/modules/admin/controllers/AdminMenu.php new file mode 100644 index 000000000..d46bd5b99 --- /dev/null +++ b/modules/admin/controllers/AdminMenu.php @@ -0,0 +1,95 @@ +getMenuByTitle(AdminMenuModel::getAdminMenuName()); + + Context::set('menu_srl', $output->menu_srl); + Context::set('menu_title', $output->title); + + $this->setTemplateFile('admin_setup'); + } + + /** + * Reset the admin menu to the default configuration. + */ + public function procAdminMenuReset() + { + $oMenuAdminController = MenuAdminController::getInstance(); + $oMenuAdminModel = MenuAdminModel::getInstance(); + for ($i = 0; $i < 100; $i++) + { + $output = $oMenuAdminModel->getMenuByTitle(AdminMenuModel::getAdminMenuName()); + $admin_menu_srl = $output->menu_srl ?? 0; + if ($admin_menu_srl) + { + $output = $oMenuAdminController->deleteMenu($admin_menu_srl); + if (!$output->toBool()) + { + return $output; + } + } + else + { + break; + } + } + + Cache::delete('admin_menu_langs:' . Context::getLangType()); + Storage::deleteDirectory(\RX_BASEDIR . 'files/cache/menu/admin_lang/'); + + $this->setRedirectUrl(Context::get('error_return_url')); + } + + /** + * Insert or delete a module as favorite. + */ + public function procAdminToggleFavorite() + { + // Check if favorite exists. + $module_name = Context::get('module_name'); + $output = FavoriteModel::isFavorite($module_name); + if(!$output->toBool()) + { + return $output; + } + + // Insert or delete. + if($output->get('result') && $output->get('favoriteSrl')) + { + $favorite_srl = $output->get('favoriteSrl'); + $output = FavoriteModel::deleteFavorite($favorite_srl); + $result = 'off'; + } + else + { + $output = FavoriteModel::insertFavorite($module_name); + $result = 'on'; + } + + if(!$output->toBool()) + { + return $output; + } + + $this->add('result', $result); + + return $this->setRedirectUrl(Context::get('error_return_url'), $output); + } +} diff --git a/modules/admin/controllers/Design.php b/modules/admin/controllers/Design.php new file mode 100644 index 000000000..e690961b4 --- /dev/null +++ b/modules/admin/controllers/Design.php @@ -0,0 +1,114 @@ +updateDefaultDesignInfo($vars); + $this->setRedirectUrl(Context::get('error_return_url')); + } + + /** + * Subroutine for the above. + * + * @param object $vars + * @return void + */ + public function updateDefaultDesignInfo(object $vars): void + { + $vars->module_skin = json_decode($vars->module_skin); + + $siteDesignPath = \RX_BASEDIR . 'files/site_design/'; + if (!is_dir($siteDesignPath)) + { + FileHandler::makeDir($siteDesignPath); + } + + $siteDesignFile = \RX_BASEDIR . 'files/site_design/design_0.php'; + $layoutTarget = 'layout_srl'; + $skinTarget = 'skin'; + if ($vars->target_type == 'M') + { + $layoutTarget = 'mlayout_srl'; + $skinTarget = 'mskin'; + } + + if (is_readable($siteDesignFile)) + { + include $siteDesignFile; + } + else + { + $designInfo = new \stdClass; + } + + $layoutSrl = (!$vars->layout_srl) ? 0 : $vars->layout_srl; + $designInfo->{$layoutTarget} = $layoutSrl; + + foreach ($vars->module_skin as $moduleName => $skinName) + { + if ($moduleName == 'ARTICLE') + { + $moduleName = 'page'; + } + if (!isset($designInfo->module)) + { + $designInfo->module = new \stdClass; + } + if (!isset($designInfo->module->{$moduleName})) + { + $designInfo->module->{$moduleName} = new \stdClass; + } + $designInfo->module->{$moduleName}->{$skinTarget} = $skinName; + } + + $this->makeDefaultDesignFile($designInfo); + } + + /** + * Subroutine for the above; + * + * @param object $designInfo + * @return void + */ + public function makeDefaultDesignFile(object $designInfo): void + { + $buff = array(); + $buff[] = 'layout_srl) + { + $buff[] = sprintf('$designInfo->layout_srl = %d; ', intval($designInfo->layout_srl)); + } + + if($designInfo->mlayout_srl) + { + $buff[] = sprintf('$designInfo->mlayout_srl = %d;', intval($designInfo->mlayout_srl)); + } + + $buff[] = '$designInfo->module = new stdClass;'; + + foreach($designInfo->module as $moduleName => $skinInfo) + { + $buff[] = sprintf('$designInfo->module->{%s} = new stdClass;', var_export(strval($moduleName), true)); + foreach($skinInfo as $target => $skinName) + { + $buff[] = sprintf('$designInfo->module->{%s}->{%s} = %s;', var_export(strval($moduleName), true), var_export(strval($target), true), var_export(strval($skinName), true)); + } + } + + $siteDesignFile = \RX_BASEDIR . 'files/site_design/design_0.php'; + FileHandler::writeFile($siteDesignFile, implode(\PHP_EOL, $buff)); + } +} diff --git a/modules/admin/controllers/Update.php b/modules/admin/controllers/Update.php deleted file mode 100644 index c870d60c7..000000000 --- a/modules/admin/controllers/Update.php +++ /dev/null @@ -1,10 +0,0 @@ -toBool()) @@ -47,7 +48,7 @@ class Favorite * @param string $module * @return BaseObject */ - public static function isFavorite($module) + public static function isFavorite(string $module): BaseObject { $output = executeQuery('admin.getFavorite', ['module' => $module]); if(!$output->toBool()) @@ -111,4 +112,42 @@ class Favorite return $output; } + /** + * Delete all favorites that don't point to an existing module. + * + * @return BaseObject + */ + public static function deleteInvalidFavorites(): BaseObject + { + $output = self::getFavorites(); + if (!$output->toBool()) + { + return $output; + } + + $favorites = $output->get('favoriteList'); + if (!$favorites) + { + return new BaseObject; + } + + $delete_favorite_srls = array(); + foreach ($favorites as $favorite) + { + if ($favorite->type === 'module' && !Storage::isDirectory(\RX_BASEDIR . 'modules/' . $favorite->module)) + { + $delete_favorite_srls[] = $favorite->admin_favorite_srl; + } + } + + if( !count($delete_favorite_srls)) + { + return new BaseObject; + } + + $args = new \stdClass; + $args->admin_favorite_srls = $delete_favorite_srls; + $output = executeQuery('admin.deleteFavorites', $args); + return $output; + } }