diff --git a/classes/widget/WidgetHandler.class.php b/classes/widget/WidgetHandler.class.php index 5c9ba0207..c85c10960 100644 --- a/classes/widget/WidgetHandler.class.php +++ b/classes/widget/WidgetHandler.class.php @@ -13,20 +13,29 @@ * @brief 위젯 캐시 처리 **/ function getCache($sequence, $cache) { + // 위젯 캐시는 캐시 번호와 캐시 시간이 없으면 캐시하지 않는 것으로 처리함 if(!$sequence || !$cache) return; + // 캐시 디렉토리가 없으면 생성하고 return $cache_path = './files/cache/widget_cache/'; if(!is_dir($cache_path)) { FileHandler::makeDir($cache_path); return; } + // 캐시파일명을 구해서 해당 파일이 없으면 return $cache_file = sprintf('%s%d.%s.cache', $cache_path, $sequence, Context::getLangType()); if(!file_exists($cache_file)) return; - $filemtime= filemtime($cache_file); + $filemtime = filemtime($cache_file); + + // 만약 캐시파일이 widgetHandler보다 이전에 생성된 파일이면 새로 캐시해야 함 + if($filemtime < filemtime('./classes/widget/WidgetHandler.class.php')) return; + + // 캐시 파일의 수정일이 캐시시간보다 크면 새로 만들기 위해서 return if($filemtime + $cache*60 < time()) return; + // 캐시 파일 내용을 읽어서 return $output = FileHandler::readFile($cache_file); return $output; } @@ -42,130 +51,170 @@ /** * @brief 위젯을 찾아서 실행하고 결과를 출력 - *
태그 사용 templateHandler에서 WidgetHandler::execute()를 실행하는 코드로 대체하게 된다 + * 태그 사용 templateHandler에서 WidgetHandler::execute()를 실행하는 코드로 대체하게 된다 * - * $include_info가 true일 경우 css 코드와 위젯핸들링을 위한 코드까지 포함하도록 한다 + * $include_info가 true일 경우 페이지 수정시 위젯 핸들링을 위한 코드까지 포함함 **/ function execute($widget, $args, $include_info = false) { // 디버그를 위한 위젯 실행 시간 저장 if(__DEBUG__==3) $start = getMicroTime(); - $args->style = preg_replace('/background\-image: url\(none\)/is','', $args->style); - - // widget중 widgetContent 는 page 모듈에 종속적인 위젯으로 직접 page.admin.controller.php를 호출하여 처리를 해야 함 (차후 정리 필요) - if($widget == 'widgetContent') { - $style = $args->style; - $body = base64_decode($args->body); - $widget_padding_left = $args->widget_padding_left; - $widget_padding_right = $args->widget_padding_right; - $widget_padding_top = $args->widget_padding_top; - $widget_padding_bottom = $args->widget_padding_bottom; - if($include_info) { - $oWidgetController = &getController('widget'); - $tpl = $oWidgetController->transEditorContent($body, $args); - } else { - $tpl = sprintf('', $style, $widget_padding_top, $widget_padding_right, $widget_padding_bottom, $widget_padding_left, $body); + // args값에서 urldecode를 해줌 + $object_vars = get_object_vars($args); + if(count($object_vars)) { + foreach($object_vars as $key => $val) { + if(in_array($key, array('body','class','style','widget_sequence','widget','widget_padding_left','widget_padding_top','widget_padding_bottom','widget_padding_right'))) continue; + $args->{$key} = urldecode($val); } - return $tpl; - // widget Box일 경우 간단히 변경만 시도함 - } else if($widget == 'widgetBox') { - $style = $args->style; - $widget_padding_left = $args->widget_padding_left; - $widget_padding_right = $args->widget_padding_right; - $widget_padding_top = $args->widget_padding_top; - $widget_padding_bottom = $args->widget_padding_bottom; - if($include_info) { - $tpl = sprintf('