First step of reorganizing admin module into namespaces

This commit is contained in:
Kijin Sung 2022-12-26 23:19:37 +09:00
parent 4c65499ab1
commit 93947a7f51
10 changed files with 722 additions and 1194 deletions

View file

@ -8,7 +8,7 @@
* @package /modules/admin
* @version 0.1
*/
class adminAdminController extends admin
class AdminAdminController extends Admin
{
/**
@ -301,8 +301,7 @@ class adminAdminController extends admin
$moduleName = Context::get('module_name');
// check favorite exists
$oModel = getAdminModel('admin');
$output = $oModel->isExistsFavorite($siteSrl, $moduleName);
$output = Rhymix\Modules\Admin\Models\Favorite::isFavorite($moduleName);
if(!$output->toBool())
{
return $output;
@ -338,8 +337,7 @@ class adminAdminController extends admin
*/
function cleanFavorite()
{
$oModel = getAdminModel('admin');
$output = $oModel->getFavoriteList();
$output = Rhymix\Modules\Admin\Models\Favorite::getFavorites();
if(!$output->toBool())
{
return $output;
@ -446,12 +444,7 @@ class adminAdminController extends admin
*/
function _insertFavorite($site_srl, $module, $type = 'module')
{
$args = new stdClass();
$args->adminFavoriteSrl = getNextSequence();
$args->module = $module;
$args->type = $type;
$output = executeQuery('admin.insertFavorite', $args);
return $output;
return Rhymix\Modules\Admin\Models\Favorite::insertFavorite($module, $type);
}
/**
@ -460,10 +453,7 @@ class adminAdminController extends admin
*/
function _deleteFavorite($favoriteSrl)
{
$args = new stdClass();
$args->admin_favorite_srl = $favoriteSrl;
$output = executeQuery('admin.deleteFavorite', $args);
return $output;
return Rhymix\Modules\Admin\Models\Favorite::deleteFavorite($favoriteSrl);
}
/**
@ -472,9 +462,7 @@ class adminAdminController extends admin
*/
function _deleteAllFavorite()
{
$args = new stdClass;
$output = executeQuery('admin.deleteAllFavorite', $args);
return $output;
return Rhymix\Modules\Admin\Models\Favorite::deleteAllFavorites();
}
/**

View file

@ -1,584 +1,17 @@
<?php
/* Copyright (C) NAVER <http://www.navercorp.com> */
/**
* adminAdminModel class
* admin model class of admin module
* @author NAVER (developers@xpressengine.com)
* @package /modules/admin
* @version 0.1
* Preserved for backward compatibility
*
* @deprecated
*/
class adminAdminModel extends admin
class AdminAdminModel extends Admin
{
/**
* Ftp root path
* @var string
*/
var $pwd;
/**
* Buffer for Admin GNB menu
* @var string
*/
var $gnbLangBuffer;
/**
* Find XE installed path on sftp
*/
function getSFTPPath()
{
$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 $this->setError('msg_ftp_invalid_auth_info');
}
$sftp = ssh2_sftp($connection);
// create temp file
$pin = $_SERVER['REQUEST_TIME'];
FileHandler::writeFile('./files/cache/ftp_check', $pin);
// create path candidate
$xe_path = RX_BASEDIR;
$path_info = array_reverse(explode('/', RX_BASEDIR));
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);
}
}
function getFTPPath()
{
$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 = ftp_connect($ftp_info->ftp_host, $ftp_info->ftp_port);
if(!$connection)
{
return $this->setError('msg_ftp_not_connected', 'host');
}
$login_result = @ftp_login($connection, $ftp_info->ftp_user, $ftp_info->ftp_password);
if(!$login_result)
{
ftp_close($connection);
return $this->setError('msg_ftp_invalid_auth_info');
}
// create temp file
$pin = $_SERVER['REQUEST_TIME'];
FileHandler::writeFile('./files/cache/ftp_check', $pin);
// create path candidate
$xe_path = RX_BASEDIR;
$path_info = array_reverse(explode('/', RX_BASEDIR));
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(!ftp_put($connection, $path . 'ftp_check.html', FileHandler::getRealPath('./files/cache/ftp_check'), FTP_BINARY))
{
continue;
}
// get check file
$result = FileHandler::getRemoteResource(getNotencodedFullUrl() . 'ftp_check.html');
// delete temp check file
ftp_delete($connection, $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);
}
}
/**
* Find XE installed path on ftp
*/
function getAdminFTPPath()
{
Context::loadLang(RX_BASEDIR . 'modules/autoinstall/lang');
@set_time_limit(5);
$ftp_info = Context::getRequestVars();
if(!$ftp_info->ftp_user || !$ftp_info->ftp_password)
{
return new BaseObject(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 $this->setError('disable_sftp_support');
}
return $this->getSFTPPath();
}
if($ftp_info->ftp_pasv == 'N')
{
if(function_exists('ftp_connect'))
{
return $this->getFTPPath();
}
$ftp_info->ftp_pasv = "Y";
}
$oFTP = new ftp();
if(!$oFTP->ftp_connect($ftp_info->ftp_host, $ftp_info->ftp_port))
{
return new BaseObject(1, sprintf(lang('msg_ftp_not_connected'), 'host'));
}
if(!$oFTP->ftp_login($ftp_info->ftp_user, $ftp_info->ftp_password))
{
return new BaseObject(1, 'msg_ftp_invalid_auth_info');
}
// create temp file
$pin = $_SERVER['REQUEST_TIME'];
FileHandler::writeFile('./files/cache/ftp_check', $pin);
// create path candidate
$xe_path = RX_BASEDIR;
$path_info = array_reverse(explode('/', RX_BASEDIR));
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 $this->setError('msg_ftp_invalid_auth_info');
}
$sftp = ssh2_sftp($connection);
$curpwd = "ssh2.sftp://$sftp" . $this->pwd;
$dh = @opendir($curpwd);
if(!$dh)
{
return $this->setError('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(RX_BASEDIR . 'modules/autoinstall/lang');
@set_time_limit(5);
$ftp_info = Context::getRequestVars();
if(!$ftp_info->ftp_user || !$ftp_info->ftp_password)
{
return $this->setError('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 $this->setError('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 $this->setError('msg_ftp_invalid_auth_info');
}
}
$list = array();
if($_list)
{
foreach($_list as $k => $v)
{
$src = new stdClass();
$src->data = $v;
$res = Context::convertEncoding($src);
$v = $res->data;
if(strpos($v, 'd') === 0 || strpos($v, '<DIR>'))
{
$list[] = substr(strrchr($v, ' '), 1) . '/';
}
}
}
else
{
return $this->setError('msg_ftp_no_directory');
}
$this->add('list', $list);
}
/**
* Return theme info list by theme directory list
* @return array
*/
function getThemeList()
{
$path = RX_BASEDIR . '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 = RX_BASEDIR . 'themes/' . $theme_name . '/conf/info.xml';
if(!file_exists($info_file))
{
return;
}
$oXmlParser = new XeXmlParser();
$_xml_obj = $oXmlParser->loadXmlFile($info_file);
if(!$_xml_obj->theme)
{
return;
}
$xml_obj = $_xml_obj->theme;
// 스킨이름
$theme_info = new stdClass();
$theme_info->name = $theme_name;
$theme_info->title = $xml_obj->title->body;
$thumbnail = './themes/' . $theme_name . '/thumbnail.png';
$theme_info->thumbnail = (FileHandler::exists($thumbnail)) ? $thumbnail : NULL;
$theme_info->version = $xml_obj->version->body;
$date_obj = new stdClass();
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 = array();
$publisher_list[] = $xml_obj->publisher;
}
else
{
$publisher_list = $xml_obj->publisher;
}
$theme_info->publisher = array();
foreach($publisher_list as $publisher)
{
$publisher_obj = new stdClass();
$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);
$layout_info = new stdClass();
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();
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 = new stdClass();
$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)
{
$skin_info = new stdClass();
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()
public function getModulesSkinList()
{
if($GLOBALS['__ThemeModuleSkin__']['__IS_PARSE__'])
{
@ -617,111 +50,11 @@ class adminAdminModel extends admin
return $GLOBALS['__ThemeModuleSkin__'];
}
/**
* Return admin menu language
* @return array
*/
function getAdminMenuLang()
{
static $lang = null;
if ($lang === null)
{
$lang = Rhymix\Framework\Cache::get('admin_menu_langs:' . Context::getLangType());
}
if ($lang === null)
{
$lang = array();
$oModuleModel = getModel('module');
$installed_module_list = $oModuleModel->getModulesXmlInfo();
foreach($installed_module_list as $key => $value)
{
$moduleActionInfo = $oModuleModel->getModuleActionXml($value->module);
if(isset($moduleActionInfo->menu) && is_object($moduleActionInfo->menu))
{
foreach($moduleActionInfo->menu as $key2 => $value2)
{
$lang[$key2] = $value2->title;
}
}
}
Rhymix\Framework\Cache::set('admin_menu_langs:' . Context::getLangType(), $lang, 0, true);
}
return $lang;
}
/**
* Get admin favorite list
* @param int $site_srl @deprecated
* @param bool $isGetModuleInfo
* @return object
*/
function getFavoriteList($site_srl = 0, $isGetModuleInfo = FALSE)
{
$args = new stdClass();
$output = executeQueryArray('admin.getFavoriteList', $args);
if(!$output->toBool())
{
return $output;
}
if(!$output->data)
{
return new BaseObject();
}
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 BaseObject();
$returnObject->add('favoriteList', $output->data);
return $returnObject;
}
/**
* Check available insert favorite
* @param int $site_srl @deprecated
* @param string $module
* @return object
*/
function isExistsFavorite($site_srl, $module)
{
$args = new stdClass();
$args->module = $module;
$output = executeQuery('admin.getFavorite', $args);
if(!$output->toBool())
{
return $output;
}
$returnObject = new BaseObject();
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()
public function getSiteAllList()
{
if(Context::get('domain'))
{
@ -737,7 +70,7 @@ class adminAdminModel extends admin
*
* @return array
*/
function getAllSitesThatHaveModules($domain = NULL)
public function getAllSitesThatHaveModules($domain = NULL)
{
$args = new stdClass();
if($domain)
@ -785,17 +118,16 @@ class adminAdminModel extends admin
* @param string $date
* @return int
*/
function getSiteCountByDate($date = '')
public function getSiteCountByDate($date = '')
{
$args = new stdClass();
if($date)
$args = new stdClass;
if ($date)
{
$args->regDate = date('Ymd', strtotime($date));
}
$output = executeQuery('admin.getSiteCountByDate', $args);
if(!$output->toBool())
if (!$output->toBool())
{
return 0;
}
@ -803,64 +135,81 @@ class adminAdminModel extends admin
return $output->data->count;
}
function getFaviconUrl($domain_srl = 0)
/**
* Deprecated aliases to model methods
*/
public function getAdminMenuName()
{
return $this->iconUrlCheck('favicon.ico', 'faviconSample.png', $domain_srl);
return Rhymix\Modules\Admin\Models\AdminMenu::getAdminMenuName();
}
function getMobileIconUrl($domain_srl = 0)
public function getAdminMenuLang()
{
return $this->iconUrlCheck('mobicon.png', 'mobiconSample.png', $domain_srl);
return Rhymix\Modules\Admin\Models\AdminMenu::getAdminMenuLang();
}
function getSiteDefaultImageUrl($domain_srl = 0, &$width = 0, &$height = 0)
public function getFavoriteList($site_srl = 0, $add_module_info = false)
{
return Rhymix\Modules\Admin\Models\Favorite::getFavorites($add_module_info);
}
public function isExistsFavorite($site_srl, $module)
{
return Rhymix\Modules\Admin\Models\Favorite::isFavorite($module);
}
public function getFaviconUrl($domain_srl = 0)
{
return Rhymix\Modules\Admin\Models\Icon::getFaviconUrl($domain_srl);
}
public function getMobileIconUrl($domain_srl = 0)
{
return Rhymix\Modules\Admin\Models\Icon::getMobiconUrl($domain_srl);
}
public function getSiteDefaultImageUrl($domain_srl = 0, &$width = 0, &$height = 0)
{
return Rhymix\Modules\Admin\Models\Icon::getDefaultImageUrl($domain_srl, $width, $height);
}
public function iconUrlCheck($iconname, $default_icon_name, $domain_srl)
{
return Rhymix\Modules\Admin\Models\Icon::getIconUrl($domain_srl, $iconname);
}
public function getSFTPPath()
{
return new BaseObject(-1, 'msg_ftp_invalid_auth_info');
}
public function getFTPPath()
{
return new BaseObject(-1, 'msg_ftp_invalid_auth_info');
}
public function getAdminFTPPath()
{
return new BaseObject(-1, 'msg_ftp_invalid_auth_info');
}
public function getSFTPList()
{
return new BaseObject(-1, 'msg_ftp_invalid_auth_info');
}
public function getAdminFTPList()
{
return new BaseObject(-1, 'msg_ftp_invalid_auth_info');
}
public function getThemeList()
{
return [];
}
public function getThemeInfo($theme_name, $layout_list = [])
{
$domain_srl = intval($domain_srl);
if ($domain_srl)
{
$virtual_site = $domain_srl . '/';
}
else
{
$virtual_site = '';
}
$info = Rhymix\Framework\Storage::readPHPData(\RX_BASEDIR . 'files/attach/xeicon/' . $virtual_site . 'default_image.php');
if ($info && Rhymix\Framework\Storage::exists(\RX_BASEDIR . $info['filename']))
{
$width = $info['width'];
$height = $info['height'];
return \RX_BASEURL . $info['filename'] . '?' . date('YmdHis', filemtime(\RX_BASEDIR . $info['filename']));
}
else
{
return false;
}
}
function iconUrlCheck($iconname, $default_icon_name, $domain_srl)
{
$domain_srl = intval($domain_srl);
if ($domain_srl)
{
$virtual_site = $domain_srl . '/';
}
else
{
$virtual_site = '';
}
$filename = 'files/attach/xeicon/' . $virtual_site . $iconname;
if (Rhymix\Framework\Storage::exists(\RX_BASEDIR . $filename))
{
return \RX_BASEURL . $filename . '?' . date('YmdHis', filemtime(\RX_BASEDIR . $filename));
}
else
{
return false;
}
}
}
/* End of file admin.admin.model.php */
/* Location: ./modules/admin/admin.admin.model.php */

View file

@ -9,7 +9,7 @@
* @package /modules/admin
* @version 0.1
*/
class adminAdminView extends admin
class AdminAdminView extends Admin
{
/**
@ -158,10 +158,8 @@ class adminAdminView extends admin
return;
}
$oAdminAdminModel = getAdminModel('admin');
$lang->menu_gnb_sub = $oAdminAdminModel->getAdminMenuLang();
$result = $oAdminAdminModel->checkAdminMenu();
$lang->menu_gnb_sub = Rhymix\Modules\Admin\Models\AdminMenu::getAdminMenuLang();
$result = Rhymix\Modules\Admin\Models\AdminMenu::checkAdminMenu();
include $result->php_file;
$oModuleModel = getModel('module');
@ -182,7 +180,6 @@ class adminAdminView extends admin
// get current menu's srl(=parentSrl)
$parentSrl = 0;
$oMenuAdminConroller = getAdminController('menu');
foreach((array) $menu->list as $parentKey => $parentMenu)
{
if(!is_array($parentMenu['list']) || !count($parentMenu['list']))
@ -205,51 +202,9 @@ class adminAdminView extends admin
}
// Get list of favorite
$oAdminAdminModel = getAdminModel('admin');
$output = $oAdminAdminModel->getFavoriteList(0, true);
$output = Rhymix\Modules\Admin\Models\Favorite::getFavorites(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_, __XE_VERSION__, _XE_PACKAGE_);
$cache_file = sprintf("%sfiles/cache/newest_news.%s.cache.php", RX_BASEDIR, _XE_LOCATION_);
if(!file_exists($cache_file) || filemtime($cache_file) + 60 * 60 < $_SERVER['REQUEST_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 XeXmlParser();
$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 = new stdClass();
$obj->title = $val->body;
$obj->date = $val->attrs->date;
$obj->url = $val->attrs->url;
$news[] = $obj;
}
Context::set('news', $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);
@ -744,10 +699,9 @@ class adminAdminView extends admin
// Get favicon and images.
if ($domain_info)
{
$oAdminAdminModel = getAdminModel('admin');
Context::set('favicon_url', $oAdminAdminModel->getFaviconUrl($domain_info->domain_srl));
Context::set('mobicon_url', $oAdminAdminModel->getMobileIconUrl($domain_info->domain_srl));
Context::set('default_image_url', $oAdminAdminModel->getSiteDefaultImageUrl($domain_info->domain_srl));
Context::set('favicon_url', Rhymix\Modules\Admin\Models\Icon::getFaviconUrl($domain_info->domain_srl));
Context::set('mobicon_url', Rhymix\Modules\Admin\Models\Icon::getMobiconUrl($domain_info->domain_srl));
Context::set('default_image_url', Rhymix\Modules\Admin\Models\Icon::getDefaultImageUrl($domain_info->domain_srl));
Context::set('color_scheme', $domain_info->settings->color_scheme ?? 'auto');
}
@ -813,10 +767,9 @@ class adminAdminView extends admin
// Get favicon and images.
if ($domain_info)
{
$oAdminAdminModel = getAdminModel('admin');
Context::set('favicon_url', $oAdminAdminModel->getFaviconUrl($domain_srl));
Context::set('mobicon_url', $oAdminAdminModel->getMobileIconUrl($domain_srl));
Context::set('default_image_url', $oAdminAdminModel->getSiteDefaultImageUrl($domain_srl));
Context::set('favicon_url', Rhymix\Modules\Admin\Models\Icon::getFaviconUrl($domain_info->domain_srl));
Context::set('mobicon_url', Rhymix\Modules\Admin\Models\Icon::getMobiconUrl($domain_info->domain_srl));
Context::set('default_image_url', Rhymix\Modules\Admin\Models\Icon::getDefaultImageUrl($domain_info->domain_srl));
Context::set('color_scheme', $domain_info->settings->color_scheme ?? 'auto');
}

View file

@ -1,387 +1,3 @@
<?php
/* Copyright (C) NAVER <http://www.navercorp.com> */
/**
* admin class
* Base class of admin module
*
* @author NAVER (developers@xpressengine.com)
* @package /modules/admin
* @version 0.1
*/
class admin extends ModuleObject
{
protected $adminMenuName = '__ADMINMENU_V17__';
public function getAdminMenuName()
{
return $this->adminMenuName;
}
/**
* Install admin module
* @return void
*/
function moduleInstall()
{
}
/**
* 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 void
*/
function moduleUpdate()
{
$oDB = DB::getInstance();
if(!$oDB->isColumnExists("admin_favorite", "type"))
{
$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->_insertFavorite($value->site_srl, $value->module);
}
}
}
}
/**
* 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)
{
$this->createXeAdminMenu();
$output = $oMenuAdminModel->getMenuByTitle($this->adminMenuName);
}
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();
$returnObj = new stdClass();
$returnObj->menu_srl = $output->menu_srl;
$returnObj->php_file = FileHandler::getRealPath($output->php_file);
return $returnObj;
}
}
/**
* Regenerate xe admin default menu
* @return void
*/
public function createXeAdminMenu()
{
//insert menu
$args = new stdClass();
$args->title = $this->adminMenuName;
$menuSrl = $args->menu_srl = getNextSequence();
$args->listorder = $args->menu_srl * -1;
$output = executeQuery('menu.insertMenu', $args);
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 = new stdClass();
$args->menu_srl = $menuSrl;
$args->menu_item_srl = getNextSequence();
$args->name = '{$lang->menu_gnb[\'' . $value . '\']}';
if($value == 'dashboard')
{
$args->url = getUrl('', '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);
$gnbMenuStructure = array(
'menu' => array(
'menu.siteMap',
'menu.siteDesign',
),
'user' => array(
'member.userList',
'member.userSetting',
'member.userGroup',
'point.point',
),
'content' => array(
'board.board',
'page.page',
'document.document',
'comment.comment',
'file.file',
'poll.poll',
'editor.editor',
'spamfilter.spamFilter',
'trash.trash',
),
'configuration' => array(
'admin.adminConfigurationGeneral',
'admin.adminMenuSetup',
'module.filebox',
),
'advanced' => array(
'autoinstall.easyInstall',
'layout.installedLayout',
'module.installedModule',
'addon.installedAddon',
'widget.installedWidget',
'module.multilingual',
'importer.importer',
'rss.rss',
),
);
$oMemberModel = getModel('member');
$output = $oMemberModel->getAdminGroup(array('group_srl'));
$adminGroupSrl = $output->group_srl;
// gnb common argument setting
$args = new stdClass();
$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');
$moduleActionInfo = array();
foreach ($gnbMenuStructure as $key => $items)
{
foreach ($items as $item)
{
list($module_name, $menu_name) = explode('.', $item);
if (!isset($moduleActionInfo[$module_name]))
{
$moduleActionInfo[$module_name] = $oModuleModel->getModuleActionXml($module_name);
}
$args->menu_item_srl = getNextSequence();
$args->parent_srl = $gnbDBList["'" . $key . "'"];
$args->name = '{$lang->menu_gnb_sub[\'' . $menu_name . '\']}';
$args->url = getUrl('', 'module', 'admin', 'act', $moduleActionInfo[$module_name]->menu->{$menu_name}->index);
$args->listorder = -1 * $args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);
}
}
$oMenuAdminConroller = getAdminController('menu');
$oMenuAdminConroller->makeXmlFile($menuSrl);
// does not recreate lang cache sometimes
FileHandler::RemoveFilesInDir('./files/cache/lang');
FileHandler::RemoveFilesInDir('./files/cache/menu/admin_lang');
}
/**
* 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 '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);
// old admin menu
$output = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__');
$menuSrl = $output->menu_srl ?? 0;
$oMenuAdminController = getAdminController('menu');
if($menuSrl)
{
$output = $oMenuAdminModel->getMenuItems($menuSrl);
if(is_array($output->data))
{
$parentMenu = array();
foreach($output->data AS $key => $menuItem)
{
if($menuItem->parent_srl == 0)
{
$tmp = explode('\'', $menuItem->name);
$parentMenuKey = $tmp[1];
$parentMenu[$menuItem->menu_item_srl] = $parentMenuKey;
}
}
$isUserAddedMenuMoved = FALSE;
foreach($output->data AS $key => $menuItem)
{
if($menuItem->parent_srl != 0)
{
$tmp = explode('\'', $menuItem->name);
$menuKey = $tmp[1];
$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')
{
$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;
}
}
}
if($isUserAddedMenuMoved)
{
$oMenuAdminController->makeXmlFile($newAdminmenuSrl);
}
}
}
// all old admin menu delete
$output = $oMenuAdminModel->getMenuListByTitle('__XE_ADMIN__');
if(is_array($output))
{
foreach($output AS $key=>$value)
{
$oMenuAdminController->deleteMenu($value->menu_srl);
}
}
}
}
/* End of file admin.class.php */
/* Location: ./modules/admin/admin.class.php */
class_alias('Rhymix\Modules\Admin\Controllers\Base', 'Admin');

View file

@ -0,0 +1,8 @@
<?php
namespace Rhymix\Modules\Admin\Controllers;
class Base extends \ModuleObject
{
}

View file

@ -0,0 +1,63 @@
<?php
namespace Rhymix\Modules\Admin\Controllers;
use Rhymix\Framework\DB;
use Rhymix\Modules\Admin\Models\Favorite as FavoriteModel;
class Install extends Base
{
/**
* Install module
*
* @return void
*/
public function moduleInstall()
{
}
/**
* Check if update is necessary
*
* @return bool
*/
public function checkUpdate()
{
$oDB = DB::getInstance();
if (!$oDB->isColumnExists('admin_favorite', 'type'))
{
return true;
}
return false;
}
/**
* Update module
*
* @return void
*/
public function moduleUpdate()
{
$oDB = DB::getInstance();
if (!$oDB->isColumnExists('admin_favorite', 'type'))
{
$output = FavoriteModel::getFavorites();
$favorites = $output->get('favorites');
$oDB->dropColumn('admin_favorite', 'admin_favorite_srl');
$oDB->addColumn('admin_favorite', 'admin_favorite_srl', 'number', null, 0);
$oDB->addColumn('admin_favorite', 'type', 'varchar', 30, 'module');
if (is_array($favorites))
{
$oAdminAdminController = getAdminController('admin');
$oAdminAdminController->_deleteAllFavorite();
foreach($favorites as $value)
{
$oAdminAdminController->_insertFavorite(0, $value->module);
}
}
}
}
}

View file

@ -0,0 +1,353 @@
<?php
namespace Rhymix\Modules\Admin\Models;
use Context;
use FileHandler;
use MemberModel;
use MenuAdminModel;
use ModuleModel;
class AdminMenu
{
public const ADMIN_MENU_NAME = '__ADMINMENU_V17__';
public const DEFAULT_MENU_STRUCTURE = [
'dashboard' => [],
'menu' => [
'menu.siteMap',
'menu.siteDesign',
],
'user' => [
'member.userList',
'member.userSetting',
'member.userGroup',
'point.point',
],
'content' => [
'board.board',
'page.page',
'document.document',
'comment.comment',
'file.file',
'poll.poll',
'editor.editor',
'spamfilter.spamFilter',
'trash.trash',
],
'configuration' => [
'admin.adminConfigurationGeneral',
'admin.adminMenuSetup',
'module.filebox',
],
'advanced' => [
'autoinstall.easyInstall',
'layout.installedLayout',
'module.installedModule',
'addon.installedAddon',
'widget.installedWidget',
'module.multilingual',
'importer.importer',
'rss.rss',
],
];
public static function getAdminMenuName()
{
return self::ADMIN_MENU_NAME;
}
public static function getAdminMenuLang()
{
static $lang = null;
if ($lang === null)
{
$lang = \Rhymix\Framework\Cache::get('admin_menu_langs:' . Context::getLangType());
}
if ($lang === null)
{
$lang = [];
$installed_module_list = ModuleModel::getModulesXmlInfo();
foreach ($installed_module_list as $value)
{
$moduleActionInfo = ModuleModel::getModuleActionXml($value->module);
if (isset($moduleActionInfo->menu) && is_object($moduleActionInfo->menu))
{
foreach ($moduleActionInfo->menu as $key2 => $value2)
{
$lang[$key2] = $value2->title;
}
}
}
\Rhymix\Framework\Cache::set('admin_menu_langs:' . Context::getLangType(), $lang, 0, true);
}
return $lang;
}
public static function checkAdminMenu()
{
if (!Context::isInstalled())
{
return;
}
$oMenuAdminModel = MenuAdminModel::getInstance();
$output = $oMenuAdminModel->getMenuByTitle(self::ADMIN_MENU_NAME);
if (!$output->menu_srl)
{
self::createXeAdminMenu();
$output = $oMenuAdminModel->getMenuByTitle(self::ADMIN_MENU_NAME);
}
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);
}
self::_deleteOldAdminMenu();
$returnObj = new \stdClass;
$returnObj->menu_srl = $output->menu_srl;
$returnObj->php_file = FileHandler::getRealPath($output->php_file);
return $returnObj;
}
/**
* Regenerate xe admin default menu
* @return void
*/
public static function createXeAdminMenu()
{
//insert menu
$args = new \stdClass;
$args->title = self::ADMIN_MENU_NAME;
$menu_srl = $args->menu_srl = getNextSequence();
$args->listorder = $args->menu_srl * -1;
$output = executeQuery('menu.insertMenu', $args);
Context::set('admin_menu_srl', $menu_srl);
unset($args);
// gnb item create
foreach (array_keys(self::DEFAULT_MENU_STRUCTURE) as $value)
{
//insert menu item
$args = new \stdClass;
$args->menu_srl = $menu_srl;
$args->menu_item_srl = getNextSequence();
$args->name = '{$lang->menu_gnb[\'' . $value . '\']}';
if($value == 'dashboard')
{
$args->url = getUrl(['module' => 'admin']);
}
else
{
$args->url = '#';
}
$args->listorder = -1 * $args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);
}
$oMenuAdminModel = getAdminModel('menu');
$output = $oMenuAdminModel->getMenuItems($menu_srl, 0, ['menu_item_srl', 'name']);
if (is_array($output->data))
{
foreach ($output->data as $value)
{
preg_match('/\{\$lang->menu_gnb\[(.*?)\]\}/i', $value->name, $m);
$gnbDBList[$m[1]] = $value->menu_item_srl;
}
}
$output = MemberModel::getAdminGroup(['group_srl']);
$admin_group_srl = $output->group_srl;
// gnb common argument setting
$args = new \stdClass;
$args->menu_srl = $menu_srl;
$args->open_window = 'N';
$args->expand = 'N';
$args->normal_btn = '';
$args->hover_btn = '';
$args->active_btn = '';
$args->group_srls = $admin_group_srl;
$moduleActionInfo = array();
foreach (self::DEFAULT_MENU_STRUCTURE as $key => $items)
{
if (!$items)
{
continue;
}
foreach ($items as $item)
{
list($module_name, $menu_name) = explode('.', $item);
if (!isset($moduleActionInfo[$module_name]))
{
$moduleActionInfo[$module_name] = ModuleModel::getModuleActionXml($module_name);
}
$args->menu_item_srl = getNextSequence();
$args->parent_srl = $gnbDBList["'" . $key . "'"];
$args->name = '{$lang->menu_gnb_sub[\'' . $menu_name . '\']}';
$args->url = getUrl('', 'module', 'admin', 'act', $moduleActionInfo[$module_name]->menu->{$menu_name}->index);
$args->listorder = -1 * $args->menu_item_srl;
$output = executeQuery('menu.insertMenuItem', $args);
}
}
$oMenuAdminConroller = getAdminController('menu');
$oMenuAdminConroller->makeXmlFile($menu_srl);
// does not recreate lang cache sometimes
FileHandler::RemoveFilesInDir('./files/cache/lang');
FileHandler::RemoveFilesInDir('./files/cache/menu/admin_lang');
}
/**
* Return parent old menu key by child menu
*
* @return string
*/
protected static 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 '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';
}
}
/**
* Delete old admin menu
*/
protected static function _deleteOldAdminMenu()
{
$oMenuAdminModel = getAdminModel('menu');
$output = $oMenuAdminModel->getMenuByTitle(self::ADMIN_MENU_NAME);
$newAdminmenuSrl = $output->menu_srl;
$output = $oMenuAdminModel->getMenuItems($newAdminmenuSrl, 0);
$newAdminParentMenuList = array();
if (is_array($output->data))
{
foreach ($output->data as $value)
{
$tmp = explode('\'', $value->name);
$newAdminParentMenuList[$tmp[1]] = $value;
}
}
unset($output);
// old admin menu
$output = $oMenuAdminModel->getMenuByTitle('__XE_ADMIN__');
$menu_srl = $output->menu_srl ?? 0;
$oMenuAdminController = getAdminController('menu');
if ($menu_srl)
{
$output = $oMenuAdminModel->getMenuItems($menu_srl);
if (is_array($output->data))
{
$parentMenu = array();
foreach ($output->data as $menu_item)
{
if ($menu_item->parent_srl == 0)
{
$tmp = explode('\'', $menu_item->name);
$parentMenuKey = $tmp[1];
$parentMenu[$menu_item->menu_item_srl] = $parentMenuKey;
}
}
$isUserAddedMenuMoved = FALSE;
foreach ($output->data as $menu_item)
{
if ($menu_item->parent_srl != 0)
{
$tmp = explode('\'', $menu_item->name);
$menuKey = $tmp[1];
$result = self::_getOldGnbKey($menuKey);
if ($result === 'user_added_menu')
{
if ($parentMenu[$menu_item->parent_srl] == 'extensions')
{
$newParentItem = $newAdminParentMenuList['advanced'];
}
else
{
$newParentItem = $newAdminParentMenuList[$parentMenu[$menu_item->parent_srl]];
}
$menu_item->menu_srl = $newParentItem->menu_srl;
$menu_item->parent_srl = $newParentItem->menu_item_srl;
$output = executeQuery('menu.updateMenuItem', $menu_item);
$isUserAddedMenuMoved = true;
}
}
}
if ($isUserAddedMenuMoved)
{
$oMenuAdminController->makeXmlFile($newAdminmenuSrl);
}
}
}
// all old admin menu delete
$output = $oMenuAdminModel->getMenuListByTitle('__XE_ADMIN__');
if (is_array($output))
{
foreach ($output as $value)
{
$oMenuAdminController->deleteMenu($value->menu_srl);
}
}
}
}

View file

@ -0,0 +1,114 @@
<?php
namespace Rhymix\Modules\Admin\Models;
use BaseObject;
use ModuleModel;
use Rhymix\Framework\Helpers\DBResultHelper;
class Favorite
{
/**
* Get admin favorite list
*
* @param bool $add_module_info
* @return BaseObject
*/
public static function getFavorites($add_module_info = false)
{
$output = executeQueryArray('admin.getFavoriteList', []);
if (!$output->toBool())
{
return $output;
}
if (!$output->data)
{
return new BaseObject;
}
if ($add_module_info && is_array($output->data))
{
foreach ($output->data as $key => $value)
{
$module_info = ModuleModel::getModuleInfoXml($value->module);
$output->data[$key]->admin_index_act = $module_info->admin_index_act;
$output->data[$key]->title = $module_info->title;
}
}
$result = new BaseObject;
$result->add('favoriteList', $output->data);
return $result;
}
/**
* Check if a module is already favorite
*
* @param string $module
* @return BaseObject
*/
public static function isFavorite($module)
{
$output = executeQuery('admin.getFavorite', ['module' => $module]);
if(!$output->toBool())
{
return $output;
}
$result = new BaseObject;
if ($output->data)
{
$result->add('result', true);
$result->add('favoriteSrl', $output->data->admin_favorite_srl);
}
else
{
$result->add('result', false);
}
return $result;
}
/**
* Insert a favorite.
*
* @param string $module
* @param string $type
* @return DBResultHelper
*/
public static function insertFavorite(string $module, string $type = 'module'): DBResultHelper
{
$args = new \stdClass;
$args->admin_favorite_srl = getNextSequence();
$args->module = $module;
$args->type = $type;
$output = executeQuery('admin.insertFavorite', $args);
return $output;
}
/**
* Delete a favorite.
*
* @param int $favorite_srl
* @return DBResultHelper
*/
public static function deleteFavorite(int $favorite_srl): DBResultHelper
{
$args = new \stdClass;
$args->admin_favorite_srl = $favorite_srl;
$output = executeQuery('admin.deleteFavorite', $args);
return $output;
}
/**
* Delete all favorites.
*
* @return DBResultHelper
*/
public static function deleteAllFavorites(): DBResultHelper
{
$args = new \stdClass;
$output = executeQuery('admin.deleteAllFavorite', $args);
return $output;
}
}

View file

@ -0,0 +1,84 @@
<?php
namespace Rhymix\Modules\Admin\Models;
use Rhymix\Framework\Storage;
class Icon
{
/**
* Get favicon URL for a domain.
*
* @param int $domain_srl
* @return string|false
*/
public static function getFaviconUrl($domain_srl = 0)
{
return self::getIconUrl($domain_srl, 'favicon.ico');
}
/**
* Get mobile icon URL for a domain.
*
* @param int $domain_srl
* @return string|false
*/
public static function getMobiconUrl($domain_srl = 0)
{
return self::getIconUrl($domain_srl, 'mobicon.png');
}
/**
* Get the default image for a domain.
*
* @param int $domain_srl
* @param int &$width
* @param int &$height
* @return string|false
*/
public static function getDefaultImageUrl($domain_srl = 0, &$width = 0, &$height = 0)
{
$domain_srl = intval($domain_srl);
if ($domain_srl)
{
$virtual_site = $domain_srl . '/';
}
else
{
$virtual_site = '';
}
$info = Storage::readPHPData(\RX_BASEDIR . 'files/attach/xeicon/' . $virtual_site . 'default_image.php');
if ($info && Storage::exists(\RX_BASEDIR . $info['filename']))
{
$width = $info['width'];
$height = $info['height'];
return \RX_BASEURL . $info['filename'] . '?' . date('YmdHis', filemtime(\RX_BASEDIR . $info['filename']));
}
else
{
return false;
}
}
/**
* Check if an icon file exists, and if so, return its URL.
*
* @param int $domain_srl
* @param string $filename
* @return string|false
*/
public static function getIconUrl($domain_srl, $filename)
{
$domain_srl = intval($domain_srl);
$filename = 'files/attach/xeicon/' . ($domain_srl ? ($domain_srl . '/') : '') . $filename;
if (Storage::exists(\RX_BASEDIR . $filename))
{
return \RX_BASEURL . $filename . '?' . date('YmdHis', filemtime(\RX_BASEDIR . $filename));
}
else
{
return false;
}
}
}

View file

@ -3,9 +3,9 @@
<table name="admin_favorite" />
</tables>
<columns>
<column name="admin_favorite_srl" var="adminFavoriteSrl" filter="number" notnull="notnull" />
<column name="site_srl" var="site_srl" default="0" />
<column name="admin_favorite_srl" var="admin_favorite_srl" filter="number" notnull="notnull" />
<column name="site_srl" var="site_srl" filter="number" default="0" />
<column name="module" var="module" notnull="notnull" />
<column name="type" var="favoriteType" default="module" />
<column name="type" var="type" default="module" />
</columns>
</query>