diff --git a/modules/admin/admin.admin.controller.php b/modules/admin/admin.admin.controller.php index 9d1558c5b..dd896d91a 100644 --- a/modules/admin/admin.admin.controller.php +++ b/modules/admin/admin.admin.controller.php @@ -1,413 +1,425 @@ getLoggedInfo(); - if($logged_info->is_admin!='Y') return $this->stop("msg_is_not_administrator"); - } + function init() + { + // forbit access if the user is not an administrator + $oMemberModel = &getModel('member'); + $logged_info = $oMemberModel->getLoggedInfo(); + if($logged_info->is_admin!='Y') return $this->stop("msg_is_not_administrator"); + } - /** - * Admin menu reset - * @return void - */ - function procAdminMenuReset(){ - $menuSrl = Context::get('menu_srl'); - if (!$menuSrl) return $this->stop('msg_invalid_request'); + /** + * Admin menu reset + * @return void + */ + function procAdminMenuReset() + { + $menuSrl = Context::get('menu_srl'); + if (!$menuSrl) return $this->stop('msg_invalid_request'); - $oMenuAdminController = &getAdminController('menu'); - $output = $oMenuAdminController->deleteMenu($menuSrl); - if (!$output->toBool()) return $output; + $oMenuAdminController = &getAdminController('menu'); + $output = $oMenuAdminController->deleteMenu($menuSrl); + if(!$output->toBool()) return $output; - FileHandler::removeDir('./files/cache/menu/admin_lang/'); + FileHandler::removeDir('./files/cache/menu/admin_lang/'); - $this->setRedirectUrl(Context::get('error_return_url')); + $this->setRedirectUrl(Context::get('error_return_url')); + } + + /** + * Regenerate all cache files + * @return void + */ + function procAdminRecompileCacheFile() + { + // rename cache dir + $temp_cache_dir = './files/cache_'. time(); + FileHandler::rename('./files/cache', $temp_cache_dir); + FileHandler::makeDir('./files/cache'); + + // remove debug files + FileHandler::removeFile(_XE_PATH_.'files/_debug_message.php'); + FileHandler::removeFile(_XE_PATH_.'files/_debug_db_query.php'); + FileHandler::removeFile(_XE_PATH_.'files/_db_slow_query.php'); + + $oModuleModel = &getModel('module'); + $module_list = $oModuleModel->getModuleList(); + + // call recompileCache for each module + foreach($module_list as $module) + { + $oModule = null; + $oModule = &getClass($module->module); + if(method_exists($oModule, 'recompileCache')) $oModule->recompileCache(); } - /** - * Regenerate all cache files - * @return void - */ - function procAdminRecompileCacheFile() { - // rename cache dir - $temp_cache_dir = './files/cache_'. time(); - FileHandler::rename('./files/cache', $temp_cache_dir); - FileHandler::makeDir('./files/cache'); + // remove cache + $truncated = array(); + $oObjectCacheHandler = &CacheHandler::getInstance('object'); + $oTemplateCacheHandler = &CacheHandler::getInstance('template'); - // remove debug files - FileHandler::removeFile(_XE_PATH_.'files/_debug_message.php'); - FileHandler::removeFile(_XE_PATH_.'files/_debug_db_query.php'); - FileHandler::removeFile(_XE_PATH_.'files/_db_slow_query.php'); - - $oModuleModel = &getModel('module'); - $module_list = $oModuleModel->getModuleList(); - - // call recompileCache for each module - foreach($module_list as $module) { - $oModule = null; - $oModule = &getClass($module->module); - if(method_exists($oModule, 'recompileCache')) $oModule->recompileCache(); - } - - // remove cache - $truncated = array(); - $oObjectCacheHandler = &CacheHandler::getInstance('object'); - $oTemplateCacheHandler = &CacheHandler::getInstance('template'); - - if($oObjectCacheHandler->isSupport()){ - $truncated[] = $oObjectCacheHandler->truncate(); - } - - if($oTemplateCacheHandler->isSupport()){ - $truncated[] = $oTemplateCacheHandler->truncate(); - } - - if(count($truncated) && in_array(false,$truncated)){ - return new Object(-1,'msg_self_restart_cache_engine'); - } - - - // remove cache dir - $tmp_cache_list = FileHandler::readDir('./files','/(^cache_[0-9]+)/'); - if($tmp_cache_list){ - foreach($tmp_cache_list as $tmp_dir){ - if($tmp_dir) FileHandler::removeDir('./files/'.$tmp_dir); - } - } - - // remove duplicate indexes (only for CUBRID) - $db_type = &Context::getDBType(); - if($db_type == 'cubrid') - { - $db = &DB::getInstance(); - $db->deleteDuplicateIndexes(); - } - - $this->setMessage('success_updated'); - } - - /** - * Logout - * @return void - */ - function procAdminLogout() { - $oMemberController = &getController('member'); - $oMemberController->procMemberLogout(); - - header('Location: '.getNotEncodedUrl('', 'module','admin')); - } - - - public function procAdminInsertDefaultDesignInfo() + if($oObjectCacheHandler->isSupport()) { - $vars = Context::getRequestVars(); - if(!$vars->site_srl) - { - $vars->site_srl = 0; - } - - // create a DesignInfo file - $output = $this->updateDefaultDesignInfo($vars); - return $this->setRedirectUrl(Context::get('error_return_url'), $output); + $truncated[] = $oObjectCacheHandler->truncate(); } - public function updateDefaultDesignInfo($vars) + if($oTemplateCacheHandler->isSupport()) { - $siteDesignPath = _XE_PATH_.'files/site_design/'; + $truncated[] = $oTemplateCacheHandler->truncate(); + } - $vars->module_skin = json_decode($vars->module_skin); - - if(!is_dir($siteDesignPath)) + if(count($truncated) && in_array(false,$truncated)) + { + return new Object(-1,'msg_self_restart_cache_engine'); + } + + // remove cache dir + $tmp_cache_list = FileHandler::readDir('./files','/(^cache_[0-9]+)/'); + if($tmp_cache_list) + { + foreach($tmp_cache_list as $tmp_dir) { - FileHandler::makeDir($siteDesignPath); + if($tmp_dir) FileHandler::removeDir('./files/'.$tmp_dir); } + } - $siteDesignFile = _XE_PATH_.'files/site_design/design_'.$vars->site_srl.'.php'; + // remove duplicate indexes (only for CUBRID) + $db_type = &Context::getDBType(); + if($db_type == 'cubrid') + { + $db = &DB::getInstance(); + $db->deleteDuplicateIndexes(); + } + $this->setMessage('success_updated'); + } - $layoutTarget = 'layout_srl'; - $skinTarget = 'skin'; + /** + * Logout + * @return void + */ + function procAdminLogout() + { + $oMemberController = &getController('member'); + $oMemberController->procMemberLogout(); - if ($vars->target_type == 'M') + header('Location: '.getNotEncodedUrl('', 'module','admin')); + } + + + public function procAdminInsertDefaultDesignInfo() + { + $vars = Context::getRequestVars(); + if(!$vars->site_srl) + { + $vars->site_srl = 0; + } + + // create a DesignInfo file + $output = $this->updateDefaultDesignInfo($vars); + return $this->setRedirectUrl(Context::get('error_return_url'), $output); + } + + public function updateDefaultDesignInfo($vars) + { + $siteDesignPath = _XE_PATH_.'files/site_design/'; + + $vars->module_skin = json_decode($vars->module_skin); + + if(!is_dir($siteDesignPath)) + { + FileHandler::makeDir($siteDesignPath); + } + + $siteDesignFile = _XE_PATH_.'files/site_design/design_'.$vars->site_srl.'.php'; + + $layoutTarget = 'layout_srl'; + $skinTarget = 'skin'; + + if($vars->target_type == 'M') + { + $layoutTarget = 'mlayout_srl'; + $skinTarget = 'mskin'; + } + + $buff = ''; + 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) + { + $designInfo->module->{$moduleName}->{$skinTarget} = $skinName; + } + + $this->makeDefaultDesignFile($designInfo, $vars->site_srl); + + return new Object(); + } + + function makeDefaultDesignFile($designInfo, $site_srl = 0) + { + if($designInfo->layout_srl) + { + $buff .= sprintf('$designInfo->layout_srl = %s; ', $designInfo->layout_srl)."\n"; + } + + if($designInfo->mlayout_srl) + { + $buff .= sprintf('$designInfo->mlayout_srl = %s;', $designInfo->mlayout_srl)."\n"; + } + + $buff .= '$designInfo->module = new stdClass();'."\n"; + + foreach($designInfo->module as $moduleName => $skinInfo) + { + $buff .= sprintf('$designInfo->module->%s = new stdClass();', $moduleName)."\n"; + foreach($skinInfo as $target => $skinName) { - $layoutTarget = 'mlayout_srl'; - $skinTarget = 'mskin'; + $buff .= sprintf('$designInfo->module->%s->%s = \'%s\';', $moduleName, $target, $skinName)."\n"; } + } - $buff = ''; - if(is_readable($siteDesignFile)) - { - @include($siteDesignFile); - } - else - { - $designInfo = new stdClass(); - } + $buff = sprintf('', $buff); - $layoutSrl = (!$vars->layout_srl) ? 0 : $vars->layout_srl; + $siteDesignFile = _XE_PATH_.'files/site_design/design_'.$site_srl.'.php'; + FileHandler::writeFile($siteDesignFile, $buff); + } - $designInfo->{$layoutTarget} = $layoutSrl; + /** + * Toggle favorite + * @return void + */ + function procAdminToggleFavorite() + { + $siteSrl = Context::get('site_srl'); + $moduleName = Context::get('module_name'); - foreach($vars->module_skin as $moduleName => $skinName) - { - $designInfo->module->{$moduleName}->{$skinTarget} = $skinName; - } + // check favorite exists + $oModel = &getAdminModel('admin'); + $output = $oModel->isExistsFavorite($siteSrl, $moduleName); + if(!$output->toBool()) return $output; - $this->makeDefaultDesignFile($designInfo, $vars->site_srl); + // 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($siteSrl, $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 + */ + function cleanFavorite() + { + $oModel = getAdminModel('admin'); + $output = $oModel->getFavoriteList(); + if(!$output->toBool()) + { + return $output; + } + + $favoriteList = $output->get('favoriteList'); + if(!$favoriteList) + { return new Object(); } - function makeDefaultDesignFile($designInfo, $site_srl = 0) + $deleteTargets = array(); + foreach($favoriteList as $favorite) { - if($designInfo->layout_srl) + if($favorite->type == 'module') { - $buff .= sprintf('$designInfo->layout_srl = %s; ', $designInfo->layout_srl)."\n"; - } - - if($designInfo->mlayout_srl) - { - $buff .= sprintf('$designInfo->mlayout_srl = %s;', $designInfo->mlayout_srl)."\n"; - } - - $buff .= '$designInfo->module = new stdClass();'."\n"; - - foreach($designInfo->module as $moduleName => $skinInfo) - { - $buff .= sprintf('$designInfo->module->%s = new stdClass();', $moduleName)."\n"; - foreach($skinInfo as $target => $skinName) + $modulePath = './modules/' . $favorite->module; + $modulePath = FileHandler::getRealPath($modulePath); + if(!is_dir($modulePath)) { - $buff .= sprintf('$designInfo->module->%s->%s = \'%s\';', $moduleName, $target, $skinName)."\n"; + $deleteTargets[] = $favorite->admin_favorite_srl; } } - - $buff = sprintf('', $buff); - - $siteDesignFile = _XE_PATH_.'files/site_design/design_'.$site_srl.'.php'; - FileHandler::writeFile($siteDesignFile, $buff); } - /** - * Toggle favorite - * @return void - */ - function procAdminToggleFavorite() + if(!count($deleteTargets)) { - $siteSrl = Context::get('site_srl'); - $moduleName = Context::get('module_name'); - - // check favorite exists - $oModel = &getAdminModel('admin'); - $output = $oModel->isExistsFavorite($siteSrl, $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($siteSrl, $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 - */ - function cleanFavorite() - { - $oModel = getAdminModel('admin'); - $output = $oModel->getFavoriteList(); - if(!$output->toBool()) - { - return $output; - } - - $favoriteList = $output->get('favoriteList'); - if(!$favoriteList) - { - return new Object(); - } - - $deleteTargets = array(); - foreach($favoriteList as $favorite) - { - if($favorite->type == 'module') - { - $modulePath = './modules/' . $favorite->module; - $modulePath = FileHandler::getRealPath($modulePath); - if(!is_dir($modulePath)) - { - $deleteTargets[] = $favorite->admin_favorite_srl; - } - } - } - - if(!count($deleteTargets)) - { - return new Object(); - } - - $args->admin_favorite_srls = $deleteTargets; - $output = executeQuery('admin.deleteFavorites', $args); - if(!$output->toBool()) - { - return $output; - } - return new Object(); } - /** - * Enviroment gathering agreement - * @return void - */ - function procAdminEnviromentGatheringAgreement() + $args->admin_favorite_srls = $deleteTargets; + $output = executeQuery('admin.deleteFavorites', $args); + if(!$output->toBool()) { - $isAgree = Context::get('is_agree'); - if($isAgree == 'true') $_SESSION['enviroment_gather'] = 'Y'; - else $_SESSION['enviroment_gather'] = 'N'; - - $redirectUrl = getUrl('', 'module', 'admin'); - $this->setRedirectUrl($redirectUrl); + return $output; } - /** - * Admin config update - * @return void - */ - function procAdminUpdateConfig() + return new Object(); + } + + /** + * Enviroment gathering agreement + * @return void + */ + function procAdminEnviromentGatheringAgreement() + { + $isAgree = Context::get('is_agree'); + if($isAgree == 'true') $_SESSION['enviroment_gather'] = 'Y'; + else $_SESSION['enviroment_gather'] = 'N'; + + $redirectUrl = getUrl('', 'module', 'admin'); + $this->setRedirectUrl($redirectUrl); + } + + /** + * Admin config update + * @return void + */ + function procAdminUpdateConfig() + { + $adminTitle = Context::get('adminTitle'); + $file = $_FILES['adminLogo']; + + $oModuleModel = &getModel('module'); + $oAdminConfig = $oModuleModel->getModuleConfig('admin'); + + if($file['tmp_name']) { - $adminTitle = Context::get('adminTitle'); - $file = $_FILES['adminLogo']; + $target_path = 'files/attach/images/admin/'; + FileHandler::makeDir($target_path); - $oModuleModel = &getModel('module'); - $oAdminConfig = $oModuleModel->getModuleConfig('admin'); + // Get file information + list($width, $height, $type, $attrs) = @getimagesize($file['tmp_name']); + if($type == 3) $ext = 'png'; + elseif($type == 2) $ext = 'jpg'; + else $ext = 'gif'; - if($file['tmp_name']) - { - $target_path = 'files/attach/images/admin/'; - FileHandler::makeDir($target_path); + $target_filename = sprintf('%s%s.%s.%s', $target_path, 'adminLogo', date('YmdHis'), $ext); + @move_uploaded_file($file['tmp_name'], $target_filename); - // Get file information - list($width, $height, $type, $attrs) = @getimagesize($file['tmp_name']); - if($type == 3) $ext = 'png'; - elseif($type == 2) $ext = 'jpg'; - else $ext = 'gif'; - - $target_filename = sprintf('%s%s.%s.%s', $target_path, 'adminLogo', date('YmdHis'), $ext); - @move_uploaded_file($file['tmp_name'], $target_filename); - - $oAdminConfig->adminLogo = $target_filename; - } - if($adminTitle) $oAdminConfig->adminTitle = strip_tags($adminTitle); - else unset($oAdminConfig->adminTitle); - - if($oAdminConfig) - { - $oModuleController = &getController('module'); - $oModuleController->insertModuleConfig('admin', $oAdminConfig); - } - - $this->setMessage('success_updated', 'info'); - - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup'); - $this->setRedirectUrl($returnUrl); + $oAdminConfig->adminLogo = $target_filename; } + if($adminTitle) $oAdminConfig->adminTitle = strip_tags($adminTitle); + else unset($oAdminConfig->adminTitle); - /** - * Admin logo delete - * @return void - */ - function procAdminDeleteLogo() + if($oAdminConfig) { - $oModuleModel = &getModel('module'); - $oAdminConfig = $oModuleModel->getModuleConfig('admin'); - - FileHandler::removeFile(_XE_PATH_.$oAdminConfig->adminLogo); - unset($oAdminConfig->adminLogo); - $oModuleController = &getController('module'); $oModuleController->insertModuleConfig('admin', $oAdminConfig); - - $this->setMessage('success_deleted', 'info'); - - $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup'); - $this->setRedirectUrl($returnUrl); } - /** - * Insert favorite - * @return object query result - */ - function _insertFavorite($siteSrl, $module, $type = 'module') + $this->setMessage('success_updated', 'info'); + + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup'); + $this->setRedirectUrl($returnUrl); + } + + /** + * Admin logo delete + * @return void + */ + function procAdminDeleteLogo() + { + $oModuleModel = &getModel('module'); + $oAdminConfig = $oModuleModel->getModuleConfig('admin'); + + FileHandler::removeFile(_XE_PATH_.$oAdminConfig->adminLogo); + unset($oAdminConfig->adminLogo); + + $oModuleController = &getController('module'); + $oModuleController->insertModuleConfig('admin', $oAdminConfig); + + $this->setMessage('success_deleted', 'info'); + + $returnUrl = Context::get('success_return_url') ? Context::get('success_return_url') : getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminSetup'); + $this->setRedirectUrl($returnUrl); + } + + /** + * Insert favorite + * @return object query result + */ + function _insertFavorite($siteSrl, $module, $type = 'module') + { + $args->adminFavoriteSrl = getNextSequence(); + $args->site_srl = $siteSrl; + $args->module = $module; + $args->type = $type; + $output = executeQuery('admin.insertFavorite', $args); + return $output; + } + + /** + * Delete favorite + * @return object query result + */ + function _deleteFavorite($favoriteSrl) + { + $args->admin_favorite_srl = $favoriteSrl; + $output = executeQuery('admin.deleteFavorite', $args); + return $output; + } + + /** + * Delete all favorite + * @return object query result + */ + function _deleteAllFavorite() + { + $args = null; + $output = executeQuery('admin.deleteAllFavorite', $args); + return $output; + } + + /** + * Remove admin icon + * @return object|void + */ + function procAdminRemoveIcons(){ + $iconname = Context::get('iconname'); + $file_exist = FileHandler::readFile(_XE_PATH_.'files/attach/xeicon/'.$iconname); + if($file_exist) { - $args->adminFavoriteSrl = getNextSequence(); - $args->site_srl = $siteSrl; - $args->module = $module; - $args->type = $type; - $output = executeQuery('admin.insertFavorite', $args); - return $output; + @FileHandler::removeFile(_XE_PATH_.'files/attach/xeicon/'.$iconname); } - - /** - * Delete favorite - * @return object query result - */ - function _deleteFavorite($favoriteSrl) + else { - $args->admin_favorite_srl = $favoriteSrl; - $output = executeQuery('admin.deleteFavorite', $args); - return $output; + return new Object(-1,'fail_to_delete'); } - - /** - * Delete all favorite - * @return object query result - */ - function _deleteAllFavorite() - { - $args = null; - $output = executeQuery('admin.deleteAllFavorite', $args); - return $output; - } - - /** - * Remove admin icon - * @return object|void - */ - function procAdminRemoveIcons(){ - $iconname = Context::get('iconname'); - $file_exist = FileHandler::readFile(_XE_PATH_.'files/attach/xeicon/'.$iconname); - if($file_exist) { - @FileHandler::removeFile(_XE_PATH_.'files/attach/xeicon/'.$iconname); - } else { - return new Object(-1,'fail_to_delete'); - } - $this->setMessage('success_deleted'); - } - } -?> + $this->setMessage('success_deleted'); + } +} +/* End of file admin.admin.controller.php */ +/* Location: ./modules/admin/admin.admin.controller.php */ diff --git a/modules/admin/admin.admin.model.php b/modules/admin/admin.admin.model.php index d217de940..27589aa6c 100644 --- a/modules/admin/admin.admin.model.php +++ b/modules/admin/admin.admin.model.php @@ -1,715 +1,750 @@ ftp_host) { - $ftp_info = Context::getRequestVars(); - - if(!$ftp_info->ftp_host) - { - $ftp_info->ftp_host = "127.0.0.1"; - } - - if(!$ftp_info->ftp_port || !is_numeric($ftp_info->ftp_port)) - { - $ftp_info->ftp_port = '22'; - } - - $connection = ssh2_connect($ftp_info->ftp_host, $ftp_info->ftp_port); - if(!ssh2_auth_password($connection, $ftp_info->ftp_user, $ftp_info->ftp_password)) - { - return new Object(-1,'msg_ftp_invalid_auth_info'); - } - $sftp = ssh2_sftp($connection); - - // create temp file - $pin = time(); - FileHandler::writeFile('./files/cache/ftp_check', $pin); - - // create path candidate - $xe_path = _XE_PATH_; - $path_info = array_reverse(explode('/', _XE_PATH_)); - array_pop($path_info); // remove last '/' - $path_candidate = array(); - - $temp = ''; - foreach($path_info as $path) - { - $temp = '/' . $path . $temp; - $path_candidate[] = $temp; - } - - // try - foreach($path_candidate as $path) - { - // upload check file - if(!@ssh2_scp_send($connection, FileHandler::getRealPath('./files/cache/ftp_check'), $path . 'ftp_check.html')) - { - continue; - } - - // get check file - $result = FileHandler::getRemoteResource(getNotencodedFullUrl() . 'ftp_check.html'); - - // delete temp check file - @ssh2_sftp_unlink($sftp, $path . 'ftp_check.html'); - - // found - if($result == $pin) - { - $found_path = $path; - break; - } - } - - FileHandler::removeFile('./files/cache/ftp_check', $pin); - - if($found_path) - { - $this->add('found_path', $found_path); - } + $ftp_info->ftp_host = "127.0.0.1"; } - /** - * Find XE installed path on ftp - */ - function getAdminFTPPath() + if(!$ftp_info->ftp_port || !is_numeric($ftp_info->ftp_port)) { - Context::loadLang('./modules/autoinstall/lang'); - set_time_limit(5); - require_once(_XE_PATH_ . 'libs/ftp.class.php'); - - $ftp_info = Context::getRequestVars(); - - if(!$ftp_info->ftp_user || !$ftp_info->ftp_password) - { - return new Object(1, 'msg_ftp_invalid_auth_info'); - } - - if(!$ftp_info->ftp_host) - { - $ftp_info->ftp_host = '127.0.0.1'; - } - - if(!$ftp_info->ftp_port || !is_numeric($ftp_info->ftp_port)) - { - $ftp_info->ftp_port = '21'; - } - - if($ftp_info->sftp == 'Y') - { - if(!function_exists(ssh2_sftp)) - { - return new Object(-1,'disable_sftp_support'); - } - return $this->getSFTPPath(); - } - - $oFTP = new ftp(); - if(!$oFTP->ftp_connect($ftp_info->ftp_host, $ftp_info->ftp_port)) - { - return new Object(1, sprintf(Context::getLang('msg_ftp_not_connected'), $ftp_info->ftp_host)); - } - - if(!$oFTP->ftp_login($ftp_info->ftp_user, $ftp_info->ftp_password)) - { - return new Object(1, 'msg_ftp_invalid_auth_info'); - } - - // create temp file - $pin = time(); - FileHandler::writeFile('./files/cache/ftp_check', $pin); - - // create path candidate - $xe_path = _XE_PATH_; - $path_info = array_reverse(explode('/', _XE_PATH_)); - array_pop($path_info); // remove last '/' - $path_candidate = array(); - - $temp = ''; - foreach($path_info as $path) - { - $temp = '/' . $path . $temp; - $path_candidate[] = $temp; - } - - // try - foreach($path_candidate as $path) - { - // upload check file - if(!$oFTP->ftp_put($path . 'ftp_check.html', FileHandler::getRealPath('./files/cache/ftp_check'))) - { - continue; - } - - // get check file - $result = FileHandler::getRemoteResource(getNotencodedFullUrl() . 'ftp_check.html'); - - // delete temp check file - $oFTP->ftp_delete($path . 'ftp_check.html'); - - // found - if($result == $pin) - { - $found_path = $path; - break; - } - } - - FileHandler::removeFile('./files/cache/ftp_check', $pin); - - if($found_path) - { - $this->add('found_path', $found_path); - } + $ftp_info->ftp_port = '22'; } - /** - * Add file list to Object after sftp connect - * @return void|Object - */ - function getSFTPList() - { - $ftp_info = Context::getRequestVars(); - if(!$ftp_info->ftp_host) - { - $ftp_info->ftp_host = "127.0.0.1"; - } - $connection = ssh2_connect($ftp_info->ftp_host, $ftp_info->ftp_port); - if(!ssh2_auth_password($connection, $ftp_info->ftp_user, $ftp_info->ftp_password)) - { - return new Object(-1,'msg_ftp_invalid_auth_info'); - } - - $sftp = ssh2_sftp($connection); - $curpwd = "ssh2.sftp://$sftp".$this->pwd; - $dh = @opendir($curpwd); - if(!$dh) return new Object(-1, 'msg_ftp_invalid_path'); - $list = array(); - while(($file = readdir($dh)) !== false) { - if(is_dir($curpwd.$file)) - { - $file .= "/"; - } - else - { - continue; - } - $list[] = $file; - } - closedir($dh); - $this->add('list', $list); - } - - /** - * Add file list to Object after ftp connect - * @return void|Object - */ - function getAdminFTPList() - { - Context::loadLang('./modules/autoinstall/lang'); - set_time_limit(5); - require_once(_XE_PATH_.'libs/ftp.class.php'); - $ftp_info = Context::getRequestVars(); - if(!$ftp_info->ftp_user || !$ftp_info->ftp_password) - { - return new Object(-1, 'msg_ftp_invalid_auth_info'); - } - - $this->pwd = $ftp_info->ftp_root_path; - - if(!$ftp_info->ftp_host) - { - $ftp_info->ftp_host = "127.0.0.1"; - } - - if (!$ftp_info->ftp_port || !is_numeric ($ftp_info->ftp_port)) { - $ftp_info->ftp_port = "21"; - } - - if($ftp_info->sftp == 'Y') - { - if(!function_exists(ssh2_sftp)) - { - return new Object(-1,'disable_sftp_support'); - } - return $this->getSFTPList(); - } - - $oFtp = new ftp(); - if($oFtp->ftp_connect($ftp_info->ftp_host, $ftp_info->ftp_port)){ - if($oFtp->ftp_login($ftp_info->ftp_user, $ftp_info->ftp_password)) { - $_list = $oFtp->ftp_rawlist($this->pwd); - $oFtp->ftp_quit(); - } - else - { - return new Object(-1,'msg_ftp_invalid_auth_info'); - } - } - $list = array(); - - if($_list){ - foreach($_list as $k => $v){ - $src = null; - $src->data = $v; - $res = Context::convertEncoding($src); - $v = $res->data; - if(strpos($v,'d') === 0 || strpos($v, '')) $list[] = substr(strrchr($v,' '),1) . '/'; - } - } - else - { - return new Object(-1,'msg_ftp_no_directory'); - } - $this->add('list', $list); - } - - /** - * Parameter arrange for send to XE collect server - * @param string $type 'WORKING', 'INSTALL' - * @return string - */ - function getEnv($type='WORKING') { - - $skip = array( - 'ext' => array('pcre','json','hash','dom','session','spl','standard','date','ctype','tokenizer','apache2handler','filter','posix','reflection','pdo') - ,'module' => array('addon','admin','autoinstall', 'comment', 'communication', 'counter', 'document', 'editor', 'file', 'importer', 'install', 'integration_search', 'layout', 'member', 'menu', 'message', 'module', 'opage', 'page', 'point', 'poll', 'rss', 'session', 'spamfilter', 'tag', 'trackback', 'trash', 'widget') - ,'addon' => array('autolink', 'blogapi', 'captcha', 'counter', 'member_communication', 'member_extra_info', 'mobile', 'openid_delegation_id', 'point_level_icon', 'resize_image' ) - ); - - $info = array(); - $info['type'] = ($type !='INSTALL' ? 'WORKING' : 'INSTALL'); - $info['location'] = _XE_LOCATION_; - $info['package'] = _XE_PACKAGE_; - $info['host'] = $db_type->default_url ? $db_type->default_url : getFullUrl(); - $info['app'] = $_SERVER['SERVER_SOFTWARE']; - $info['xe_version'] = __ZBXE_VERSION__; - $info['php'] = phpversion(); - - $db_info = Context::getDBInfo(); - $info['db_type'] = Context::getDBType(); - $info['use_rewrite'] = $db_info->use_rewrite; - $info['use_db_session'] = $db_info->use_db_session == 'Y' ?'Y':'N'; - $info['use_ssl'] = $db_info->use_ssl; - - $info['phpext'] = ''; - foreach (get_loaded_extensions() as $ext) { - $ext = strtolower($ext); - if(in_array($ext, $skip['ext'])) continue; - $info['phpext'] .= '|'. $ext; - } - $info['phpext'] = substr($info['phpext'],1); - - $info['module'] = ''; - $oModuleModel = &getModel('module'); - $module_list = $oModuleModel->getModuleList(); - foreach($module_list as $module){ - if(in_array($module->module, $skip['module'])) continue; - $info['module'] .= '|'.$module->module; - } - $info['module'] = substr($info['module'],1); - - $info['addon'] = ''; - $oAddonAdminModel = &getAdminModel('addon'); - $addon_list = $oAddonAdminModel->getAddonList(); - foreach($addon_list as $addon){ - if(in_array($addon->addon, $skip['addon'])) continue; - $info['addon'] .= '|'.$addon->addon; - } - $info['addon'] = substr($info['addon'],1); - - $param = ''; - foreach($info as $k => $v){ - if($v) $param .= sprintf('&%s=%s',$k,urlencode($v)); - } - $param = substr($param, 1); - - return $param; - } - - /** - * Return theme info list by theme directory list - * @return array - */ - function getThemeList(){ - $path = _XE_PATH_.'themes'; - $list = FileHandler::readDir($path); - - $theme_info = array(); - if(count($list) > 0){ - foreach($list as $val){ - $theme_info[$val] = $this->getThemeInfo($val); - } - } - - return $theme_info; - } - - /** - * Return theme info - * @param string $theme_name - * @param array $layout_list - * @return object - */ - function getThemeInfo($theme_name, $layout_list = null){ - if ($GLOBALS['__ThemeInfo__'][$theme_name]) return $GLOBALS['__ThemeInfo__'][$theme_name]; - - $info_file = _XE_PATH_.'themes/'.$theme_name.'/conf/info.xml'; - if(!file_exists($info_file)) return; - - $oXmlParser = new XmlParser(); - $_xml_obj = $oXmlParser->loadXmlFile($info_file); - if(!$_xml_obj->theme) return; - - $xml_obj = $_xml_obj->theme; - - // 스킨이름 - $theme_info->name = $theme_name; - $theme_info->title = $xml_obj->title->body; - $thumbnail = './themes/'.$theme_name.'/thumbnail.png'; - $theme_info->thumbnail = (file_exists($thumbnail))?$thumbnail:null; - $theme_info->version = $xml_obj->version->body; - sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d); - $theme_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); - $theme_info->description = $xml_obj->description->body; - $theme_info->path = './themes/'.$theme_name.'/'; - - if(!is_array($xml_obj->publisher)) $publisher_list[] = $xml_obj->publisher; - else $publisher_list = $xml_obj->publisher; - - foreach($publisher_list as $publisher) { - unset($publisher_obj); - $publisher_obj->name = $publisher->name->body; - $publisher_obj->email_address = $publisher->attrs->email_address; - $publisher_obj->homepage = $publisher->attrs->link; - $theme_info->publisher[] = $publisher_obj; - } - - $layout = $xml_obj->layout; - $layout_path = $layout->directory->attrs->path; - $layout_parse = explode('/',$layout_path); - switch($layout_parse[1]){ - case 'themes' : { - $layout_info->name = $theme_name.'|@|'.$layout_parse[count($layout_parse)-1]; - break; - } - case 'layouts' : { - $layout_info->name = $layout_parse[count($layout_parse)-1]; - break; - } - } - $layout_info->title = $layout_parse[count($layout_parse)-1]; - $layout_info->path = $layout_path; - - $site_info = Context::get('site_module_info'); - // check layout instance - $is_new_layout = true; - $oLayoutModel = &getModel('layout'); - $layout_info_list = array(); - $layout_list = $oLayoutModel->getLayoutList($site_info->site_srl); - if ($layout_list){ - foreach($layout_list as $val){ - if ($val->layout == $layout_info->name){ - $is_new_layout = false; - $layout_info->layout_srl = $val->layout_srl; - break; - } - } - } - - if ($is_new_layout){ - $site_module_info = Context::get('site_module_info'); - $args->site_srl = (int)$site_module_info->site_srl; - $args->layout_srl = getNextSequence(); - $args->layout = $layout_info->name; - $args->title = $layout_info->title; - $args->layout_type = "P"; - // Insert into the DB - $oLayoutAdminController = &getAdminController('layout'); - $output = $oLayoutAdminController->insertLayout($args); - $layout_info->layout_srl = $args->layout_srl; - } - - $theme_info->layout_info = $layout_info; - - $skin_infos = $xml_obj->skininfos; - if(is_array($skin_infos->skininfo))$skin_list = $skin_infos->skininfo; - else $skin_list = array($skin_infos->skininfo); - - $oModuleModel = &getModel('module'); - $skins = array(); - foreach($skin_list as $val){ - unset($skin_info); - unset($skin_parse); - $skin_parse = explode('/',$val->directory->attrs->path); - switch($skin_parse[1]){ - case 'themes' : { - $is_theme = true; - $module_name = $skin_parse[count($skin_parse)-1]; - $skin_info->name = $theme_name.'|@|'.$module_name; - break; - } - case 'modules' : { - $is_theme = false; - $module_name = $skin_parse[2]; - $skin_info->name = $skin_parse[count($skin_parse)-1]; - break; - } - } - $skin_info->path = $val->directory->attrs->path; - $skin_info->is_theme = $is_theme; - $skins[$module_name] = $skin_info; - - if ($is_theme){ - if (!$GLOBALS['__ThemeModuleSkin__'][$module_name]){ - $GLOBALS['__ThemeModuleSkin__'][$module_name] = array(); - $GLOBALS['__ThemeModuleSkin__'][$module_name]['skins'] = array(); - $moduleInfo = $oModuleModel->getModuleInfoXml($module_name); - $GLOBALS['__ThemeModuleSkin__'][$module_name]['title'] = $moduleInfo->title; - } - $GLOBALS['__ThemeModuleSkin__'][$module_name]['skins'][$skin_info->name] = $oModuleModel->loadSkinInfo($skin_info->path, '', ''); - } - } - $theme_info->skin_infos = $skins; - - $GLOBALS['__ThemeInfo__'][$theme_name] = $theme_info; - return $theme_info; - } - - /** - * Return theme module skin list - * @return array - */ - function getModulesSkinList(){ - if ($GLOBALS['__ThemeModuleSkin__']['__IS_PARSE__']) return $GLOBALS['__ThemeModuleSkin__']; - $searched_list = FileHandler::readDir('./modules'); - sort($searched_list); - - $searched_count = count($searched_list); - if(!$searched_count) return; - - $exceptionModule = array('editor', 'poll', 'homepage', 'textyle'); - - $oModuleModel = &getModel('module'); - foreach($searched_list as $val) { - $skin_list = $oModuleModel->getSkins('./modules/'.$val); - - if (is_array($skin_list) && count($skin_list) > 0 && !in_array($val, $exceptionModule)){ - if(!$GLOBALS['__ThemeModuleSkin__'][$val]){ - $GLOBALS['__ThemeModuleSkin__'][$val] = array(); - $moduleInfo = $oModuleModel->getModuleInfoXml($val); - $GLOBALS['__ThemeModuleSkin__'][$val]['title'] = $moduleInfo->title; - $GLOBALS['__ThemeModuleSkin__'][$val]['skins'] = array(); - } - $GLOBALS['__ThemeModuleSkin__'][$val]['skins'] = array_merge($GLOBALS['__ThemeModuleSkin__'][$val]['skins'], $skin_list); - } - } - $GLOBALS['__ThemeModuleSkin__']['__IS_PARSE__'] = true; - - return $GLOBALS['__ThemeModuleSkin__']; - } - - /** - * Return admin menu language - * @return array - */ - function getAdminMenuLang() + $connection = ssh2_connect($ftp_info->ftp_host, $ftp_info->ftp_port); + if(!ssh2_auth_password($connection, $ftp_info->ftp_user, $ftp_info->ftp_password)) { - $currentLang = Context::getLangType(); - $cacheFile = sprintf('./files/cache/menu/admin_lang/adminMenu.%s.lang.php', $currentLang); + return new Object(-1,'msg_ftp_invalid_auth_info'); + } + $sftp = ssh2_sftp($connection); - // Update if no cache file exists or it is older than xml file - if(!is_readable($cacheFile)) + // create temp file + $pin = time(); + FileHandler::writeFile('./files/cache/ftp_check', $pin); + + // create path candidate + $xe_path = _XE_PATH_; + $path_info = array_reverse(explode('/', _XE_PATH_)); + array_pop($path_info); // remove last '/' + $path_candidate = array(); + + $temp = ''; + foreach($path_info as $path) + { + $temp = '/' . $path . $temp; + $path_candidate[] = $temp; + } + + // try + foreach($path_candidate as $path) + { + // upload check file + if(!@ssh2_scp_send($connection, FileHandler::getRealPath('./files/cache/ftp_check'), $path . 'ftp_check.html')) { - $oModuleModel = &getModel('module'); - $installed_module_list = $oModuleModel->getModulesXmlInfo(); - - $this->gnbLangBuffer = '$value) - { - $moduleActionInfo = $oModuleModel->getModuleActionXml($value->module); - if(is_object($moduleActionInfo->menu)) - { - foreach($moduleActionInfo->menu AS $key2=>$value2) - { - $lang->menu_gnb_sub[$key2] = $value2->title; - $this->gnbLangBuffer .=sprintf('$lang->menu_gnb_sub[\'%s\'] = \'%s\';', $key2, $value2->title); - } - } - } - $this->gnbLangBuffer .= ' ?>'; - FileHandler::writeFile($cacheFile, $this->gnbLangBuffer); + continue; } - else include $cacheFile; - return $lang->menu_gnb_sub; - } + // get check file + $result = FileHandler::getRemoteResource(getNotencodedFullUrl() . 'ftp_check.html'); - /** - * Get admin favorite list - * @param int $siteSrl if default site, siteSrl is zero - * @param bool $isGetModuleInfo - * @return object - */ - function getFavoriteList($siteSrl = 0, $isGetModuleInfo = false) - { - $args->site_srl = $siteSrl; - $output = executeQueryArray('admin.getFavoriteList', $args); - if (!$output->toBool()) return $output; - if (!$output->data) return new Object(); + // delete temp check file + @ssh2_sftp_unlink($sftp, $path . 'ftp_check.html'); - if($isGetModuleInfo && is_array($output->data)) + // found + if($result == $pin) { - $oModuleModel = &getModel('module'); - foreach($output->data AS $key=>$value) - { - $moduleInfo = $oModuleModel->getModuleInfoXml($value->module); - $output->data[$key]->admin_index_act = $moduleInfo->admin_index_act; - $output->data[$key]->title = $moduleInfo->title; - } + $found_path = $path; + break; } - - $returnObject = new Object(); - $returnObject->add('favoriteList', $output->data); - return $returnObject; } - /** - * Check available insert favorite - * @param int $siteSrl if default site, siteSrl is zero - * @param string $module - * @return object - */ - function isExistsFavorite($siteSrl, $module) + FileHandler::removeFile('./files/cache/ftp_check', $pin); + + if($found_path) { - $args->site_srl = $siteSrl; - $args->module = $module; - $output = executeQuery('admin.getFavorite', $args); - if (!$output->toBool()) return $output; - - $returnObject = new Object(); - if ($output->data) - { - $returnObject->add('result', true); - $returnObject->add('favoriteSrl', $output->data->admin_favorite_srl); - } - else - { - $returnObject->add('result', false); - } - - return $returnObject; - } - - /** - * Return site list - * @return void - */ - function getSiteAllList() - { - if(Context::get('domain')) $domain = Context::get('domain'); - $siteList = $this->getAllSitesThatHaveModules($domain); - $this->add('site_list', $siteList); - } - - /** - * Returns a list of all sites that contain modules - * For each site domain and site_srl are retrieved - * - * @return array - */ - function getAllSitesThatHaveModules($domain = null) - { - $args = new stdClass(); - if($domain) $args->domain = $domain; - $columnList = array('domain', 'site_srl'); - - $siteList = array(); - $output = executeQueryArray('admin.getSiteAllList', $args, $columnList); - if($output->toBool()) $siteList = $output->data; - - $oModuleModel = &getModel('module'); - foreach($siteList as $key => $value) - { - $args->site_srl = $value->site_srl; - $list = $oModuleModel->getModuleSrlList($args); - - if(!is_array($list)) - { - $list = array($list); - } - - foreach($list as $k => $v) - { - if(!is_dir('./modules/' . $v->module)) - { - unset($list[$k]); - } - } - - if(!count($list)) - { - unset($siteList[$key]); - } - } - return $siteList; - } - - /** - * Return site count - * @param string $date - * @return int - */ - function getSiteCountByDate($date = '') - { - if($date) $args->regDate = date('Ymd', strtotime($date)); - - $output = executeQuery('admin.getSiteCountByDate', $args); - if(!$output->toBool()) return 0; - - return $output->data->count; - } - - function getFaviconUrl() - { - return $this->iconUrlCheck('favicon.ico','faviconSample.png'); - } - - function getMobileIconUrl() - { - return $this->iconUrlCheck('mobicon.png','mobiconSample.png'); - } - - function iconUrlCheck($iconname,$default_icon_name) - { - $file_exsit = FileHandler::readFile(_XE_PATH_.'files/attach/xeicon/'.$iconname); - if(!$file_exsit){ - $icon_url = './modules/admin/tpl/img/'.$default_icon_name ; - } else { - $icon_url = $db_info->default_url.'files/attach/xeicon/'.$iconname; - } - return $icon_url; + $this->add('found_path', $found_path); } } + + /** + * Find XE installed path on ftp + */ + function getAdminFTPPath() + { + Context::loadLang('./modules/autoinstall/lang'); + set_time_limit(5); + require_once(_XE_PATH_ . 'libs/ftp.class.php'); + + $ftp_info = Context::getRequestVars(); + + if(!$ftp_info->ftp_user || !$ftp_info->ftp_password) + { + return new Object(1, 'msg_ftp_invalid_auth_info'); + } + + if(!$ftp_info->ftp_host) + { + $ftp_info->ftp_host = '127.0.0.1'; + } + + if(!$ftp_info->ftp_port || !is_numeric($ftp_info->ftp_port)) + { + $ftp_info->ftp_port = '21'; + } + + if($ftp_info->sftp == 'Y') + { + if(!function_exists(ssh2_sftp)) + { + return new Object(-1,'disable_sftp_support'); + } + return $this->getSFTPPath(); + } + + $oFTP = new ftp(); + if(!$oFTP->ftp_connect($ftp_info->ftp_host, $ftp_info->ftp_port)) + { + return new Object(1, sprintf(Context::getLang('msg_ftp_not_connected'), $ftp_info->ftp_host)); + } + + if(!$oFTP->ftp_login($ftp_info->ftp_user, $ftp_info->ftp_password)) + { + return new Object(1, 'msg_ftp_invalid_auth_info'); + } + + // create temp file + $pin = time(); + FileHandler::writeFile('./files/cache/ftp_check', $pin); + + // create path candidate + $xe_path = _XE_PATH_; + $path_info = array_reverse(explode('/', _XE_PATH_)); + array_pop($path_info); // remove last '/' + $path_candidate = array(); + + $temp = ''; + foreach($path_info as $path) + { + $temp = '/' . $path . $temp; + $path_candidate[] = $temp; + } + + // try + foreach($path_candidate as $path) + { + // upload check file + if(!$oFTP->ftp_put($path . 'ftp_check.html', FileHandler::getRealPath('./files/cache/ftp_check'))) + { + continue; + } + + // get check file + $result = FileHandler::getRemoteResource(getNotencodedFullUrl() . 'ftp_check.html'); + + // delete temp check file + $oFTP->ftp_delete($path . 'ftp_check.html'); + + // found + if($result == $pin) + { + $found_path = $path; + break; + } + } + + FileHandler::removeFile('./files/cache/ftp_check', $pin); + + if($found_path) + { + $this->add('found_path', $found_path); + } + } + + /** + * Add file list to Object after sftp connect + * @return void|Object + */ + function getSFTPList() + { + $ftp_info = Context::getRequestVars(); + if(!$ftp_info->ftp_host) + { + $ftp_info->ftp_host = "127.0.0.1"; + } + $connection = ssh2_connect($ftp_info->ftp_host, $ftp_info->ftp_port); + if(!ssh2_auth_password($connection, $ftp_info->ftp_user, $ftp_info->ftp_password)) + { + return new Object(-1,'msg_ftp_invalid_auth_info'); + } + + $sftp = ssh2_sftp($connection); + $curpwd = "ssh2.sftp://$sftp".$this->pwd; + $dh = @opendir($curpwd); + if(!$dh) return new Object(-1, 'msg_ftp_invalid_path'); + $list = array(); + while(($file = readdir($dh)) !== false) + { + if(is_dir($curpwd.$file)) + { + $file .= "/"; + } + else + { + continue; + } + $list[] = $file; + } + closedir($dh); + $this->add('list', $list); + } + + /** + * Add file list to Object after ftp connect + * @return void|Object + */ + function getAdminFTPList() + { + Context::loadLang('./modules/autoinstall/lang'); + set_time_limit(5); + require_once(_XE_PATH_.'libs/ftp.class.php'); + $ftp_info = Context::getRequestVars(); + if(!$ftp_info->ftp_user || !$ftp_info->ftp_password) + { + return new Object(-1, 'msg_ftp_invalid_auth_info'); + } + + $this->pwd = $ftp_info->ftp_root_path; + + if(!$ftp_info->ftp_host) + { + $ftp_info->ftp_host = "127.0.0.1"; + } + + if (!$ftp_info->ftp_port || !is_numeric ($ftp_info->ftp_port)) { + $ftp_info->ftp_port = "21"; + } + + if($ftp_info->sftp == 'Y') + { + if(!function_exists(ssh2_sftp)) + { + return new Object(-1,'disable_sftp_support'); + } + return $this->getSFTPList(); + } + + $oFtp = new ftp(); + if($oFtp->ftp_connect($ftp_info->ftp_host, $ftp_info->ftp_port)) + { + if($oFtp->ftp_login($ftp_info->ftp_user, $ftp_info->ftp_password)) + { + $_list = $oFtp->ftp_rawlist($this->pwd); + $oFtp->ftp_quit(); + } + else + { + return new Object(-1,'msg_ftp_invalid_auth_info'); + } + } + $list = array(); + + if($_list) + { + foreach($_list as $k => $v) + { + $src = null; + $src->data = $v; + $res = Context::convertEncoding($src); + $v = $res->data; + if(strpos($v,'d') === 0 || strpos($v, '')) $list[] = substr(strrchr($v,' '),1) . '/'; + } + } + else + { + return new Object(-1,'msg_ftp_no_directory'); + } + $this->add('list', $list); + } + + /** + * Parameter arrange for send to XE collect server + * @param string $type 'WORKING', 'INSTALL' + * @return string + */ + function getEnv($type='WORKING') + { + $skip = array( + 'ext' => array('pcre','json','hash','dom','session','spl','standard','date','ctype','tokenizer','apache2handler','filter','posix','reflection','pdo') + ,'module' => array('addon','admin','autoinstall', 'comment', 'communication', 'counter', 'document', 'editor', 'file', 'importer', 'install', 'integration_search', 'layout', 'member', 'menu', 'message', 'module', 'opage', 'page', 'point', 'poll', 'rss', 'session', 'spamfilter', 'tag', 'trackback', 'trash', 'widget') + ,'addon' => array('autolink', 'blogapi', 'captcha', 'counter', 'member_communication', 'member_extra_info', 'mobile', 'openid_delegation_id', 'point_level_icon', 'resize_image' ) + ); + + $info = array(); + $info['type'] = ($type !='INSTALL' ? 'WORKING' : 'INSTALL'); + $info['location'] = _XE_LOCATION_; + $info['package'] = _XE_PACKAGE_; + $info['host'] = $db_type->default_url ? $db_type->default_url : getFullUrl(); + $info['app'] = $_SERVER['SERVER_SOFTWARE']; + $info['xe_version'] = __ZBXE_VERSION__; + $info['php'] = phpversion(); + + $db_info = Context::getDBInfo(); + $info['db_type'] = Context::getDBType(); + $info['use_rewrite'] = $db_info->use_rewrite; + $info['use_db_session'] = $db_info->use_db_session == 'Y' ?'Y':'N'; + $info['use_ssl'] = $db_info->use_ssl; + + $info['phpext'] = ''; + foreach (get_loaded_extensions() as $ext) + { + $ext = strtolower($ext); + if(in_array($ext, $skip['ext'])) continue; + $info['phpext'] .= '|'. $ext; + } + $info['phpext'] = substr($info['phpext'],1); + + $info['module'] = ''; + $oModuleModel = &getModel('module'); + $module_list = $oModuleModel->getModuleList(); + foreach($module_list as $module) + { + if(in_array($module->module, $skip['module'])) continue; + $info['module'] .= '|'.$module->module; + } + $info['module'] = substr($info['module'],1); + + $info['addon'] = ''; + $oAddonAdminModel = &getAdminModel('addon'); + $addon_list = $oAddonAdminModel->getAddonList(); + foreach($addon_list as $addon) + { + if(in_array($addon->addon, $skip['addon'])) continue; + $info['addon'] .= '|'.$addon->addon; + } + $info['addon'] = substr($info['addon'],1); + + $param = ''; + foreach($info as $k => $v) + { + if($v) $param .= sprintf('&%s=%s',$k,urlencode($v)); + } + $param = substr($param, 1); + + return $param; + } + + /** + * Return theme info list by theme directory list + * @return array + */ + function getThemeList() + { + $path = _XE_PATH_.'themes'; + $list = FileHandler::readDir($path); + + $theme_info = array(); + if(count($list) > 0) + { + foreach($list as $val) + { + $theme_info[$val] = $this->getThemeInfo($val); + } + } + + return $theme_info; + } + + /** + * Return theme info + * @param string $theme_name + * @param array $layout_list + * @return object + */ + function getThemeInfo($theme_name, $layout_list = null) + { + if ($GLOBALS['__ThemeInfo__'][$theme_name]) return $GLOBALS['__ThemeInfo__'][$theme_name]; + + $info_file = _XE_PATH_.'themes/'.$theme_name.'/conf/info.xml'; + if(!file_exists($info_file)) return; + + $oXmlParser = new XmlParser(); + $_xml_obj = $oXmlParser->loadXmlFile($info_file); + if(!$_xml_obj->theme) return; + + $xml_obj = $_xml_obj->theme; + + // 스킨이름 + $theme_info->name = $theme_name; + $theme_info->title = $xml_obj->title->body; + $thumbnail = './themes/'.$theme_name.'/thumbnail.png'; + $theme_info->thumbnail = (file_exists($thumbnail))?$thumbnail:null; + $theme_info->version = $xml_obj->version->body; + sscanf($xml_obj->date->body, '%d-%d-%d', $date_obj->y, $date_obj->m, $date_obj->d); + $theme_info->date = sprintf('%04d%02d%02d', $date_obj->y, $date_obj->m, $date_obj->d); + $theme_info->description = $xml_obj->description->body; + $theme_info->path = './themes/'.$theme_name.'/'; + + if(!is_array($xml_obj->publisher)) $publisher_list[] = $xml_obj->publisher; + else $publisher_list = $xml_obj->publisher; + + foreach($publisher_list as $publisher) + { + unset($publisher_obj); + $publisher_obj->name = $publisher->name->body; + $publisher_obj->email_address = $publisher->attrs->email_address; + $publisher_obj->homepage = $publisher->attrs->link; + $theme_info->publisher[] = $publisher_obj; + } + + $layout = $xml_obj->layout; + $layout_path = $layout->directory->attrs->path; + $layout_parse = explode('/',$layout_path); + switch($layout_parse[1]) + { + case 'themes' : + { + $layout_info->name = $theme_name.'|@|'.$layout_parse[count($layout_parse)-1]; + break; + } + case 'layouts' : + { + $layout_info->name = $layout_parse[count($layout_parse)-1]; + break; + } + } + $layout_info->title = $layout_parse[count($layout_parse)-1]; + $layout_info->path = $layout_path; + + $site_info = Context::get('site_module_info'); + // check layout instance + $is_new_layout = true; + $oLayoutModel = &getModel('layout'); + $layout_info_list = array(); + $layout_list = $oLayoutModel->getLayoutList($site_info->site_srl); + if($layout_list) + { + foreach($layout_list as $val) + { + if($val->layout == $layout_info->name) + { + $is_new_layout = false; + $layout_info->layout_srl = $val->layout_srl; + break; + } + } + } + + if ($is_new_layout) + { + $site_module_info = Context::get('site_module_info'); + $args->site_srl = (int)$site_module_info->site_srl; + $args->layout_srl = getNextSequence(); + $args->layout = $layout_info->name; + $args->title = $layout_info->title; + $args->layout_type = "P"; + // Insert into the DB + $oLayoutAdminController = &getAdminController('layout'); + $output = $oLayoutAdminController->insertLayout($args); + $layout_info->layout_srl = $args->layout_srl; + } + + $theme_info->layout_info = $layout_info; + + $skin_infos = $xml_obj->skininfos; + if(is_array($skin_infos->skininfo))$skin_list = $skin_infos->skininfo; + else $skin_list = array($skin_infos->skininfo); + + $oModuleModel = &getModel('module'); + $skins = array(); + foreach($skin_list as $val) + { + unset($skin_info); + unset($skin_parse); + $skin_parse = explode('/',$val->directory->attrs->path); + switch($skin_parse[1]) + { + case 'themes' : + { + $is_theme = true; + $module_name = $skin_parse[count($skin_parse)-1]; + $skin_info->name = $theme_name.'|@|'.$module_name; + break; + } + case 'modules' : + { + $is_theme = false; + $module_name = $skin_parse[2]; + $skin_info->name = $skin_parse[count($skin_parse)-1]; + break; + } + } + $skin_info->path = $val->directory->attrs->path; + $skin_info->is_theme = $is_theme; + $skins[$module_name] = $skin_info; + + if($is_theme) + { + if(!$GLOBALS['__ThemeModuleSkin__'][$module_name]) + { + $GLOBALS['__ThemeModuleSkin__'][$module_name] = array(); + $GLOBALS['__ThemeModuleSkin__'][$module_name]['skins'] = array(); + $moduleInfo = $oModuleModel->getModuleInfoXml($module_name); + $GLOBALS['__ThemeModuleSkin__'][$module_name]['title'] = $moduleInfo->title; + } + $GLOBALS['__ThemeModuleSkin__'][$module_name]['skins'][$skin_info->name] = $oModuleModel->loadSkinInfo($skin_info->path, '', ''); + } + } + $theme_info->skin_infos = $skins; + + $GLOBALS['__ThemeInfo__'][$theme_name] = $theme_info; + return $theme_info; + } + + /** + * Return theme module skin list + * @return array + */ + function getModulesSkinList(){ + if ($GLOBALS['__ThemeModuleSkin__']['__IS_PARSE__']) return $GLOBALS['__ThemeModuleSkin__']; + $searched_list = FileHandler::readDir('./modules'); + sort($searched_list); + + $searched_count = count($searched_list); + if(!$searched_count) return; + + $exceptionModule = array('editor', 'poll', 'homepage', 'textyle'); + + $oModuleModel = &getModel('module'); + foreach($searched_list as $val) + { + $skin_list = $oModuleModel->getSkins('./modules/'.$val); + + if(is_array($skin_list) && count($skin_list) > 0 && !in_array($val, $exceptionModule)) + { + if(!$GLOBALS['__ThemeModuleSkin__'][$val]) + { + $GLOBALS['__ThemeModuleSkin__'][$val] = array(); + $moduleInfo = $oModuleModel->getModuleInfoXml($val); + $GLOBALS['__ThemeModuleSkin__'][$val]['title'] = $moduleInfo->title; + $GLOBALS['__ThemeModuleSkin__'][$val]['skins'] = array(); + } + $GLOBALS['__ThemeModuleSkin__'][$val]['skins'] = array_merge($GLOBALS['__ThemeModuleSkin__'][$val]['skins'], $skin_list); + } + } + $GLOBALS['__ThemeModuleSkin__']['__IS_PARSE__'] = true; + + return $GLOBALS['__ThemeModuleSkin__']; + } + + /** + * Return admin menu language + * @return array + */ + function getAdminMenuLang() + { + $currentLang = Context::getLangType(); + $cacheFile = sprintf('./files/cache/menu/admin_lang/adminMenu.%s.lang.php', $currentLang); + + // Update if no cache file exists or it is older than xml file + if(!is_readable($cacheFile)) + { + $oModuleModel = &getModel('module'); + $installed_module_list = $oModuleModel->getModulesXmlInfo(); + + $this->gnbLangBuffer = '$value) + { + $moduleActionInfo = $oModuleModel->getModuleActionXml($value->module); + if(is_object($moduleActionInfo->menu)) + { + foreach($moduleActionInfo->menu AS $key2=>$value2) + { + $lang->menu_gnb_sub[$key2] = $value2->title; + $this->gnbLangBuffer .=sprintf('$lang->menu_gnb_sub[\'%s\'] = \'%s\';', $key2, $value2->title); + } + } + } + $this->gnbLangBuffer .= ' ?>'; + FileHandler::writeFile($cacheFile, $this->gnbLangBuffer); + } + else include $cacheFile; + + return $lang->menu_gnb_sub; + } + + /** + * Get admin favorite list + * @param int $siteSrl if default site, siteSrl is zero + * @param bool $isGetModuleInfo + * @return object + */ + function getFavoriteList($siteSrl = 0, $isGetModuleInfo = false) + { + $args->site_srl = $siteSrl; + $output = executeQueryArray('admin.getFavoriteList', $args); + if(!$output->toBool()) return $output; + if(!$output->data) return new Object(); + + if($isGetModuleInfo && is_array($output->data)) + { + $oModuleModel = &getModel('module'); + foreach($output->data AS $key=>$value) + { + $moduleInfo = $oModuleModel->getModuleInfoXml($value->module); + $output->data[$key]->admin_index_act = $moduleInfo->admin_index_act; + $output->data[$key]->title = $moduleInfo->title; + } + } + + $returnObject = new Object(); + $returnObject->add('favoriteList', $output->data); + return $returnObject; + } + + /** + * Check available insert favorite + * @param int $siteSrl if default site, siteSrl is zero + * @param string $module + * @return object + */ + function isExistsFavorite($siteSrl, $module) + { + $args->site_srl = $siteSrl; + $args->module = $module; + $output = executeQuery('admin.getFavorite', $args); + if (!$output->toBool()) return $output; + + $returnObject = new Object(); + if($output->data) + { + $returnObject->add('result', true); + $returnObject->add('favoriteSrl', $output->data->admin_favorite_srl); + } + else + { + $returnObject->add('result', false); + } + + return $returnObject; + } + + /** + * Return site list + * @return void + */ + function getSiteAllList() + { + if(Context::get('domain')) $domain = Context::get('domain'); + $siteList = $this->getAllSitesThatHaveModules($domain); + $this->add('site_list', $siteList); + } + + /** + * Returns a list of all sites that contain modules + * For each site domain and site_srl are retrieved + * + * @return array + */ + function getAllSitesThatHaveModules($domain = null) + { + $args = new stdClass(); + if($domain) $args->domain = $domain; + $columnList = array('domain', 'site_srl'); + + $siteList = array(); + $output = executeQueryArray('admin.getSiteAllList', $args, $columnList); + if($output->toBool()) $siteList = $output->data; + + $oModuleModel = &getModel('module'); + foreach($siteList as $key => $value) + { + $args->site_srl = $value->site_srl; + $list = $oModuleModel->getModuleSrlList($args); + + if(!is_array($list)) + { + $list = array($list); + } + + foreach($list as $k => $v) + { + if(!is_dir('./modules/' . $v->module)) + { + unset($list[$k]); + } + } + + if(!count($list)) + { + unset($siteList[$key]); + } + } + return $siteList; + } + + /** + * Return site count + * @param string $date + * @return int + */ + function getSiteCountByDate($date = '') + { + if($date) $args->regDate = date('Ymd', strtotime($date)); + + $output = executeQuery('admin.getSiteCountByDate', $args); + if(!$output->toBool()) return 0; + + return $output->data->count; + } + + function getFaviconUrl() + { + return $this->iconUrlCheck('favicon.ico','faviconSample.png'); + } + + function getMobileIconUrl() + { + return $this->iconUrlCheck('mobicon.png','mobiconSample.png'); + } + + function iconUrlCheck($iconname,$default_icon_name) + { + $file_exsit = FileHandler::readFile(_XE_PATH_.'files/attach/xeicon/'.$iconname); + if(!$file_exsit) + { + $icon_url = './modules/admin/tpl/img/'.$default_icon_name ; + } + else + { + $icon_url = $db_info->default_url.'files/attach/xeicon/'.$iconname; + } + return $icon_url; + } +} +/* End of file admin.admin.model.php */ +/* Location: ./modules/admin/admin.admin.model.php */ diff --git a/modules/admin/admin.admin.view.php b/modules/admin/admin.admin.view.php index d7773e5c1..bf5493df5 100644 --- a/modules/admin/admin.admin.view.php +++ b/modules/admin/admin.admin.view.php @@ -1,441 +1,451 @@ getLoggedInfo(); - if($logged_info->is_admin!='Y') return $this->stop("msg_is_not_administrator"); + /** + * Initilization + * @return void + */ + function init() + { + // forbit access if the user is not an administrator + $oMemberModel = &getModel('member'); + $logged_info = $oMemberModel->getLoggedInfo(); + if($logged_info->is_admin!='Y') return $this->stop("msg_is_not_administrator"); - // change into administration layout - $this->setTemplatePath($this->module_path.'tpl'); - $this->setLayoutPath($this->getTemplatePath()); - $this->setLayoutFile('layout.html'); + // change into administration layout + $this->setTemplatePath($this->module_path.'tpl'); + $this->setLayoutPath($this->getTemplatePath()); + $this->setLayoutFile('layout.html'); - $this->makeGnbUrl(); + $this->makeGnbUrl(); - // Retrieve the list of installed modules + // Retrieve the list of installed modules - $db_info = Context::getDBInfo(); + $db_info = Context::getDBInfo(); - Context::set('time_zone_list', $GLOBALS['time_zone']); - Context::set('time_zone', $GLOBALS['_time_zone']); - Context::set('use_rewrite', $db_info->use_rewrite=='Y'?'Y':'N'); - Context::set('use_sso', $db_info->use_sso=='Y'?'Y':'N'); - Context::set('use_html5', $db_info->use_html5=='Y'?'Y':'N'); - Context::set('use_spaceremover', $db_info->use_spaceremover?$db_info->use_spaceremover:'Y');//not use - Context::set('qmail_compatibility', $db_info->qmail_compatibility=='Y'?'Y':'N'); - Context::set('use_db_session', $db_info->use_db_session=='N'?'N':'Y'); - Context::set('use_mobile_view', $db_info->use_mobile_view =='Y'?'Y':'N'); - Context::set('use_ssl', $db_info->use_ssl?$db_info->use_ssl:"none"); - Context::set('use_cdn', $db_info->use_cdn?$db_info->use_cdn:"none"); - if($db_info->http_port) Context::set('http_port', $db_info->http_port); - if($db_info->https_port) Context::set('https_port', $db_info->https_port); + Context::set('time_zone_list', $GLOBALS['time_zone']); + Context::set('time_zone', $GLOBALS['_time_zone']); + Context::set('use_rewrite', $db_info->use_rewrite=='Y'?'Y':'N'); + Context::set('use_sso', $db_info->use_sso=='Y'?'Y':'N'); + Context::set('use_html5', $db_info->use_html5=='Y'?'Y':'N'); + Context::set('use_spaceremover', $db_info->use_spaceremover?$db_info->use_spaceremover:'Y');//not use + Context::set('qmail_compatibility', $db_info->qmail_compatibility=='Y'?'Y':'N'); + Context::set('use_db_session', $db_info->use_db_session=='N'?'N':'Y'); + Context::set('use_mobile_view', $db_info->use_mobile_view =='Y'?'Y':'N'); + Context::set('use_ssl', $db_info->use_ssl?$db_info->use_ssl:"none"); + Context::set('use_cdn', $db_info->use_cdn?$db_info->use_cdn:"none"); + if($db_info->http_port) Context::set('http_port', $db_info->http_port); + if($db_info->https_port) Context::set('https_port', $db_info->https_port); - $this->showSendEnv(); - $this->checkEasyinstall(); - } + $this->showSendEnv(); + $this->checkEasyinstall(); + } - /** - * check easy install - * @return void - */ - function checkEasyinstall() + /** + * check easy install + * @return void + */ + function checkEasyinstall() + { + $lastTime = (int)FileHandler::readFile($this->easyinstallCheckFile); + if ($lastTime > time() - 60*60*24*30) return; + + $oAutoinstallModel = &getModel('autoinstall'); + $params = array(); + $params["act"] = "getResourceapiLastupdate"; + $body = XmlGenerater::generate($params); + $buff = FileHandler::getRemoteResource(_XE_DOWNLOAD_SERVER_, $body, 3, "POST", "application/xml"); + $xml_lUpdate = new XmlParser(); + $lUpdateDoc = $xml_lUpdate->parse($buff); + $updateDate = $lUpdateDoc->response->updatedate->body; + + if (!$updateDate) { - $lastTime = (int)FileHandler::readFile($this->easyinstallCheckFile); - if ($lastTime > time() - 60*60*24*30) return; - - $oAutoinstallModel = &getModel('autoinstall'); - $params = array(); - $params["act"] = "getResourceapiLastupdate"; - $body = XmlGenerater::generate($params); - $buff = FileHandler::getRemoteResource(_XE_DOWNLOAD_SERVER_, $body, 3, "POST", "application/xml"); - $xml_lUpdate = new XmlParser(); - $lUpdateDoc = $xml_lUpdate->parse($buff); - $updateDate = $lUpdateDoc->response->updatedate->body; - - if (!$updateDate) - { - $this->_markingCheckEasyinstall(); - return; - } - - $item = $oAutoinstallModel->getLatestPackage(); - if(!$item || $item->updatedate < $updateDate) - { - $oController = &getAdminController('autoinstall'); - $oController->_updateinfo(); - } $this->_markingCheckEasyinstall(); + return; } - /** - * update easy install file content - * @return void - */ - function _markingCheckEasyinstall() + $item = $oAutoinstallModel->getLatestPackage(); + if(!$item || $item->updatedate < $updateDate) { - $currentTime = time(); - FileHandler::writeFile($this->easyinstallCheckFile, $currentTime); + $oController = &getAdminController('autoinstall'); + $oController->_updateinfo(); } + $this->_markingCheckEasyinstall(); + } - /** - * Include admin menu php file and make menu url - * Setting admin logo, newest news setting - * @return void - */ - function makeGnbUrl($module = 'admin') + /** + * update easy install file content + * @return void + */ + function _markingCheckEasyinstall() + { + $currentTime = time(); + FileHandler::writeFile($this->easyinstallCheckFile, $currentTime); + } + + /** + * Include admin menu php file and make menu url + * Setting admin logo, newest news setting + * @return void + */ + function makeGnbUrl($module = 'admin') + { + global $lang; + + $oAdminAdminModel = &getAdminModel('admin'); + $lang->menu_gnb_sub = $oAdminAdminModel->getAdminMenuLang(); + + $menuPhpFile = $oAdminAdminModel->checkAdminMenu(); + if(!$menuPhpFile) { - global $lang; + return $this->setRedirectUrl(getUrl('', 'module', 'admin')); + } + include $menuPhpFile; - $oAdminAdminModel = &getAdminModel('admin'); - $lang->menu_gnb_sub = $oAdminAdminModel->getAdminMenuLang(); + $oModuleModel = &getModel('module'); + $moduleActionInfo = $oModuleModel->getModuleActionXml($module); - $menuPhpFile = $oAdminAdminModel->checkAdminMenu(); - if(!$menuPhpFile) + $currentAct = Context::get('act'); + $subMenuTitle = ''; + foreach((array)$moduleActionInfo->menu as $key=>$value) + { + if(isset($value->acts) && is_array($value->acts) && in_array($currentAct, $value->acts)) { - return $this->setRedirectUrl(getUrl('', 'module', 'admin')); + $subMenuTitle = $value->title; + break; } - include $menuPhpFile; + } - $oModuleModel = &getModel('module'); - $moduleActionInfo = $oModuleModel->getModuleActionXml($module); - - $currentAct = Context::get('act'); - $subMenuTitle = ''; - foreach((array)$moduleActionInfo->menu as $key=>$value) + $parentSrl = 0; + foreach((array)$menu->list as $parentKey=>$parentMenu) + { + if(!is_array($parentMenu['list']) || !count($parentMenu['list'])) continue; + if($parentMenu['href'] == '#' && count($parentMenu['list'])) { - if(isset($value->acts) && is_array($value->acts) && in_array($currentAct, $value->acts)) + $firstChild = current($parentMenu['list']); + $menu->list[$parentKey]['href'] = $firstChild['href']; + } + + foreach($parentMenu['list'] as $childKey=>$childMenu) + { + if($subMenuTitle == $childMenu['text']) { - $subMenuTitle = $value->title; + $parentSrl = $childMenu['parent_srl']; break; } } - - $parentSrl = 0; - foreach((array)$menu->list as $parentKey=>$parentMenu) - { - if(!is_array($parentMenu['list']) || !count($parentMenu['list'])) continue; - if($parentMenu['href'] == '#' && count($parentMenu['list'])) { - $firstChild = current($parentMenu['list']); - $menu->list[$parentKey]['href'] = $firstChild['href']; - } - - foreach($parentMenu['list'] as $childKey=>$childMenu) - { - if($subMenuTitle == $childMenu['text']) - { - $parentSrl = $childMenu['parent_srl']; - break; - } - } - } - - // Admin logo, title setup - $objConfig = $oModuleModel->getModuleConfig('admin'); - $gnbTitleInfo->adminTitle = $objConfig->adminTitle ? $objConfig->adminTitle:'XE Admin'; - $gnbTitleInfo->adminLogo = $objConfig->adminLogo ? $objConfig->adminLogo:'modules/admin/tpl/img/xe.h1.png'; - - $browserTitle = ($subMenuTitle ? $subMenuTitle : 'Dashboard').' - '.$gnbTitleInfo->adminTitle; - - // Get list of favorite - $oAdminAdminModel = &getAdminModel('admin'); - $output = $oAdminAdminModel->getFavoriteList(0, true); - Context::set('favorite_list', $output->get('favoriteList')); - - // Retrieve recent news and set them into context, - // move from index method, because use in admin footer - $newest_news_url = sprintf("http://news.xpressengine.com/%s/news.php?version=%s&package=%s", _XE_LOCATION_, __ZBXE_VERSION__, _XE_PACKAGE_); - $cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", _XE_PATH_, _XE_LOCATION_); - if(!file_exists($cache_file) || filemtime($cache_file)+ 60*60 < time()) { - // Considering if data cannot be retrieved due to network problem, modify filemtime to prevent trying to reload again when refreshing administration page - // Ensure to access the administration page even though news cannot be displayed - FileHandler::writeFile($cache_file,''); - FileHandler::getRemoteFile($newest_news_url, $cache_file, null, 1, 'GET', 'text/html', array('REQUESTURL'=>getFullUrl(''))); - } - - if(file_exists($cache_file)) { - $oXml = new XmlParser(); - $buff = $oXml->parse(FileHandler::readFile($cache_file)); - - $item = $buff->zbxe_news->item; - if($item) { - if(!is_array($item)) $item = array($item); - - foreach($item as $key => $val) { - $obj = null; - $obj->title = $val->body; - $obj->date = $val->attrs->date; - $obj->url = $val->attrs->url; - $news[] = $obj; - } - Context::set('news', $news); - if(isset($news) && is_array($news)) - { - Context::set('latestVersion', array_shift($news)); - } - } - Context::set('released_version', $buff->zbxe_news->attrs->released_version); - Context::set('download_link', $buff->zbxe_news->attrs->download_link); - } - - - Context::set('subMenuTitle', $subMenuTitle); - Context::set('gnbUrlList', $menu->list); - Context::set('parentSrl', $parentSrl); - Context::set('gnb_title_info', $gnbTitleInfo); - Context::setBrowserTitle($browserTitle); } - /** - * Display Super Admin Dashboard - * @return void - */ - function dispAdminIndex() { - // Get statistics - $args->date = date("Ymd000000", time()-60*60*24); - $today = date("Ymd"); + // Admin logo, title setup + $objConfig = $oModuleModel->getModuleConfig('admin'); + $gnbTitleInfo->adminTitle = $objConfig->adminTitle ? $objConfig->adminTitle:'XE Admin'; + $gnbTitleInfo->adminLogo = $objConfig->adminLogo ? $objConfig->adminLogo:'modules/admin/tpl/img/xe.h1.png'; - // Member Status - $oMemberAdminModel = &getAdminModel('member'); - $status->member->todayCount = $oMemberAdminModel->getMemberCountByDate($today); - $status->member->totalCount = $oMemberAdminModel->getMemberCountByDate(); + $browserTitle = ($subMenuTitle ? $subMenuTitle : 'Dashboard').' - '.$gnbTitleInfo->adminTitle; - // Document Status - $oDocumentAdminModel = &getAdminModel('document'); - $statusList = array('PUBLIC', 'SECRET'); - $status->document->todayCount = $oDocumentAdminModel->getDocumentCountByDate($today, array(), $statusList); - $status->document->totalCount = $oDocumentAdminModel->getDocumentCountByDate('', array(), $statusList); + // Get list of favorite + $oAdminAdminModel = &getAdminModel('admin'); + $output = $oAdminAdminModel->getFavoriteList(0, true); + Context::set('favorite_list', $output->get('favoriteList')); - // Comment Status - $oCommentModel = &getModel('comment'); - $status->comment->todayCount = $oCommentModel->getCommentCountByDate($today); - $status->comment->totalCount = $oCommentModel->getCommentCountByDate(); - - // Trackback Status - $oTrackbackAdminModel = &getAdminModel('trackback'); - $status->trackback->todayCount = $oTrackbackAdminModel->getTrackbackCountByDate($today); - $status->trackback->totalCount = $oTrackbackAdminModel->getTrackbackCountByDate(); - - // Attached files Status - $oFileAdminModel = &getAdminModel('file'); - $status->file->todayCount = $oFileAdminModel->getFilesCountByDate($today); - $status->file->totalCount = $oFileAdminModel->getFilesCountByDate(); - - Context::set('status', $status); - - // Latest Document - $oDocumentModel = &getModel('document'); - $columnList = array('document_srl', 'module_srl', 'category_srl', 'title', 'nick_name', 'member_srl'); - $args->list_count = 5;; - $output = $oDocumentModel->getDocumentList($args, false, false, $columnList); - Context::set('latestDocumentList', $output->data); - $security = new Security(); - $security->encodeHTML('latestDocumentList..variables.nick_name'); - unset($args, $output, $columnList); - - // Latest Comment - $oCommentModel = &getModel('comment'); - $columnList = array('comment_srl', 'module_srl', 'document_srl', 'content', 'nick_name', 'member_srl'); - $args->list_count = 5; - $output = $oCommentModel->getNewestCommentList($args, $columnList); - if(is_array($output)) - { - foreach($output AS $key=>$value) - { - $value->content = strip_tags($value->content); - } - } - Context::set('latestCommentList', $output); - unset($args, $output, $columnList); - - //Latest Trackback - $oTrackbackModel = &getModel('trackback'); - $columnList = array(); - $args->list_count = 5; - $output =$oTrackbackModel->getNewestTrackbackList($args); - Context::set('latestTrackbackList', $output->data); - unset($args, $output, $columnList); - - // Get list of modules - $oModuleModel = &getModel('module'); - $module_list = $oModuleModel->getModuleList(); - if(is_array($module_list)) - { - $needUpdate = false; - $addTables = false; - foreach($module_list AS $key=>$value) - { - if($value->need_install) - { - $addTables = true; - } - if($value->need_update) - { - $needUpdate = true; - } - } - } - Context::set('module_list', $module_list); - Context::set('needUpdate', $isUpdated); - Context::set('addTables', $addTables); - Context::set('needUpdate', $needUpdate); - - // gathering enviroment check - $mainVersion = join('.', array_slice(explode('.', __ZBXE_VERSION__), 0, 2)); - $path = FileHandler::getRealPath('./files/env/'.$mainVersion); - $isEnviromentGatheringAgreement = false; - if(file_exists($path)) $isEnviromentGatheringAgreement = true; - Context::set('isEnviromentGatheringAgreement', $isEnviromentGatheringAgreement); - Context::set('layout','none'); - - $this->setTemplateFile('index'); - } - - /** - * Display Configuration(settings) page - * @return void - */ - function dispAdminConfigGeneral() { - Context::loadLang('modules/install/lang'); - - $db_info = Context::getDBInfo(); - - Context::set('selected_lang', $db_info->lang_type); - - Context::set('default_url', $db_info->default_url); - Context::set('langs', Context::loadLangSupported()); - - Context::set('lang_selected', Context::loadLangSelected()); - - $admin_ip_list = preg_replace("/[,]+/","\r\n",$db_info->admin_ip_list); - Context::set('admin_ip_list', $admin_ip_list); - - $oAdminModel = &getAdminModel('admin'); - $favicon_url = $oAdminModel->getFaviconUrl(); - $mobicon_url = $oAdminModel->getMobileIconUrl(); - Context::set('favicon_url', $favicon_url); - Context::set('mobicon_url', $mobicon_url); - - $oDocumentModel = &getModel('document'); - $config = $oDocumentModel->getDocumentConfig(); - Context::set('thumbnail_type',$config->thumbnail_type); - - Context::set('IP',$_SERVER['REMOTE_ADDR']); - - $oModuleModel = &getModel('module'); - $config = $oModuleModel->getModuleConfig('module'); - Context::set('siteTitle',$config->siteTitle); - Context::set('htmlFooter',$config->htmlFooter); - - - $columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl'); - $start_module = $oModuleModel->getSiteInfo(0, $columnList); - Context::set('start_module', $start_module); - - Context::set('pwd',$pwd); - $this->setTemplateFile('config_general'); - - $security = new Security(); - $security->encodeHTML('news..', 'released_version', 'download_link', 'selected_lang', 'module_list..', 'module_list..author..', 'addon_list..', 'addon_list..author..', 'start_module.'); - } - - /** - * Display FTP Configuration(settings) page - * @return void - */ - function dispAdminConfigFtp() { - Context::loadLang('modules/install/lang'); - - $ftp_info = Context::getFTPInfo(); - Context::set('ftp_info', $ftp_info); - Context::set('sftp_support', function_exists(ssh2_sftp)); - - $this->setTemplateFile('config_ftp'); - -// $security = new Security(); -// $security->encodeHTML('ftp_info..'); - - } - - /** - * Display Admin Menu Configuration(settings) page - * @return void - */ - function dispAdminSetup() + // Retrieve recent news and set them into context, + // move from index method, because use in admin footer + $newest_news_url = sprintf("http://news.xpressengine.com/%s/news.php?version=%s&package=%s", _XE_LOCATION_, __ZBXE_VERSION__, _XE_PACKAGE_); + $cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", _XE_PATH_, _XE_LOCATION_); + if(!file_exists($cache_file) || filemtime($cache_file)+ 60*60 < time()) { - $oModuleModel = &getModel('module'); - $configObject = $oModuleModel->getModuleConfig('admin'); - - $oAdmin = &getClass('admin'); - $oMenuAdminModel = &getAdminModel('menu'); - $output = $oMenuAdminModel->getMenuByTitle($oAdmin->getAdminMenuName()); - - Context::set('menu_srl', $output->menu_srl); - Context::set('menu_title', $output->title); - Context::set('config_object', $configObject); - $this->setTemplateFile('admin_setup'); + // Considering if data cannot be retrieved due to network problem, modify filemtime to prevent trying to reload again when refreshing administration page + // Ensure to access the administration page even though news cannot be displayed + FileHandler::writeFile($cache_file,''); + FileHandler::getRemoteFile($newest_news_url, $cache_file, null, 1, 'GET', 'text/html', array('REQUESTURL'=>getFullUrl(''))); } + if(file_exists($cache_file)) + { + $oXml = new XmlParser(); + $buff = $oXml->parse(FileHandler::readFile($cache_file)); - /** - * Enviroment information send to XE collect server - * @return void - */ - function showSendEnv() { - if(Context::getResponseMethod() != 'HTML') return; + $item = $buff->zbxe_news->item; + if($item) + { + if(!is_array($item)) $item = array($item); - $server = 'http://collect.xpressengine.com/env/img.php?'; - $path = './files/env/'; - $install_env = $path . 'install'; - $mainVersion = join('.', array_slice(explode('.', __ZBXE_VERSION__), 0, 2)); + foreach($item as $key => $val) + { + $obj = null; + $obj->title = $val->body; + $obj->date = $val->attrs->date; + $obj->url = $val->attrs->url; + $news[] = $obj; + } + Context::set('news', $news); + if(isset($news) && is_array($news)) + { + Context::set('latestVersion', array_shift($news)); + } + } + Context::set('released_version', $buff->zbxe_news->attrs->released_version); + Context::set('download_link', $buff->zbxe_news->attrs->download_link); + } - if(file_exists(FileHandler::getRealPath($install_env))) { + Context::set('subMenuTitle', $subMenuTitle); + Context::set('gnbUrlList', $menu->list); + Context::set('parentSrl', $parentSrl); + Context::set('gnb_title_info', $gnbTitleInfo); + Context::setBrowserTitle($browserTitle); + } + + /** + * Display Super Admin Dashboard + * @return void + */ + function dispAdminIndex() + { + // Get statistics + $args->date = date("Ymd000000", time()-60*60*24); + $today = date("Ymd"); + + // Member Status + $oMemberAdminModel = &getAdminModel('member'); + $status->member->todayCount = $oMemberAdminModel->getMemberCountByDate($today); + $status->member->totalCount = $oMemberAdminModel->getMemberCountByDate(); + + // Document Status + $oDocumentAdminModel = &getAdminModel('document'); + $statusList = array('PUBLIC', 'SECRET'); + $status->document->todayCount = $oDocumentAdminModel->getDocumentCountByDate($today, array(), $statusList); + $status->document->totalCount = $oDocumentAdminModel->getDocumentCountByDate('', array(), $statusList); + + // Comment Status + $oCommentModel = &getModel('comment'); + $status->comment->todayCount = $oCommentModel->getCommentCountByDate($today); + $status->comment->totalCount = $oCommentModel->getCommentCountByDate(); + + // Trackback Status + $oTrackbackAdminModel = &getAdminModel('trackback'); + $status->trackback->todayCount = $oTrackbackAdminModel->getTrackbackCountByDate($today); + $status->trackback->totalCount = $oTrackbackAdminModel->getTrackbackCountByDate(); + + // Attached files Status + $oFileAdminModel = &getAdminModel('file'); + $status->file->todayCount = $oFileAdminModel->getFilesCountByDate($today); + $status->file->totalCount = $oFileAdminModel->getFilesCountByDate(); + + Context::set('status', $status); + + // Latest Document + $oDocumentModel = &getModel('document'); + $columnList = array('document_srl', 'module_srl', 'category_srl', 'title', 'nick_name', 'member_srl'); + $args->list_count = 5;; + $output = $oDocumentModel->getDocumentList($args, false, false, $columnList); + Context::set('latestDocumentList', $output->data); + $security = new Security(); + $security->encodeHTML('latestDocumentList..variables.nick_name'); + unset($args, $output, $columnList); + + // Latest Comment + $oCommentModel = &getModel('comment'); + $columnList = array('comment_srl', 'module_srl', 'document_srl', 'content', 'nick_name', 'member_srl'); + $args->list_count = 5; + $output = $oCommentModel->getNewestCommentList($args, $columnList); + if(is_array($output)) + { + foreach($output AS $key=>$value) + { + $value->content = strip_tags($value->content); + } + } + Context::set('latestCommentList', $output); + unset($args, $output, $columnList); + + //Latest Trackback + $oTrackbackModel = &getModel('trackback'); + $columnList = array(); + $args->list_count = 5; + $output =$oTrackbackModel->getNewestTrackbackList($args); + Context::set('latestTrackbackList', $output->data); + unset($args, $output, $columnList); + + // Get list of modules + $oModuleModel = &getModel('module'); + $module_list = $oModuleModel->getModuleList(); + if(is_array($module_list)) + { + $needUpdate = false; + $addTables = false; + foreach($module_list AS $key=>$value) + { + if($value->need_install) + { + $addTables = true; + } + if($value->need_update) + { + $needUpdate = true; + } + } + } + Context::set('module_list', $module_list); + Context::set('needUpdate', $isUpdated); + Context::set('addTables', $addTables); + Context::set('needUpdate', $needUpdate); + + // gathering enviroment check + $mainVersion = join('.', array_slice(explode('.', __ZBXE_VERSION__), 0, 2)); + $path = FileHandler::getRealPath('./files/env/'.$mainVersion); + $isEnviromentGatheringAgreement = false; + if(file_exists($path)) $isEnviromentGatheringAgreement = true; + Context::set('isEnviromentGatheringAgreement', $isEnviromentGatheringAgreement); + Context::set('layout','none'); + + $this->setTemplateFile('index'); + } + + /** + * Display Configuration(settings) page + * @return void + */ + function dispAdminConfigGeneral() + { + Context::loadLang('modules/install/lang'); + + $db_info = Context::getDBInfo(); + + Context::set('selected_lang', $db_info->lang_type); + + Context::set('default_url', $db_info->default_url); + Context::set('langs', Context::loadLangSupported()); + + Context::set('lang_selected', Context::loadLangSelected()); + + $admin_ip_list = preg_replace("/[,]+/","\r\n",$db_info->admin_ip_list); + Context::set('admin_ip_list', $admin_ip_list); + + $oAdminModel = &getAdminModel('admin'); + $favicon_url = $oAdminModel->getFaviconUrl(); + $mobicon_url = $oAdminModel->getMobileIconUrl(); + Context::set('favicon_url', $favicon_url); + Context::set('mobicon_url', $mobicon_url); + + $oDocumentModel = &getModel('document'); + $config = $oDocumentModel->getDocumentConfig(); + Context::set('thumbnail_type',$config->thumbnail_type); + + Context::set('IP',$_SERVER['REMOTE_ADDR']); + + $oModuleModel = &getModel('module'); + $config = $oModuleModel->getModuleConfig('module'); + Context::set('siteTitle',$config->siteTitle); + Context::set('htmlFooter',$config->htmlFooter); + + + $columnList = array('modules.mid', 'modules.browser_title', 'sites.index_module_srl'); + $start_module = $oModuleModel->getSiteInfo(0, $columnList); + Context::set('start_module', $start_module); + + Context::set('pwd',$pwd); + $this->setTemplateFile('config_general'); + + $security = new Security(); + $security->encodeHTML('news..', 'released_version', 'download_link', 'selected_lang', 'module_list..', 'module_list..author..', 'addon_list..', 'addon_list..author..', 'start_module.'); + } + + /** + * Display FTP Configuration(settings) page + * @return void + */ + function dispAdminConfigFtp() + { + Context::loadLang('modules/install/lang'); + + $ftp_info = Context::getFTPInfo(); + Context::set('ftp_info', $ftp_info); + Context::set('sftp_support', function_exists(ssh2_sftp)); + + $this->setTemplateFile('config_ftp'); + + //$security = new Security(); + //$security->encodeHTML('ftp_info..'); + } + + /** + * Display Admin Menu Configuration(settings) page + * @return void + */ + function dispAdminSetup() + { + $oModuleModel = &getModel('module'); + $configObject = $oModuleModel->getModuleConfig('admin'); + + $oAdmin = &getClass('admin'); + $oMenuAdminModel = &getAdminModel('menu'); + $output = $oMenuAdminModel->getMenuByTitle($oAdmin->getAdminMenuName()); + + Context::set('menu_srl', $output->menu_srl); + Context::set('menu_title', $output->title); + Context::set('config_object', $configObject); + $this->setTemplateFile('admin_setup'); + } + + + /** + * Enviroment information send to XE collect server + * @return void + */ + function showSendEnv() + { + if(Context::getResponseMethod() != 'HTML') return; + + $server = 'http://collect.xpressengine.com/env/img.php?'; + $path = './files/env/'; + $install_env = $path . 'install'; + $mainVersion = join('.', array_slice(explode('.', __ZBXE_VERSION__), 0, 2)); + + if(file_exists(FileHandler::getRealPath($install_env))) + { + $oAdminAdminModel = &getAdminModel('admin'); + $params = $oAdminAdminModel->getEnv('INSTALL'); + $img = sprintf('', $server.$params); + Context::addHtmlFooter($img); + + FileHandler::removeDir($path); + FileHandler::writeFile($path.$mainVersion,'1'); + } + else if(isset($_SESSION['enviroment_gather']) && !file_exists(FileHandler::getRealPath($path.$mainVersion))) + { + if($_SESSION['enviroment_gather']=='Y') + { $oAdminAdminModel = &getAdminModel('admin'); - $params = $oAdminAdminModel->getEnv('INSTALL'); + $params = $oAdminAdminModel->getEnv(); $img = sprintf('', $server.$params); Context::addHtmlFooter($img); - - FileHandler::removeDir($path); - FileHandler::writeFile($path.$mainVersion,'1'); - } - else if(isset($_SESSION['enviroment_gather']) && !file_exists(FileHandler::getRealPath($path.$mainVersion))) - { - if($_SESSION['enviroment_gather']=='Y') - { - $oAdminAdminModel = &getAdminModel('admin'); - $params = $oAdminAdminModel->getEnv(); - $img = sprintf('', $server.$params); - Context::addHtmlFooter($img); - } - FileHandler::removeDir($path); - FileHandler::writeFile($path.$mainVersion,'1'); - unset($_SESSION['enviroment_gather']); - } + FileHandler::removeDir($path); + FileHandler::writeFile($path.$mainVersion,'1'); + unset($_SESSION['enviroment_gather']); } - - } + } +} +/* End of file admin.admin.view.php */ +/* Location: ./modules/admin/admin.admin.view.php */ diff --git a/modules/admin/admin.class.php b/modules/admin/admin.class.php index e8814a10f..12a9d39a9 100644 --- a/modules/admin/admin.class.php +++ b/modules/admin/admin.class.php @@ -1,456 +1,464 @@ adminMenuName; + } + /** - * admin class - * Base class of admin module - * - * @author NHN (developers@xpressengine.com) - * @package /modules/admin - * @version 0.1 + * Install admin module + * @return Object */ - class admin extends ModuleObject { - private $adminMenuName = '__ADMINMENU_V17__'; + function moduleInstall() + { + return new Object(); + } - public function getAdminMenuName() + /** + * If update is necessary it returns true + * @return bool + */ + function checkUpdate() + { + $oDB = &DB::getInstance(); + if(!$oDB->isColumnExists("admin_favorite", "type")) return true; + + return false; + } + + /** + * Update module + * @return Object + */ + function moduleUpdate() + { + $oDB = &DB::getInstance(); + if(!$oDB->isColumnExists("admin_favorite", "type")) { - return $this->adminMenuName; - } + $oAdminAdminModel = &getAdminModel('admin'); + $output = $oAdminAdminModel->getFavoriteList(); + $favoriteList = $output->get('favoriteList'); - /** - * Install admin module - * @return Object - */ - function moduleInstall() { - return new Object(); - } - - /** - * If update is necessary it returns true - * @return bool - */ - function checkUpdate() { - $oDB = &DB::getInstance(); - if(!$oDB->isColumnExists("admin_favorite", "type")) return true; - - return false; - } - - /** - * Update module - * @return Object - */ - function moduleUpdate() { - $oDB = &DB::getInstance(); - if(!$oDB->isColumnExists("admin_favorite", "type")) + $oDB->dropColumn('admin_favorite', 'admin_favorite_srl'); + $oDB->addColumn('admin_favorite',"admin_favorite_srl","number",11,0); + $oDB->addColumn('admin_favorite',"type","varchar",30, 'module'); + if(is_array($favoriteList)) { - $oAdminAdminModel = &getAdminModel('admin'); - $output = $oAdminAdminModel->getFavoriteList(); - $favoriteList = $output->get('favoriteList'); - - $oDB->dropColumn('admin_favorite', 'admin_favorite_srl'); - $oDB->addColumn('admin_favorite',"admin_favorite_srl","number",11,0); - $oDB->addColumn('admin_favorite',"type","varchar",30, 'module'); - if(is_array($favoriteList)) + $oAdminAdminController = &getAdminController('admin'); + $oAdminAdminController->_deleteAllFavorite(); + foreach($favoriteList AS $key=>$value) { - $oAdminAdminController = &getAdminController('admin'); - $oAdminAdminController->_deleteAllFavorite(); - foreach($favoriteList AS $key=>$value) - { - $oAdminAdminController->_insertFavorite($value->site_srl, $value->module); - } + $oAdminAdminController->_insertFavorite($value->site_srl, $value->module); } } - return new Object(); - } - - /** - * Regenerate cache file - * @return void - */ - function recompileCache() { - } - - public function checkAdminMenu() - { - // for admin menu - if(Context::isInstalled()) - { - $oMenuAdminModel = &getAdminModel('menu'); - $output = $oMenuAdminModel->getMenuByTitle($this->adminMenuName); - - if(!$output->menu_srl) - { - $oAdminClass = &getClass('admin'); - $oAdminClass->createXeAdminMenu(); - } - else - { - if(!is_readable(FileHandler::getRealPath($output->php_file))) - { - $oMenuAdminController = &getAdminController('menu'); - $oMenuAdminController->makeXmlFile($output->menu_srl); - } - Context::set('admin_menu_srl', $output->menu_srl); - } - - $this->_oldAdminmenuDelete(); - return FileHandler::getRealPath($output->php_file); - } } + return new Object(); + } - /** - * Regenerate xe admin default menu - * @return void - */ - public function createXeAdminMenu() + /** + * Regenerate cache file + * @return void + */ + function recompileCache() + { + } + + public function checkAdminMenu() + { + // for admin menu + if(Context::isInstalled()) { - //insert menu - $args->title = $this->adminMenuName; - $args->menu_srl = getNextSequence(); - $args->listorder = $args->menu_srl * -1; - $output = executeQuery('menu.insertMenu', $args); - $menuSrl = $args->menu_srl; - Context::set('admin_menu_srl', $menuSrl); - unset($args); - - // gnb item create - $gnbList = array('dashboard', 'menu', 'user', 'content', 'configuration', 'advanced'); - foreach($gnbList AS $key=>$value) - { - //insert menu item - $args->menu_srl = $menuSrl; - $args->menu_item_srl = getNextSequence(); - $args->name = '{$lang->menu_gnb[\''.$value.'\']}'; - if($value == 'dashboard') - { - $args->url = 'index.php?module=admin'; - } - else $args->url = '#'; - $args->listorder = -1*$args->menu_item_srl; - $output = executeQuery('menu.insertMenuItem', $args); - } - $oMenuAdminModel = &getAdminModel('menu'); - $columnList = array('menu_item_srl', 'name'); - $output = $oMenuAdminModel->getMenuItems($menuSrl, 0, $columnList); - if(is_array($output->data)) - { - foreach($output->data AS $key=>$value) - { - preg_match('/\{\$lang->menu_gnb\[(.*?)\]\}/i', $value->name, $m); - $gnbDBList[$m[1]] = $value->menu_item_srl; - } - } - unset($args); + $output = $oMenuAdminModel->getMenuByTitle($this->adminMenuName); - $gnbModuleList = array( - 0=>array( - 'module'=>'menu', - 'subMenu'=>array('siteMap', 'siteDesign'), + if(!$output->menu_srl) + { + $oAdminClass = &getClass('admin'); + $oAdminClass->createXeAdminMenu(); + } + else + { + if(!is_readable(FileHandler::getRealPath($output->php_file))) + { + $oMenuAdminController = &getAdminController('menu'); + $oMenuAdminController->makeXmlFile($output->menu_srl); + } + Context::set('admin_menu_srl', $output->menu_srl); + } + + $this->_oldAdminmenuDelete(); + return FileHandler::getRealPath($output->php_file); + } + } + + /** + * Regenerate xe admin default menu + * @return void + */ + public function createXeAdminMenu() + { + //insert menu + $args->title = $this->adminMenuName; + $args->menu_srl = getNextSequence(); + $args->listorder = $args->menu_srl * -1; + $output = executeQuery('menu.insertMenu', $args); + $menuSrl = $args->menu_srl; + Context::set('admin_menu_srl', $menuSrl); + unset($args); + + // gnb item create + $gnbList = array('dashboard', 'menu', 'user', 'content', 'configuration', 'advanced'); + foreach($gnbList AS $key=>$value) + { + //insert menu item + $args->menu_srl = $menuSrl; + $args->menu_item_srl = getNextSequence(); + $args->name = '{$lang->menu_gnb[\''.$value.'\']}'; + if($value == 'dashboard') + { + $args->url = 'index.php?module=admin'; + } + else $args->url = '#'; + $args->listorder = -1*$args->menu_item_srl; + $output = executeQuery('menu.insertMenuItem', $args); + } + + $oMenuAdminModel = &getAdminModel('menu'); + $columnList = array('menu_item_srl', 'name'); + $output = $oMenuAdminModel->getMenuItems($menuSrl, 0, $columnList); + if(is_array($output->data)) + { + foreach($output->data AS $key=>$value) + { + preg_match('/\{\$lang->menu_gnb\[(.*?)\]\}/i', $value->name, $m); + $gnbDBList[$m[1]] = $value->menu_item_srl; + } + } + unset($args); + + $gnbModuleList = array( + 0=>array( + 'module'=>'menu', + 'subMenu'=>array('siteMap', 'siteDesign'), ), - 1=>array( - 'module'=>'member', - 'subMenu'=>array('userList', 'userSetting', 'userGroup'), + 1=>array( + 'module'=>'member', + 'subMenu'=>array('userList', 'userSetting', 'userGroup'), ), - 2=>array( - 'module'=>'document', - 'subMenu'=>array('document'), + 2=>array( + 'module'=>'document', + 'subMenu'=>array('document'), ), - 3=>array( - 'module'=>'comment', - 'subMenu'=>array('comment'), + 3=>array( + 'module'=>'comment', + 'subMenu'=>array('comment'), ), - 4=>array( - 'module'=>'trackback', - 'subMenu'=>array('trackback'), + 4=>array( + 'module'=>'trackback', + 'subMenu'=>array('trackback'), ), - 5=>array( + 5=>array( 'module'=>'file', 'subMenu'=>array('file'), - ), - 6=>array( + ), + 6=>array( 'module'=>'poll', 'subMenu'=>array('poll'), - ), - 7=>array( + ), + 7=>array( 'module'=>'rss', 'subMenu'=>array('rss'), - ), - 8=>array( + ), + 8=>array( 'module'=>'module', 'subMenu'=>array('multilingual'), - ), - 9=>array( + ), + 9=>array( 'module'=>'importer', 'subMenu'=>array('importer'), - ), - 10=>array( + ), + 10=>array( 'module'=>'trash', 'subMenu'=>array('trash'), - ), - 11=>array( + ), + 11=>array( 'module'=>'autoinstall', 'subMenu'=>array('easyInstall'), - ), - 12=>array( + ), + 12=>array( 'module'=>'layout', 'subMenu'=>array('installedLayout'), - ), - 13=>array( + ), + 13=>array( 'module'=>'module', 'subMenu'=>array('installedModule'), - ), - 14=>array( + ), + 14=>array( 'module'=>'widget', 'subMenu'=>array('installedWidget'), - ), - 15=>array( + ), + 15=>array( 'module'=>'addon', 'subMenu'=>array('installedAddon'), - ), - 16=>array( + ), + 16=>array( 'module'=>'editor', 'subMenu'=>array('editor'), - ), - 17=>array( + ), + 17=>array( 'module'=>'spamfilter', 'subMenu'=>array('spamFilter'), - ), - 18=>array( + ), + 18=>array( 'module'=>'admin', 'subMenu'=>array('adminConfigurationGeneral', 'adminConfigurationFtp', 'adminMenuSetup'), - ), - 19=>array( + ), + 19=>array( 'module'=>'file', 'subMenu'=>array('fileUpload'), - ), - 20=>array( + ), + 20=>array( 'module'=>'module', 'subMenu'=>array('filebox'), - ), - 21=>array( + ), + 21=>array( 'module'=>'point', 'subMenu'=>array('point') - ), + ), ); - $oMemberModel = &getModel('member'); - $output = $oMemberModel->getAdminGroup(array('group_srl')); - $adminGroupSrl = $output->group_srl; + $oMemberModel = &getModel('member'); + $output = $oMemberModel->getAdminGroup(array('group_srl')); + $adminGroupSrl = $output->group_srl; - // gnb sub item create - // common argument setting - $args->menu_srl = $menuSrl; - $args->open_window = 'N'; - $args->expand = 'N'; - $args->normal_btn = ''; - $args->hover_btn = ''; - $args->active_btn = ''; - $args->group_srls = $adminGroupSrl; - $oModuleModel = &getModel('module'); + // gnb sub item create + // common argument setting + $args->menu_srl = $menuSrl; + $args->open_window = 'N'; + $args->expand = 'N'; + $args->normal_btn = ''; + $args->hover_btn = ''; + $args->active_btn = ''; + $args->group_srls = $adminGroupSrl; + $oModuleModel = &getModel('module'); - foreach($gnbModuleList AS $key=>$value) + foreach($gnbModuleList AS $key=>$value) + { + if(is_array($value['subMenu'])) { - if(is_array($value['subMenu'])) + $moduleActionInfo = $oModuleModel->getModuleActionXml($value['module']); + foreach($value['subMenu'] AS $key2=>$value2) { - $moduleActionInfo = $oModuleModel->getModuleActionXml($value['module']); - foreach($value['subMenu'] AS $key2=>$value2) - { - $gnbKey = "'".$this->_getGnbKey($value2)."'"; + $gnbKey = "'".$this->_getGnbKey($value2)."'"; - //insert menu item - $args->menu_item_srl = getNextSequence(); - $args->parent_srl = $gnbDBList[$gnbKey]; - $args->name = '{$lang->menu_gnb_sub[\''.$value2.'\']}'; - $args->url = 'index.php?module=admin&act='.$moduleActionInfo->menu->{$value2}->index; - $args->listorder = -1*$args->menu_item_srl; - $output = executeQuery('menu.insertMenuItem', $args); - } + //insert menu item + $args->menu_item_srl = getNextSequence(); + $args->parent_srl = $gnbDBList[$gnbKey]; + $args->name = '{$lang->menu_gnb_sub[\''.$value2.'\']}'; + $args->url = 'index.php?module=admin&act='.$moduleActionInfo->menu->{$value2}->index; + $args->listorder = -1*$args->menu_item_srl; + $output = executeQuery('menu.insertMenuItem', $args); } } - - $oMenuAdminConroller = &getAdminController('menu'); - $oMenuAdminConroller->makeXmlFile($menuSrl); } - /** - * Return parent menu key by child menu - * @return string - */ - function _getGnbKey($menuName) + $oMenuAdminConroller = &getAdminController('menu'); + $oMenuAdminConroller->makeXmlFile($menuSrl); + } + + /** + * Return parent menu key by child menu + * @return string + */ + function _getGnbKey($menuName) + { + switch($menuName) { - switch($menuName) { - case 'siteMap': - case 'siteDesign': - return 'menu'; - break; - case 'userList': - case 'userSetting': - case 'userGroup': - case 'point': - return 'user'; - break; - case 'document': - case 'comment': - case 'trackback': - case 'file': - case 'poll': - case 'rss': - case 'multilingual': - case 'importer': - case 'trash': - case 'spamFilter': - return 'content'; - break; - case 'easyInstall': - case 'installedLayout': - case 'installedModule': - case 'installedWidget': - case 'installedAddon': - case 'editor': - return 'advanced'; - break; - case 'adminConfigurationGeneral': - case 'adminConfigurationFtp': - case 'adminMenuSetup': - case 'fileUpload': - case 'filebox': - return 'configuration'; - break; - default: - return 'advanced'; + case 'siteMap': + case 'siteDesign': + return 'menu'; + break; + case 'userList': + case 'userSetting': + case 'userGroup': + case 'point': + return 'user'; + break; + case 'document': + case 'comment': + case 'trackback': + case 'file': + case 'poll': + case 'rss': + case 'multilingual': + case 'importer': + case 'trash': + case 'spamFilter': + return 'content'; + break; + case 'easyInstall': + case 'installedLayout': + case 'installedModule': + case 'installedWidget': + case 'installedAddon': + case 'editor': + return 'advanced'; + break; + case 'adminConfigurationGeneral': + case 'adminConfigurationFtp': + case 'adminMenuSetup': + case 'fileUpload': + case 'filebox': + return 'configuration'; + break; + default: + return 'advanced'; + } + } + + /** + * Return parent old menu key by child menu + * @return string + */ + function _getOldGnbKey($menuName) + { + switch($menuName) + { + case 'siteMap': + return 'menu'; + break; + case 'userList': + case 'userSetting': + case 'userGroup': + case 'point': + return 'user'; + break; + case 'document': + case 'comment': + case 'trackback': + case 'file': + case 'poll': + case 'rss': + case 'multilingual': + case 'importer': + case 'trash': + return 'content'; + break; + case 'easyInstall': + case 'installedLayout': + case 'installedModule': + case 'installedWidget': + case 'installedAddon': + case 'editor': + case 'spamFilter': + return 'extensions'; + break; + case 'adminConfigurationGeneral': + case 'adminConfigurationFtp': + case 'adminMenuSetup': + case 'fileUpload': + case 'filebox': + return 'configuration'; + break; + default: + return 'user_added_menu'; + } + } + + private function _oldAdminmenuDelete() + { + $oMenuAdminModel = &getAdminModel('menu'); + + $output = $oMenuAdminModel->getMenuByTitle($this->adminMenuName); + $newAdminmenuSrl = $output->menu_srl; + $output = $oMenuAdminModel->getMenuItems($newAdminmenuSrl, 0); + $newAdminParentMenuList = array(); + if(is_array($output->data)) + { + foreach($output->data AS $key=>$value) + { + $tmp = explode('\'', $value->name); + $newAdminParentMenuList[$tmp[1]] = $value; } } + unset($output); - /** - * Return parent old menu key by child menu - * @return string - */ - function _getOldGnbKey($menuName) + // old admin menu + $output = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__'); + $menuSrl = $output->menu_srl; + + if($menuSrl) { - switch($menuName) { - case 'siteMap': - return 'menu'; - break; - case 'userList': - case 'userSetting': - case 'userGroup': - case 'point': - return 'user'; - break; - case 'document': - case 'comment': - case 'trackback': - case 'file': - case 'poll': - case 'rss': - case 'multilingual': - case 'importer': - case 'trash': - return 'content'; - break; - case 'easyInstall': - case 'installedLayout': - case 'installedModule': - case 'installedWidget': - case 'installedAddon': - case 'editor': - case 'spamFilter': - return 'extensions'; - break; - case 'adminConfigurationGeneral': - case 'adminConfigurationFtp': - case 'adminMenuSetup': - case 'fileUpload': - case 'filebox': - return 'configuration'; - break; - default: - return 'user_added_menu'; - } - } + $oMenuAdminController = &getAdminController('menu'); - private function _oldAdminmenuDelete() - { - $oMenuAdminModel = &getAdminModel('menu'); - - $output = $oMenuAdminModel->getMenuByTitle($this->adminMenuName); - $newAdminmenuSrl = $output->menu_srl; - $output = $oMenuAdminModel->getMenuItems($newAdminmenuSrl, 0); - $newAdminParentMenuList = array(); + $output = $oMenuAdminModel->getMenuItems($menuSrl); if(is_array($output->data)) { - foreach($output->data AS $key=>$value) + $parentMenu = array(); + foreach($output->data AS $key=>$menuItem) { - $tmp = explode('\'', $value->name); - $newAdminParentMenuList[$tmp[1]] = $value; - } - } - unset($output); - - // old admin menu - $output = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__'); - $menuSrl = $output->menu_srl; - - if($menuSrl) - { - $oMenuAdminController = &getAdminController('menu'); - - $output = $oMenuAdminModel->getMenuItems($menuSrl); - if(is_array($output->data)) - { - $parentMenu = array(); - foreach($output->data AS $key=>$menuItem) + if($menuItem->parent_srl == 0) { - if($menuItem->parent_srl == 0) - { - $tmp = explode('\'', $menuItem->name); - $parentMenuKey = $tmp[1]; - $parentMenu[$menuItem->menu_item_srl] = $parentMenuKey; - } + $tmp = explode('\'', $menuItem->name); + $parentMenuKey = $tmp[1]; + $parentMenu[$menuItem->menu_item_srl] = $parentMenuKey; } + } - $isUserAddedMenuMoved = false; - foreach($output->data AS $key=>$menuItem) + $isUserAddedMenuMoved = false; + foreach($output->data AS $key=>$menuItem) + { + if($menuItem->parent_srl != 0) { - if($menuItem->parent_srl != 0) - { - $tmp = explode('\'', $menuItem->name); - $menuKey = $tmp[1]; + $tmp = explode('\'', $menuItem->name); + $menuKey = $tmp[1]; - $result = $this->_getOldGnbKey($menuKey); - if($result == 'user_added_menu') + $result = $this->_getOldGnbKey($menuKey); + if($result == 'user_added_menu') + { + // theme menu use not anymore + /*if($parentMenu[$menuItem->parent_srl] == 'theme') + { + $newParentItem = $newAdminParentMenuList['menu']; + } + else*/ + if($parentMenu[$menuItem->parent_srl] == 'extensions') { - // theme menu use not anymore - /*if($parentMenu[$menuItem->parent_srl] == 'theme') - { - $newParentItem = $newAdminParentMenuList['menu']; - } - else*/ - if($parentMenu[$menuItem->parent_srl] == 'extensions') - { - $newParentItem = $newAdminParentMenuList['advanced']; - } - else - { - $newParentItem = $newAdminParentMenuList[$parentMenu[$menuItem->parent_srl]]; - } - $menuItem->menu_srl = $newParentItem->menu_srl; - $menuItem->parent_srl = $newParentItem->menu_item_srl; - - $output = executeQuery('menu.updateMenuItem', $menuItem); - $isUserAddedMenuMoved = true; + $newParentItem = $newAdminParentMenuList['advanced']; } - } - } + else + { + $newParentItem = $newAdminParentMenuList[$parentMenu[$menuItem->parent_srl]]; + } + $menuItem->menu_srl = $newParentItem->menu_srl; + $menuItem->parent_srl = $newParentItem->menu_item_srl; - if($isUserAddedMenuMoved) - { - $oMenuAdminController->makeXmlFile($newAdminmenuSrl); + $output = executeQuery('menu.updateMenuItem', $menuItem); + $isUserAddedMenuMoved = true; + } } } - $oMenuAdminController->deleteMenu($menuSrl); + if($isUserAddedMenuMoved) + { + $oMenuAdminController->makeXmlFile($newAdminmenuSrl); + } } + + $oMenuAdminController->deleteMenu($menuSrl); } - } -?> + } +} +/* End of file admin.class.php */ +/* Location: ./modules/admin/admin.class.php */