/** * Returns the current template directory * * @since 1.0 * @see get_option * @todo This is dirrrty dirrrty code. Fix ASAP. * * @param string $view Name of the current view * @param string $prefix String to prefix to the cache ID, defaults to template name * @return string */ public static function load($view = 'chrono', $prefix = '') { if (empty($prefix)) { $prefix = get_option('template'); } $current = Templates::get_current(); $view_file = $view . '.php'; $cache = new CacheHandler(); $cache->begin_caching($prefix . $_SERVER['REQUEST_URI']); if (file_exists($current['Template Dir'] . '/' . $view_file)) { require_once $current['Template Dir'] . '/' . $view_file; } else { require_once $current['Template Dir'] . '/index.php'; } $cache->end_caching($prefix . $_SERVER['REQUEST_URI']); }
function read($session_key) { if (!$session_key || !$this->session_started) { return; } $oCacheHandler =& CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport()) { $cache_key = 'object:' . $session_key; $output->data = $oCacheHandler->get($cache_key); } if (!$output->data) { $args->session_key = $session_key; $columnList = array('session_key', 'cur_mid', 'val'); $output = executeQuery('session.getSession', $args, $columnList); // Confirm there is a table created if read error occurs if (!$output->toBool()) { $oDB =& DB::getInstance(); if (!$oDB->isTableExists('session')) { $oDB->createTableByXmlFile($this->module_path . 'schemas/session.xml'); } if (!$oDB->isColumnExists("session", "cur_mid")) { $oDB->addColumn('session', "cur_mid", "varchar", 128); } $output = executeQuery('session.getSession', $args); } // Check if there is a table created in case there is no "cur_mid" value in the sessions information if (!isset($output->data->cur_mid)) { $oDB =& DB::getInstance(); if (!$oDB->isColumnExists("session", "cur_mid")) { $oDB->addColumn('session', "cur_mid", "varchar", 128); } } } return $output->data->val; }
/** * 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'); $insertedTodayStatus = false; $oCacheHandler = CacheHandler::getInstance('object', NULL, TRUE); if ($oCacheHandler->isSupport()) { $cache_key = 'counter:insertedTodayStatus:' . $site_srl . '_' . $args->regdate; $insertedTodayStatus = $oCacheHandler->get($cache_key); } if ($insertedTodayStatus === false) { 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 && $oCacheHandler->isSupport()) { $oCacheHandler->put($cache_key, TRUE); $_old_date = date('Ymd', strtotime('-1 day')); $oCacheHandler->delete('counter:insertedTodayStatus:' . $site_srl . '_' . $_old_date); } } return $insertedTodayStatus; }
/** * 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) { // cache controll $oCacheHandler =& CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport()) { $cache_key = 'object:' . $layout_srl; $layout_info = $oCacheHandler->get($cache_key); } if (!$layout_info) { // Get information from the DB $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); // If deleted layout files, delete layout instance // if (!$layout_info) { // $oLayoutController = &getAdminController('layout'); // $oLayoutController->deleteLayout($layout_srl); // return; // } //insert in cache if ($oCacheHandler->isSupport()) { $oCacheHandler->put($cache_key, $layout_info); } } return $layout_info; }
/** * Regenerate all cache files * @return void */ function procAdminRecompileCacheFile() { // rename cache dir $temp_cache_dir = './files/cache_' . $_SERVER['REQUEST_TIME']; FileHandler::rename('./files/cache', $temp_cache_dir); FileHandler::makeDir('./files/cache'); // remove module extend cache FileHandler::removeFile(_XE_PATH_ . 'files/config/module_extend.php'); // remove debug files FileHandler::removeFile(_XE_PATH_ . 'files/_debug_message.php'); FileHandler::removeFile(_XE_PATH_ . 'files/_debug_db_query.php'); FileHandler::removeFile(_XE_PATH_ . 'files/_db_slow_query.php'); $oModuleModel = getModel('module'); $module_list = $oModuleModel->getModuleList(); // call recompileCache for each module foreach ($module_list as $module) { $oModule = NULL; $oModule = getClass($module->module); if (method_exists($oModule, 'recompileCache')) { $oModule->recompileCache(); } } // remove cache $truncated = array(); $oObjectCacheHandler = CacheHandler::getInstance('object'); $oTemplateCacheHandler = CacheHandler::getInstance('template'); if ($oObjectCacheHandler->isSupport()) { $truncated[] = $oObjectCacheHandler->truncate(); } if ($oTemplateCacheHandler->isSupport()) { $truncated[] = $oTemplateCacheHandler->truncate(); } if (count($truncated) && in_array(FALSE, $truncated)) { return new Object(-1, 'msg_self_restart_cache_engine'); } // remove cache dir $tmp_cache_list = FileHandler::readDir('./files', '/(^cache_[0-9]+)/'); if ($tmp_cache_list) { foreach ($tmp_cache_list as $tmp_dir) { if ($tmp_dir) { FileHandler::removeDir('./files/' . $tmp_dir); } } } // remove duplicate indexes (only for CUBRID) $db_type = Context::getDBType(); if ($db_type == 'cubrid') { $db = DB::getInstance(); $db->deleteDuplicateIndexes(); } // check autoinstall packages $oAutoinstallAdminController = getAdminController('autoinstall'); $oAutoinstallAdminController->checkInstalled(); $this->setMessage('success_updated'); }
/** * Regenerate all cache files * @return void */ function procAdminRecompileCacheFile() { // rename cache dir $temp_cache_dir = './files/cache_' . time(); FileHandler::rename('./files/cache', $temp_cache_dir); FileHandler::makeDir('./files/cache'); // remove debug files FileHandler::removeFile(_XE_PATH_ . 'files/_debug_message.php'); FileHandler::removeFile(_XE_PATH_ . 'files/_debug_db_query.php'); FileHandler::removeFile(_XE_PATH_ . 'files/_db_slow_query.php'); $oModuleModel =& getModel('module'); $module_list = $oModuleModel->getModuleList(); // call recompileCache for each module foreach ($module_list as $module) { $oModule = null; $oModule =& getClass($module->module); if (method_exists($oModule, 'recompileCache')) { $oModule->recompileCache(); } } // remove cache $truncated = array(); $oObjectCacheHandler =& CacheHandler::getInstance('object'); $oTemplateCacheHandler =& CacheHandler::getInstance('template'); if ($oObjectCacheHandler->isSupport()) { $truncated[] = $oObjectCacheHandler->truncate(); } if ($oTemplateCacheHandler->isSupport()) { $truncated[] = $oTemplateCacheHandler->truncate(); } if (count($truncated) && in_array(false, $truncated)) { return new Object(-1, 'msg_self_restart_cache_engine'); } // remove cache dir $tmp_cache_list = FileHandler::readDir('./files', '/(^cache_[0-9]+)/'); if ($tmp_cache_list) { foreach ($tmp_cache_list as $tmp_dir) { if ($tmp_dir) { FileHandler::removeDir('./files/' . $tmp_dir); } } } // remove duplicate indexes (only for CUBRID) $db_type =& Context::getDBType(); if ($db_type == 'cubrid') { $db =& DB::getInstance(); $db->deleteDuplicateIndexes(); } $this->setMessage('success_updated'); }
function clearSumCache() { if ($_POST['option_clear_sum'] == 'on') { $qry = DBFactory::getDBQuery(); $qry->execute("DELETE FROM kb3_sum_alliance"); $qry->execute("DELETE FROM kb3_sum_corp"); $qry->execute("DELETE FROM kb3_sum_pilot"); // Clear page and query cache as well since they also contain the // summaries. CacheHandler::removeByAge('SQL', 0, true); CacheHandler::removeByAge('store', 0, true); $_POST['option_clear_sum'] == 'off'; } }
/** * Get an image. * * Returns an image resource or false on failure. Fetches the image from * CCP if needed. * @param integer $id * @param integer $size * @return resource Image resource or false on failure. */ static function get($id, $size = 64) { $id = (int) $id; $size = (int) $size; if ($size != 32 && $size != 64) { return false; } if (!$id) { return imagecreatefromjpeg("img/portrait_0_{$size}.jpg"); } // If it's in the cache then read it from there. if (CacheHandler::exists("{$id}_{$size}.png", "img")) { return imagecreatefrompng(CacheHandler::getInternal("{$id}_{$size}.png", "img")); } else { $img = self::fetchImage($id, $size); imagepng($img, CacheHandler::getInternal("{$id}_{$size}.png", "img")); return $img ? $img : imagecreatefromjpeg("img/portrait_0_{$size}.jpg"); } }
function procMagiccontentSetup() { $req = Context::getRequestVars(); $widget_sequence = $req->widget_sequence; $is_complete = $req->is_complete; unset($req->is_complete); unset($req->widget_sequence); unset($req->act); foreach ($req as $key => $value) { if ($value == '') { unset($req->{$key}); } } $serialize_data = serialize($req); $args = new stdClass(); $args->data = $serialize_data; $args->widget_sequence = $widget_sequence; $args->is_complete = $is_complete; if ($is_complete == 1) { $dargs = new stdClass(); $dargs->widget_sequence = $widget_sequence; $dargs->is_complete = 0; $output = executeQuery('magiccontent.deleteMagicContentData', $dargs); } $oMagiccontentModel =& getModel('magiccontent'); if ($oMagiccontentModel->getSetupData($widget_sequence, $is_complete) === false) { $args->data_srl = getNextSequence(); $output = executeQuery('magiccontent.insertMagicContentData', $args); } else { $output = executeQuery('magiccontent.updateMagicContentData', $args); } $oCacheHandler = CacheHandler::getInstance('template'); if ($oCacheHandler->isSupport()) { $key = 'widget_cache:' . $widget_sequence; $oCacheHandler->delete($key); } $lang_type = Context::getLangType(); $cache_file = sprintf('%s%d.%s.cache', $this->cache_path, $widget_sequence, $lang_type); FileHandler::removeFile($cache_file); return new Object(0, 'success'); }
/** * 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; } // cache controll $oCacheHandler =& CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport() && !count($this->columnList)) { $cache_key = 'object_document_item:' . $this->document_srl; $output = $oCacheHandler->get($cache_key); } if (!$output) { $args->document_srl = $this->document_srl; $output = executeQuery('document.getDocument', $args, $this->columnList); //insert in cache if ($output->data->document_srl && $oCacheHandler->isSupport()) { $oCacheHandler->put($cache_key, $output); } } $this->setAttribute($output->data, $load_extra_vars); }
function procAjaxboardAdminDeleteAjaxboard() { $module_srl = Context::get('module_srl'); $oModuleController = getController('module'); $output = $oModuleController->deleteModule($module_srl); if (!$output->toBool()) { return $output; } $oCacheHandler = CacheHandler::getInstance('object', NULL, true); if ($oCacheHandler->isSupport()) { $object_key = 'module_ajaxboard_module_srls'; $cache_key = $oCacheHandler->getGroupKey('site_and_module', $object_key); $oCacheHandler->delete($cache_key); $object_key = 'module_ajaxboard_linked_info'; $cache_key = $oCacheHandler->getGroupKey('site_and_module', $object_key); $oCacheHandler->delete($cache_key); $object_key = 'module_ajaxboard_notify_info'; $cache_key = $oCacheHandler->getGroupKey('site_and_module', $object_key); $oCacheHandler->delete($cache_key); } $this->setMessage('success_deleted'); $this->setRedirectUrl(getNotEncodedUrl('', 'module', 'admin', 'act', 'dispAjaxboardAdminContent')); }
/** * 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(); $this->columnList = array(); // cache controll $oCacheHandler = CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport()) { $cache_key = 'document_item:' . getNumberingPath($this->document_srl) . $this->document_srl; $document_item = $oCacheHandler->get($cache_key); if ($document_item !== false) { $columnList = array('readed_count', 'voted_count', 'blamed_count', 'comment_count', 'trackback_count'); } } $args = new stdClass(); $args->document_srl = $this->document_srl; $output = executeQuery('document.getDocument', $args, $columnList); if ($document_item === false) { $document_item = $output->data; //insert in cache if ($document_item && $oCacheHandler->isSupport()) { $oCacheHandler->put($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); }
/** * @brief Delete comment **/ function deleteReview($review_srl, $is_admin = false, $isMoveToTrash = false) { // create the comment model object $oCommentModel =& getModel('store_review'); // check if comment already exists $comment = $oCommentModel->getReview($review_srl); if ($comment->review_srl != $review_srl) { return new Object(-1, 'msg_invalid_request'); } $item_srl = $comment->item_srl; // call a trigger (before) $output = ModuleHandler::triggerCall('store_review.deleteReview', 'before', $comment); if (!$output->toBool()) { return $output; } // check if child comment exists on the comment $child_count = $oCommentModel->getChildCommentCount($review_srl); if ($child_count > 0) { return new Object(-1, 'fail_to_delete_have_children'); } // check if permission is granted if (!$is_admin && !$comment->isGranted()) { return new Object(-1, 'msg_not_permitted'); } // begin transaction $oDB =& DB::getInstance(); $oDB->begin(); // Delete $args->review_srl = $review_srl; $output = executeQuery('store_review.deleteReview', $args); if (!$output->toBool()) { $oDB->rollback(); return $output; } $output = executeQuery('store_review.deleteReviewList', $args); // update the number of comments $comment_count = $oCommentModel->getReviewCount($item_srl); /* // create the controller object of the document $oDocumentController = &getController('document'); // update comment count of the article posting $output = $oDocumentController->updateCommentCount($document_srl, $comment_count, null, false); if(!$output->toBool()) { $oDB->rollback(); return $output; } */ // call a trigger (after) if ($output->toBool()) { $trigger_output = ModuleHandler::triggerCall('store_review.deleteReview', 'after', $comment); if (!$trigger_output->toBool()) { $oDB->rollback(); return $trigger_output; } } if (!$isMoveToTrash) { $this->_deleteDeclaredComments($args); $this->_deleteVotedComments($args); } // commit $oDB->commit(); $output->add('item_srl', $item_srl); //remove from cache $oCacheHandler =& CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport()) { $oCacheHandler->invalidateGroupKey('commentList'); } return $output; }
/** * @brief 자식 게시판 정보 반환 * @param int $module_srl * @return array */ function getAttachInfo($module_srl) { if (!$module_srl) { return array(); } // 캐시 및 메모리 키값을 위한 해시 생성 $hash_id = md5('module_srl:' . $module_srl); // 메모리에서 자식 게시판 정보 불러오기 $attach_info = $GLOBALS['__timeline__']['attach_info'][$hash_id]; // 메모리에 값이 없는 경우 if (is_null($attach_info)) { $attach_info = FALSE; $oCacheHandler = CacheHandler::getInstance('object', NULL, TRUE); // 캐시에서 자식 게시판 정보 불러오기 if ($oCacheHandler->isSupport()) { $object_key = 'attach_info:' . $hash_id; $cache_key = $oCacheHandler->getGroupKey('timeline', $object_key); $attach_info = $oCacheHandler->get($cache_key); } // 저장된 캐시가 없거나 캐시를 사용할 수 없는 경우 if ($attach_info === FALSE) { $attach_info = array(); $args = new stdClass(); $args->module_srl = $module_srl; // DB에서 자식 게시판 정보 불러오기 $output = executeQueryArray('timeline.getAttachInfo', $args); foreach ($output->data as $item) { $attach_info[] = $item->target_srl; } // 캐시 저장 if ($oCacheHandler->isSupport()) { $oCacheHandler->put($cache_key, $attach_info); } } // 메모리 저장 $GLOBALS['__timeline__']['attach_info'][$hash_id] = $attach_info; } return $attach_info; }
<?php require_once 'include/CacheHandler.php'; $cacheObj = new CacheHandler(); $results = $cacheObj->getFromCache(); ?> <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAYAAAAf8/9hAAAB10lEQVQ4jX1TO2tUQRQelIgiGEt7CwVBhLvzzcZq73xnA4uQbht/QFBLFQnaWIivxcZXE8TCJkSw8REfnWkiRhEiCMEHgkERjGHnjKLCXovcXTfX3D1wiuGc78E3M8bkldVqm6O48bIOHs0fadWZslLighJZaXs8isRs29v9/4Fj6hIl/gwg+Nn2thUFV5R4ueKTnT1wliRDSrwaqF7HpUAEJTqROKmCuWVJhlfVPU4NBBPvlW6q7/xLiRNKzGTN5kajxJfB6vaYEp1CHl9VbCvSXTNB7HgUXFbiYiQmVTCvxO98+a4Sz9cP1Z0zxhgTPK4r8TQSt5VYUY+FSHdT6/asCs4Xw1TBfaV7sJZAbCu/yntKeyt4HFK6Z0pkeXhHYx2VSMwaY0ygPVJwYJeU9oUSn5S4kTX3bFKxE7nqR2OMaY8mu/P5jBIfig4mvtf2bQ/E2yiYXk3ZPenZ9u6N0j5W4rXW7I4g9nAxg0X17ngg3nUHfQ4+Z6N7ty5LMqyCeRUcVMFcjyD6SkM9Forp/iOwSzGtjuXOumEuRl9prHnOgS4NxJ0gOFNw0O2OEg+j4EB22mwo/VRZkgz1EwSiHWmvttPKrlLQukQjI1tiWh371nDbBu39BUbXq0cwWvsKAAAAAElFTkSuQmCC" rel="icon" type="image/x-icon" /> <title>Idea House</title> <link rel="stylesheet" href="salvattore.css"> <link rel="stylesheet" href="normalize.css"> <link rel="stylesheet" href="styles.css"> </head> <body> <h1>Idea House</h1> <div id="timeline" data-columns="4"> <?php foreach ($results as $result) { ?> <div class="item line-<?php echo $result['metadata']['data_source']; ?>
/** * 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); // remvove cache $oCacheHandler = CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport()) { $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) { //remove document item from cache $cache_key = 'document_item:' . getNumberingPath($val->document_srl) . $val->document_srl; $oCacheHandler->delete($cache_key); } } } // 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; }
/** * @brief Remove extra vars from the module **/ function deleteModuleExtraVars($module_srl) { $args->module_srl = $module_srl; return executeQuery('module.deleteModuleExtraVars', $args); //remove from cache $oCacheHandler =& CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport()) { $cache_key = 'object:module_extra_vars_' . $module_srl; $oCacheHandler->delete($cache_key); } }
/** * Return the URL for the alliance's portrait. If the alliance has a * portrait in the board's img/alliances directory, that portrait will be * used * * @param integer $size The desired portrait size. * @return string URL for a portrait. */ function getPortraitURL($size = 128) { if (isset($this->imgurl[$size])) { return $this->imgurl[$size]; } if (file_exists("img/alliances/" . $this->getUnique() . ".png")) { if ($size == 128) { $this->imgurl[$size] = IMG_HOST . "/img/alliances/" . $this->getUnique() . ".png"; } else { if (CacheHandler::exists($this->getUnique() . "_{$size}.png", 'img')) { $this->imgurl[$size] = KB_HOST . "/" . CacheHandler::getExternal($this->getUnique() . "_{$size}.png", 'img'); } else { $this->imgurl[$size] = KB_HOST . '/?a=thumb&type=alliance&id=' . $this->getUnique() . '&size=' . $size; } } $this->putCache(); } else { if ($this->getExternalID()) { $this->imgurl[$size] = imageURL::getURL('Alliance', $this->getExternalID(), $size); $this->putCache(); } else { $this->imgurl[$size] = imageURL::getURL('Alliance', 1, $size); } } return $this->imgurl[$size]; }
/** * Update layout information * Apply a title of the new layout and extra vars * @return Object */ function procLayoutAdminUpdate() { // Consider the rest of items as extra vars, except module, act, layout_srl, layout, and title .. Some gurida .. $extra_vars = Context::getRequestVars(); unset($extra_vars->module); unset($extra_vars->act); unset($extra_vars->layout_srl); unset($extra_vars->layout); unset($extra_vars->title); unset($extra_vars->apply_layout); unset($extra_vars->apply_mobile_view); $is_sitemap = $extra_vars->is_sitemap; unset($extra_vars->is_sitemap); $args = Context::gets('layout_srl', 'title'); // Get layout information $oLayoutModel = getModel('layout'); $oMenuAdminModel = getAdminModel('menu'); $layout_info = $oLayoutModel->getLayout($args->layout_srl); if ($layout_info->menu) { $menus = get_object_vars($layout_info->menu); } if (count($menus)) { foreach ($menus as $menu_id => $val) { $menu_srl = Context::get($menu_id); if (!$menu_srl) { continue; } // if menu is -1, get default menu in site if ($menu_srl == -1) { $oModuleModel = getModel('module'); $start_module = $oModuleModel->getSiteInfo(0, $columnList); $tmpArgs->url = $start_module->mid; $tmpArgs->site_srl = 0; $output = executeQuery('menu.getMenuItemByUrl', $tmpArgs); if (!$output->toBool()) { return new Object(-1, 'fail_to_update'); } $menu_srl = $output->data->menu_srl; } $output = $oMenuAdminModel->getMenu($menu_srl); $menu_srl_list[] = $menu_srl; $menu_name_list[$menu_srl] = $output->title; $apply_layout = Context::get('apply_layout'); $apply_mobile_view = Context::get('apply_mobile_view'); if ($apply_layout == 'Y' || $apply_mobile_view == 'Y') { $menu_args = new stdClass(); $menu_args->menu_srl = $menu_srl; $menu_args->site_srl = $layout_info->site_srl; $output = executeQueryArray('layout.getLayoutModules', $menu_args); if ($output->data) { $modules = array(); for ($i = 0; $i < count($output->data); $i++) { $modules[] = $output->data[$i]->module_srl; } if (count($modules)) { $update_args = new stdClass(); $update_args->module_srls = implode(',', $modules); if ($apply_layout == "Y") { $update_args->layout_srl = $args->layout_srl; } if ($layout_info->layout_type == "M") { if (Context::get('apply_mobile_view') == "Y") { $update_args->use_mobile = "Y"; } $output = executeQuery('layout.updateModuleMLayout', $update_args); } else { $output = executeQuery('layout.updateModuleLayout', $update_args); } $oCacheHandler = CacheHandler::getInstance('object', null, true); if ($oCacheHandler->isSupport()) { $oCacheHandler->invalidateGroupKey('site_and_module'); } } } } } } $tmpDir = sprintf('./files/attach/images/%s/tmp', $args->layout_srl); // Separately handle if a type of extra_vars is an image if ($layout_info->extra_var) { foreach ($layout_info->extra_var as $name => $vars) { if ($vars->type != 'image') { continue; } $fileName = $extra_vars->{$name}; if ($vars->value == $fileName) { continue; } FileHandler::removeFile($vars->value); if (!$fileName) { continue; } $pathInfo = pathinfo($fileName); $tmpFileName = sprintf('%s/tmp/%s', $pathInfo['dirname'], $pathInfo['basename']); if (!FileHandler::moveFile($tmpFileName, $fileName)) { unset($extra_vars->{$name}); } } } // Save header script into "config" of layout module $oModuleModel = getModel('module'); $oModuleController = getController('module'); $layout_config = new stdClass(); $layout_config->header_script = Context::get('header_script'); $oModuleController->insertModulePartConfig('layout', $args->layout_srl, $layout_config); // Save a title of the menu $extra_vars->menu_name_list = $menu_name_list; // Variable setting for DB insert $args->extra_vars = serialize($extra_vars); $output = $this->updateLayout($args); if (!$output->toBool()) { return $output; } FileHandler::removeDir($tmpDir); if (!$is_sitemap) { return $this->setRedirectUrl(Context::get('error_return_url'), $output); } else { $context = Context::getInstance(); $context->setRequestMethod('JSON'); $this->setMessage('success'); } }
/** * @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 = null; $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); $oCacheHandler = CacheHandler::getInstance('object', null, true); if ($oCacheHandler->isSupport()) { $oCacheHandler->invalidateGroupKey('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->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]))) { unset($args); $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'); }
/** * @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); } $oCacheHandler = CacheHandler::getInstance('object', null, true); if ($oCacheHandler->isSupport()) { $oCacheHandler->invalidateGroupKey('site_and_module'); } $this->setMessage('success_updated'); }
$page_error[] = "Could not unlink " . $curFile; } } } } if ($readingZip->getErrors()) { $page_error[] = $readingZip->getErrors(); } else { Config::set('upd_CodeVersion', $piece['version']); $qry = DBFactory::getDBQuery(true); $qry->execute("INSERT INTO `kb3_config` (cfg_site, cfg_key, cfg_value) " . "SELECT cfg_site, 'upd_codeVersion', '{$piece['version']}' FROM `kb3_config` " . "GROUP BY cfg_site ON DUPLICATE KEY UPDATE cfg_value = '{$piece['version']}';"); $codeversion = $piece['version']; } //kill the template and page caches CacheHandler::removeByAge('store', 0, true); CacheHandler::removeByAge('templates_c', 0, true); break; } } } } } } //if we've finished an action, reparse the xml if (isset($_GET['db_apply_ref']) || isset($_GET['db_dl_ref']) || isset($_GET['code_apply_ref']) || isset($_GET['code_dl_ref'])) { $parser->retrieveData(); } //list the db updates $db = $parser->getDBInfo(); $lowestDB = $parser->getLowestDBVersion(); if ($parser->getLatestDBVersion() > $dbversion) {
function _clearMemberCache($member_srl, $site_srl = 0) { $oCacheHandler = CacheHandler::getInstance('object', NULL, TRUE); if ($oCacheHandler->isSupport()) { $object_key = 'member_groups:' . getNumberingPath($member_srl) . $member_srl . '_' . $site_srl; $cache_key = $oCacheHandler->getGroupKey('member', $object_key); $oCacheHandler->delete($cache_key); if ($site_srl !== 0) { $object_key = 'member_groups:' . getNumberingPath($member_srl) . $member_srl . '_0'; $cache_key = $oCacheHandler->getGroupKey('member', $object_key); $oCacheHandler->delete($cache_key); } } $oCacheHandler = CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport()) { $object_key = 'member_info:' . getNumberingPath($member_srl) . $member_srl; $cache_key = $oCacheHandler->getGroupKey('member', $object_key); $oCacheHandler->delete($cache_key); } }
/** * compiles specified tpl file and execution result in Context into resultant content * @param string $tpl_path path of the directory containing target template file * @param string $tpl_filename target template file's name * @param string $tpl_file if specified use it as template file's full path * @return string Returns compiled result in case of success, NULL otherwise */ public function compile($tpl_path, $tpl_filename, $tpl_file = '') { $buff = false; // store the starting time for debug information if (__DEBUG__ == 3) { $start = getMicroTime(); } // initiation $this->init($tpl_path, $tpl_filename, $tpl_file); // if target file does not exist exit if (!$this->file || !file_exists($this->file)) { return "Err : '{$this->file}' template file does not exists."; } // for backward compatibility if (is_null(self::$rootTpl)) { self::$rootTpl = $this->file; } $source_template_mtime = filemtime($this->file); $latest_mtime = $source_template_mtime > $this->handler_mtime ? $source_template_mtime : $this->handler_mtime; // cache control $oCacheHandler = CacheHandler::getInstance('template'); // get cached buff if ($oCacheHandler->isSupport()) { $cache_key = 'template:' . $this->file; $buff = $oCacheHandler->get($cache_key, $latest_mtime); } else { if (is_readable($this->compiled_file) && filemtime($this->compiled_file) > $latest_mtime && filesize($this->compiled_file)) { $buff = 'file://' . $this->compiled_file; } } if ($buff === FALSE) { $buff = $this->parse(); if ($oCacheHandler->isSupport()) { $oCacheHandler->put($cache_key, $buff); } else { FileHandler::writeFile($this->compiled_file, $buff); } } $output = $this->_fetch($buff); if ($__templatehandler_root_tpl == $this->file) { $__templatehandler_root_tpl = null; } // store the ending time for debug information if (__DEBUG__ == 3) { $GLOBALS['__template_elapsed__'] += getMicroTime() - $start; } return $output; }
/** * Delete cached group data * @return void */ function _deleteMemberGroupCache($site_srl = 0) { //remove from cache $oCacheHandler = CacheHandler::getInstance('object', null, true); if ($oCacheHandler->isSupport()) { $oCacheHandler->invalidateGroupKey('member'); } }
/** * 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 $oCacheHandler = CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport()) { // Invalidate newest comments. Per document cache is invalidated inside document admin controller. $oCacheHandler->invalidateGroupKey('newestCommentsList'); } return $output; }
/** * Parse loaded template * * @param integer $level Current level of parsing * @param array $tags Leave blank, used for recursion * @param boolean $parent_block If parent tag is block element */ public function parse($tags = array()) { global $section, $action, $language, $template_path, $system_template_path; if (!$this->active && empty($tags)) { return; } // get language handler for later $language_handler = MainLanguageHandler::getInstance(); // take the tag list for parsing $tag_array = empty($tags) ? $this->engine->document->tagChildren : $tags; // start parsing tags $count = count($tag_array); for ($i = 0; $i < $count; $i++) { $tag = $tag_array[$i]; // if tag has eval set if (isset($tag->tagAttrs['cms:eval']) || isset($tag->tagAttrs['eval'])) { // get evaluation values if (isset($tag->tagAttrs['eval'])) { $value = $tag->tagAttrs['eval']; } else { $value = $tag->tagAttrs['cms:eval']; } $eval_params = explode(',', $value); foreach ($eval_params as $param) { // prepare module includes for evaluation $settings = array(); if (!is_null($this->module)) { $settings = $this->module->settings; } $params = $this->params; $to_eval = $tag->tagAttrs[$param]; $tag->tagAttrs[$param] = eval('global $section, $action, $language, $language_rtl, $language_handler; return ' . $to_eval . ';'); } // unset param unset($tag->tagAttrs['cms:eval']); } if (isset($tag->tagAttrs['cms:optional'])) { // get evaluation values $optional_params = explode(',', $tag->tagAttrs['cms:optional']); foreach ($optional_params as $param) { // prepare module includes for evaluation $settings = array(); if (!is_null($this->module)) { $settings = $this->module->settings; } $params = $this->params; $to_eval = $tag->tagAttrs[$param]; $value = eval('global $section, $action, $language, $language_rtl, $language_handler; return ' . $to_eval . ';'); if ($value == false) { unset($tag->tagAttrs[$param]); } else { $tag->tagAttrs[$param] = $value; } } // unset param unset($tag->tagAttrs['cms:optional']); } // implement tooltip if (isset($tag->tagAttrs['cms:tooltip'])) { if (!is_null($this->module)) { $value = $this->module->getLanguageConstant($tag->tagAttrs['cms:tooltip']); } else { $value = $language_handler->getText($tag->tagAttrs['cms:tooltip']); } $tag->tagAttrs['data-tooltip'] = $value; unset($tag->tagAttrs['cms:tooltip']); } // implement constants if (isset($tag->tagAttrs['cms:constant'])) { $params = explode(',', $tag->tagAttrs['cms:constant']); if (count($params) > 0) { foreach ($params as $param) { if (!is_null($this->module)) { $tag->tagAttrs[$param] = $this->module->getLanguageConstant($tag->tagAttrs[$param]); } else { $tag->tagAttrs[$param] = $language_handler->getText($tag->tagAttrs[$param]); } } } unset($tag->tagAttrs['cms:constant']); } // check if specified tag shouldn't be cached $skip_cache = false; if (isset($tag->tagAttrs['skip_cache'])) { // unset param unset($tag->tagAttrs['skip_cache']); // get cache handler $cache = CacheHandler::getInstance(); // only if current URL is being cached, we start dirty area if ($cache->isCaching()) { $cache->startDirtyArea(); $skip_cache = true; // reconstruct template for cache, // ugly but we are not doing it a lot $data = $this->getDataForCache($tag); $cache->setCacheForDirtyArea($data); } } // now parse the tag switch ($tag->tagName) { // handle tag used for setting session variable case '_session': case 'cms:session': $name = $tag->tagAttrs['name']; // allow setting referral only once per seesion if (isset($tag->tagAttrs['once'])) { $only_once = in_array($tag->tagAttrs['once'], array(1, 'yes')); } else { $only_once = false; } $should_set = $only_once && !isset($_SESSION[$name]) || !$only_once; // store value if (!in_array($name, $this->protected_variables) && $should_set) { $_SESSION[$name] = $tag->tagAttrs['value']; } break; // transfer control to module // transfer control to module case '_module': case 'cms:module': if (class_exists($tag->tagAttrs['name'])) { $module = call_user_func(array($tag->tagAttrs['name'], 'getInstance')); $module->transferControl($tag->tagAttrs, $tag->tagChildren); } break; // load other template // load other template case '_template': case 'cms:template': $file = $tag->tagAttrs['file']; $path = key_exists('path', $tag->tagAttrs) ? $tag->tagAttrs['path'] : ''; if (!is_null($this->module)) { $path = preg_replace('/^%module%/i', $this->module->path, $path); $path = preg_replace('/^%templates%/i', $template_path, $path); } $new = new TemplateHandler($file, $path); $new->setLocalParams($this->params); $new->parse(); break; // raw text copy // raw text copy case '_raw': case 'cms:raw': if (key_exists('file', $tag->tagAttrs)) { // if file attribute is specified $file = $tag->tagAttrs['file']; $path = key_exists('path', $tag->tagAttrs) ? $tag->tagAttrs['path'] : $template_path; $text = file_get_contents($path . $file); } elseif (key_exists('text', $tag->tagAttrs)) { // if text attribute is specified $text = $tag->tagAttrs['text']; } else { // in any other case we display data inside tag $text = $tag->tagData; } echo $text; break; // multi language constants // multi language constants case '_text': case 'cms:text': $constant = $tag->tagAttrs['constant']; $language = key_exists('language', $tag->tagAttrs) ? $tag->tagAttrs['language'] : $language; $text = ""; // check if constant is module based if (key_exists('module', $tag->tagAttrs)) { if (class_exists($tag->tagAttrs['module'])) { $module = call_user_func(array($tag->tagAttrs['module'], 'getInstance')); $text = $module->getLanguageConstant($constant, $language); } } else { // use default language handler $text = MainLanguageHandler::getInstance()->getText($constant, $language); } echo $text; break; // support for markdown // support for markdown case 'cms:markdown': $char_count = isset($tag->tagAttrs['chars']) ? fix_id($tag->tagAttrs['chars']) : null; $end_with = isset($tag->tagAttrs['end_with']) ? fix_id($tag->tagAttrs['end_with']) : null; $name = isset($tag->tagAttrs['param']) ? $tag->tagAttrs['param'] : null; $multilanguage = isset($tag->tagAttrs['multilanguage']) ? $tag->tagAttrs['multilanguage'] == 'yes' : false; // get content for parsing if (is_null($name)) { $content = $tag->tagData; } $content = $multilanguage ? $this->params[$name][$language] : $this->params[$name]; // convert to HTML $content = Markdown($content); // limit words if specified if (!is_null($char_count)) { if (is_null($end_with)) { $content = limit_words($content, $char_count); } else { $content = limit_words($content, $char_count, $end_with); } } echo $content; break; // call section specific data // call section specific data case '_section_data': case 'cms:section_data': if (!is_null($this->module)) { $file = $this->module->getSectionFile($section, $action, $language); $new = new TemplateHandler(basename($file), dirname($file) . '/'); $new->setLocalParams($this->params); $new->setMappedModule($this->module); $new->parse(); } else { // log error trigger_error('Mapped module is not loaded! File: ' . $this->file, E_USER_WARNING); } break; // print multilanguage data // print multilanguage data case '_language_data': case 'cms:language_data': $name = isset($tag->tagAttrs['param']) ? $tag->tagAttrs['param'] : null; if (!isset($this->params[$name]) || !is_array($this->params[$name]) || is_null($name)) { break; } $template = new TemplateHandler('language_data.xml', $system_template_path); $template->setMappedModule($this->module); foreach ($this->params[$name] as $lang => $data) { $params = array('param' => $name, 'language' => $lang, 'data' => $data); $template->restoreXML(); $template->setLocalParams($params); $template->parse(); } break; // replace tag data string with matching params // replace tag data string with matching params case '_replace': case 'cms:replace': $pool = isset($tag->tagAttrs['param']) ? $this->params[$tag->tagAttrs['param']] : $this->params; $keys = array_keys($pool); $values = array_values($pool); foreach ($keys as $i => $key) { $keys[$i] = "%{$key}%"; } // we can't replact string with array, only matching data types foreach ($values as $i => $value) { if (is_array($value)) { unset($keys[$i]); unset($values[$i]); } } echo str_replace($keys, $values, $tag->tagData); break; // conditional tag // conditional tag case '_if': case 'cms:if': $settings = !is_null($this->module) ? $this->module->settings : array(); $params = $this->params; $condition = true; // check if section is specified and matches if (isset($tag->tagAttrs['section'])) { $condition &= $tag->tagAttrs['section'] == $section; } // check if action is specified and matches if (isset($tag->tagAttrs['action'])) { $condition &= $tag->tagAttrs['action'] == $action; } // check custom condition if (isset($tag->tagAttrs['condition'])) { $to_eval = $tag->tagAttrs['condition']; $eval_result = eval('global $section, $action, $language, $language_rtl, $language_handler; return ' . $to_eval . ';') == true; $condition &= $eval_result; } // parse children if ($condition) { $this->parse($tag->tagChildren); } break; // conditional tag parsed for desktop version // conditional tag parsed for desktop version case 'cms:desktop': if (_DESKTOP_VERSION) { $this->parse($tag->tagChildren); } break; // conditional tag parsed for mobile version // conditional tag parsed for mobile version case 'cms:mobile': if (_MOBILE_VERSION) { $this->parse($tag->tagChildren); } break; // conditional tag parsed for users that are logged in // conditional tag parsed for users that are logged in case 'cms:user': if ($_SESSION['logged']) { $this->parse($tag->tagChildren); } break; // conditional tag parsed for guests // conditional tag parsed for guests case 'cms:guest': if (!$_SESSION['logged']) { $this->parse($tag->tagChildren); } break; // variable // variable case '_var': case 'cms:var': $settings = array(); if (!is_null($this->module)) { $settings = $this->module->settings; } $params = $this->params; $to_eval = $tag->tagAttrs['name']; echo eval('global $section, $action, $language, $language_rtl, $language_handler; return ' . $to_eval . ';'); break; // support for script tag // support for script tag case 'cms:script': if (class_exists('head_tag')) { $head_tag = head_tag::getInstance(); $head_tag->addTag('script', $tag->tagAttrs); } break; // support for collection module // support for collection module case 'cms:collection': if (array_key_exists('include', $tag->tagAttrs) && class_exists('collection')) { $scripts = fix_chars(explode(',', $tag->tagAttrs['include'])); $collection = collection::getInstance(); $collection->includeScript($scripts); } break; // support for link tag // support for link tag case 'cms:link': if (class_exists('head_tag')) { $head_tag = head_tag::getInstance(); $head_tag->addTag('link', $tag->tagAttrs); } break; // support for parameter based choice // support for parameter based choice case 'cms:choice': $param_value = null; if (array_key_exists('param', $tag->tagAttrs)) { // grap param value from GET or POST parameters $param_name = fix_chars($tag->tagAttrs['param']); $param_value = isset($_REQUEST[$param_name]) ? fix_chars($_REQUEST[$param_name]) : null; } else { if (array_key_exists('value', $tag->tagAttrs)) { // use param value specified $param_value = fix_chars($tag->tagAttrs['value']); } } // parse only option foreach ($tag->tagChildren as $option) { if (!$option->tagName == 'option') { continue; } $option_value = isset($option->tagAttrs['value']) ? $option->tagAttrs['value'] : null; $option_default = isset($option->tagAttrs['default']) ? $option->tagAttrs['default'] == 1 : false; // values match or option is default, parse its content if ($option_value == $param_value || $option_default) { $this->parse($option->tagChildren); break; } } break; // default action for parser, draw tag // default action for parser, draw tag default: if (in_array($tag->tagName, array_keys($this->handlers))) { // custom tag handler is set... $handle = $this->handlers[$tag->tagName]; $obj = $handle['object']; $function = $handle['function']; $obj->{$function}($tag->tagAttrs, $tag->tagChildren); } else { // default tag handler echo '<' . $tag->tagName . $this->getTagParams($tag->tagAttrs) . '>'; if (count($tag->tagChildren) > 0) { $this->parse($tag->tagChildren); } if (count($tag->tagData) > 0) { echo $tag->tagData; } $close_tag = $this->close_all_tags ? true : !in_array($tag->tagName, $this->tags_without_end); if ($close_tag) { echo '</' . $tag->tagName . '>'; } } break; } // end cache dirty area if initialized if ($skip_cache) { $cache->endDirtyArea(); } } }
/** * @brief Widget cache handling */ function getCache($widget, $args, $lang_type = null, $ignore_cache = false) { // If the specified language specifies the current language if (!$lang_type) { $lang_type = Context::getLangType(); } // widget, the cache number and cache values are set $widget_sequence = $args->widget_sequence; $widget_cache = $args->widget_cache; /** * Even if the cache number and value of the cache and return it to extract data */ if (!$ignore_cache && (!$widget_cache || !$widget_sequence)) { $oWidget = $this->getWidgetObject($widget); if (!$oWidget || !method_exists($oWidget, 'proc')) { return; } $widget_content = $oWidget->proc($args); $oModuleController = getController('module'); $oModuleController->replaceDefinedLangCode($widget_content); return $widget_content; } $oCacheHandler = CacheHandler::getInstance('template'); if ($oCacheHandler->isSupport()) { $key = 'widget_cache:' . $widget_sequence; $cache_body = $oCacheHandler->get($key); $cache_body = preg_replace('@<\\!--#Meta:@', '<!--Meta:', $cache_body); } if ($cache_body) { return $cache_body; } else { /** * Cache number and cache values are set so that the cache file should call */ FileHandler::makeDir($this->cache_path); // Wanted cache file $cache_file = sprintf('%s%d.%s.cache', $this->cache_path, $widget_sequence, $lang_type); // If the file exists in the cache, the file validation if (!$ignore_cache && file_exists($cache_file)) { $filemtime = filemtime($cache_file); // Should be modified compared to the time of the cache or in the future if creating more than widget.controller.php file a return value of the cache if ($filemtime + $widget_cache * 60 > $_SERVER['REQUEST_TIME'] && $filemtime > filemtime(_XE_PATH_ . 'modules/widget/widget.controller.php')) { $cache_body = FileHandler::readFile($cache_file); $cache_body = preg_replace('@<\\!--#Meta:@', '<!--Meta:', $cache_body); return $cache_body; } } // cache update and cache renewal of the file mtime touch($cache_file); $oWidget = $this->getWidgetObject($widget); if (!$oWidget || !method_exists($oWidget, 'proc')) { return; } $widget_content = $oWidget->proc($args); $oModuleController = getController('module'); $oModuleController->replaceDefinedLangCode($widget_content); if ($oCacheHandler->isSupport()) { $oCacheHandler->put($key, $widget_content, $widget_cache * 60); } else { FileHandler::writeFile($cache_file, $widget_content); } } return $widget_content; }
/** * 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; } } $oCacheHandler = CacheHandler::getInstance('object', NULL, TRUE); if ($oCacheHandler->isSupport()) { $object_key = 'module_document_extra_keys:' . $module_srl; $cache_key = $oCacheHandler->getGroupKey('site_and_module', $object_key); $oCacheHandler->delete($cache_key); } }
/** * @brief get a comment list of the doc in corresponding woth document_srl. **/ function getReviewList($module_srl, $item_srl, $page = 0, $is_admin = false, $count = 0) { // cache controll $oCacheHandler =& CacheHandler::getInstance('object'); if ($oCacheHandler->isSupport()) { $object_key = 'object:' . $item_srl . '_' . $page . '_' . ($is_admin ? 'Y' : 'N') . '_' . $count; $cache_key = $oCacheHandler->getGroupKey('reviewList', $object_key); $output = $oCacheHandler->get($cache_key); } if (!$output) { /* $oStoreModel = getModel('nstore_digital'); $oItemInfo = $oStoreModel->getItemInfo($item_srl); $module_srl = $oItemInfo->module_srl; */ if (!$count) { /* $comment_config = $this->getCommentConfig($module_srl); $comment_count = $comment_config->comment_count; */ if (!$comment_count) { $comment_count = 50; } } else { $comment_count = $count; } // get a very last page if no page exists //if(!$page) $page = (int)( ($oDocument->getCommentCount()-1) / $comment_count) + 1; if (!$page) { $page = 1; } // get a list of comments $args = new stdClass(); $args->item_srl = $item_srl; $args->list_count = $comment_count; $args->page = $page; $args->page_count = 10; $output = executeQueryArray('store_review.getReviewPageList', $args); // return if an error occurs in the query results if (!$output->toBool()) { return $output; } // insert data into CommentPageList table if the number of results is different from stored comments if (!$output->data) { $this->fixCommentList($module_srl, $item_srl); $output = executeQueryArray('store_review.getReviewPageList', $args); if (!$output->toBool()) { return $output; } } //insert in cache if ($oCacheHandler->isSupport()) { $oCacheHandler->put($cache_key, $output); } } return $output; }