diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index c192cf8264..efff0424d8 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3973,7 +3973,6 @@ function page_header($page_title = '', $display_online_list = true) 'T_UPLOAD_PATH' => "{$phpbb_root_path}{$config['upload_path']}/", 'T_STYLESHEET_LINK' => (!$user->theme['theme_storedb']) ? "{$phpbb_root_path}styles/" . $user->theme['theme_path'] . '/theme/stylesheet.css' : "{$phpbb_root_path}style.$phpEx?sid=$user->session_id&id=" . $user->theme['style_id'] . '&lang=' . $user->data['user_lang'], 'T_STYLESHEET_NAME' => $user->theme['theme_name'], - 'T_THEME_DATA' => (!$user->theme['theme_storedb']) ? '' : $user->theme['theme_data'], 'SITE_LOGO_IMG' => $user->img('site_logo')) ); @@ -3981,6 +3980,73 @@ function page_header($page_title = '', $display_online_list = true) // Once used, we do not want to have the whole theme data twice in memory... if ($user->theme['theme_storedb']) { + // Parse Theme Data + $replace = array( + '{T_THEME_PATH}' => "{$phpbb_root_path}styles/" . $user->theme['theme_path'] . '/theme', + '{T_TEMPLATE_PATH}' => "{$phpbb_root_path}styles/" . $user->theme['template_path'] . '/template', + '{T_IMAGESET_PATH}' => "{$phpbb_root_path}styles/" . $user->theme['imageset_path'] . '/imageset', + '{T_IMAGESET_LANG_PATH}' => "{$phpbb_root_path}styles/" . $user->theme['imageset_path'] . '/imageset/' . $user->data['user_lang'], + '{T_STYLESHEET_NAME}' => $user->theme['theme_name'], + '{S_USER_LANG}' => $user->data['user_lang'] + ); + + $user->theme['theme_data'] = str_replace(array_keys($replace), array_values($replace), $user->theme['theme_data']); + + $matches = array(); + if (strpos($user->theme['theme_data'], '{IMG_') !== false) + { + preg_match_all('#\{IMG_([A-Za-z0-9_]*?)_(WIDTH|HEIGHT|SRC)\}#', $user->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($img_array[$img])) + { + continue; + } + + if (!isset($imgs[$img])) + { + $img_data = &$img_array[$img]; + $imgsrc = ($img_data['image_lang'] ? $img_data['image_lang'] . '/' : '') . $img_data['image_filename']; + $imgs[$img] = array( + 'src' => $phpbb_root_path . 'styles/' . $user->theme['imageset_path'] . '/imageset/' . $imgsrc, + 'width' => $img_data['image_width'], + 'height' => $img_data['image_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)) + { + $user->theme['theme_data'] = str_replace($find, $replace, $user->theme['theme_data']); + } + } + } + + $template->assign_var('T_THEME_DATA', $user->theme['theme_data']); $user->theme['theme_data'] = ''; } diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index bc608426b9..37b251cdaf 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -914,6 +914,8 @@ class session if ($banned && !$return) { + global $template; + // If the session is empty we need to create a valid one... if (empty($this->session_id)) { @@ -934,12 +936,12 @@ class session { global $phpEx; - // Set as a precaution to allow login_box() handling this case correctly as well as this function not being executed again. - define('IN_CHECK_BAN', 1); - $this->setup('ucp'); $this->data['is_registered'] = $this->data['is_bot'] = false; + // Set as a precaution to allow login_box() handling this case correctly as well as this function not being executed again. + define('IN_CHECK_BAN', 1); + login_box("index.$phpEx"); // The false here is needed, else the user is able to circumvent the ban. @@ -948,11 +950,14 @@ class session // Ok, we catch the case of an empty session id for the anonymous user... // This can happen if the user is logging in, banned by username and the login_box() being called "again". - if (empty($this->session_id)) + if (empty($this->session_id) && defined('IN_CHECK_BAN')) { $this->session_create(ANONYMOUS); } + // Because we never have a fully working session we need to embed the style + $template->assign_var('S_FORCE_EMBED_STYLE', true); + // Determine which message to output $till_date = ($ban_row['ban_end']) ? $this->format_date($ban_row['ban_end']) : ''; $message = ($ban_row['ban_end']) ? 'BOARD_BAN_TIME' : 'BOARD_BAN_PERM'; diff --git a/phpBB/styles/prosilver/template/overall_header.html b/phpBB/styles/prosilver/template/overall_header.html index b706b73172..d344294503 100644 --- a/phpBB/styles/prosilver/template/overall_header.html +++ b/phpBB/styles/prosilver/template/overall_header.html @@ -77,7 +77,7 @@ - +