diff options
-rw-r--r-- | phpBB/includes/acp/acp_styles.php | 75 | ||||
-rwxr-xr-x | phpBB/includes/search/fulltext_native.php | 3 | ||||
-rw-r--r-- | phpBB/includes/session.php | 27 | ||||
-rw-r--r-- | phpBB/search.php | 10 | ||||
-rw-r--r-- | phpBB/style.php | 62 |
5 files changed, 135 insertions, 42 deletions
diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php index 116bd3ab8b..56c8369176 100644 --- a/phpBB/includes/acp/acp_styles.php +++ b/phpBB/includes/acp/acp_styles.php @@ -2904,49 +2904,54 @@ pagination_sep = \'{PAGINATION_SEP}\' $mode . '_path' => $path, ); - if ($mode != 'imageset') + switch ($mode) { - switch ($mode) - { - case 'template': - // We set a pre-defined bitfield here which we may use further in 3.2 - $sql_ary += array( - 'bbcode_bitfield' => TEMPLATE_BITFIELD, - 'template_storedb' => $store_db - ); - break; + case 'template': + // We set a pre-defined bitfield here which we may use further in 3.2 + $sql_ary += array( + 'bbcode_bitfield' => TEMPLATE_BITFIELD, + 'template_storedb' => $store_db + ); + break; - case 'theme': - $sql_ary += array( - 'theme_storedb' => $store_db, - 'theme_data' => ($store_db) ? (($root_path) ? $this->db_theme_data($sql_ary, false, $root_path) : '') : '', - 'theme_mtime' => filemtime("{$phpbb_root_path}styles/$path/theme/stylesheet.css") - ); - break; - } - } - else - { - $cfg_data = parse_cfg_file("$root_path$mode/imageset.cfg"); + case 'theme': + // We are only interested in the theme configuration for now + $theme_cfg = parse_cfg_file("{$phpbb_root_path}styles/$path/theme/theme.cfg"); - $imageset_definitions = array(); - foreach ($this->imageset_keys as $topic => $key_array) - { - $imageset_definitions = array_merge($imageset_definitions, $key_array); - } + if (isset($theme_cfg['parse_css_file']) && $theme_cfg['parse_css_file']) + { + $store_db = 1; + } - foreach ($cfg_data as $key => $value) - { - if (strpos($key, 'img_') === 0) + $sql_ary += array( + 'theme_storedb' => $store_db, + 'theme_data' => ($store_db) ? $this->db_theme_data($sql_ary, false, $root_path) : '', + 'theme_mtime' => filemtime("{$phpbb_root_path}styles/$path/theme/stylesheet.css") + ); + break; + + case 'imageset': + $cfg_data = parse_cfg_file("$root_path$mode/imageset.cfg"); + + $imageset_definitions = array(); + foreach ($this->imageset_keys as $topic => $key_array) + { + $imageset_definitions = array_merge($imageset_definitions, $key_array); + } + + foreach ($cfg_data as $key => $value) { - $key = substr($key, 4); - if (in_array($key, $imageset_definitions)) + if (strpos($key, 'img_') === 0) { - $sql_ary[$key] = str_replace('{PATH}', "styles/$path/imageset/", trim($value)); + $key = substr($key, 4); + if (in_array($key, $imageset_definitions)) + { + $sql_ary[$key] = str_replace('{PATH}', "styles/$path/imageset/", trim($value)); + } } } - } - unset($cfg_data); + unset($cfg_data); + break; } $db->sql_transaction('begin'); diff --git a/phpBB/includes/search/fulltext_native.php b/phpBB/includes/search/fulltext_native.php index 674199d69f..679ab3127e 100755 --- a/phpBB/includes/search/fulltext_native.php +++ b/phpBB/includes/search/fulltext_native.php @@ -370,11 +370,13 @@ class fulltext_native extends search_backend } $title_match = ''; + $group_by = true; // Build some display specific sql strings switch ($fields) { case 'titleonly': $title_match = 'title_match = 1'; + $group_by = false; // no break case 'firstpost': $sql_array['FROM'][TOPICS_TABLE] = 't'; @@ -383,6 +385,7 @@ class fulltext_native extends search_backend case 'msgonly': $title_match = 'title_match = 0'; + $group_by = false; break; } diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 998b8be5f6..38107d80db 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1080,8 +1080,33 @@ class user extends session { $this->theme['theme_storedb'] = 1; + $stylesheet = file_get_contents("{$phpbb_root_path}styles/{$this->theme['theme_path']}/theme/stylesheet.css"); + // Match CSS imports + $matches = array(); + preg_match_all('/@import url\(["\'](.*)["\']\);/i', $stylesheet, $matches); + + if (sizeof($matches)) + { + $content = ''; + foreach ($matches[0] as $idx => $match) + { + if ($content = @file_get_contents("{$phpbb_root_path}styles/{$this->theme['theme_path']}/theme/" . $matches[1][$idx])) + { + $content = trim($content); + } + else + { + $content = ''; + } + $stylesheet = str_replace($match, $content, $stylesheet); + } + unset ($content); + } + + $stylesheet = str_replace('./', 'styles/' . $this->theme['theme_path'] . '/theme/', $stylesheet); + $sql_ary = array( - 'theme_data' => implode('', file("{$phpbb_root_path}styles/" . $this->theme['theme_path'] . '/theme/stylesheet.css')), + 'theme_data' => $stylesheet, 'theme_mtime' => time(), 'theme_storedb' => 1 ); diff --git a/phpBB/search.php b/phpBB/search.php index 70a62373cb..185dcb0f50 100644 --- a/phpBB/search.php +++ b/phpBB/search.php @@ -465,12 +465,12 @@ if ($keywords || $author || $author_id || $search_id || $submit) 'S_SEARCH_ACTION' => $u_search, 'S_SHOW_TOPICS' => ($show_results == 'posts') ? false : true, - 'GOTO_PAGE_IMG' => $user->img('icon_post_target', 'GOTO_PAGE'), - 'NEWEST_POST_IMG' => $user->img('icon_topic_newest', 'VIEW_NEWEST_POST'), - 'REPORTED_IMG' => $user->img('icon_topic_reported', 'TOPIC_REPORTED'), - 'UNAPPROVED_IMG' => $user->img('icon_topic_unapproved', 'TOPIC_UNAPPROVED'), + 'GOTO_PAGE_IMG' => $user->img('icon_post_target', 'GOTO_PAGE'), + 'NEWEST_POST_IMG' => $user->img('icon_topic_newest', 'VIEW_NEWEST_POST'), + 'REPORTED_IMG' => $user->img('icon_topic_reported', 'TOPIC_REPORTED'), + 'UNAPPROVED_IMG' => $user->img('icon_topic_unapproved', 'TOPIC_UNAPPROVED'), - 'U_SEARCH_WORDS' => append_sid("{$phpbb_root_path}search.$phpEx", "keywords=$u_hilit" . (($author) ? '&author=' . urlencode($author) : '') . (($author_id) ? '&author_id=' . $author_id : '') . $u_show_results)) + 'U_SEARCH_WORDS' => $u_search) ); if ($sql_where) diff --git a/phpBB/style.php b/phpBB/style.php index 3c93b847a0..075f20db3d 100644 --- a/phpBB/style.php +++ b/phpBB/style.php @@ -74,7 +74,7 @@ if ($id && $sid) if ($user) { - $sql = "SELECT s.style_id, c.theme_data, c.theme_path, c.theme_name, c.theme_mtime, i.imageset_path, t.template_path + $sql = "SELECT s.style_id, c.theme_data, c.theme_path, c.theme_name, c.theme_mtime, i.*, t.template_path FROM {$table_prefix}styles s, {$table_prefix}styles_template t, {$table_prefix}styles_theme c, {$table_prefix}styles_imageset i WHERE s.style_id = $id AND t.template_id = s.template_id @@ -110,6 +110,66 @@ if ($id && $sid) $theme['theme_data'] = str_replace(array_keys($replace), array_values($replace), $theme['theme_data']); + $matches = array(); + preg_match_all('#\{IMG_([A-Za-z0-9_]*?)_(WIDTH|HEIGHT|SRC)\}#', $theme['theme_data'], $matches); + + $imgs = $find = $replace = array(); + if (isset($matches[0]) && sizeof($matches[0])) + { + foreach ($matches[1] as $i => $img) + { + $img = strtolower($img); + if (!isset($theme[$img])) + { + continue; + } + + if (!isset($imgs[$img])) + { + // Do not include dimensions? + if (strpos($theme[$img], '*') === false) + { + $imgsrc = trim($theme[$img]); + $width = $height = null; + } + else + { + list($imgsrc, $height, $width) = explode('*', $theme[$img]); + } + + $imgs[$img] = array( + 'src' => $phpbb_root_path . 'styles/' . $theme['imageset_path'] . '/imageset/' . str_replace('{LANG}', $user['user_lang'], $imgsrc), + 'width' => $width, + 'height' => $height, + ); + } + + switch ($matches[2][$i]) + { + case 'SRC': + $replace = $imgs[$img]['src']; + break; + + case 'WIDTH': + $replace = $imgs[$img]['width']; + break; + + case 'HEIGHT': + $replace = $imgs[$img]['height']; + break; + + default: + continue; + } + $find = $matches[0][$i]; + } + + if (sizeof($find)) + { + $theme['theme_data'] = str_replace($find, $replace, $theme['theme_data']); + } + } + echo $theme['theme_data']; } |