From e976f3bc058f07f936c6d624cbb3ceaa53be61df Mon Sep 17 00:00:00 2001 From: Arcturus Date: Sat, 15 Nov 2025 13:01:14 +0900 Subject: [PATCH] fix 8.3 redis error, htmlprocess add features --- AvocadoAmber/_extra_font.php | 93 +- AvocadoAmber/adm/design_form_css.php | 1317 +++++++---------- .../classes/htmlprocess/htmlprocess.class.php | 27 +- AvocadoAmber/common.php | 19 +- AvocadoAmber/config.php | 9 + 5 files changed, 636 insertions(+), 829 deletions(-) diff --git a/AvocadoAmber/_extra_font.php b/AvocadoAmber/_extra_font.php index 8ac3541..18efe83 100644 --- a/AvocadoAmber/_extra_font.php +++ b/AvocadoAmber/_extra_font.php @@ -2,25 +2,82 @@ if (!defined('_GNUBOARD_')) exit; -$font_sql = "SELECT * FROM {$g5['font_table']} ORDER BY font_name ASC"; -$font_result = sql_query($font_sql); +function getFontCSSWithCache() +{ + global $g5; + $cache_key = 'font_css_cache'; + $cache_duration = 300; -echo ""; + +function getFontCSSWithFileCache($g5, $cache_duration) +{ + $cache_file = G5_DATA_PATH . '/cache/font_css_cache.txt'; + $cache_dir = dirname($cache_file); + + if (!is_dir($cache_dir)) { + @mkdir($cache_dir, 0755, true); + } + + if (file_exists($cache_file) && (time() - filemtime($cache_file)) < $cache_duration) { + return file_get_contents($cache_file); + } + + $css_content = generateFontCSS($g5); + + @file_put_contents($cache_file, $css_content, LOCK_EX); + + return $css_content; +} + +function generateFontCSS($g5) +{ + $font_sql = "SELECT * FROM {$g5['font_table']} ORDER BY font_name ASC"; + $font_result = sql_query($font_sql); + $css_content = ""; + return $css_content; +} + +echo getFontCSSWithCache(); diff --git a/AvocadoAmber/adm/design_form_css.php b/AvocadoAmber/adm/design_form_css.php index 9d02f58..3a610dc 100644 --- a/AvocadoAmber/adm/design_form_css.php +++ b/AvocadoAmber/adm/design_form_css.php @@ -1,38 +1,172 @@ @charset "utf-8"; @@ -43,23 +177,18 @@ Design Manager Setting Style: 자동생성 CSS - 모바일 사이즈 기준 (공통) : px ***************************************************************/ - + /************************************************************** 기본 레이아웃 ***************************************************************/ - -.fix-layout { } +.fix-layout { max-width:px; } + @media all and (max-width:px) { -.fix-layout { } -#body > .fix-layout > .mid-layout {padding-left:20px; padding-right:20px;} +.fix-layout { max-width:px; } +#body > .fix-layout > .mid-layout { padding-left:20px; padding-right:20px; } } @@ -67,30 +196,34 @@ $middle_content_width = $content_width + 40; 기본 폰트 설정 ***************************************************************/ -* {} + + * { font-family:, sans-serif; } + + body { } -.txt-default { -} -a, .txt-point, .sch_word { -} +?> +} -.txt-menu-font {} +.txt-default { + +} + +a, .txt-point, .sch_word { + +} + + + .txt-menu-font { font-family:, sans-serif; } + /************************************************************** @@ -98,61 +231,32 @@ if ($css['color_point'][0]) ***************************************************************/ .enterWrapper { -} + +} + .enterWrapper .guide { } - +?> +} @media all and (min-width: px) { .admin-preview-box, html.single:before { -} + +} } @media all and (max-width: px) { .admin-preview-box, html.single:before { -} + +} } @@ -160,309 +264,198 @@ if ($css['m_background'][5]) 메뉴 스타일 설정 ***************************************************************/ -/* 관리자 미리보기 스타일 정의 */ -.admin-preview-box .gnbWrap { } -.admin-preview-box .gnbWrap .tooltips { -} + + +/* 관리자 미리보기 & 공통 스타일 */ +.admin-preview-box .gnbWrap, +#header .gnbWrap, +#mo_header .gnbWrap { + +} + +.admin-preview-box .gnbWrap .tooltips, +#header .gnbWrap .tooltips, +#mo_header .gnbWrap .tooltips { + +} #topCont a .icons, .icons-link-box .icons, -.admin-preview-box .gnbWrap .icons { +.admin-preview-box .gnbWrap .icons, +#header .gnbWrap .icons { } +?> +} #topCont a .icons:before, .icons-link-box a .icons:before, -.admin-preview-box .gnbWrap .icons:before { -} -.admin-preview-box .gnbWrap .tooltips { -} - -/* 사용자단 스타일 정의 */ -#header .gnbWrap, -#mo_header .gnbWrap { } -#header .gnbWrap .tooltips, -#mo_header .gnbWrap .tooltips { -} - -@media all and (min-width: px) { -#header { -} -#header .gnbWrap { -} -#header .gnbWrap li { -} -#header .gnbWrap li.line { -} -#header .gnbWrap .tooltips { -} -#header .gnbWrap a:hover .tooltips { -} - -#header .gnbWrap .icons { -} +.admin-preview-box .gnbWrap .icons:before, #header .gnbWrap .icons:before { - } -if ($css['menu_icon'][0]) - echo "background-color:" . hex2rgba($css['menu_icon'][0], $css['menu_icon'][1]) . "; "; -if ($css['menu_icon'][2]) - echo "background:linear-gradient(0deg, " . hex2rgba($css['menu_icon'][2], $css['menu_icon'][3]) . " 0%, " . hex2rgba($css['menu_icon'][4], $css['menu_icon'][5]) . " 100%); "; -if ($css['menu_icon'][6]) - echo "border-color:" . hex2rgba($css['menu_icon'][6], $css['menu_icon'][7]) . "; "; -if ($css['menu_icon'][8]) - echo "border-style:{$css['menu_icon'][8]}; "; -if ($css['menu_icon'][9]) - echo "border-width:{$css['menu_icon'][9]}px; "; -?>} + +.admin-preview-box .gnbWrap .tooltips, #header .gnbWrap .tooltips { -} + + } + +/* PC 헤더 위치 설정 */ +@media all and (min-width: px) { + + +#header { } +#header .gnbWrap { } + + #header .gnbWrap li { } + +#header .gnbWrap li.line { } +#header .gnbWrap .tooltips { } +#header .gnbWrap a:hover .tooltips { } +} + +/* 모바일 헤더 */ @media all and (max-width: px) { #mo_header { } -#mo_header .gnbWrap a { -} -#mo_header .gnbWrap li.line { -} -body.open-gnb .control-mobile-menu { -} +if (isset_value($css['menu_tooltip'], 0)) + echo css_color($css['menu_tooltip'][0], isset($css['menu_tooltip'][1]) ? $css['menu_tooltip'][1] : null, 'background-color'); +if (isset_value($css['menu_tooltip'], 2)) + echo css_color($css['menu_tooltip'][2], isset($css['menu_tooltip'][3]) ? $css['menu_tooltip'][3] : null, 'color'); +?> } +#mo_header .gnbWrap a, +#mo_header .gnbWrap li.line, +body.open-gnb .control-mobile-menu { + +} + +#mo_header .gnbWrap li.line { + +} +} /************************************************************** 스크롤 / 마우스 드래그 블록 색상 지정 ***************************************************************/ -*::-webkit-scrollbar { -} + + *::-webkit-scrollbar { width:px; height:px; } + + *::-webkit-scrollbar-track { -} + +} + *::-webkit-scrollbar-thumb { } +if (isset_value($css['scrollbar'], 3)) + echo css_color($css['scrollbar'][3], isset($css['scrollbar'][4]) ? $css['scrollbar'][4] : null, 'background-color'); +echo css_border_radius(isset($css['scrollbar']) ? $css['scrollbar'] : [], 5); +?> +} * { -} + +} -::selection { -} -::-moz-selection { -} +::selection, +::-moz-selection, ::-webkit-selection { } +if (isset_value($css['color_point'], 0)) + echo css_color($css['color_point'][0], isset($css['color_point'][1]) ? $css['color_point'][1] : null, 'background'); +if (isset_value($css['color_bak'], 0)) + echo css_color($css['color_bak'][0], isset($css['color_bak'][1]) ? $css['color_bak'][1] : null, 'color'); +?> +} /************************************************************** @@ -471,129 +464,59 @@ if ($css['color_bak'][0]) .ui-btn { +} -if ($css['btn_default'][12]) - echo "border-top-left-radius:{$css['btn_default'][12]}px; "; -if ($css['btn_default'][13]) - echo "border-top-right-radius:{$css['btn_default'][13]}px; "; -if ($css['btn_default'][14]) - echo "border-bottom-right-radius:{$css['btn_default'][14]}px; "; -if ($css['btn_default'][15]) - echo "border-bottom-left-radius:{$css['btn_default'][15]}px; "; - -if ($css['btn_default'][0]) - echo "background-color:" . hex2rgba($css['btn_default'][0], $css['btn_default'][1]) . "; "; -if ($css['btn_default'][2]) - echo "color:" . hex2rgba($css['btn_default'][2], $css['btn_default'][3]) . "; "; -if ($css['btn_default'][4]) - echo "border-color:" . hex2rgba($css['btn_default'][4], $css['btn_default'][5]) . "; "; -?>} .ui-btn:hover { -} + +} + .ui-btn.point { - +} -if ($css['btn_point'][0]) - echo "background-color:" . hex2rgba($css['btn_point'][0], $css['btn_point'][1]) . "; "; -if ($css['btn_point'][2]) - echo "color:" . hex2rgba($css['btn_point'][2], $css['btn_point'][3]) . "; "; -if ($css['btn_point'][4]) - echo "border-color:" . hex2rgba($css['btn_point'][4], $css['btn_point'][5]) . "; "; -?>} .ui-btn.point:hover { -} + +} + .ui-btn.etc { - +} -if ($css['btn_etc'][0]) - echo "background-color:" . hex2rgba($css['btn_etc'][0], $css['btn_etc'][1]) . "; "; -if ($css['btn_etc'][2]) - echo "color:" . hex2rgba($css['btn_etc'][2], $css['btn_etc'][3]) . "; "; -if ($css['btn_etc'][4]) - echo "border-color:" . hex2rgba($css['btn_etc'][4], $css['btn_etc'][5]) . "; "; -?>} .ui-btn.etc:hover { -} + +} -a.ui-btn { -} -.ui-btn.small { -} -a.ui-btn.small { -} -.ui-btn.big { -} -a.ui-btn.big { -} + + a.ui-btn { line-height:px; } + .ui-btn.small { height:px; } + a.ui-btn.small { line-height:px; } + .ui-btn.big { height:px; } + a.ui-btn.big { line-height:px; } + + + + .ui-btn.big { font-size:px; } + /************************************************************** 검색박스 영역 ***************************************************************/ -#bo_sch { } -#bo_sch button { -} + + #bo_sch { margin-top:px; } + #bo_sch button { width:px; height:px; font-size:px; } + /************************************************************** @@ -604,68 +527,49 @@ if ($css['input_bak'][2]) #bo_w, #bo_v { } -if ($css['board_table'][9]) - echo "border-top-left-radius:{$css['board_table'][9]}px; "; -if ($css['board_table'][10]) - echo "border-top-right-radius:{$css['board_table'][10]}px; "; -if ($css['board_table'][11]) - echo "border-bottom-right-radius:{$css['board_table'][11]}px; "; -if ($css['board_table'][12]) - echo "border-bottom-left-radius:{$css['board_table'][12]}px; "; -?>} - #bo_v .board-title, #bo_v .board-info, #bo_v #bo_vc, #bo_v #bo_v_bot { -} + +} + #bo_v .board-title, #bo_v .board-info { } +?> +} + #bo_v #bo_vc, #bo_v #bo_v_bot { } +?> +} #bo_v .board-title > * { -} -#bo_v #bo_vc .is-reply { -} + +} +#bo_v #bo_vc .is-reply { + +} /************************************************************** @@ -673,30 +577,25 @@ if ($css['form_body'][4]) ***************************************************************/ .pg_wrap { -} + +} + .pg_wrap .pg_page { -} -.pg_wrap .pg_page:hover { -} -.pg_wrap .pg_control { -} + +} + +.pg_wrap .pg_page:hover, .pg_wrap .pg_current { -} + +} + +.pg_wrap .pg_control { + +} /************************************************************** @@ -704,10 +603,9 @@ if ($css['color_point'][0]) ***************************************************************/ hr.line { -} + +} /************************************************************** @@ -720,10 +618,9 @@ input[type="text"], input[type="number"], input[type="password"], select { -} + +} .form-input, input[type="file"], @@ -733,29 +630,30 @@ input[type="password"], textarea, select { } +echo css_border_radius(isset($css['input_bak']) ? $css['input_bak'] : [], 8); +?> +} *::placeholder { -} + +} /************************************************************** @@ -763,62 +661,12 @@ if ($css['input_bak'][11]) ***************************************************************/ .theme-box { - } -?>} .board-notice-box { - } -?>} /************************************************************** @@ -826,81 +674,21 @@ for ($i = 0; $i < count($css['board_notice']['border']); $i++) { ***************************************************************/ .theme-list thead th { - } -?>} + .theme-list tbody th, .theme-list tbody td { - } -?>} .theme-form tbody th { - } -?>} + .theme-form tbody td { - } -?>} - - /************************************************************** @@ -908,166 +696,87 @@ for ($i = 0; $i < count($css['form_body']['border']); $i++) { ***************************************************************/ #load_log_board { -} + +} #log_list { - } -?>} #log_list .item { } +?> +} #log_list .item .item-inner .ui-pic { - } -?>} #log_list .item .item-inner .item-comment { } +?> +} #log_list .item .item-inner .ui-comment { } +?> +} #log_list .item .item-inner .co-header p, #log_list .item .item-inner .co-header p a { } +?> +} #log_list .item .item-inner .co-header p.owner, #log_list .item .item-inner .co-header p.owner a { } +?> +} #log_list .item .item-inner .co-footer .date { } +?> +} #log_list .item .item-inner .co-content .other-site-link { -} + +} #log_list .item .item-inner .co-content .link_hash_tag { -} + +} #log_list .item .item-inner .co-content .log_link_tag { -} + +} diff --git a/AvocadoAmber/classes/htmlprocess/htmlprocess.class.php b/AvocadoAmber/classes/htmlprocess/htmlprocess.class.php index 34d6861..547afab 100644 --- a/AvocadoAmber/classes/htmlprocess/htmlprocess.class.php +++ b/AvocadoAmber/classes/htmlprocess/htmlprocess.class.php @@ -4,6 +4,9 @@ class html_process protected $latecss = []; protected $css = []; protected $js = []; + protected $beforeBuffer = ""; + protected $afterBuffer = ""; + protected $replacer = []; private function updateLoginTable() { @@ -188,9 +191,24 @@ class html_process }*/ } + public function appendHtml($html) + { + $this->afterBuffer .= $html; + } + + public function prependHtml($html) + { + $this->beforeBuffer .= $html; + } + + public function addRegexReplace($pattern, $replace) + { + $this->replacer[] = [$pattern, $replace]; + } + public function run() { - global $config, $g5, $member; + global $config; $this->updateLoginTable(); $this->cleanOldLoginRecords($config['cf_login_minutes']); @@ -203,6 +221,13 @@ class html_process $buffer = $this->injectStyles($buffer, $stylesheet, $latestylesheet); $buffer = $this->injectJavascript($buffer, $javascript); + foreach($this->replacer as $v) { + $buffer = preg_replace($v[0], $v[1], $buffer); + } + + $buffer = preg_replace('#([^<]*]*>)#', "$1{$this->beforeBuffer}", $buffer); + $buffer = preg_replace('##', "" . $this->afterBuffer, $buffer); + if (class_exists("EventHandler")) { EventHandler::triggerEvent("amber.renderhtml_before_print", $buffer); } diff --git a/AvocadoAmber/common.php b/AvocadoAmber/common.php index e9b0351..7cc061b 100644 --- a/AvocadoAmber/common.php +++ b/AvocadoAmber/common.php @@ -1,4 +1,8 @@