Example #1
0
 /**
  * Check if a row of today's counter status exists 
  *
  * @param integer $site_srl Site_srl
  * @return bool
  */
 function isInsertedTodayStatus($site_srl = 0)
 {
     $args = new stdClass();
     $args->regdate = date('Ymd');
     $cache_key = 'counter:insertedTodayStatus:' . $site_srl . '_' . $args->regdate;
     $insertedTodayStatus = Rhymix\Framework\Cache::get($cache_key);
     if (!$insertedTodayStatus) {
         if ($site_srl) {
             $args->site_srl = $site_srl;
             $output = executeQuery('counter.getSiteTodayStatus', $args);
         } else {
             $output = executeQuery('counter.getTodayStatus', $args);
         }
         $insertedTodayStatus = !!$output->data->count;
         if ($insertedTodayStatus) {
             Rhymix\Framework\Cache::set($cache_key, true, 0, true);
             $_old_date = date('Ymd', strtotime('-1 day'));
             Rhymix\Framework\Cache::delete('counter:insertedTodayStatus:' . $site_srl . '_' . $_old_date);
         }
     }
     return $insertedTodayStatus;
 }
Example #2
0
 /**
  * Display Advanced Settings page
  * @return void
  */
 function dispAdminConfigAdvanced()
 {
     // Default URL
     $default_url = Rhymix\Framework\Config::get('url.default');
     if (strpos($default_url, 'xn--') !== FALSE) {
         $default_url = Context::decodeIdna($default_url);
     }
     Context::set('default_url', $default_url);
     // SSL and ports
     Context::set('use_ssl', Rhymix\Framework\Config::get('url.ssl') ?: 'none');
     Context::set('http_port', Rhymix\Framework\Config::get('url.http_port'));
     Context::set('https_port', Rhymix\Framework\Config::get('url.https_port'));
     // Object cache
     $object_cache_types = Rhymix\Framework\Cache::getSupportedDrivers();
     $object_cache_type = Rhymix\Framework\Config::get('cache.type');
     if ($object_cache_type) {
         $cache_default_ttl = Rhymix\Framework\Config::get('cache.ttl');
         $cache_servers = Rhymix\Framework\Config::get('cache.servers');
     } else {
         $cache_config = array_first(Rhymix\Framework\Config::get('cache'));
         if ($cache_config) {
             $object_cache_type = preg_replace('/^memcache$/', 'memcached', preg_replace('/:.+$/', '', $cache_config));
         } else {
             $object_cache_type = 'dummy';
         }
         $cache_default_ttl = 86400;
         $cache_servers = Rhymix\Framework\Config::get('cache');
     }
     Context::set('object_cache_types', $object_cache_types);
     Context::set('object_cache_type', $object_cache_type);
     Context::set('cache_default_ttl', $cache_default_ttl);
     if ($cache_servers) {
         Context::set('object_cache_host', parse_url(array_first($cache_servers), PHP_URL_HOST) ?: null);
         Context::set('object_cache_port', parse_url(array_first($cache_servers), PHP_URL_PORT) ?: null);
         $cache_dbnum = preg_replace('/[^\\d]/', '', parse_url(array_first($cache_servers), PHP_URL_PATH));
         Context::set('object_cache_dbnum', $cache_dbnum === '' ? 1 : intval($cache_dbnum));
     } else {
         Context::set('object_cache_host', null);
         Context::set('object_cache_port', null);
         Context::set('object_cache_dbnum', 1);
     }
     // Thumbnail settings
     $oDocumentModel = getModel('document');
     $config = $oDocumentModel->getDocumentConfig();
     Context::set('thumbnail_type', $config->thumbnail_type ?: 'crop');
     // Other settings
     Context::set('use_rewrite', Rhymix\Framework\Config::get('use_rewrite'));
     Context::set('use_sso', Rhymix\Framework\Config::get('use_sso'));
     Context::set('delay_session', Rhymix\Framework\Config::get('session.delay'));
     Context::set('use_db_session', Rhymix\Framework\Config::get('session.use_db'));
     Context::set('minify_scripts', Rhymix\Framework\Config::get('view.minify_scripts'));
     Context::set('concat_scripts', Rhymix\Framework\Config::get('view.concat_scripts'));
     Context::set('use_server_push', Rhymix\Framework\Config::get('view.server_push'));
     Context::set('use_gzip', Rhymix\Framework\Config::get('view.use_gzip'));
     $this->setTemplateFile('config_advanced');
 }
Example #3
0
 /**
  * Get one of layout information created in the DB
  * Return DB info + XML info of the generated layout
  * @param int $layout_srl
  * @return object info of layout
  */
 function getLayout($layout_srl)
 {
     // Get information from cache
     $layout_info = Rhymix\Framework\Cache::get("layout:{$layout_srl}");
     if ($layout_info !== null) {
         return $layout_info;
     }
     // Get information from the DB
     $args = new stdClass();
     $args->layout_srl = $layout_srl;
     $output = executeQuery('layout.getLayout', $args);
     if (!$output->data) {
         return;
     }
     // Return xml file informaton after listing up the layout and extra_vars
     $layout_info = $this->getLayoutInfo($layout, $output->data, $output->data->layout_type);
     // Store in cache
     Rhymix\Framework\Cache::set("layout:{$layout_srl}", $layout_info);
     return $layout_info;
 }
 /**
  * Delete layout xml cache file
  * @param int $layout_srl
  * @return Object
  */
 function deleteLayout($layout_srl, $force = FALSE)
 {
     $oLayoutModel = getModel('layout');
     if ($force) {
         $layoutInfo = $oLayoutModel->getLayout($layout_srl);
         if ($layoutInfo) {
             $layoutList = $oLayoutModel->getLayoutInstanceList($layoutInfo->site_srl, $layoutInfo->layout_type, $layoutInfo->layout, array('layout_srl', 'layout'));
             if (count($layoutList) <= 1) {
                 // uninstall package
                 $path = $layoutInfo->path;
                 $oAutoinstallModel = getModel('autoinstall');
                 $packageSrl = $oAutoinstallModel->getPackageSrlByPath($path);
                 $oAutoinstallAdminController = getAdminController('autoinstall');
                 if ($packageSrl) {
                     $output = $oAutoinstallAdminController->uninstallPackageByPackageSrl($packageSrl);
                 } else {
                     $output = $oAutoinstallAdminController->uninstallPackageByPath($path);
                 }
                 if (!$output->toBool()) {
                     return new Object(-1, $output->message);
                 }
             }
         }
     }
     $path = $oLayoutModel->getUserLayoutPath($layout_srl);
     FileHandler::removeDir($path);
     $layout_file = $oLayoutModel->getUserLayoutHtml($layout_srl);
     FileHandler::removeFile($layout_file);
     // Delete Layout
     $args = new stdClass();
     $args->layout_srl = $layout_srl;
     $output = executeQuery("layout.deleteLayout", $args);
     Rhymix\Framework\Cache::delete('layout:' . $args->layout_srl);
     if (!$output->toBool()) {
         return $output;
     }
     return new Object(0, 'success_deleted');
 }
 /**
  * Control the order of extra variables
  * @return void|object
  */
 function procDocumentAdminMoveExtraVar()
 {
     $type = Context::get('type');
     $module_srl = Context::get('module_srl');
     $var_idx = Context::get('var_idx');
     if (!$type || !$module_srl || !$var_idx) {
         return new Object(-1, 'msg_invalid_request');
     }
     $oModuleModel = getModel('module');
     $module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl);
     if (!$module_info->module_srl) {
         return new Object(-1, 'msg_invalid_request');
     }
     $oDocumentModel = getModel('document');
     $extra_keys = $oDocumentModel->getExtraKeys($module_srl);
     if (!$extra_keys[$var_idx]) {
         return new Object(-1, 'msg_invalid_request');
     }
     if ($type == 'up') {
         $new_idx = $var_idx - 1;
     } else {
         $new_idx = $var_idx + 1;
     }
     if ($new_idx < 1) {
         return new Object(-1, 'msg_invalid_request');
     }
     $args = new stdClass();
     $args->module_srl = $module_srl;
     $args->var_idx = $new_idx;
     $output = executeQuery('document.getDocumentExtraKeys', $args);
     if (!$output->toBool()) {
         return $output;
     }
     if (!$output->data) {
         return new Object(-1, 'msg_invalid_request');
     }
     unset($args);
     // update immediately if there is no idx to change
     if (!$extra_keys[$new_idx]) {
         $args = new stdClass();
         $args->module_srl = $module_srl;
         $args->var_idx = $var_idx;
         $args->new_idx = $new_idx;
         $output = executeQuery('document.updateDocumentExtraKeyIdx', $args);
         if (!$output->toBool()) {
             return $output;
         }
         $output = executeQuery('document.updateDocumentExtraVarIdx', $args);
         if (!$output->toBool()) {
             return $output;
         }
         // replace if exists
     } else {
         $args = new stdClass();
         $args->module_srl = $module_srl;
         $args->var_idx = $new_idx;
         $args->new_idx = -10000;
         $output = executeQuery('document.updateDocumentExtraKeyIdx', $args);
         if (!$output->toBool()) {
             return $output;
         }
         $output = executeQuery('document.updateDocumentExtraVarIdx', $args);
         if (!$output->toBool()) {
             return $output;
         }
         $args->var_idx = $var_idx;
         $args->new_idx = $new_idx;
         $output = executeQuery('document.updateDocumentExtraKeyIdx', $args);
         if (!$output->toBool()) {
             return $output;
         }
         $output = executeQuery('document.updateDocumentExtraVarIdx', $args);
         if (!$output->toBool()) {
             return $output;
         }
         $args->var_idx = -10000;
         $args->new_idx = $var_idx;
         $output = executeQuery('document.updateDocumentExtraKeyIdx', $args);
         if (!$output->toBool()) {
             return $output;
         }
         $output = executeQuery('document.updateDocumentExtraVarIdx', $args);
         if (!$output->toBool()) {
             return $output;
         }
     }
     Rhymix\Framework\Cache::delete("site_and_module:module_document_extra_keys:{$module_srl}");
 }
Example #6
0
 /**
  * Make invalid group key (like delete group key)
  *
  * @param string $keyGroupName Group name
  * @return void
  */
 public function invalidateGroupKey($keyGroupName)
 {
     return Rhymix\Framework\Cache::clearGroup($keyGroupName);
 }
 /**
  * @brief List permissions of the module
  */
 function procModuleAdminModuleGrantSetup()
 {
     $module_srls = Context::get('module_srls');
     if (!$module_srls) {
         return new Object(-1, 'msg_invalid_request');
     }
     $modules = explode(',', $module_srls);
     if (count($modules) < 1) {
         return new Object(-1, 'msg_invalid_request');
     }
     $oModuleController = getController('module');
     $oModuleModel = getModel('module');
     $columnList = array('module_srl', 'module');
     $module_info = $oModuleModel->getModuleInfoByModuleSrl($modules[0], $columnList);
     $xml_info = $oModuleModel->getModuleActionXml($module_info->module);
     $grant_list = $xml_info->grant;
     $grant_list->access = new stdClass();
     $grant_list->access->default = 'guest';
     $grant_list->manager = new stdClass();
     $grant_list->manager->default = 'manager';
     $grant = new stdClass();
     foreach ($grant_list as $grant_name => $grant_info) {
         // Get the default value
         $default = Context::get($grant_name . '_default');
         // -1 = Sign only, 0 = all users
         $grant->{$grant_name} = array();
         if (strlen($default)) {
             $grant->{$grant_name}[] = $default;
             continue;
             // Users in a particular group
         } else {
             $group_srls = Context::get($grant_name);
             if ($group_srls) {
                 if (!is_array($group_srls)) {
                     if (strpos($group_srls, '|@|') !== false) {
                         $group_srls = explode('|@|', $group_srls);
                     } elseif (strpos($group_srls, ',') !== false) {
                         $group_srls = explode(',', $group_srls);
                     } else {
                         $group_srls = array($group_srls);
                     }
                 }
                 $grant->{$grant_name} = $group_srls;
             }
             continue;
         }
         $grant->{$group_srls} = array();
         // dead code, too??
     }
     // Stored in the DB
     foreach ($modules as $module_srl) {
         $args = new stdClass();
         $args->module_srl = $module_srl;
         $output = executeQuery('module.deleteModuleGrants', $args);
         if (!$output->toBool()) {
             continue;
         }
         // Permissions stored in the DB
         foreach ($grant as $grant_name => $group_srls) {
             foreach ($group_srls as $val) {
                 $args = new stdClass();
                 $args->module_srl = $module_srl;
                 $args->name = $grant_name;
                 $args->group_srl = $val;
                 $output = executeQuery('module.insertModuleGrant', $args);
                 if (!$output->toBool()) {
                     return $output;
                 }
             }
         }
     }
     Rhymix\Framework\Cache::delete("site_and_module:module_grants:{$module_srl}");
     $this->setMessage('success_registed');
     if (!in_array(Context::getRequestMethod(), array('XMLRPC', 'JSON'))) {
         if (Context::get('success_return_url')) {
             $this->setRedirectUrl(Context::get('success_return_url'));
         } else {
             global $lang;
             htmlHeader();
             alertScript($lang->success_registed);
             closePopupScript();
             htmlFooter();
             Context::close();
             exit;
         }
     }
 }
Example #8
0
 /**
  * @brief Get a list of groups
  */
 function getGroups($site_srl = 0)
 {
     if (!$GLOBALS['__group_info__'][$site_srl]) {
         $result = array();
         if (!isset($site_srl)) {
             $site_srl = 0;
         }
         $group_list = Rhymix\Framework\Cache::get("member:member_groups:site:{$site_srl}");
         if (!$group_list) {
             $args = new stdClass();
             $args->site_srl = $site_srl;
             $args->sort_index = 'list_order';
             $args->order_type = 'asc';
             $output = executeQueryArray('member.getGroups', $args);
             $group_list = $output->data;
             Rhymix\Framework\Cache::set("member:member_groups:site:{$site_srl}", $group_list, 0, true);
         }
         if (!$group_list) {
             return array();
         }
         foreach ($group_list as $val) {
             $result[$val->group_srl] = $val;
         }
         $GLOBALS['__group_info__'][$site_srl] = $result;
     }
     return $GLOBALS['__group_info__'][$site_srl];
 }
Example #9
0
 /**
  * Execute update
  * @return Object
  */
 function moduleUpdate()
 {
     $oDB =& DB::getInstance();
     // 2009. 02. 11 Add site_srl to menu table
     if (!$oDB->isColumnExists('layouts', 'site_srl')) {
         $oDB->addColumn('layouts', 'site_srl', 'number', 11, 0, true);
     }
     // 2009. 02. 26 Move the previous layout for faceoff
     $oLayoutModel = getModel('layout');
     $files = FileHandler::readDir('./files/cache/layout');
     for ($i = 0, $c = count($files); $i < $c; $i++) {
         $filename = $files[$i];
         if (!preg_match('/([0-9]+)\\.html/i', $filename, $match)) {
             continue;
         }
         $layout_srl = $match[1];
         if (!$layout_srl) {
             continue;
         }
         $path = $oLayoutModel->getUserLayoutPath($layout_srl);
         if (!is_dir($path)) {
             FileHandler::makeDir($path);
         }
         FileHandler::copyFile('./files/cache/layout/' . $filename, $path . 'layout.html');
         @unlink('./files/cache/layout/' . $filename);
     }
     if (!$oDB->isColumnExists('layouts', 'layout_type')) {
         $oDB->addColumn('layouts', 'layout_type', 'char', 1, 'P', true);
     }
     $args = new stdClass();
     $args->layout = '.';
     $output = executeQueryArray('layout.getLayoutDotList', $args);
     if ($output->data && count($output->data) > 0) {
         foreach ($output->data as $layout) {
             $layout_path = explode('.', $layout->layout);
             if (count($layout_path) != 2) {
                 continue;
             }
             if (is_dir(sprintf(_XE_PATH_ . 'themes/%s/layouts/%s', $layout_path[0], $layout_path[1]))) {
                 $args->layout = implode('|@|', $layout_path);
                 $args->layout_srl = $layout->layout_srl;
                 $output = executeQuery('layout.updateLayout', $args);
                 Rhymix\Framework\Cache::delete('layout:' . $args->layout_srl);
             }
         }
     }
     return new Object(0, 'success_updated');
 }
Example #10
0
 /**
  * insert menu when not linked module.
  *
  * @param array $moduleInfos
  * @param int $menuSrl
  *
  * @return Object
  */
 function updateLinkModule($moduleInfos, $menuSrl)
 {
     if (!$moduleInfos || !is_array($moduleInfos) || count($moduleInfos) == 0 || $menuSrl == 0) {
         return new Object(-1, 'msg_invalid_request');
     }
     foreach ($moduleInfos as $moduleInfo) {
         // search menu.
         $args = new stdClass();
         $args->url = $moduleInfo->mid;
         $args->site_srl = $moduleInfo->site_srl;
         $args->is_shortcut = 'N';
         $output = executeQuery('menu.getMenuItemByUrl', $args);
         if ($output->toBool() && $output->data) {
             $moduleInfo->menu_srl = $output->data->menu_srl;
         } else {
             // create menu item.
             $item_args = new stdClass();
             $item_args->menu_srl = $menuSrl;
             $item_args->url = $moduleInfo->mid;
             $item_args->name = $moduleInfo->mid;
             $item_args->menu_item_srl = getNextSequence();
             $item_args->listorder = -1 * $item_args->menu_item_srl;
             $output = executeQuery('menu.insertMenuItem', $item_args);
             if (!$output->toBool()) {
                 return $output;
             }
             $moduleInfo->menu_srl = $menuSrl;
         }
         $output = executeQuery('module.updateModule', $moduleInfo);
         return $output;
     }
     Rhymix\Framework\Cache::clearGroup('site_and_module');
     $oMenuAdminController = getAdminController('menu');
     $oMenuAdminController->makeXmlFile($menuSrl);
     return new Object();
 }
Example #11
0
 /**
  * @brief Reset points for each module
  */
 function procPointAdminReset()
 {
     $module_srl = Context::get('module_srls');
     if (!$module_srl) {
         return new Object(-1, 'msg_invalid_request');
     }
     // In case of batch configuration of several modules
     if (preg_match('/^([0-9,]+)$/', $module_srl)) {
         $module_srl = explode(',', $module_srl);
     } else {
         $module_srl = array($module_srl);
     }
     // Save configurations
     $oModuleController = getController('module');
     for ($i = 0; $i < count($module_srl); $i++) {
         $srl = trim($module_srl[$i]);
         if (!$srl) {
             continue;
         }
         $args = new stdClass();
         $args->module = 'point';
         $args->module_srl = $srl;
         executeQuery('module.deleteModulePartConfig', $args);
     }
     Rhymix\Framework\Cache::clearGroup('site_and_module');
     $this->setMessage('success_updated');
 }
Example #12
0
 /**
  * Function to retrieve the key values of the extended variable document
  * $Form_include: writing articles whether to add the necessary extensions of the variable input form
  * @param int $module_srl
  * @return array
  */
 function getExtraKeys($module_srl)
 {
     if (!isset($GLOBALS['XE_EXTRA_KEYS'][$module_srl])) {
         $keys = Rhymix\Framework\Cache::get("site_and_module:module_document_extra_keys:{$module_srl}");
         $oExtraVar = ExtraVar::getInstance($module_srl);
         if ($keys === null) {
             $obj = new stdClass();
             $obj->module_srl = $module_srl;
             $obj->sort_index = 'var_idx';
             $obj->order = 'asc';
             $output = executeQueryArray('document.getDocumentExtraKeys', $obj);
             // correcting index order
             $isFixed = FALSE;
             if (is_array($output->data)) {
                 $prevIdx = 0;
                 foreach ($output->data as $no => $value) {
                     // case first
                     if ($prevIdx == 0 && $value->idx != 1) {
                         $args = new stdClass();
                         $args->module_srl = $module_srl;
                         $args->var_idx = $value->idx;
                         $args->new_idx = 1;
                         executeQuery('document.updateDocumentExtraKeyIdx', $args);
                         executeQuery('document.updateDocumentExtraVarIdx', $args);
                         $prevIdx = 1;
                         $isFixed = TRUE;
                         continue;
                     }
                     // case others
                     if ($prevIdx > 0 && $prevIdx + 1 != $value->idx) {
                         $args = new stdClass();
                         $args->module_srl = $module_srl;
                         $args->var_idx = $value->idx;
                         $args->new_idx = $prevIdx + 1;
                         executeQuery('document.updateDocumentExtraKeyIdx', $args);
                         executeQuery('document.updateDocumentExtraVarIdx', $args);
                         $prevIdx += 1;
                         $isFixed = TRUE;
                         continue;
                     }
                     $prevIdx = $value->idx;
                 }
             }
             if ($isFixed) {
                 $output = executeQueryArray('document.getDocumentExtraKeys', $obj);
             }
             $oExtraVar->setExtraVarKeys($output->data);
             $keys = $oExtraVar->getExtraVars();
             if (!$keys) {
                 $keys = array();
             }
             Rhymix\Framework\Cache::set("site_and_module:module_document_extra_keys:{$module_srl}", $keys, 0, true);
         }
         $GLOBALS['XE_EXTRA_KEYS'][$module_srl] = $keys;
     }
     return $GLOBALS['XE_EXTRA_KEYS'][$module_srl];
 }
Example #13
0
                }
                $filename .= isset($matches[3]) && $matches[3] ? '.' . strtolower($matches[3]) : '.class';
                $filename .= '.php';
            }
    }
    if ($filename && file_exists($filename)) {
        include $filename;
    }
});
/**
 * Also include the Composer autoloader.
 */
require_once RX_BASEDIR . 'vendor/autoload.php';
/**
 * Load system configuration.
 */
Rhymix\Framework\Config::init();
/**
 * Install the debugger.
 */
Rhymix\Framework\Debug::registerErrorHandlers(error_reporting());
/**
 * Set the internal timezone.
 */
$internal_timezone = Rhymix\Framework\DateTime::getTimezoneNameByOffset(config('locale.internal_timezone'));
date_default_timezone_set($internal_timezone);
/**
 * Initialize the cache handler.
 */
Rhymix\Framework\Cache::init(Rhymix\Framework\Config::get('cache'));
Example #14
0
 /**
  * @brief Get module grants
  */
 function getModuleGrants($module_srl)
 {
     $output = Rhymix\Framework\Cache::get("site_and_module:module_grants:{$module_srl}");
     if ($output === null) {
         $args = new stdClass();
         $args->module_srl = $module_srl;
         $output = executeQueryArray('module.getModuleGrants', $args);
         Rhymix\Framework\Cache::set("site_and_module:module_grants:{$module_srl}", $output, 0, true);
     }
     return $output;
 }
Example #15
0
 /**
  * @brief Clear widget cache files of the specified page
  */
 function procPageAdminRemoveWidgetCache()
 {
     $module_srl = Context::get('module_srl');
     if (!$module_srl) {
         return;
     }
     $oModuleModel = getModel('module');
     $columnList = array('module_srl', 'content');
     $module_info = $oModuleModel->getModuleInfoByModuleSrl($module_srl, $columnList);
     $content = $module_info->content;
     // widget controller re-run of the cache files
     $oWidgetController = getController('widget');
     $oWidgetController->recompileWidget($content);
     if ($module_info->page_type == 'WIDGET') {
         $path = _XE_PATH_ . 'files/cache/page/';
         $cache_files = FileHandler::readDir($path, '/^' . $module_info->module_srl . '\\./');
         foreach ($cache_files as $file_name) {
             FileHandler::removeFile($path . $module_info->module_srl . '.' . $file_name);
         }
     } else {
         if ($module_info->page_type == 'OUTSIDE') {
             $path = _XE_PATH_ . 'files/cache/page/';
             $cache_files = FileHandler::readDir($path, '/^' . $module_info->module_srl . './');
             foreach ($cache_files as $file_name) {
                 FileHandler::removeFile($path . $module_info->module_srl . '.' . $file_name);
             }
         }
     }
     Rhymix\Framework\Cache::delete('site_and_module:mid_info:' . $module_info->module_srl);
 }
Example #16
0
 /**
  * Add OpenGraph metadata tags.
  * 
  * @param string $output
  * @return void
  */
 function _addOpenGraphMetadata()
 {
     // Get information about the current request.
     $page_type = 'website';
     $current_module_info = Context::get('current_module_info');
     $site_module_info = Context::get('site_module_info');
     $document_srl = Context::get('document_srl');
     if ($document_srl) {
         $oDocument = Context::get('oDocument') ?: getModel('document')->getDocument($document_srl, false, false);
         if ($oDocument instanceof documentItem && $oDocument->document_srl == $document_srl && !$oDocument->isSecret()) {
             $page_type = 'article';
         }
     }
     // Add basic metadata.
     Context::addOpenGraphData('og:title', Context::getBrowserTitle());
     Context::addOpenGraphData('og:site_name', Context::getSiteTitle());
     if ($page_type === 'article' && config('seo.og_extract_description')) {
         $description = trim(utf8_normalize_spaces($oDocument->getContentText(200)));
     } else {
         $description = Context::getMetaTag('description');
     }
     Context::addOpenGraphData('og:description', $description);
     Context::addMetaTag('description', $description);
     // Add metadata about this page.
     Context::addOpenGraphData('og:type', $page_type);
     if ($page_type === 'article') {
         $canonical_url = getFullUrl('', 'mid', $current_module_info->mid, 'document_srl', $document_srl);
     } elseif (($page = Context::get('page')) > 1) {
         $canonical_url = getFullUrl('', 'mid', $current_module_info->mid, 'page', $page);
     } elseif ($current_module_info->module_srl == $site_module_info->module_srl) {
         $canonical_url = getFullUrl('');
     } else {
         $canonical_url = getFullUrl('', 'mid', $current_module_info->mid);
     }
     Context::addOpenGraphData('og:url', $canonical_url);
     Context::setCanonicalURL($canonical_url);
     // Add metadata about the locale.
     $lang_type = Context::getLangType();
     $locales = (include \RX_BASEDIR . 'common/defaults/locales.php');
     if (isset($locales[$lang_type])) {
         Context::addOpenGraphData('og:locale', $locales[$lang_type]['locale']);
     }
     if ($page_type === 'article' && $oDocument->getLangCode() !== $lang_type && isset($locales[$oDocument->getLangCode()])) {
         Context::addOpenGraphData('og:locale:alternate', $locales[$oDocument->getLangCode()]);
     }
     // Add image.
     if ($page_type === 'article' && config('seo.og_extract_images')) {
         if (($document_images = Rhymix\Framework\Cache::get("seo:document_images:{$document_srl}")) === null) {
             $document_images = array();
             if ($oDocument->hasUploadedFiles()) {
                 foreach ($oDocument->getUploadedFiles() as $file) {
                     if ($file->isvalid !== 'Y' || !preg_match('/\\.(?:bmp|gif|jpe?g|png)$/i', $file->uploaded_filename)) {
                         continue;
                     }
                     list($width, $height) = @getimagesize($file->uploaded_filename);
                     if ($width < 100 && $height < 100) {
                         continue;
                     }
                     $image = array('filepath' => $file->uploaded_filename, 'width' => $width, 'height' => $height);
                     if ($file->cover_image === 'Y') {
                         array_unshift($document_images, $image);
                     } else {
                         $document_images[] = $image;
                     }
                     if (count($document_images) >= 1) {
                         break;
                     }
                 }
             }
             Rhymix\Framework\Cache::set("seo:document_images:{$document_srl}", $document_images, 0, true);
         }
     } else {
         $document_images = null;
     }
     if ($document_images) {
         $first_image = reset($document_images);
         $first_image['filepath'] = preg_replace('/^.\\/files\\//', \RX_BASEURL . 'files/', $first_image['filepath']);
         Context::addOpenGraphData('og:image', Rhymix\Framework\URL::getCurrentDomainURL($first_image['filepath']));
         Context::addOpenGraphData('og:image:width', $first_image['width']);
         Context::addOpenGraphData('og:image:height', $first_image['height']);
     } elseif ($default_image = getAdminModel('admin')->getSiteDefaultImageUrl($width, $height)) {
         Context::addOpenGraphData('og:image', Rhymix\Framework\URL::getCurrentDomainURL($default_image));
         if ($width && $height) {
             Context::addOpenGraphData('og:image:width', $width);
             Context::addOpenGraphData('og:image:height', $height);
         }
     }
     // Add datetime for articles.
     if ($page_type === 'article' && config('seo.og_use_timestamps')) {
         Context::addOpenGraphData('article:published_time', $oDocument->getRegdate('c'));
         Context::addOpenGraphData('article:modified_time', $oDocument->getUpdate('c'));
     }
 }
 /**
  * Delete all comments of the specific module
  * @return object
  */
 function deleteModuleComments($module_srl)
 {
     $args = new stdClass();
     $args->module_srl = $module_srl;
     $output = executeQuery('comment.deleteModuleComments', $args);
     if (!$output->toBool()) {
         return $output;
     }
     $output = executeQuery('comment.deleteModuleCommentsList', $args);
     //remove from cache
     Rhymix\Framework\Cache::clearGroup('newestCommentsList');
     return $output;
 }
Example #18
0
 function updateModuleInSites($site_srls, $args)
 {
     $args = new stdClass();
     $args->site_srls = $site_srls;
     $output = executeQuery('module.updateModuleInSites', $args);
     Rhymix\Framework\Cache::clearGroup('site_and_module');
     return $output;
 }
Example #19
0
 /**
  * Delete cached group data
  * @return void
  */
 function _deleteMemberGroupCache($site_srl = 0)
 {
     //remove from cache
     Rhymix\Framework\Cache::clearGroup('member');
 }
Example #20
0
 /**
  * Update advanced configuration.
  */
 function procAdminUpdateAdvanced()
 {
     $vars = Context::getRequestVars();
     // Default URL
     $default_url = rtrim(trim($vars->default_url), '/\\') . '/';
     if (!filter_var($default_url, FILTER_VALIDATE_URL) || !preg_match('@^https?://@', $default_url)) {
         return new Object(-1, 'msg_invalid_default_url');
     }
     if (parse_url($default_url, PHP_URL_PATH) !== RX_BASEURL) {
         return new Object(-1, 'msg_invalid_default_url');
     }
     // SSL and ports
     if ($vars->http_port == 80) {
         $vars->http_port = null;
     }
     if ($vars->https_port == 443) {
         $vars->https_port = null;
     }
     $use_ssl = $vars->use_ssl ?: 'none';
     // Check if all URL configuration is consistent
     if ($use_ssl === 'always' && !preg_match('@^https://@', $default_url)) {
         return new Object(-1, 'msg_default_url_ssl_inconsistent');
     }
     if ($vars->http_port && preg_match('@^http://@', $default_url) && parse_url($default_url, PHP_URL_PORT) != $vars->http_port) {
         return new Object(-1, 'msg_default_url_http_port_inconsistent');
     }
     if ($vars->https_port && preg_match('@^https://@', $default_url) && parse_url($default_url, PHP_URL_PORT) != $vars->https_port) {
         return new Object(-1, 'msg_default_url_https_port_inconsistent');
     }
     // Set all URL configuration
     Rhymix\Framework\Config::set('url.default', $default_url);
     Rhymix\Framework\Config::set('url.http_port', $vars->http_port ?: null);
     Rhymix\Framework\Config::set('url.https_port', $vars->https_port ?: null);
     Rhymix\Framework\Config::set('url.ssl', $use_ssl);
     getController('module')->updateSite((object) array('site_srl' => 0, 'domain' => preg_replace('@^https?://@', '', $default_url)));
     // Object cache
     if ($vars->object_cache_type) {
         if ($vars->object_cache_type === 'memcached' || $vars->object_cache_type === 'redis') {
             $cache_servers = array($vars->object_cache_type . '://' . $vars->object_cache_host . ':' . intval($vars->object_cache_port));
             if ($vars->object_cache_type === 'redis') {
                 $cache_servers[0] .= '/' . intval($vars->object_cache_dbnum);
             }
         } else {
             $cache_servers = array();
         }
         if (!Rhymix\Framework\Cache::getDriverInstance($vars->object_cache_type, $cache_servers)) {
             return new Object(-1, 'msg_cache_handler_not_supported');
         }
         Rhymix\Framework\Config::set('cache', array('type' => $vars->object_cache_type, 'ttl' => intval($vars->cache_default_ttl ?: 86400), 'servers' => $cache_servers));
     } else {
         Rhymix\Framework\Config::set('cache', array());
     }
     // Thumbnail settings
     $args = new stdClass();
     $args->thumbnail_type = $vars->thumbnail_type === 'ratio' ? 'ratio' : 'crop';
     $oModuleController = getController('module');
     $oModuleController->insertModuleConfig('document', $args);
     // Other settings
     Rhymix\Framework\Config::set('use_rewrite', $vars->use_rewrite === 'Y');
     Rhymix\Framework\Config::set('use_sso', $vars->use_sso === 'Y');
     Rhymix\Framework\Config::set('session.delay', $vars->delay_session === 'Y');
     Rhymix\Framework\Config::set('session.use_db', $vars->use_db_session === 'Y');
     Rhymix\Framework\Config::set('view.minify_scripts', $vars->minify_scripts ?: 'common');
     Rhymix\Framework\Config::set('view.concat_scripts', $vars->concat_scripts ?: 'none');
     Rhymix\Framework\Config::set('view.server_push', $vars->use_server_push === 'Y');
     Rhymix\Framework\Config::set('view.use_gzip', $vars->use_gzip === 'Y');
     // Save
     Rhymix\Framework\Config::save();
     $this->setMessage('success_updated');
     $this->setRedirectUrl(Context::get('success_return_url') ?: getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAdminConfigAdvanced'));
 }
Example #21
0
 /**
  * @brief request parameters and variables sort through the information widget
  */
 function arrangeWidgetVars($widget, $request_vars, &$vars)
 {
     $oWidgetModel = getModel('widget');
     $widget_info = $oWidgetModel->getWidgetInfo($widget);
     if (!$vars) {
         $vars = new stdClass();
     }
     $widget = $vars->selected_widget;
     $vars->css_class = $request_vars->css_class;
     $vars->widgetstyle = $request_vars->widgetstyle;
     $vars->skin = trim($request_vars->skin);
     $vars->colorset = trim($request_vars->colorset);
     $vars->widget_sequence = (int) $request_vars->widget_sequence;
     $vars->widget_cache = (int) $request_vars->widget_cache;
     if ($request_vars->widget_cache_unit && in_array($request_vars->widget_cache_unit, array('s', 'm', 'h', 'd'))) {
         $vars->widget_cache .= $request_vars->widget_cache_unit;
     }
     $vars->style = trim($request_vars->style);
     $vars->widget_padding_left = trim($request_vars->widget_padding_left);
     $vars->widget_padding_right = trim($request_vars->widget_padding_right);
     $vars->widget_padding_top = trim($request_vars->widget_padding_top);
     $vars->widget_padding_bottom = trim($request_vars->widget_padding_bottom);
     $vars->document_srl = trim($request_vars->document_srl);
     if (count($widget_info->extra_var)) {
         foreach ($widget_info->extra_var as $key => $val) {
             $vars->{$key} = trim($request_vars->{$key});
         }
     }
     // If the widget style
     if ($request_vars->widgetstyle) {
         $widgetStyle_info = $oWidgetModel->getWidgetStyleInfo($request_vars->widgetstyle);
         if (count($widgetStyle_info->extra_var)) {
             foreach ($widgetStyle_info->extra_var as $key => $val) {
                 if ($val->type == 'color' || $val->type == 'text' || $val->type == 'select' || $val->type == 'filebox' || $val->type == 'textarea') {
                     $vars->{$key} = trim($request_vars->{$key});
                 }
             }
         }
     }
     if ($vars->widget_sequence) {
         Rhymix\Framework\Cache::delete('widget_cache:' . $vars->widget_sequence);
     }
     if ($vars->widget_cache > 0) {
         $vars->widget_sequence = getNextSequence();
     }
     $attribute = array();
     foreach ($vars as $key => $val) {
         if (!$val) {
             unset($vars->{$key});
             continue;
         }
         if (strpos($val, '|@|') > 0) {
             $val = str_replace('|@|', ',', $val);
         }
         $vars->{$key} = Context::convertEncodingStr($val);
         $attribute[] = sprintf('%s="%s"', $key, htmlspecialchars(Context::convertEncodingStr($val), ENT_COMPAT | ENT_HTML401, 'UTF-8', false));
     }
     return $attribute;
 }
Example #22
0
 /**
  * Delete a category
  * @param int $category_srl
  * @return object
  */
 function deleteCategory($category_srl)
 {
     $args = new stdClass();
     $args->category_srl = $category_srl;
     $oDocumentModel = getModel('document');
     $category_info = $oDocumentModel->getCategory($category_srl);
     // Display an error that the category cannot be deleted if it has a child
     $output = executeQuery('document.getChildCategoryCount', $args);
     if (!$output->toBool()) {
         return $output;
     }
     if ($output->data->count > 0) {
         return new Object(-1, 'msg_cannot_delete_for_child');
     }
     // Delete a category information
     $output = executeQuery('document.deleteCategory', $args);
     if (!$output->toBool()) {
         return $output;
     }
     $this->makeCategoryFile($category_info->module_srl);
     // remove cache
     $page = 0;
     while (true) {
         $args = new stdClass();
         $args->category_srl = $category_srl;
         $args->list_count = 100;
         $args->page = ++$page;
         $output = executeQuery('document.getDocumentList', $args, array('document_srl'));
         if ($output->data == array()) {
             break;
         }
         foreach ($output->data as $val) {
             Rhymix\Framework\Cache::delete('document_item:' . getNumberingPath($val->document_srl) . $val->document_srl);
         }
     }
     // Update category_srl of the documents in the same category to 0
     $args = new stdClass();
     $args->target_category_srl = 0;
     $args->source_category_srl = $category_srl;
     $output = executeQuery('document.updateDocumentCategory', $args);
     return $output;
 }
Example #23
0
 /**
  * Get data from database, and set the value to documentItem object
  * @param bool $load_extra_vars
  * @return void
  */
 function _loadFromDB($load_extra_vars = true)
 {
     if (!$this->document_srl) {
         return;
     }
     $document_item = false;
     $cache_put = false;
     $columnList = array();
     $reload_counts = true;
     if ($this->columnList === false) {
         $reload_counts = false;
     }
     $this->columnList = array();
     // cache controll
     $cache_key = 'document_item:' . getNumberingPath($this->document_srl) . $this->document_srl;
     $document_item = Rhymix\Framework\Cache::get($cache_key);
     if ($document_item) {
         $columnList = array('readed_count', 'voted_count', 'blamed_count', 'comment_count', 'trackback_count');
     }
     if (!$document_item || $reload_counts) {
         $args = new stdClass();
         $args->document_srl = $this->document_srl;
         $output = executeQuery('document.getDocument', $args, $columnList);
     }
     if (!$document_item) {
         $document_item = $output->data;
         if ($document_item) {
             Rhymix\Framework\Cache::set($cache_key, $document_item);
         }
     } else {
         $document_item->readed_count = $output->data->readed_count;
         $document_item->voted_count = $output->data->voted_count;
         $document_item->blamed_count = $output->data->blamed_count;
         $document_item->comment_count = $output->data->comment_count;
         $document_item->trackback_count = $output->data->trackback_count;
     }
     $this->setAttribute($document_item, $load_extra_vars);
 }
Example #24
0
 function _clearMemberCache($member_srl, $site_srl = 0)
 {
     $member_srl = getNumberingPath($member_srl) . $member_srl;
     Rhymix\Framework\Cache::delete("member:member_info:{$member_srl}");
     Rhymix\Framework\Cache::delete("member:member_groups:{$member_srl}:site:{$site_srl}");
     if ($site_srl != 0) {
         Rhymix\Framework\Cache::delete("member:member_groups:{$member_srl}:site:0");
     }
 }
Example #25
0
 /**
  * @brief Execute update
  */
 function moduleUpdate()
 {
     $oDB =& DB::getInstance();
     // 2008. 10. 27 module_part_config Add a multi-index to the table and check all information of module_configg
     if (!$oDB->isIndexExists("module_part_config", "idx_module_part_config")) {
         $oModuleModel = getModel('module');
         $oModuleController = getController('module');
         $modules = $oModuleModel->getModuleList();
         foreach ($modules as $key => $module_info) {
             $module = $module_info->module;
             if (!in_array($module, array('point', 'trackback', 'layout', 'rss', 'file', 'comment', 'editor'))) {
                 continue;
             }
             $config = $oModuleModel->getModuleConfig($module);
             $module_config = null;
             switch ($module) {
                 case 'point':
                     $module_config = $config->module_point;
                     unset($config->module_point);
                     break;
                 case 'trackback':
                 case 'rss':
                 case 'file':
                 case 'comment':
                 case 'editor':
                     $module_config = $config->module_config;
                     unset($config->module_config);
                     if (is_array($module_config) && count($module_config)) {
                         foreach ($module_config as $key => $val) {
                             if (isset($module_config[$key]->module_srl)) {
                                 unset($module_config[$key]->module_srl);
                             }
                         }
                     }
                     break;
                 case 'layout':
                     $tmp = $config->header_script;
                     if (is_array($tmp) && count($tmp)) {
                         foreach ($tmp as $k => $v) {
                             if (!$v && !trim($v)) {
                                 continue;
                             }
                             $module_config[$k]->header_script = $v;
                         }
                     }
                     $config = null;
                     break;
             }
             $oModuleController->insertModuleConfig($module, $config);
             if (is_array($module_config) && count($module_config)) {
                 foreach ($module_config as $module_srl => $module_part_config) {
                     $oModuleController->insertModulePartConfig($module, $module_srl, $module_part_config);
                 }
             }
         }
         $oDB->addIndex("module_part_config", "idx_module_part_config", array("module", "module_srl"));
     }
     // 2008. 11. 13 drop index(unique_mid). Add a column and index on site_srl and mid columns
     if (!$oDB->isIndexExists('modules', "idx_site_mid")) {
         $oDB->dropIndex("modules", "unique_mid", true);
         $oDB->addColumn('modules', 'site_srl', 'number', 11, 0, true);
         $oDB->addIndex("modules", "idx_site_mid", array("site_srl", "mid"), true);
     }
     // document extra vars
     if (!$oDB->isTableExists('document_extra_vars')) {
         $oDB->createTableByXmlFile('./modules/document/schemas/document_extra_vars.xml');
     }
     if (!$oDB->isTableExists('document_extra_keys')) {
         $oDB->createTableByXmlFile('./modules/document/schemas/document_extra_keys.xml');
     }
     // Move permission, skin info, extection info, admin ID of all modules to the table, grants
     if ($oDB->isColumnExists('modules', 'grants')) {
         $oModuleController = getController('module');
         $oDocumentController = getController('document');
         // Get a value of the current system language code
         $lang_code = Context::getLangType();
         // Get module_info of all modules
         $output = executeQueryArray('module.getModuleInfos');
         if (count($output->data)) {
             foreach ($output->data as $module_info) {
                 // Separate information about permission granted to the module, extra vars, skin vars, super-admin's authority
                 $module_srl = trim($module_info->module_srl);
                 // grant an authority
                 $grants = unserialize($module_info->grants);
                 if ($grants) {
                     $oModuleController->insertModuleGrants($module_srl, $grants);
                 }
                 // Insert skin vars
                 $skin_vars = unserialize($module_info->skin_vars);
                 if ($skin_vars) {
                     $oModuleController->insertModuleSkinVars($module_srl, $skin_vars);
                 }
                 // Insert super admin's ID
                 $admin_id = trim($module_info->admin_id);
                 if ($admin_id && $admin_id != 'Array') {
                     $admin_ids = explode(',', $admin_id);
                     if (count($admin_id)) {
                         foreach ($admin_ids as $admin_id) {
                             $oModuleController->insertAdminId($module_srl, $admin_id);
                         }
                     }
                 }
                 // Save extra configurations for each module(column data which doesn't exist in the defaut modules)
                 $extra_vars = unserialize($module_info->extra_vars);
                 $document_extra_keys = null;
                 if ($extra_vars->extra_vars && count($extra_vars->extra_vars)) {
                     $document_extra_keys = $extra_vars->extra_vars;
                     unset($extra_vars->extra_vars);
                 }
                 if ($extra_vars) {
                     $oModuleController->insertModuleExtraVars($module_srl, $extra_vars);
                 }
                 /**
                  * Move document extra vars(it should have conducted in the documents module however extra vars in modules table should be listed up in this module)
                  */
                 // Insert extra vars if planet module is
                 if ($module_info->module == 'planet') {
                     if (!$document_extra_keys || !is_array($document_extra_keys)) {
                         $document_extra_keys = array();
                     }
                     $planet_extra_keys->name = 'postscript';
                     $planet_extra_keys->type = 'text';
                     $planet_extra_keys->is_required = 'N';
                     $planet_extra_keys->search = 'N';
                     $planet_extra_keys->default = '';
                     $planet_extra_keys->desc = '';
                     $document_extra_keys[20] = $planet_extra_keys;
                 }
                 // Register keys for document extra vars
                 if (count($document_extra_keys)) {
                     foreach ($document_extra_keys as $var_idx => $val) {
                         $oDocumentController->insertDocumentExtraKey($module_srl, $var_idx, $val->name, $val->type, $val->is_required, $val->search, $val->default, $val->desc, 'extra_vars' . $var_idx);
                     }
                     // 2009-04-14 Fixed a bug that only 100 extra vars are moved
                     $oDocumentModel = getModel('document');
                     $total_count = $oDocumentModel->getDocumentCount($module_srl);
                     if ($total_count > 0) {
                         $per_page = 100;
                         $total_pages = (int) (($total_count - 1) / $per_page) + 1;
                         // Get extra vars if exist
                         $doc_args = new stdClass();
                         $doc_args->module_srl = $module_srl;
                         $doc_args->list_count = $per_page;
                         $doc_args->sort_index = 'list_order';
                         $doc_args->order_type = 'asc';
                         for ($doc_args->page = 1; $doc_args->page <= $total_pages; $doc_args->page++) {
                             $output = executeQueryArray('document.getDocumentList', $doc_args);
                             if ($output->toBool() && $output->data && count($output->data)) {
                                 foreach ($output->data as $document) {
                                     if (!$document) {
                                         continue;
                                     }
                                     foreach ($document as $key => $var) {
                                         if (strpos($key, 'extra_vars') !== 0 || !trim($var) || $var == 'N;') {
                                             continue;
                                         }
                                         $var_idx = str_replace('extra_vars', '', $key);
                                         $oDocumentController->insertDocumentExtraVar($module_srl, $document->document_srl, $var_idx, $var, 'extra_vars' . $var_idx, $lang_code);
                                     }
                                 }
                             }
                         }
                         // for total_pages
                     }
                     // if count
                 }
                 // Additional variables of the module, remove
                 $module_info->grant = null;
                 $module_info->extra_vars = null;
                 $module_info->skin_vars = null;
                 $module_info->admin_id = null;
                 executeQuery('module.updateModule', $module_info);
                 Rhymix\Framework\Cache::clearGroup('site_and_module');
             }
         }
         // Various column drop
         $oDB->dropColumn('modules', 'grants');
         $oDB->dropColumn('modules', 'admin_id');
         $oDB->dropColumn('modules', 'skin_vars');
         $oDB->dropColumn('modules', 'extra_vars');
     }
     // Rights of all modules/skins transferring the information into a table Update grants
     if (!$oDB->isColumnExists('sites', 'default_language')) {
         $oDB->addColumn('sites', 'default_language', 'varchar', 255, 0, false);
     }
     // extra_vars * Remove Column
     for ($i = 1; $i <= 20; $i++) {
         if (!$oDB->isColumnExists("documents", "extra_vars" . $i)) {
             continue;
         }
         $oDB->dropColumn('documents', 'extra_vars' . $i);
     }
     // Enter the main site information sites on the table
     $args = new stdClass();
     $args->site_srl = 0;
     $output = $oDB->executeQuery('module.getSite', $args);
     if (!$output->data) {
         // Basic mid, language Wanted
         $mid_output = $oDB->executeQuery('module.getDefaultMidInfo', $args);
         $domain = Context::getDefaultUrl();
         $url_info = parse_url($domain);
         $domain = $url_info['host'] . (!empty($url_info['port']) && $url_info['port'] != 80 ? ':' . $url_info['port'] : '') . $url_info['path'];
         $site_args = new stdClass();
         $site_args->site_srl = 0;
         $site_args->index_module_srl = $mid_output->data->module_srl;
         $site_args->domain = $domain;
         $site_args->default_language = config('locale.default_lang');
         $output = executeQuery('module.insertSite', $site_args);
         if (!$output->toBool()) {
             return $output;
         }
     }
     if ($oDB->isIndexExists('sites', 'idx_domain')) {
         $oDB->dropIndex('sites', 'idx_domain');
     }
     if (!$oDB->isIndexExists('sites', 'unique_domain')) {
         $this->updateForUniqueSiteDomain();
         $oDB->addIndex('sites', 'unique_domain', array('domain'), true);
     }
     if (!$oDB->isColumnExists("modules", "use_mobile")) {
         $oDB->addColumn('modules', 'use_mobile', 'char', 1, 'N');
     }
     if (!$oDB->isColumnExists("modules", "mlayout_srl")) {
         $oDB->addColumn('modules', 'mlayout_srl', 'number', 11, 0);
     }
     if (!$oDB->isColumnExists("modules", "mcontent")) {
         $oDB->addColumn('modules', 'mcontent', 'bigtext');
     }
     if (!$oDB->isColumnExists("modules", "mskin")) {
         $oDB->addColumn('modules', 'mskin', 'varchar', 250);
     }
     if (!$oDB->isColumnExists("modules", "is_skin_fix")) {
         $oDB->addColumn('modules', 'is_skin_fix', 'char', 1, 'N');
         $output = executeQuery('module.updateSkinFixModules');
     }
     if (!$oDB->isColumnExists("module_config", "site_srl")) {
         $oDB->addColumn('module_config', 'site_srl', 'number', 11, 0, true);
     }
     FileHandler::makeDir('./files/ruleset');
     $args->skin = '.';
     $output = executeQueryArray('module.getModuleSkinDotList', $args);
     if ($output->data && count($output->data) > 0) {
         foreach ($output->data as $item) {
             $skin_path = explode('.', $item->skin);
             if (count($skin_path) != 2) {
                 continue;
             }
             if (is_dir(sprintf(_XE_PATH_ . 'themes/%s/modules/%s', $skin_path[0], $skin_path[1]))) {
                 $args = new stdClass();
                 $args->skin = $item->skin;
                 $args->new_skin = implode('|@|', $skin_path);
                 $output = executeQuery('module.updateSkinAll', $args);
             }
         }
     }
     // XE 1.7
     if (!$oDB->isColumnExists("modules", "is_mskin_fix")) {
         $oDB->addColumn('modules', 'is_mskin_fix', 'char', 1, 'N');
         $output = executeQuery('module.updateMobileSkinFixModules');
     }
     $oModuleModel = getModel('module');
     $moduleConfig = $oModuleModel->getModuleConfig('module');
     if (!$moduleConfig->isUpdateFixedValue) {
         $output = executeQuery('module.updateSkinFixModules');
         $output = executeQuery('module.updateMobileSkinFixModules');
         $oModuleController = getController('module');
         if (!$moduleConfig) {
             $moduleConfig = new stdClass();
         }
         $moduleConfig->isUpdateFixedValue = TRUE;
         $output = $oModuleController->updateModuleConfig('module', $moduleConfig);
     }
     return new Object(0, 'success_updated');
 }