/** * 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; }
/** * 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'); }
/** * 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}"); }
/** * 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; } } }
/** * @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]; }
/** * 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'); }
/** * 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(); }
/** * @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'); }
/** * 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]; }
} $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'));
/** * @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; }
/** * @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); }
/** * 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; }
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; }
/** * Delete cached group data * @return void */ function _deleteMemberGroupCache($site_srl = 0) { //remove from cache Rhymix\Framework\Cache::clearGroup('member'); }
/** * 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')); }
/** * @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; }
/** * 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; }
/** * 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); }
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"); } }
/** * @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'); }