From 4091f873eaa108cebd3192ede979ce61ead09238 Mon Sep 17 00:00:00 2001 From: rxu Date: Mon, 18 Oct 2010 21:25:52 +0800 Subject: [ticket/6712] Bump does not create new topic icon on index. Handle the topic bumping process more properly. PHPBB3-6712 --- phpBB/includes/functions_posting.php | 91 ++++++++++++++++++++++++++++++++++++ phpBB/posting.php | 30 +----------- 2 files changed, 92 insertions(+), 29 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 6fd87db663..041b549cd6 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -2611,4 +2611,95 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u return $url; } +/* +* Handle topic bumping +*/ +function bump_topic($forum_id, $topic_id, &$post_data, $current_time = false) +{ + global $config, $db, $user, $phpEx, $phpbb_root_path; + + if ($current_time === false) + { + $current_time = time(); + } + + // Begin bumping + $db->sql_transaction('begin'); + + // Update the topic's last post post_time + $sql = 'UPDATE ' . POSTS_TABLE . " + SET post_time = $current_time + WHERE post_id = {$post_data['topic_last_post_id']} + AND topic_id = $topic_id"; + $db->sql_query($sql); + + // Sync the topic's last post time, the rest of the topic's last post data isn't changed + $sql = 'UPDATE ' . TOPICS_TABLE . " + SET topic_last_post_time = $current_time, + topic_bumped = 1, + topic_bumper = " . $user->data['user_id'] . " + WHERE topic_id = $topic_id"; + $db->sql_query($sql); + + // Update the forum's last post info + $sql = 'UPDATE ' . FORUMS_TABLE . " + SET forum_last_post_id = " . $post_data['topic_last_post_id'] . ", + forum_last_poster_id = " . $post_data['topic_last_poster_id'] . ", + forum_last_post_subject = '" . $db->sql_escape($post_data['topic_last_post_subject']) . "', + forum_last_post_time = $current_time, + forum_last_poster_name = '" . $db->sql_escape($post_data['topic_last_poster_name']) . "', + forum_last_poster_colour = '" . $db->sql_escape($post_data['topic_last_poster_colour']) . "' + WHERE forum_id = $forum_id"; + $db->sql_query($sql); + + // Update bumper's time of the last posting to prevent flood + $sql = 'UPDATE ' . USERS_TABLE . " + SET user_lastpost_time = $current_time + WHERE user_id = " . $user->data['user_id']; + $db->sql_query($sql); + + $db->sql_transaction('commit'); + + // Mark this topic as posted to + markread('post', $forum_id, $topic_id, $current_time); + + // Mark this topic as read + markread('topic', $forum_id, $topic_id, $current_time); + + // Update forum tracking info + if ($config['load_db_lastread'] && $user->data['is_registered']) + { + $sql = 'SELECT mark_time + FROM ' . FORUMS_TRACK_TABLE . ' + WHERE user_id = ' . $user->data['user_id'] . ' + AND forum_id = ' . $forum_id; + $result = $db->sql_query($sql); + $f_mark_time = (int) $db->sql_fetchfield('mark_time'); + $db->sql_freeresult($result); + } + else if ($config['load_anon_lastread'] || $user->data['is_registered']) + { + $f_mark_time = false; + } + + if (($config['load_db_lastread'] && $user->data['is_registered']) || $config['load_anon_lastread'] || $user->data['is_registered']) + { + // Update forum info + $sql = 'SELECT forum_last_post_time + FROM ' . FORUMS_TABLE . ' + WHERE forum_id = ' . $forum_id; + $result = $db->sql_query($sql); + $forum_last_post_time = (int) $db->sql_fetchfield('forum_last_post_time'); + $db->sql_freeresult($result); + + update_forum_tracking_info($forum_id, $forum_last_post_time, $f_mark_time, false); + } + + add_log('mod', $forum_id, $topic_id, 'LOG_BUMP_TOPIC', $post_data['topic_title']); + + $url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&p={$post_data['topic_last_post_id']}") . "#p{$post_data['topic_last_post_id']}"; + + return $url; +} + ?> \ No newline at end of file diff --git a/phpBB/posting.php b/phpBB/posting.php index f775699cee..89f2dfa2a6 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -321,35 +321,7 @@ if ($mode == 'bump') if ($bump_time = bump_topic_allowed($forum_id, $post_data['topic_bumped'], $post_data['topic_last_post_time'], $post_data['topic_poster'], $post_data['topic_last_poster_id']) && check_link_hash(request_var('hash', ''), "topic_{$post_data['topic_id']}")) { - $db->sql_transaction('begin'); - - $sql = 'UPDATE ' . POSTS_TABLE . " - SET post_time = $current_time - WHERE post_id = {$post_data['topic_last_post_id']} - AND topic_id = $topic_id"; - $db->sql_query($sql); - - $sql = 'UPDATE ' . TOPICS_TABLE . " - SET topic_last_post_time = $current_time, - topic_bumped = 1, - topic_bumper = " . $user->data['user_id'] . " - WHERE topic_id = $topic_id"; - $db->sql_query($sql); - - update_post_information('forum', $forum_id); - - $sql = 'UPDATE ' . USERS_TABLE . " - SET user_lastpost_time = $current_time - WHERE user_id = " . $user->data['user_id']; - $db->sql_query($sql); - - $db->sql_transaction('commit'); - - markread('post', $forum_id, $topic_id, $current_time); - - add_log('mod', $forum_id, $topic_id, 'LOG_BUMP_TOPIC', $post_data['topic_title']); - - $meta_url = append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id&p={$post_data['topic_last_post_id']}") . "#p{$post_data['topic_last_post_id']}"; + $meta_url = bump_topic($forum_id, $topic_id, $post_data, $current_time); meta_refresh(3, $meta_url); $message = $user->lang['TOPIC_BUMPED'] . '

' . sprintf($user->lang['VIEW_MESSAGE'], '', ''); -- cgit v1.2.1 From 5ab4dc298327d3a8d51387959d6905c6bb24fd99 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 5 Mar 2011 22:16:50 +0100 Subject: [ticket/10042] Add mt_rand() wrapper which allows swapping $min and $max. PHPBB3-10042 --- phpBB/includes/functions.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 398a02380b..259b3b0481 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -244,6 +244,22 @@ function unique_id($extra = 'c') return substr($val, 4, 16); } +/** +* Wrapper for mt_rand() which allows swapping $min and $max parameters. +* +* PHP does not allow us to swap the order of the arguments for mt_rand() anymore. +* (since PHP 5.3.4, see http://bugs.php.net/46587) +* +* @param int $min Lowest value to be returned +* @param int $max Highest value to be returned +* +* @return int Random integer between $min and $max (or $max and $min) +*/ +function phpbb_mt_rand($min, $max) +{ + return ($min > $max) ? mt_rand($max, $min) : mt_rand($min, $max); +} + /** * Return formatted string for filesizes * -- cgit v1.2.1 From c6c2a23ecb10b4b54e7e9b703d14e8c7cda6ad55 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 5 Mar 2011 22:20:23 +0100 Subject: [ticket/10042] GD CAPTCHA: Round offset to the next pixel. PHPBB3-10042 --- phpBB/includes/captcha/captcha_gd.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/captcha/captcha_gd.php b/phpBB/includes/captcha/captcha_gd.php index 96e39af85b..7a3f4f46ab 100644 --- a/phpBB/includes/captcha/captcha_gd.php +++ b/phpBB/includes/captcha/captcha_gd.php @@ -77,7 +77,7 @@ class captcha { $denom = ($code_len - $i); $denom = max(1.3, $denom); - $offset[$i] = mt_rand(0, (1.5 * $width_avail) / $denom); + $offset[$i] = mt_rand(0, (int) round((1.5 * $width_avail) / $denom)); $width_avail -= $offset[$i]; } -- cgit v1.2.1 From 18daf6345f64e59f651c43a3150d9e139ac2a4cc Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 5 Mar 2011 22:21:45 +0100 Subject: [ticket/10042] GD CAPTCHA: Call phpbb_mt_rand() where required. PHPBB3-10042 --- phpBB/includes/captcha/captcha_gd.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/captcha/captcha_gd.php b/phpBB/includes/captcha/captcha_gd.php index 7a3f4f46ab..6d859a4ecc 100644 --- a/phpBB/includes/captcha/captcha_gd.php +++ b/phpBB/includes/captcha/captcha_gd.php @@ -77,7 +77,7 @@ class captcha { $denom = ($code_len - $i); $denom = max(1.3, $denom); - $offset[$i] = mt_rand(0, (int) round((1.5 * $width_avail) / $denom)); + $offset[$i] = phpbb_mt_rand(0, (int) round((1.5 * $width_avail) / $denom)); $width_avail -= $offset[$i]; } -- cgit v1.2.1 From d1bd5962c75fc87469694ae93829a5800c30c6cc Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 3 Apr 2011 01:00:21 +0800 Subject: [ticket/6712] Pass $post_data by the value instead of by the reference. PHPBB3-6712 --- phpBB/includes/functions_posting.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 041b549cd6..ab346afb38 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -2614,7 +2614,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u /* * Handle topic bumping */ -function bump_topic($forum_id, $topic_id, &$post_data, $current_time = false) +function bump_topic($forum_id, $topic_id, $post_data, $current_time = false) { global $config, $db, $user, $phpEx, $phpbb_root_path; -- cgit v1.2.1 From ee6167879ecba11dea945f129c026ce0f3cf7514 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 17 Mar 2011 01:20:44 +0100 Subject: [ticket/9802] Fix redundant str_replace call. No need to replace ' ' with ' '. PHPBB3-9802 --- phpBB/includes/session.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index d803f8d799..9ab53d38ab 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -221,7 +221,7 @@ class session // if the forwarded for header shall be checked we have to validate its contents if ($config['forwarded_for_check']) { - $this->forwarded_for = preg_replace('#[ ]{2,}#', ' ', str_replace(array(',', ' '), ' ', $this->forwarded_for)); + $this->forwarded_for = preg_replace('#[ ]{2,}#', ' ', str_replace(',', ' ', $this->forwarded_for)); // split the list of IPs $ips = explode(' ', $this->forwarded_for); @@ -268,7 +268,7 @@ class session // Why no forwarded_for et al? Well, too easily spoofed. With the results of my recent requests // it's pretty clear that in the majority of cases you'll at least be left with a proxy/cache ip. $this->ip = (!empty($_SERVER['REMOTE_ADDR'])) ? htmlspecialchars((string) $_SERVER['REMOTE_ADDR']) : ''; - $this->ip = preg_replace('#[ ]{2,}#', ' ', str_replace(array(',', ' '), ' ', $this->ip)); + $this->ip = preg_replace('#[ ]{2,}#', ' ', str_replace(',', ' ', $this->ip)); // split the list of IPs $ips = explode(' ', $this->ip); -- cgit v1.2.1 From fd805358592162cf05c8808caca0bdf788fb7088 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 17 Mar 2011 01:29:10 +0100 Subject: [ticket/9802] Remove redundant character class definition from preg_replace. PHPBB3-9802 --- phpBB/includes/session.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 9ab53d38ab..e1e315035b 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -221,7 +221,7 @@ class session // if the forwarded for header shall be checked we have to validate its contents if ($config['forwarded_for_check']) { - $this->forwarded_for = preg_replace('#[ ]{2,}#', ' ', str_replace(',', ' ', $this->forwarded_for)); + $this->forwarded_for = preg_replace('# {2,}#', ' ', str_replace(',', ' ', $this->forwarded_for)); // split the list of IPs $ips = explode(' ', $this->forwarded_for); @@ -268,7 +268,7 @@ class session // Why no forwarded_for et al? Well, too easily spoofed. With the results of my recent requests // it's pretty clear that in the majority of cases you'll at least be left with a proxy/cache ip. $this->ip = (!empty($_SERVER['REMOTE_ADDR'])) ? htmlspecialchars((string) $_SERVER['REMOTE_ADDR']) : ''; - $this->ip = preg_replace('#[ ]{2,}#', ' ', str_replace(',', ' ', $this->ip)); + $this->ip = preg_replace('# {2,}#', ' ', str_replace(',', ' ', $this->ip)); // split the list of IPs $ips = explode(' ', $this->ip); -- cgit v1.2.1 From bef2540d9ce3b429837c7e67c5f3f7f254aa1920 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 19 Apr 2011 13:46:00 +0200 Subject: [ticket/9802] Fix tiny logic bug in loop determining REMOTE_ADDR. When $ip is empty() it was assigned to $this->ip. PHPBB3-9802 --- phpBB/includes/session.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index e1e315035b..f2aa47d84e 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -271,7 +271,7 @@ class session $this->ip = preg_replace('# {2,}#', ' ', str_replace(',', ' ', $this->ip)); // split the list of IPs - $ips = explode(' ', $this->ip); + $ips = explode(' ', trim($this->ip)); // Default IP if REMOTE_ADDR is invalid $this->ip = '127.0.0.1'; @@ -279,7 +279,7 @@ class session foreach ($ips as $ip) { // check IPv4 first, the IPv6 is hopefully only going to be used very seldomly - if (!empty($ip) && !preg_match(get_preg_expression('ipv4'), $ip) && !preg_match(get_preg_expression('ipv6'), $ip)) + if (!preg_match(get_preg_expression('ipv4'), $ip) && !preg_match(get_preg_expression('ipv6'), $ip)) { // Just break break; -- cgit v1.2.1 From 5ca7121ed2f698963387f5f9fb7ffe16d3781447 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 19 Apr 2011 13:53:09 +0200 Subject: [ticket/9802] Only check for IPv4-mapped address when address is IPv6. PHPBB3-9802 --- phpBB/includes/session.php | 33 +++++++++++++++++++-------------- 1 file changed, 19 insertions(+), 14 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index f2aa47d84e..b2772696f1 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -278,26 +278,31 @@ class session foreach ($ips as $ip) { - // check IPv4 first, the IPv6 is hopefully only going to be used very seldomly - if (!preg_match(get_preg_expression('ipv4'), $ip) && !preg_match(get_preg_expression('ipv6'), $ip)) + if (preg_match(get_preg_expression('ipv4'), $ip)) { - // Just break - break; + $this->ip = $ip; } - - // Quick check for IPv4-mapped address in IPv6 - if (stripos($ip, '::ffff:') === 0) + else if (preg_match(get_preg_expression('ipv6'), $ip)) { - $ipv4 = substr($ip, 7); - - if (preg_match(get_preg_expression('ipv4'), $ipv4)) + // Quick check for IPv4-mapped address in IPv6 + if (stripos($ip, '::ffff:') === 0) { - $ip = $ipv4; + $ipv4 = substr($ip, 7); + + if (preg_match(get_preg_expression('ipv4'), $ipv4)) + { + $ip = $ipv4; + } } - } - // Use the last in chain - $this->ip = $ip; + $this->ip = $ip; + } + else + { + // We want to use the last valid address in the chain + // Leave foreach loop when address is invalid + break; + } } $this->load = false; -- cgit v1.2.1 From d1f1d8ade7ab98bde70451874c94bb35584f9192 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 19 Apr 2011 14:10:23 +0200 Subject: [ticket/9802] Remove unnecessary htmlspecialchars() call on REMOTE_ADDR. The value in $_SERVER['REMOTE_ADDR'] is either validated to be a valid IP address or is replaced by our default value. Valid IP addresses do not contain HTML special characters, thus the htmlspecialchars() call is unnecessary. PHPBB3-9802 --- phpBB/includes/session.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index b2772696f1..79d94e7780 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -267,7 +267,7 @@ class session // Why no forwarded_for et al? Well, too easily spoofed. With the results of my recent requests // it's pretty clear that in the majority of cases you'll at least be left with a proxy/cache ip. - $this->ip = (!empty($_SERVER['REMOTE_ADDR'])) ? htmlspecialchars((string) $_SERVER['REMOTE_ADDR']) : ''; + $this->ip = (!empty($_SERVER['REMOTE_ADDR'])) ? (string) $_SERVER['REMOTE_ADDR'] : ''; $this->ip = preg_replace('# {2,}#', ' ', str_replace(',', ' ', $this->ip)); // split the list of IPs -- cgit v1.2.1 From 9cb6a69861b2ef1ca9a23ffe773ca3be4f9e4461 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 22 Apr 2011 11:01:07 +0200 Subject: [ticket/10146] Firebird: 1 <= precision <= 18 ==> Cast to DECIMAL(18, 0). PHPBB3-10146 --- phpBB/includes/functions.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 585e23b2ee..ca5a483536 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -175,7 +175,8 @@ function set_config_count($config_name, $increment, $is_dynamic = false) switch ($db->sql_layer) { case 'firebird': - $sql_update = 'CAST(CAST(config_value as DECIMAL(255, 0)) + ' . (int) $increment . ' as VARCHAR(255))'; + // Precision must be from 1 to 18 + $sql_update = 'CAST(CAST(config_value as DECIMAL(18, 0)) + ' . (int) $increment . ' as VARCHAR(255))'; break; case 'postgres': -- cgit v1.2.1 From 2d11e1c095b7cf6197b7ce21bde806ad2cc178d8 Mon Sep 17 00:00:00 2001 From: "Marek A. Ruszczynski" Date: Mon, 7 Mar 2011 16:59:41 +0100 Subject: [feature/template-engine] Improved template engine. PHPBB3-9726 --- phpBB/includes/functions_template.php | 812 ---------------------------- phpBB/includes/template.php | 287 +++++++--- phpBB/includes/template_compile.php | 982 ++++++++++++++++++++++++++++++++++ 3 files changed, 1204 insertions(+), 877 deletions(-) delete mode 100644 phpBB/includes/functions_template.php create mode 100644 phpBB/includes/template_compile.php (limited to 'phpBB') diff --git a/phpBB/includes/functions_template.php b/phpBB/includes/functions_template.php deleted file mode 100644 index 8c58c33b0d..0000000000 --- a/phpBB/includes/functions_template.php +++ /dev/null @@ -1,812 +0,0 @@ -template = &$template; - } - - /** - * Load template source from file - * @access private - */ - function _tpl_load_file($handle, $store_in_db = false) - { - // Try and open template for read - if (!file_exists($this->template->files[$handle])) - { - trigger_error("template->_tpl_load_file(): File {$this->template->files[$handle]} does not exist or is empty", E_USER_ERROR); - } - - $this->template->compiled_code[$handle] = $this->compile(trim(@file_get_contents($this->template->files[$handle]))); - - // Actually compile the code now. - $this->compile_write($handle, $this->template->compiled_code[$handle]); - - // Store in database if required... - if ($store_in_db) - { - global $db, $user; - - $sql_ary = array( - 'template_id' => $this->template->files_template[$handle], - 'template_filename' => $this->template->filename[$handle], - 'template_included' => '', - 'template_mtime' => time(), - 'template_data' => trim(@file_get_contents($this->template->files[$handle])), - ); - - $sql = 'INSERT INTO ' . STYLES_TEMPLATE_DATA_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary); - $db->sql_query($sql); - } - } - - /** - * Remove any PHP tags that do not belong, these regular expressions are derived from - * the ones that exist in zend_language_scanner.l - * @access private - */ - function remove_php_tags(&$code) - { - // This matches the information gathered from the internal PHP lexer - $match = array( - '#<([\?%])=?.*?\1>#s', - '#.*?#s', - '#<\?php(?:\r\n?|[ \n\t]).*?\?>#s' - ); - - $code = preg_replace($match, '', $code); - } - - /** - * The all seeing all doing compile method. Parts are inspired by or directly from Smarty - * @access private - */ - function compile($code, $no_echo = false, $echo_var = '') - { - global $config; - - if ($echo_var) - { - global $$echo_var; - } - - // Remove any "loose" php ... we want to give admins the ability - // to switch on/off PHP for a given template. Allowing unchecked - // php is a no-no. There is a potential issue here in that non-php - // content may be removed ... however designers should use entities - // if they wish to display < and > - $this->remove_php_tags($code); - - // Pull out all block/statement level elements and separate plain text - preg_match_all('#(.*?)#s', $code, $matches); - $php_blocks = $matches[1]; - $code = preg_replace('#.*?#s', '', $code); - - preg_match_all('##', $code, $matches); - $include_blocks = $matches[1]; - $code = preg_replace('##', '', $code); - - preg_match_all('##', $code, $matches); - $includephp_blocks = $matches[1]; - $code = preg_replace('##', '', $code); - - preg_match_all('##', $code, $blocks, PREG_SET_ORDER); - - $text_blocks = preg_split('##', $code); - - for ($i = 0, $j = sizeof($text_blocks); $i < $j; $i++) - { - $this->compile_var_tags($text_blocks[$i]); - } - $compile_blocks = array(); - - for ($curr_tb = 0, $tb_size = sizeof($blocks); $curr_tb < $tb_size; $curr_tb++) - { - $block_val = &$blocks[$curr_tb]; - - switch ($block_val[1]) - { - case 'BEGIN': - $this->block_else_level[] = false; - $compile_blocks[] = 'compile_tag_block($block_val[2]) . ' ?>'; - break; - - case 'BEGINELSE': - $this->block_else_level[sizeof($this->block_else_level) - 1] = true; - $compile_blocks[] = ''; - break; - - case 'END': - array_pop($this->block_names); - $compile_blocks[] = 'block_else_level)) ? '}' : '}}') . ' ?>'; - break; - - case 'IF': - $compile_blocks[] = 'compile_tag_if($block_val[2], false) . ' ?>'; - break; - - case 'ELSE': - $compile_blocks[] = ''; - break; - - case 'ELSEIF': - $compile_blocks[] = 'compile_tag_if($block_val[2], true) . ' ?>'; - break; - - case 'ENDIF': - $compile_blocks[] = ''; - break; - - case 'DEFINE': - $compile_blocks[] = 'compile_tag_define($block_val[2], true) . ' ?>'; - break; - - case 'UNDEFINE': - $compile_blocks[] = 'compile_tag_define($block_val[2], false) . ' ?>'; - break; - - case 'INCLUDE': - $temp = array_shift($include_blocks); - - // Dynamic includes - // Cheap match rather than a full blown regexp, we already know - // the format of the input so just use string manipulation. - if ($temp[0] == '{') - { - $file = false; - - if ($temp[1] == '$') - { - $var = substr($temp, 2, -1); - //$file = $this->template->_tpldata['DEFINE']['.'][$var]; - $temp = "\$this->_tpldata['DEFINE']['.']['$var']"; - } - else - { - $var = substr($temp, 1, -1); - //$file = $this->template->_rootref[$var]; - $temp = "\$this->_rootref['$var']"; - } - } - else - { - $file = $temp; - } - - $compile_blocks[] = 'compile_tag_include($temp) . ' ?>'; - - // No point in checking variable includes - if ($file) - { - $this->template->_tpl_include($file, false); - } - break; - - case 'INCLUDEPHP': - $compile_blocks[] = ($config['tpl_allow_php']) ? 'compile_tag_include_php(array_shift($includephp_blocks)) . ' ?>' : ''; - break; - - case 'PHP': - $compile_blocks[] = ($config['tpl_allow_php']) ? '' : ''; - break; - - default: - $this->compile_var_tags($block_val[0]); - $trim_check = trim($block_val[0]); - $compile_blocks[] = (!$no_echo) ? ((!empty($trim_check)) ? $block_val[0] : '') : ((!empty($trim_check)) ? $block_val[0] : ''); - break; - } - } - - $template_php = ''; - for ($i = 0, $size = sizeof($text_blocks); $i < $size; $i++) - { - $trim_check_text = trim($text_blocks[$i]); - $template_php .= (!$no_echo) ? (($trim_check_text != '') ? $text_blocks[$i] : '') . ((isset($compile_blocks[$i])) ? $compile_blocks[$i] : '') : (($trim_check_text != '') ? $text_blocks[$i] : '') . ((isset($compile_blocks[$i])) ? $compile_blocks[$i] : ''); - } - - // Remove unused opening/closing tags - $template_php = str_replace(' ?>([\r\n])#', '?>\1\1', $template_php); - - // There will be a number of occasions where we switch into and out of - // PHP mode instantaneously. Rather than "burden" the parser with this - // we'll strip out such occurences, minimising such switching - if ($no_echo) - { - return "\$$echo_var .= '" . $template_php . "'"; - } - - return $template_php; - } - - /** - * Compile variables - * @access private - */ - function compile_var_tags(&$text_blocks) - { - // change template varrefs into PHP varrefs - $varrefs = array(); - - // This one will handle varrefs WITH namespaces - preg_match_all('#\{((?:[a-z0-9\-_]+\.)+)(\$)?([A-Z0-9\-_]+)\}#', $text_blocks, $varrefs, PREG_SET_ORDER); - - foreach ($varrefs as $var_val) - { - $namespace = $var_val[1]; - $varname = $var_val[3]; - $new = $this->generate_block_varref($namespace, $varname, true, $var_val[2]); - - $text_blocks = str_replace($var_val[0], $new, $text_blocks); - } - - // This will handle the remaining root-level varrefs - // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array - if (strpos($text_blocks, '{L_') !== false) - { - $text_blocks = preg_replace('#\{L_([A-Z0-9\-_]+)\}#', "_rootref['L_\\1'])) ? \$this->_rootref['L_\\1'] : ((isset(\$user->lang['\\1'])) ? \$user->lang['\\1'] : '{ \\1 }')); ?>", $text_blocks); - } - - // Handle addslashed language variables prefixed with LA_ - // If a template variable already exist, it will be used in favor of it... - if (strpos($text_blocks, '{LA_') !== false) - { - $text_blocks = preg_replace('#\{LA_([A-Z0-9\-_]+)\}#', "_rootref['LA_\\1'])) ? \$this->_rootref['LA_\\1'] : ((isset(\$this->_rootref['L_\\1'])) ? addslashes(\$this->_rootref['L_\\1']) : ((isset(\$user->lang['\\1'])) ? addslashes(\$user->lang['\\1']) : '{ \\1 }'))); ?>", $text_blocks); - } - - // Handle remaining varrefs - $text_blocks = preg_replace('#\{([A-Z0-9\-_]+)\}#', "_rootref['\\1'])) ? \$this->_rootref['\\1'] : ''; ?>", $text_blocks); - $text_blocks = preg_replace('#\{\$([A-Z0-9\-_]+)\}#', "_tpldata['DEFINE']['.']['\\1'])) ? \$this->_tpldata['DEFINE']['.']['\\1'] : ''; ?>", $text_blocks); - - return; - } - - /** - * Compile blocks - * @access private - */ - function compile_tag_block($tag_args) - { - $no_nesting = false; - - // Is the designer wanting to call another loop in a loop? - if (strpos($tag_args, '!') === 0) - { - // Count the number of ! occurrences (not allowed in vars) - $no_nesting = substr_count($tag_args, '!'); - $tag_args = substr($tag_args, $no_nesting); - } - - // Allow for control of looping (indexes start from zero): - // foo(2) : Will start the loop on the 3rd entry - // foo(-2) : Will start the loop two entries from the end - // foo(3,4) : Will start the loop on the fourth entry and end it on the fifth - // foo(3,-4) : Will start the loop on the fourth entry and end it four from last - if (preg_match('#^([^()]*)\(([\-\d]+)(?:,([\-\d]+))?\)$#', $tag_args, $match)) - { - $tag_args = $match[1]; - - if ($match[2] < 0) - { - $loop_start = '($_' . $tag_args . '_count ' . $match[2] . ' < 0 ? 0 : $_' . $tag_args . '_count ' . $match[2] . ')'; - } - else - { - $loop_start = '($_' . $tag_args . '_count < ' . $match[2] . ' ? $_' . $tag_args . '_count : ' . $match[2] . ')'; - } - - if (strlen($match[3]) < 1 || $match[3] == -1) - { - $loop_end = '$_' . $tag_args . '_count'; - } - else if ($match[3] >= 0) - { - $loop_end = '(' . ($match[3] + 1) . ' > $_' . $tag_args . '_count ? $_' . $tag_args . '_count : ' . ($match[3] + 1) . ')'; - } - else //if ($match[3] < -1) - { - $loop_end = '$_' . $tag_args . '_count' . ($match[3] + 1); - } - } - else - { - $loop_start = 0; - $loop_end = '$_' . $tag_args . '_count'; - } - - $tag_template_php = ''; - array_push($this->block_names, $tag_args); - - if ($no_nesting !== false) - { - // We need to implode $no_nesting times from the end... - $block = array_slice($this->block_names, -$no_nesting); - } - else - { - $block = $this->block_names; - } - - if (sizeof($block) < 2) - { - // Block is not nested. - $tag_template_php = '$_' . $tag_args . "_count = (isset(\$this->_tpldata['$tag_args'])) ? sizeof(\$this->_tpldata['$tag_args']) : 0;"; - $varref = "\$this->_tpldata['$tag_args']"; - } - else - { - // This block is nested. - // Generate a namespace string for this block. - $namespace = implode('.', $block); - - // Get a reference to the data array for this block that depends on the - // current indices of all parent blocks. - $varref = $this->generate_block_data_ref($namespace, false); - - // Create the for loop code to iterate over this block. - $tag_template_php = '$_' . $tag_args . '_count = (isset(' . $varref . ')) ? sizeof(' . $varref . ') : 0;'; - } - - $tag_template_php .= 'if ($_' . $tag_args . '_count) {'; - - /** - * The following uses foreach for iteration instead of a for loop, foreach is faster but requires PHP to make a copy of the contents of the array which uses more memory - * - * if (!$offset) - * { - * $tag_template_php .= 'foreach (' . $varref . ' as $_' . $tag_args . '_i => $_' . $tag_args . '_val){'; - * } - * - */ - - $tag_template_php .= 'for ($_' . $tag_args . '_i = ' . $loop_start . '; $_' . $tag_args . '_i < ' . $loop_end . '; ++$_' . $tag_args . '_i){'; - $tag_template_php .= '$_'. $tag_args . '_val = &' . $varref . '[$_'. $tag_args. '_i];'; - - return $tag_template_php; - } - - /** - * Compile IF tags - much of this is from Smarty with - * some adaptions for our block level methods - * @access private - */ - function compile_tag_if($tag_args, $elseif) - { - // Tokenize args for 'if' tag. - preg_match_all('/(?: - "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" | - \'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' | - [(),] | - [^\s(),]+)/x', $tag_args, $match); - - $tokens = $match[0]; - $is_arg_stack = array(); - - for ($i = 0, $size = sizeof($tokens); $i < $size; $i++) - { - $token = &$tokens[$i]; - - switch ($token) - { - case '!==': - case '===': - case '<<': - case '>>': - case '|': - case '^': - case '&': - case '~': - case ')': - case ',': - case '+': - case '-': - case '*': - case '/': - case '@': - break; - - case '==': - case 'eq': - $token = '=='; - break; - - case '!=': - case '<>': - case 'ne': - case 'neq': - $token = '!='; - break; - - case '<': - case 'lt': - $token = '<'; - break; - - case '<=': - case 'le': - case 'lte': - $token = '<='; - break; - - case '>': - case 'gt': - $token = '>'; - break; - - case '>=': - case 'ge': - case 'gte': - $token = '>='; - break; - - case '&&': - case 'and': - $token = '&&'; - break; - - case '||': - case 'or': - $token = '||'; - break; - - case '!': - case 'not': - $token = '!'; - break; - - case '%': - case 'mod': - $token = '%'; - break; - - case '(': - array_push($is_arg_stack, $i); - break; - - case 'is': - $is_arg_start = ($tokens[$i-1] == ')') ? array_pop($is_arg_stack) : $i-1; - $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); - - $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); - - array_splice($tokens, $is_arg_start, sizeof($tokens), $new_tokens); - - $i = $is_arg_start; - - // no break - - default: - if (preg_match('#^((?:[a-z0-9\-_]+\.)+)?(\$)?(?=[A-Z])([A-Z0-9\-_]+)#s', $token, $varrefs)) - { - $token = (!empty($varrefs[1])) ? $this->generate_block_data_ref(substr($varrefs[1], 0, -1), true, $varrefs[2]) . '[\'' . $varrefs[3] . '\']' : (($varrefs[2]) ? '$this->_tpldata[\'DEFINE\'][\'.\'][\'' . $varrefs[3] . '\']' : '$this->_rootref[\'' . $varrefs[3] . '\']'); - } - else if (preg_match('#^\.((?:[a-z0-9\-_]+\.?)+)$#s', $token, $varrefs)) - { - // Allow checking if loops are set with .loopname - // It is also possible to check the loop count by doing for example - $blocks = explode('.', $varrefs[1]); - - // If the block is nested, we have a reference that we can grab. - // If the block is not nested, we just go and grab the block from _tpldata - if (sizeof($blocks) > 1) - { - $block = array_pop($blocks); - $namespace = implode('.', $blocks); - $varref = $this->generate_block_data_ref($namespace, true); - - // Add the block reference for the last child. - $varref .= "['" . $block . "']"; - } - else - { - $varref = '$this->_tpldata'; - - // Add the block reference for the last child. - $varref .= "['" . $blocks[0] . "']"; - } - $token = "sizeof($varref)"; - } - else if (!empty($token)) - { - $token = '(' . $token . ')'; - } - - break; - } - } - - // If there are no valid tokens left or only control/compare characters left, we do skip this statement - if (!sizeof($tokens) || str_replace(array(' ', '=', '!', '<', '>', '&', '|', '%', '(', ')'), '', implode('', $tokens)) == '') - { - $tokens = array('false'); - } - return (($elseif) ? '} else if (' : 'if (') . (implode(' ', $tokens) . ') { '); - } - - /** - * Compile DEFINE tags - * @access private - */ - function compile_tag_define($tag_args, $op) - { - preg_match('#^((?:[a-z0-9\-_]+\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (\'?)([^\']*)(\'?))?$#', $tag_args, $match); - - if (empty($match[2]) || (!isset($match[4]) && $op)) - { - return ''; - } - - if (!$op) - { - return 'unset(' . (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$this->_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ');'; - } - - // Are we a string? - if ($match[3] && $match[5]) - { - $match[4] = str_replace(array('\\\'', '\\\\', '\''), array('\'', '\\', '\\\''), $match[4]); - - // Compile reference, we allow template variables in defines... - $match[4] = $this->compile($match[4]); - - // Now replace the php code - $match[4] = "'" . str_replace(array(''), array("' . ", " . '"), $match[4]) . "'"; - } - else - { - preg_match('#true|false|\.#i', $match[4], $type); - - switch (strtolower($type[0])) - { - case 'true': - case 'false': - $match[4] = strtoupper($match[4]); - break; - - case '.': - $match[4] = doubleval($match[4]); - break; - - default: - $match[4] = intval($match[4]); - break; - } - } - - return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$this->_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $match[4] . ';'; - } - - /** - * Compile INCLUDE tag - * @access private - */ - function compile_tag_include($tag_args) - { - // Process dynamic includes - if ($tag_args[0] == '$') - { - return "if (isset($tag_args)) { \$this->_tpl_include($tag_args); }"; - } - - return "\$this->_tpl_include('$tag_args');"; - } - - /** - * Compile INCLUDE_PHP tag - * @access private - */ - function compile_tag_include_php($tag_args) - { - return "\$this->_php_include('$tag_args');"; - } - - /** - * parse expression - * This is from Smarty - * @access private - */ - function _parse_is_expr($is_arg, $tokens) - { - $expr_end = 0; - $negate_expr = false; - - if (($first_token = array_shift($tokens)) == 'not') - { - $negate_expr = true; - $expr_type = array_shift($tokens); - } - else - { - $expr_type = $first_token; - } - - switch ($expr_type) - { - case 'even': - if (@$tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!(($is_arg / $expr_arg) % $expr_arg)"; - } - else - { - $expr = "!($is_arg & 1)"; - } - break; - - case 'odd': - if (@$tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "(($is_arg / $expr_arg) % $expr_arg)"; - } - else - { - $expr = "($is_arg & 1)"; - } - break; - - case 'div': - if (@$tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!($is_arg % $expr_arg)"; - } - break; - } - - if ($negate_expr) - { - $expr = "!($expr)"; - } - - array_splice($tokens, 0, $expr_end, $expr); - - return $tokens; - } - - /** - * Generates a reference to the given variable inside the given (possibly nested) - * block namespace. This is a string of the form: - * ' . $this->_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . ' - * It's ready to be inserted into an "echo" line in one of the templates. - * NOTE: expects a trailing "." on the namespace. - * @access private - */ - function generate_block_varref($namespace, $varname, $echo = true, $defop = false) - { - // Strip the trailing period. - $namespace = substr($namespace, 0, -1); - - // Get a reference to the data block for this namespace. - $varref = $this->generate_block_data_ref($namespace, true, $defop); - // Prepend the necessary code to stick this in an echo line. - - // Append the variable reference. - $varref .= "['$varname']"; - $varref = ($echo) ? "" : ((isset($varref)) ? $varref : ''); - - return $varref; - } - - /** - * Generates a reference to the array of data values for the given - * (possibly nested) block namespace. This is a string of the form: - * $this->_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['$childN'] - * - * If $include_last_iterator is true, then [$_childN_i] will be appended to the form shown above. - * NOTE: does not expect a trailing "." on the blockname. - * @access private - */ - function generate_block_data_ref($blockname, $include_last_iterator, $defop = false) - { - // Get an array of the blocks involved. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - // DEFINE is not an element of any referenced variable, we must use _tpldata to access it - if ($defop) - { - $varref = '$this->_tpldata[\'DEFINE\']'; - // Build up the string with everything but the last child. - for ($i = 0; $i < $blockcount; $i++) - { - $varref .= "['" . $blocks[$i] . "'][\$_" . $blocks[$i] . '_i]'; - } - // Add the block reference for the last child. - $varref .= "['" . $blocks[$blockcount] . "']"; - // Add the iterator for the last child if requried. - if ($include_last_iterator) - { - $varref .= '[$_' . $blocks[$blockcount] . '_i]'; - } - return $varref; - } - else if ($include_last_iterator) - { - return '$_'. $blocks[$blockcount] . '_val'; - } - else - { - return '$_'. $blocks[$blockcount - 1] . '_val[\''. $blocks[$blockcount]. '\']'; - } - } - - /** - * Write compiled file to cache directory - * @access private - */ - function compile_write($handle, $data) - { - global $phpEx; - - $filename = $this->template->cachepath . str_replace('/', '.', $this->template->filename[$handle]) . '.' . $phpEx; - - $data = "' . $data); - - if ($fp = @fopen($filename, 'wb')) - { - @flock($fp, LOCK_EX); - @fwrite ($fp, $data); - @flock($fp, LOCK_UN); - @fclose($fp); - - phpbb_chmod($filename, CHMOD_READ | CHMOD_WRITE); - } - - return; - } -} diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 643a86cde9..47262eaccf 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -16,40 +16,75 @@ if (!defined('IN_PHPBB')) exit; } +/** +* @todo +* IMG_ for image substitution? +* {IMG_[key]:[alt]:[type]} +* {IMG_ICON_CONTACT:CONTACT:full} -> $user->img('icon_contact', 'CONTACT', 'full'); +* +* More in-depth... +* yadayada +*/ + /** * Base Template class. * @package phpBB3 */ -class template +class phpbb_template { - /** variable that holds all the data we'll be substituting into + public $phpbb_required = array('user', 'config'); + public $phpbb_optional = array(); + + /** + * variable that holds all the data we'll be substituting into * the compiled templates. Takes form: * --> $this->_tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value * if it's a root-level variable, it'll be like this: * --> $this->_tpldata[.][0][varname] == value + * @var array + */ + private $_tpldata = array('.' => array(0 => array())); + + /** + * @var array Reference to template->_tpldata['.'][0] + */ + private $_rootref; + + /** + * @var string Root dir for template. */ - var $_tpldata = array('.' => array(0 => array())); - var $_rootref; - - // Root dir and hash of filenames for each template handle. - var $root = ''; - var $cachepath = ''; - var $files = array(); - var $filename = array(); - var $files_inherit = array(); - var $files_template = array(); - var $inherit_root = ''; - var $orig_tpl_storedb; - var $orig_tpl_inherits_id; + private $root = ''; + + /** + * @var string Path of the cache directory for the template + */ + public $cachepath = ''; + + /** + * @var array Hash of handle => file path pairs + */ + public $files = array(); + + /** + * @var array Hash of handle => filename pairs + */ + public $filename = array(); + + public $files_inherit = array(); + public $files_template = array(); + public $inherit_root = ''; + + public $orig_tpl_storedb; + public $orig_tpl_inherits_id; // this will hash handle names to the compiled/uncompiled code for that handle. - var $compiled_code = array(); + public $compiled_code = array(); /** * Set template location * @access public */ - function set_template() + public function set_template() { global $phpbb_root_path, $user; @@ -89,8 +124,11 @@ class template /** * Set custom template location (able to use directory outside of phpBB) * @access public + * @param string $template_path Path to template directory + * @param string $template_name Name of template + * @param string $fallback_template_path Path to fallback template */ - function set_custom_template($template_path, $template_name, $fallback_template_path = false) + public function set_custom_template($template_path, $template_name, $fallback_template_path = false) { global $phpbb_root_path, $user; @@ -131,13 +169,10 @@ class template * Sets the template filenames for handles. $filename_array * should be a hash of handle => filename pairs. * @access public + * @param array $filname_array Should be a hash of handle => filename pairs. */ - function set_filenames($filename_array) + public function set_filenames(array $filename_array) { - if (!is_array($filename_array)) - { - return false; - } foreach ($filename_array as $handle => $filename) { if (empty($filename)) @@ -161,17 +196,26 @@ class template * Destroy template data set * @access public */ - function destroy() + public function destroy() { $this->_tpldata = array('.' => array(0 => array())); $this->_rootref = &$this->_tpldata['.'][0]; } + /** + * destroy method kept for compatibility. + */ + public function __destruct() + { + $this->destroy(); + } + /** * Reset/empty complete block * @access public + * @param string $blockname Name of block to destroy */ - function destroy_block_vars($blockname) + public function destroy_block_vars($blockname) { if (strpos($blockname, '.') !== false) { @@ -200,12 +244,15 @@ class template /** * Display handle * @access public + * @param string $handle Handle to display + * @param bool $include_once Allow multiple inclusions + * @return bool True on success, false on failure */ - function display($handle, $include_once = true) + public function display($handle, $include_once = true) { global $user, $phpbb_hook; - if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once, $this)) + if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once)) { if ($phpbb_hook->hook_return(array(__CLASS__, __FUNCTION__))) { @@ -221,13 +268,23 @@ class template } } - if ($filename = $this->_tpl_load($handle)) + $_tpldata = &$this->_tpldata; + $_rootref = &$this->_rootref; + $_lang = &$user->lang; + + if (($filename = $this->_tpl_load($handle)) !== false) { ($include_once) ? include_once($filename) : include($filename); } + else if (($code = $this->_tpl_eval($handle)) !== false) + { + $code = ' ?> ' . $code . ' ' . $this->compiled_code[$handle] . 'display($handle, $include_once); @@ -256,8 +318,11 @@ class template /** * Load a compiled template if possible, if not, recompile it * @access private + * @param string $handle Handle of the template to load + * @return string|bool Return filename on success otherwise false + * @uses template_compile is used to compile uncached templates */ - function _tpl_load(&$handle) + private function _tpl_load($handle) { global $user, $phpEx, $config; @@ -276,7 +341,9 @@ class template $this->files_template[$handle] = (isset($user->theme['template_id'])) ? $user->theme['template_id'] : 0; $recompile = false; - if (!file_exists($filename) || @filesize($filename) === 0) + $recompile = (!file_exists($filename) || @filesize($filename) === 0 || ($config['load_tplcompile'] && @filemtime($filename) < @filemtime($this->files[$handle]))) ? true : false; + + if (defined('DEBUG_EXTRA')) { $recompile = true; } @@ -288,7 +355,7 @@ class template $this->files[$handle] = $this->files_inherit[$handle]; $this->files_template[$handle] = $user->theme['template_inherits_id']; } - $recompile = (@filemtime($filename) < filemtime($this->files[$handle])) ? true : false; + $recompile = (@filemtime($filename) < @filemtime($this->files[$handle])) ? true : false; } // Recompile page if the original template is newer, otherwise load the compiled version @@ -296,33 +363,59 @@ class template { return $filename; } + + // Inheritance - we point to another template file for this one. Equality is also used for store_db + if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) + { + $this->files[$handle] = $this->files_inherit[$handle]; + $this->files_template[$handle] = $user->theme['template_inherits_id']; + } - global $db, $phpbb_root_path; + // If we don't have a file assigned to this handle, die. + if (!isset($this->files[$handle])) + { + trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR); + } - if (!class_exists('template_compile')) + if (!class_exists('phpbb_template_compile')) { - include($phpbb_root_path . 'includes/functions_template.' . $phpEx); + include 'template_compile.php'; } + + $compile = new phpbb_template_compile($this); - // Inheritance - we point to another template file for this one. Equality is also used for store_db - if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) + if ($compile->_tpl_load_file($handle) === false) { - $this->files[$handle] = $this->files_inherit[$handle]; - $this->files_template[$handle] = $user->theme['template_inherits_id']; + return false; } + + return $filename; + } - $compile = new template_compile($this); + /** + * This code should only run when some high level error prevents us from writing to the cache. + * @access private + * @param string $handle Template handle to compile + * @return string|bool Return compiled code on success otherwise false + * @uses template_compile is used to compile template + */ + private function _tpl_eval($handle) + { + if (!class_exists('phpbb_template_compile')) + { + include 'template_compile.php'; + } + + $compile = new phpbb_template_compile($this); // If we don't have a file assigned to this handle, die. if (!isset($this->files[$handle])) { - trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR); + trigger_error("template->_tpl_eval(): No file specified for handle $handle", E_USER_ERROR); } - // Just compile if no user object is present (happens within the installer) - if (!$user) + if (($code = $compile->_tpl_gen_src($handle)) === false) { - $compile->_tpl_load_file($handle); return false; } @@ -337,6 +430,8 @@ class template } $ids[] = $user->theme['template_id']; + global $db; + foreach ($ids as $id) { $sql = 'SELECT * @@ -381,7 +476,7 @@ class template $this->files_template[$row['template_filename']] = $user->theme['template_id']; } - if ($force_reload || $row['template_mtime'] < filemtime($file)) + if ($force_reload || $row['template_mtime'] < @filemtime($file)) { if ($row['template_filename'] == $this->filename[$handle]) { @@ -441,8 +536,9 @@ class template /** * Assign key variable pairs from an array * @access public + * @param array $vararray A hash of variable name => value pairs */ - function assign_vars($vararray) + public function assign_vars(array $vararray) { foreach ($vararray as $key => $val) { @@ -455,8 +551,10 @@ class template /** * Assign a single variable to a single key * @access public + * @param string $varname Variable name + * @param string $varval Value to assign to variable */ - function assign_var($varname, $varval) + public function assign_var($varname, $varval) { $this->_rootref[$varname] = $varval; @@ -466,8 +564,10 @@ class template /** * Assign key variable pairs from an array to a specified block * @access public + * @param string $blockname Name of block to assign $vararray to + * @param array $vararray A hash of variable name => value pairs */ - function assign_block_vars($blockname, $vararray) + public function assign_block_vars($blockname, array $vararray) { if (strpos($blockname, '.') !== false) { @@ -558,18 +658,51 @@ class template * @return bool false on error, true on success * @access public */ - function alter_block_array($blockname, $vararray, $key = false, $mode = 'insert') + public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') { if (strpos($blockname, '.') !== false) { - // Nested blocks are not supported - return false; + // Nested block. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $block = &$this->_tpldata; + for ($i = 0; $i < $blockcount; $i++) + { + if (($pos = strpos($blocks[$i], '[')) !== false) + { + $name = substr($blocks[$i], 0, $pos); + + if (strpos($blocks[$i], '[]') === $pos) + { + $index = sizeof($block[$name]) - 1; + } + else + { + $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1); + } + } + else + { + $name = $blocks[$i]; + $index = sizeof($block[$name]) - 1; + } + $block = &$block[$name]; + $block = &$block[$index]; + } + + $block = &$block[$blocks[$i]]; // Traverse the last block + } + else + { + // Top-level block. + $block = &$this->_tpldata[$blockname]; } // Change key to zero (change first position) if false and to last position if true if ($key === false || $key === true) { - $key = ($key === false) ? 0 : sizeof($this->_tpldata[$blockname]); + $key = ($key === false) ? 0 : sizeof($block); } // Get correct position if array given @@ -579,7 +712,7 @@ class template list($search_key, $search_value) = @each($key); $key = NULL; - foreach ($this->_tpldata[$blockname] as $i => $val_ary) + foreach ($block as $i => $val_ary) { if ($val_ary[$search_key] === $search_value) { @@ -612,15 +745,13 @@ class template } // Re-position template blocks - for ($i = sizeof($this->_tpldata[$blockname]); $i > $key; $i--) + for ($i = sizeof($block); $i > $key; $i--) { - $this->_tpldata[$blockname][$i] = $this->_tpldata[$blockname][$i-1]; - $this->_tpldata[$blockname][$i]['S_ROW_COUNT'] = $i; + $block[$i] = $block[$i-1]; } // Insert vararray at given position - $vararray['S_ROW_COUNT'] = $key; - $this->_tpldata[$blockname][$key] = $vararray; + $block[$key] = $vararray; return true; } @@ -628,12 +759,13 @@ class template // Which block to change? if ($mode == 'change') { - if ($key == sizeof($this->_tpldata[$blockname])) + if ($key == sizeof($block)) { $key--; } - $this->_tpldata[$blockname][$key] = array_merge($this->_tpldata[$blockname][$key], $vararray); + $block[$key] = array_merge($block[$key], $vararray); + return true; } @@ -643,8 +775,11 @@ class template /** * Include a separate template * @access private + * @param string $filename Template filename to include + * @param bool $include True to include the file, false to just load it + * @uses template_compile is used to compile uncached templates */ - function _tpl_include($filename, $include = true) + private function _tpl_include($filename, $include = true) { $handle = $filename; $this->filename[$handle] = $filename; @@ -654,18 +789,31 @@ class template $this->files_inherit[$handle] = $this->inherit_root . '/' . $filename; } - $filename = $this->_tpl_load($handle); + $filename = $this->_tpl_load($handle); if ($include) { global $user; + $_tpldata = &$this->_tpldata; + $_rootref = &$this->_rootref; + $_lang = &$user->lang; + if ($filename) { include($filename); return; } - eval(' ?>' . $this->compiled_code[$handle] . '_tpl_gen_src($handle)) !== false) + { + $code = ' ?> ' . $code . ' '; + + const REGEX_TOKENS = '~|{((?:[a-z][a-z_0-9]+\.)*\\$?[A-Z][A-Z_0-9]+)}~'; + + /** + * @var array + */ + private $block_names = array(); + + /** + * @var array + */ + private $block_else_level = array(); + + /** + * @var string + */ + private $chunk; + + /** + * @var bool + */ + private $in_php; + + public function filter($in, $out, &$consumed, $closing) + { + $written = false; + + while ($bucket = stream_bucket_make_writeable($in)) + { + $consumed += $bucket->datalen; + + $data = $this->chunk . $bucket->data; + $last_nl = strrpos($data, "\n"); + $this->chunk = substr($data, $last_nl); + $data = substr($data, 0, $last_nl); + + if (!strlen($data)) + { + continue; + } + + $written = true; + + $bucket->data = $this->compile($data); + $bucket->datalen = strlen($bucket->data); + stream_bucket_append($out, $bucket); + } + + if ($closing && strlen($this->chunk)) + { + $written = true; + $bucket = stream_bucket_new($this->stream, $this->compile($this->chunk)); + stream_bucket_append($out, $bucket); + } + + return $written ? PSFS_PASS_ON : PSFS_FEED_ME; + } + + public function onCreate() + { + $this->chunk = ''; + $this->in_php = false; + return true; + } + + private function compile($data) + { + $block_start_in_php = $this->in_php; + + $data = preg_replace('#<(?:[\\?%]|script)#s', '', $data); + $data = preg_replace_callback(self::REGEX_TOKENS, array($this, 'replace'), $data); + + global $config; + + // Remove php + if (!$config['tpl_allow_php']) + { + if ($block_start_in_php + && $this->in_php + && strpos($data, '') === false + && strpos($data, '') === false) + { + // This is just php code + return ''; + } + $data = preg_replace('~^.*?~', '', $data); + $data = preg_replace('~.*?~', '', $data); + $data = preg_replace('~.*?$~', '', $data); + } + + "?>/**/"; + + /* + Preserve whitespace. + PHP removes a newline after the closing tag (if it's there). This is by design. + + + Consider the following template: + + + some content + + + If we were to simply preserve all whitespace, we could simply replace all "?>" tags + with "?>\n". + Doing that, would add additional newlines to the compiled tempalte in place of the + IF and ENDIF statements. These newlines are unwanted (and one is conditional). + The IF and ENDIF are usually on their own line for ease of reading. + + This replacement preserves newlines only for statements that aren't the only statement on a line. + It will NOT preserve newlines at the end of statements in the above examle. + It will preserve newlines in situations like: + + inline content + + + */ +//* + $data = preg_replace('~(?).)+(?)$~m', "$1\n", $data); + $data = str_replace('/**/?>', "?>\n", $data); + $data = str_replace('?>in_php && $matches[1] != 'ENDPHP') + { + return ''; + } + + if (isset($matches[3])) + { + return $this->compile_var_tags($matches[0]); + } + + global $config; + + switch ($matches[1]) + { + case 'BEGIN': + $this->block_else_level[] = false; + return 'compile_tag_block($matches[2]) . ' ?>'; + break; + + case 'BEGINELSE': + $this->block_else_level[sizeof($this->block_else_level) - 1] = true; + return ''; + break; + + case 'END': + array_pop($this->block_names); + return 'block_else_level)) ? '}' : '}}') . ' ?>'; + break; + + case 'IF': + return 'compile_tag_if($matches[2], false) . ' ?>'; + break; + + case 'ELSE': + return ''; + break; + + case 'ELSEIF': + return 'compile_tag_if($matches[2], true) . ' ?>'; + break; + + case 'ENDIF': + return ''; + break; + + case 'DEFINE': + return 'compile_tag_define($matches[2], true) . ' ?>'; + break; + + case 'UNDEFINE': + return 'compile_tag_define($matches[2], false) . ' ?>'; + break; + + case 'INCLUDE': + return 'compile_tag_include($matches[2]) . ' ?>'; + break; + + case 'INCLUDEPHP': + return ($config['tpl_allow_php']) ? 'compile_tag_include_php($matches[2]) . ' ?>' : ''; + break; + + case 'PHP': + if ($config['tpl_allow_php']) + { + $this->in_php = true; + return ''; + break; + + case 'ENDPHP': + if ($config['tpl_allow_php']) + { + $this->in_php = false; + return ' ?>'; + } + return ''; + break; + + default: + return $matches[0]; + break; + + } + return ''; + } + + /** + * Compile variables + * @access private + */ + private function compile_var_tags(&$text_blocks) + { + // change template varrefs into PHP varrefs + $varrefs = array(); + + // This one will handle varrefs WITH namespaces + preg_match_all('#\{((?:' . self::REGEX_NS . '\.)+)(\$)?(' . self::REGEX_VAR . ')\}#', $text_blocks, $varrefs, PREG_SET_ORDER); + + foreach ($varrefs as $var_val) + { + $namespace = $var_val[1]; + $varname = $var_val[3]; + $new = $this->generate_block_varref($namespace, $varname, true, $var_val[2]); + + $text_blocks = str_replace($var_val[0], $new, $text_blocks); + } + + // Handle special language tags L_ and LA_ + $this->compile_language_tags($text_blocks); + + // This will handle the remaining root-level varrefs + $text_blocks = preg_replace('#\{(' . self::REGEX_VAR . ')\}#', "", $text_blocks); + $text_blocks = preg_replace('#\{\$(' . self::REGEX_VAR . ')\}#', "", $text_blocks); + + return $text_blocks; + } + + /** + * Handles special language tags L_ and LA_ + */ + private function compile_language_tags(&$text_blocks) + { + // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array + if (strpos($text_blocks, '{L_') !== false) + { + $text_blocks = preg_replace('#\{L_(' . self::REGEX_VAR . ')\}#', "", $text_blocks); + } + + // Handle addslashed language variables prefixed with LA_ + // If a template variable already exist, it will be used in favor of it... + if (strpos($text_blocks, '{LA_') !== false) + { + $text_blocks = preg_replace('#\{LA_(' . self::REGEX_VAR . '+)\}#', "", $text_blocks); + } + } + + /** + * Compile blocks + * @access private + */ + private function compile_tag_block($tag_args) + { + $no_nesting = false; + + // Is the designer wanting to call another loop in a loop? + // + // + // + // + // 'loop2' is actually on the same nesting level as 'loop' you assign + // variables to it with template->assign_block_vars('loop2', array(...)) + if (strpos($tag_args, '!') === 0) + { + // Count the number if ! occurrences (not allowed in vars) + $no_nesting = substr_count($tag_args, '!'); + $tag_args = substr($tag_args, $no_nesting); + } + + // Allow for control of looping (indexes start from zero): + // foo(2) : Will start the loop on the 3rd entry + // foo(-2) : Will start the loop two entries from the end + // foo(3,4) : Will start the loop on the fourth entry and end it on the fifth + // foo(3,-4) : Will start the loop on the fourth entry and end it four from last + $match = array(); + + if (preg_match('#^([^()]*)\(([\-\d]+)(?:,([\-\d]+))?\)$#', $tag_args, $match)) + { + $tag_args = $match[1]; + + if ($match[2] < 0) + { + $loop_start = '($_' . $tag_args . '_count ' . $match[2] . ' < 0 ? 0 : $_' . $tag_args . '_count ' . $match[2] . ')'; + } + else + { + $loop_start = '($_' . $tag_args . '_count < ' . $match[2] . ' ? $_' . $tag_args . '_count : ' . $match[2] . ')'; + } + + if (!isset($match[3]) || strlen($match[3]) < 1 || $match[3] == -1) + { + $loop_end = '$_' . $tag_args . '_count'; + } + else if ($match[3] >= 0) + { + $loop_end = '(' . ($match[3] + 1) . ' > $_' . $tag_args . '_count ? $_' . $tag_args . '_count : ' . ($match[3] + 1) . ')'; + } + else //if ($match[3] < -1) + { + $loop_end = '$_' . $tag_args . '_count' . ($match[3] + 1); + } + } + else + { + $loop_start = 0; + $loop_end = '$_' . $tag_args . '_count'; + } + + $tag_template_php = ''; + array_push($this->block_names, $tag_args); + + if ($no_nesting !== false) + { + // We need to implode $no_nesting times from the end... + $block = array_slice($this->block_names, -$no_nesting); + } + else + { + $block = $this->block_names; + } + + if (sizeof($block) < 2) + { + // Block is not nested. + $tag_template_php = '$_' . $tag_args . "_count = (isset(\$_tpldata['$tag_args'])) ? sizeof(\$_tpldata['$tag_args']) : 0;"; + $varref = "\$_tpldata['$tag_args']"; + } + else + { + // This block is nested. + // Generate a namespace string for this block. + $namespace = implode('.', $block); + + // Get a reference to the data array for this block that depends on the + // current indices of all parent blocks. + $varref = $this->generate_block_data_ref($namespace, false); + + // Create the for loop code to iterate over this block. + $tag_template_php = '$_' . $tag_args . '_count = (isset(' . $varref . ')) ? sizeof(' . $varref . ') : 0;'; + } + + $tag_template_php .= 'if ($_' . $tag_args . '_count) {'; + + /** + * The following uses foreach for iteration instead of a for loop, foreach is faster but requires PHP to make a copy of the contents of the array which uses more memory + * + * if (!$offset) + * { + * $tag_template_php .= 'foreach (' . $varref . ' as $_' . $tag_args . '_i => $_' . $tag_args . '_val){'; + * } + * + */ + + $tag_template_php .= 'for ($_' . $tag_args . '_i = ' . $loop_start . '; $_' . $tag_args . '_i < ' . $loop_end . '; ++$_' . $tag_args . '_i){'; + $tag_template_php .= '$_' . $tag_args . '_val = &' . $varref . '[$_' . $tag_args . '_i];'; + + return $tag_template_php; + } + + /** + * Compile a general expression - much of this is from Smarty with + * some adaptions for our block level methods + * @access private + */ + private function compile_expression($tag_args, &$vars = array()) + { + $match = array(); + preg_match_all('/(?: + "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" | + \'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' | + [(),] | + [^\s(),]+)/x', $tag_args, $match); + + $tokens = $match[0]; + $is_arg_stack = array(); + + for ($i = 0, $size = sizeof($tokens); $i < $size; $i++) + { + $token = &$tokens[$i]; + + switch ($token) + { + case '!==': + case '===': + case '<<': + case '>>': + case '|': + case '^': + case '&': + case '~': + case ')': + case ',': + case '+': + case '-': + case '*': + case '/': + case '@': + break; + + case '==': + case 'eq': + $token = '=='; + break; + + case '!=': + case '<>': + case 'ne': + case 'neq': + $token = '!='; + break; + + case '<': + case 'lt': + $token = '<'; + break; + + case '<=': + case 'le': + case 'lte': + $token = '<='; + break; + + case '>': + case 'gt': + $token = '>'; + break; + + case '>=': + case 'ge': + case 'gte': + $token = '>='; + break; + + case '&&': + case 'and': + $token = '&&'; + break; + + case '||': + case 'or': + $token = '||'; + break; + + case '!': + case 'not': + $token = '!'; + break; + + case '%': + case 'mod': + $token = '%'; + break; + + case '(': + array_push($is_arg_stack, $i); + break; + + case 'is': + $is_arg_start = ($tokens[$i-1] == ')') ? array_pop($is_arg_stack) : $i-1; + $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); + + $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); + + array_splice($tokens, $is_arg_start, sizeof($tokens), $new_tokens); + + $i = $is_arg_start; + + // no break + + default: + $varrefs = array(); + if (preg_match('#^((?:' . self::REGEX_NS . '\.)+)?(\$)?(?=[A-Z])([A-Z0-9\-_]+)#s', $token, $varrefs)) + { + if (!empty($varrefs[1])) + { + $namespace = substr($varrefs[1], 0, -1); + $namespace = (strpos($namespace, '.') === false) ? $namespace : strrchr($namespace, '.'); + + // S_ROW_COUNT is deceptive, it returns the current row number not the number of rows + // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM + switch ($varrefs[3]) + { + case 'S_ROW_NUM': + case 'S_ROW_COUNT': + $token = "\$_${namespace}_i"; + break; + + case 'S_NUM_ROWS': + $token = "\$_${namespace}_count"; + break; + + case 'S_FIRST_ROW': + $token = "(\$_${namespace}_i == 0)"; + break; + + case 'S_LAST_ROW': + $token = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; + break; + + case 'S_BLOCK_NAME': + $token = "'$namespace'"; + break; + + default: + $token = $this->generate_block_data_ref(substr($varrefs[1], 0, -1), true, $varrefs[2]) . '[\'' . $varrefs[3] . '\']'; + $vars[$token] = true; + break; + } + } + else + { + $token = ($varrefs[2]) ? '$_tpldata[\'DEFINE\'][\'.\'][\'' . $varrefs[3] . '\']' : '$_rootref[\'' . $varrefs[3] . '\']'; + $vars[$token] = true; + } + + } + else if (preg_match('#^\.((?:' . self::REGEX_NS . '\.?)+)$#s', $token, $varrefs)) + { + // Allow checking if loops are set with .loopname + // It is also possible to check the loop count by doing for example + $blocks = explode('.', $varrefs[1]); + + // If the block is nested, we have a reference that we can grab. + // If the block is not nested, we just go and grab the block from _tpldata + if (sizeof($blocks) > 1) + { + $block = array_pop($blocks); + $namespace = implode('.', $blocks); + $varref = $this->generate_block_data_ref($namespace, true); + + // Add the block reference for the last child. + $varref .= "['" . $block . "']"; + } + else + { + $varref = '$_tpldata'; + + // Add the block reference for the last child. + $varref .= "['" . $blocks[0] . "']"; + } + $token = "isset($varref) && sizeof($varref)"; + } + + break; + } + } + + return $tokens; + } + + + private function compile_tag_if($tag_args, $elseif) + { + $vars = array(); + + $tokens = $this->compile_expression($tag_args, $vars); + + $tpl = ($elseif) ? '} else if (' : 'if ('; + + if (!empty($vars)) + { + $tpl .= '(isset(' . implode(') && isset(', array_keys($vars)) . ')) && '; + } + + $tpl .= implode(' ', $tokens); + $tpl .= ') { '; + + return $tpl; + } + + /** + * Compile DEFINE tags + * @access private + */ + private function compile_tag_define($tag_args, $op) + { + $match = array(); + preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (.*?))?$#', $tag_args, $match); + + if (empty($match[2]) || (!isset($match[3]) && $op)) + { + return ''; + } + + if (!$op) + { + return 'unset(' . (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ');'; + } + + $parsed_statement = implode(' ', $this->compile_expression($match[3])); + + return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $parsed_statement . ';'; + } + + /** + * Compile INCLUDE tag + * @access private + */ + private function compile_tag_include($tag_args) + { + return "\$this->_tpl_include('$tag_args');"; + } + + /** + * Compile INCLUDE_PHP tag + * @access private + */ + private function compile_tag_include_php($tag_args) + { + return "include('$tag_args');"; + } + + /** + * parse expression + * This is from Smarty + * @access private + */ + private function _parse_is_expr($is_arg, $tokens) + { + $expr_end = 0; + $negate_expr = false; + + if (($first_token = array_shift($tokens)) == 'not') + { + $negate_expr = true; + $expr_type = array_shift($tokens); + } + else + { + $expr_type = $first_token; + } + + switch ($expr_type) + { + case 'even': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!(($is_arg / $expr_arg) & 1)"; + } + else + { + $expr = "!($is_arg & 1)"; + } + break; + + case 'odd': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "(($is_arg / $expr_arg) & 1)"; + } + else + { + $expr = "($is_arg & 1)"; + } + break; + + case 'div': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!($is_arg % $expr_arg)"; + } + break; + } + + if ($negate_expr) + { + if ($expr[0] == '!') + { + // Negated expression, de-negate it. + $expr = substr($expr, 1); + } + else + { + $expr = "!($expr)"; + } + } + + array_splice($tokens, 0, $expr_end, $expr); + + return $tokens; + } + + /** + * Generates a reference to the given variable inside the given (possibly nested) + * block namespace. This is a string of the form: + * ' . $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . ' + * It's ready to be inserted into an "echo" line in one of the templates. + * + * @access private + * @param string $namespace Namespace to access (expects a trailing "." on the namespace) + * @param string $varname Variable name to use + * @param bool $echo If true return an echo statement, otherwise a reference to the internal variable + * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable + * @return string Code to access variable or echo it if $echo is true + */ + private function generate_block_varref($namespace, $varname, $echo = true, $defop = false) + { + // Strip the trailing period. + $namespace = substr($namespace, 0, -1); + + $expr = true; + $isset = false; + + // S_ROW_COUNT is deceptive, it returns the current row number now the number of rows + // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM + switch ($varname) + { + case 'S_ROW_NUM': + case 'S_ROW_COUNT': + $varref = "\$_${namespace}_i"; + break; + + case 'S_NUM_ROWS': + $varref = "\$_${namespace}_count"; + break; + + case 'S_FIRST_ROW': + $varref = "(\$_${namespace}_i == 0)"; + break; + + case 'S_LAST_ROW': + $varref = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; + break; + + case 'S_BLOCK_NAME': + $varref = "'$namespace'"; + break; + + default: + // Get a reference to the data block for this namespace. + $varref = $this->generate_block_data_ref($namespace, true, $defop); + // Prepend the necessary code to stick this in an echo line. + + // Append the variable reference. + $varref .= "['$varname']"; + + $expr = false; + $isset = true; + break; + } + // @todo Test the !$expr more + $varref = ($echo) ? '' : (($expr || isset($varref)) ? $varref : ''); + + return $varref; + } + + /** + * Generates a reference to the array of data values for the given + * (possibly nested) block namespace. This is a string of the form: + * $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['$childN'] + * + * @access private + * @param string $blockname Block to access (does not expect a trailing "." on the blockname) + * @param bool $include_last_iterator If $include_last_iterator is true, then [$_childN_i] will be appended to the form shown above. + * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable + * @return string Code to access variable + */ + private function generate_block_data_ref($blockname, $include_last_iterator, $defop = false) + { + // Get an array of the blocks involved. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + // DEFINE is not an element of any referenced variable, we must use _tpldata to access it + if ($defop) + { + $varref = '$_tpldata[\'DEFINE\']'; + // Build up the string with everything but the last child. + for ($i = 0; $i < $blockcount; $i++) + { + $varref .= "['" . $blocks[$i] . "'][\$_" . $blocks[$i] . '_i]'; + } + // Add the block reference for the last child. + $varref .= "['" . $blocks[$blockcount] . "']"; + // Add the iterator for the last child if requried. + if ($include_last_iterator) + { + $varref .= '[$_' . $blocks[$blockcount] . '_i]'; + } + return $varref; + } + else if ($include_last_iterator) + { + return '$_'. $blocks[$blockcount] . '_val'; + } + else + { + return '$_'. $blocks[$blockcount - 1] . '_val[\''. $blocks[$blockcount]. '\']'; + } + } +} + +stream_filter_register('phpbb_template', 'phpbb_template_filter'); + +/** +* Extension of template class - Functions needed for compiling templates only. +* +* psoTFX, phpBB Development Team - Completion of file caching, decompilation +* routines and implementation of conditionals/keywords and associated changes +* +* The interface was inspired by PHPLib templates, and the template file (formats are +* quite similar) +* +* The keyword/conditional implementation is currently based on sections of code from +* the Smarty templating engine (c) 2001 ispi of Lincoln, Inc. which is released +* (on its own and in whole) under the LGPL. Section 3 of the LGPL states that any code +* derived from an LGPL application may be relicenced under the GPL, this applies +* to this source +* +* DEFINE directive inspired by a request by Cyberalien +* +* @package phpBB3 +* @uses template_filter As a PHP stream filter to perform compilation of templates +*/ +class phpbb_template_compile +{ + /** + * @var phpbb_template Reference to the {@link phpbb_template template} object performing compilation + */ + private $template; + + /** + * Constructor + * @param phpbb_template $template {@link phpbb_template Template} object performing compilation + */ + public function __construct(phpbb_template $template) + { + $this->template = $template; + } + + /** + * Load template source from file + * @access public + * @param string $handle Template handle we wish to load + * @return bool Return true on success otherwise false + */ + public function _tpl_load_file($handle) + { + // Try and open template for read + if (!file_exists($this->template->files[$handle])) + { + trigger_error("template->_tpl_load_file(): File {$this->template->files[$handle]} does not exist or is empty", E_USER_ERROR); + } + + // Actually compile the code now. + return $this->compile_write($handle, $this->template->files[$handle]); + } + + /** + * Load template source from file + * @access public + * @param string $handle Template handle we wish to compile + * @return string|bool Return compiled code on successful compilation otherwise false + */ + public function _tpl_gen_src($handle) + { + // Try and open template for read + if (!file_exists($this->template->files[$handle])) + { + trigger_error("template->_tpl_load_file(): File {$this->template->files[$handle]} does not exist or is empty", E_USER_ERROR); + } + + // Actually compile the code now. + return $this->compile_gen($this->template->files[$handle]); + } + + /** + * Write compiled file to cache directory + * @access private + * @param string $handle Template handle to compile + * @param string $source_file Source template file + * @return bool Return true on success otherwise false + */ + private function compile_write($handle, $source_file) + { + global $system, $phpEx; + + $filename = $this->template->cachepath . str_replace('/', '.', $this->template->filename[$handle]) . '.' . $phpEx; + + $source_handle = @fopen($source_file, 'rb'); + $destination_handle = @fopen($filename, 'wb'); + + if (!$source_handle || !$destination_handle) + { + return false; + } + + @flock($destination_handle, LOCK_EX); + + stream_filter_append($source_handle, 'phpbb_template'); + stream_copy_to_stream($source_handle, $destination_handle); + + @fclose($source_handle); + @flock($destination_handle, LOCK_UN); + @fclose($destination_handle); + + phpbb_chmod($filename, CHMOD_READ | CHMOD_WRITE); + + clearstatcache(); + + return true; + } + + /** + * Generate source for eval() + * @access private + * @param string $source_file Source template file + * @return string|bool Return compiled code on successful compilation otherwise false + */ + private function compile_gen($source_file) + { + $source_handle = @fopen($source_file, 'rb'); + $destination_handle = @fopen('php://temp' ,'r+b'); + + if (!$source_handle || !$destination_handle) + { + return false; + } + + stream_filter_append($source_handle, 'phpbb_template'); + stream_copy_to_stream($source_handle, $destination_handle); + + @fclose($source_handle); + + rewind($destination_handle); + return stream_get_contents($destination_handle); + } +} + +?> \ No newline at end of file -- cgit v1.2.1 From 4f3e966fdc4bc241b8941ee9598d8c397f03f6a3 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 23 Apr 2011 22:47:22 -0400 Subject: [feature/template-engine] Delete ?>, add newline at EOF. PHPBB3-9726 --- phpBB/includes/template.php | 2 +- phpBB/includes/template_compile.php | 2 -- 2 files changed, 1 insertion(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 47262eaccf..5eebeeae34 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -844,4 +844,4 @@ class phpbb_template class template extends phpbb_template { // dirty hack -} \ No newline at end of file +} diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php index 64dd8117a0..d9eda1d8c2 100644 --- a/phpBB/includes/template_compile.php +++ b/phpBB/includes/template_compile.php @@ -978,5 +978,3 @@ class phpbb_template_compile return stream_get_contents($destination_handle); } } - -?> \ No newline at end of file -- cgit v1.2.1 From 203187a8410c411b0bdd90729e19c257ec3a7820 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 24 Apr 2011 00:22:41 -0400 Subject: [feature/template-engine] Fix recompilation logic. Do not change $recompile from true to false - any recompilation condition alone is sufficient to force recompilation. Also uncomment the nonexistent file test which passes with this fix. PHPBB3-9726 --- phpBB/includes/template.php | 23 +++++++++++++---------- 1 file changed, 13 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 5eebeeae34..5d0e8416a4 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -343,19 +343,22 @@ class phpbb_template $recompile = false; $recompile = (!file_exists($filename) || @filesize($filename) === 0 || ($config['load_tplcompile'] && @filemtime($filename) < @filemtime($this->files[$handle]))) ? true : false; - if (defined('DEBUG_EXTRA')) - { - $recompile = true; - } - else if ($config['load_tplcompile']) + if (!$recompile) { - // No way around it: we need to check inheritance here - if ($user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) + if (defined('DEBUG_EXTRA')) { - $this->files[$handle] = $this->files_inherit[$handle]; - $this->files_template[$handle] = $user->theme['template_inherits_id']; + $recompile = true; + } + else if ($config['load_tplcompile']) + { + // No way around it: we need to check inheritance here + if ($user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) + { + $this->files[$handle] = $this->files_inherit[$handle]; + $this->files_template[$handle] = $user->theme['template_inherits_id']; + } + $recompile = (@filemtime($filename) < @filemtime($this->files[$handle])) ? true : false; } - $recompile = (@filemtime($filename) < @filemtime($this->files[$handle])) ? true : false; } // Recompile page if the original template is newer, otherwise load the compiled version -- cgit v1.2.1 From f29f32e0d67e88a271702264c37852406f4013d8 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 24 Apr 2011 00:44:19 -0400 Subject: [feature/template-engine] Allow leading underscores in variable names. Subsilver uses ._file in overall_header. PHPBB3-9726 --- phpBB/includes/template_compile.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php index d9eda1d8c2..92695a54fa 100644 --- a/phpBB/includes/template_compile.php +++ b/phpBB/includes/template_compile.php @@ -23,13 +23,13 @@ if (!defined('IN_PHPBB')) */ class phpbb_template_filter extends php_user_filter { - const REGEX_NS = '[a-z][a-z_0-9]+'; + const REGEX_NS = '[a-z_][a-z_0-9]+'; - const REGEX_VAR = '[A-Z][A-Z_0-9]+'; + const REGEX_VAR = '[A-Z_][A-Z_0-9]+'; const REGEX_TAG = ''; - const REGEX_TOKENS = '~|{((?:[a-z][a-z_0-9]+\.)*\\$?[A-Z][A-Z_0-9]+)}~'; + const REGEX_TOKENS = '~|{((?:[a-z_][a-z_0-9]+\.)*\\$?[A-Z][A-Z_0-9]+)}~'; /** * @var array -- cgit v1.2.1 From 321ecf427356f2d503818089c7b0e008e5a73c2c Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 24 Apr 2011 01:18:09 -0400 Subject: [feature/template-engine] Delete class_exists checks, rely on autoloading. PHPBB3-9726 --- phpBB/includes/template.php | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 5d0e8416a4..30ede2f242 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -380,11 +380,6 @@ class phpbb_template trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR); } - if (!class_exists('phpbb_template_compile')) - { - include 'template_compile.php'; - } - $compile = new phpbb_template_compile($this); if ($compile->_tpl_load_file($handle) === false) @@ -404,11 +399,6 @@ class phpbb_template */ private function _tpl_eval($handle) { - if (!class_exists('phpbb_template_compile')) - { - include 'template_compile.php'; - } - $compile = new phpbb_template_compile($this); // If we don't have a file assigned to this handle, die. -- cgit v1.2.1 From c8db531fcb11cdeeefcae88b05c2674b74e2d824 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 24 Apr 2011 01:59:40 -0400 Subject: [feature/template-engine] Removed a useless space. PHPBB3-9726 --- phpBB/includes/template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 30ede2f242..24d7aeadd0 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -782,7 +782,7 @@ class phpbb_template $this->files_inherit[$handle] = $this->inherit_root . '/' . $filename; } - $filename = $this->_tpl_load($handle); + $filename = $this->_tpl_load($handle); if ($include) { -- cgit v1.2.1 From 81962d1d8ff083dd366c77e7d3858fd2c9ed7d43 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Tue, 23 Nov 2010 16:09:09 +0100 Subject: [ticket/9924] Pass template instance into $template->display hook This is a cherry-pick of 053cf790a93e9cfb521f484901d79c72783f868f which appears to have been partially reverted here. PHPBB3-9924 --- phpBB/includes/template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 24d7aeadd0..2b4c7a09f7 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -252,7 +252,7 @@ class phpbb_template { global $user, $phpbb_hook; - if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once)) + if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once, $this)) { if ($phpbb_hook->hook_return(array(__CLASS__, __FUNCTION__))) { -- cgit v1.2.1 From a2c75f60537ccf6a424c7f066eafbffc13c0c38d Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 24 Apr 2011 21:18:18 -0400 Subject: [feature/template-engine] Deleted $template from phpbb_template_compile class. phpbb_template_compile is now much simpler. It takes complete file paths as inputs, either source template path or source template path and output compiled template path. The number of methods also went down to two - compile template and returned compiled text or compile and write to file. phpbb_compile class is responsible for determining source and compiled paths. It already had all the data necessary for this, now the code is in the same place as the data it uses. PHPBB3-9726 --- phpBB/includes/template.php | 67 +++++++++++++++++------- phpBB/includes/template_compile.php | 100 +++++++++--------------------------- 2 files changed, 73 insertions(+), 94 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 2b4c7a09f7..e1e96791c9 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -366,7 +366,7 @@ class phpbb_template { return $filename; } - + // Inheritance - we point to another template file for this one. Equality is also used for store_db if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) { @@ -374,20 +374,54 @@ class phpbb_template $this->files_template[$handle] = $user->theme['template_inherits_id']; } + $source_file = $this->_source_file_for_handle($handle); + + $compile = new phpbb_template_compile($this); + + if ($compile->compile_write($source_file, $this->_compiled_file_for_handle($handle)) === false) + { + return false; + } + + return $filename; + } + + /** + * Resolves template handle $handle to source file path. + * @access private + * @param string $handle Template handle (i.e. "friendly" template name) + * @return string Source file path + */ + private function _source_file_for_handle($handle) + { // If we don't have a file assigned to this handle, die. if (!isset($this->files[$handle])) { - trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR); + trigger_error("_source_file_for_handle(): No file specified for handle $handle", E_USER_ERROR); } - $compile = new phpbb_template_compile($this); + $source_file = $this->files[$handle]; - if ($compile->_tpl_load_file($handle) === false) + // Try and open template for reading + if (!file_exists($source_file)) { - return false; + trigger_error("_source_file_for_handle(): File $source_file does not exist", E_USER_ERROR); } - - return $filename; + return $source_file; + } + + /** + * Determines compiled file path for handle $handle. + * @access private + * @param string $handle Template handle (i.e. "friendly" template name) + * @return string Compiled file path + */ + private function _compiled_file_for_handle($handle) + { + global $phpEx; + + $compiled_file = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $phpEx; + return $compiled_file; } /** @@ -401,13 +435,9 @@ class phpbb_template { $compile = new phpbb_template_compile($this); - // If we don't have a file assigned to this handle, die. - if (!isset($this->files[$handle])) - { - trigger_error("template->_tpl_eval(): No file specified for handle $handle", E_USER_ERROR); - } + $source_file = $this->_source_file_for_handle($handle); - if (($code = $compile->_tpl_gen_src($handle)) === false) + if (($code = $compile->compile_gen($source_file)) === false) { return false; } @@ -473,13 +503,13 @@ class phpbb_template { if ($row['template_filename'] == $this->filename[$handle]) { - $compile->_tpl_load_file($handle, true); + $compile->compile_write($source_file, $this->_compiled_file_for_handle($handle)); } else { $this->files[$row['template_filename']] = $file; $this->filename[$row['template_filename']] = $row['template_filename']; - $compile->_tpl_load_file($row['template_filename'], true); + $compile->compile_write($this->_source_file_for_handle($row['template_filename']), $this->_compiled_file_for_handle($row['template_filename'])); unset($this->compiled_code[$row['template_filename']]); unset($this->files[$row['template_filename']]); unset($this->filename[$row['template_filename']]); @@ -515,14 +545,14 @@ class phpbb_template $this->files_template[$row['template_filename']] = $user->theme['template_inherits_id']; } // Try to load from filesystem and instruct to insert into the styles table... - $compile->_tpl_load_file($handle, true); + $compile->compile_write($source_file, $this->_compiled_file_for_handle($handle)); return false; } return false; } - $compile->_tpl_load_file($handle); + $compile->compile_write($source_file, $this->_compiled_file_for_handle($handle)); return false; } @@ -801,7 +831,8 @@ class phpbb_template { $compile = new phpbb_template_compile($this); - if (($code = $compile->_tpl_gen_src($handle)) !== false) + $source_file = $this->_source_file_for_handle($handle); + if (($code = $compile->compile_gen($source_file)) !== false) { $code = ' ?> ' . $code . ' in_php; - + $data = preg_replace('#<(?:[\\?%]|script)#s', '', $data); $data = preg_replace_callback(self::REGEX_TOKENS, array($this, 'replace'), $data); global $config; - + // Remove php if (!$config['tpl_allow_php']) { @@ -117,33 +117,33 @@ class phpbb_template_filter extends php_user_filter $data = preg_replace('~.*?~', '', $data); $data = preg_replace('~.*?$~', '', $data); } - + "?>/**/"; - + /* Preserve whitespace. PHP removes a newline after the closing tag (if it's there). This is by design. - - + + Consider the following template: - + some content - + If we were to simply preserve all whitespace, we could simply replace all "?>" tags with "?>\n". Doing that, would add additional newlines to the compiled tempalte in place of the IF and ENDIF statements. These newlines are unwanted (and one is conditional). The IF and ENDIF are usually on their own line for ease of reading. - + This replacement preserves newlines only for statements that aren't the only statement on a line. It will NOT preserve newlines at the end of statements in the above examle. It will preserve newlines in situations like: - + inline content - - + + */ //* $data = preg_replace('~(?).)+(?)$~m', "$1\n", $data); @@ -158,7 +158,7 @@ class phpbb_template_filter extends php_user_filter { return ''; } - + if (isset($matches[3])) { return $this->compile_var_tags($matches[0]); @@ -558,7 +558,7 @@ class phpbb_template_filter extends php_user_filter $token = ($varrefs[2]) ? '$_tpldata[\'DEFINE\'][\'.\'][\'' . $varrefs[3] . '\']' : '$_rootref[\'' . $varrefs[3] . '\']'; $vars[$token] = true; } - + } else if (preg_match('#^\.((?:' . self::REGEX_NS . '\.?)+)$#s', $token, $varrefs)) { @@ -867,70 +867,17 @@ stream_filter_register('phpbb_template', 'phpbb_template_filter'); class phpbb_template_compile { /** - * @var phpbb_template Reference to the {@link phpbb_template template} object performing compilation - */ - private $template; - - /** - * Constructor - * @param phpbb_template $template {@link phpbb_template Template} object performing compilation - */ - public function __construct(phpbb_template $template) - { - $this->template = $template; - } - - /** - * Load template source from file + * Compiles template in $source_file and writes compiled template to + * cache directory * @access public - * @param string $handle Template handle we wish to load - * @return bool Return true on success otherwise false - */ - public function _tpl_load_file($handle) - { - // Try and open template for read - if (!file_exists($this->template->files[$handle])) - { - trigger_error("template->_tpl_load_file(): File {$this->template->files[$handle]} does not exist or is empty", E_USER_ERROR); - } - - // Actually compile the code now. - return $this->compile_write($handle, $this->template->files[$handle]); - } - - /** - * Load template source from file - * @access public - * @param string $handle Template handle we wish to compile - * @return string|bool Return compiled code on successful compilation otherwise false - */ - public function _tpl_gen_src($handle) - { - // Try and open template for read - if (!file_exists($this->template->files[$handle])) - { - trigger_error("template->_tpl_load_file(): File {$this->template->files[$handle]} does not exist or is empty", E_USER_ERROR); - } - - // Actually compile the code now. - return $this->compile_gen($this->template->files[$handle]); - } - - /** - * Write compiled file to cache directory - * @access private * @param string $handle Template handle to compile * @param string $source_file Source template file * @return bool Return true on success otherwise false */ - private function compile_write($handle, $source_file) + public function compile_write($source_file, $compiled_file) { - global $system, $phpEx; - - $filename = $this->template->cachepath . str_replace('/', '.', $this->template->filename[$handle]) . '.' . $phpEx; - $source_handle = @fopen($source_file, 'rb'); - $destination_handle = @fopen($filename, 'wb'); + $destination_handle = @fopen($compiled_file, 'wb'); if (!$source_handle || !$destination_handle) { @@ -946,7 +893,7 @@ class phpbb_template_compile @flock($destination_handle, LOCK_UN); @fclose($destination_handle); - phpbb_chmod($filename, CHMOD_READ | CHMOD_WRITE); + phpbb_chmod($compiled_file, CHMOD_READ | CHMOD_WRITE); clearstatcache(); @@ -954,12 +901,13 @@ class phpbb_template_compile } /** - * Generate source for eval() - * @access private + * Compiles a template located at $source_file. + * Returns PHP source suitable for eval(). + * @access public * @param string $source_file Source template file * @return string|bool Return compiled code on successful compilation otherwise false */ - private function compile_gen($source_file) + public function compile_gen($source_file) { $source_handle = @fopen($source_file, 'rb'); $destination_handle = @fopen('php://temp' ,'r+b'); -- cgit v1.2.1 From 5c3ebb3465eee36f9147a517d4f50f4032cd04d5 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 24 Apr 2011 21:22:43 -0400 Subject: [feature/template-engine] Deleted silencing of notices. The code is now supposed to be notice-free, therefore there is no need to have the notices silenced. PHPBB3-9726 --- phpBB/includes/template.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index e1e96791c9..109f7a29ee 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -260,6 +260,7 @@ class phpbb_template } } + /* if (defined('IN_ERROR_HANDLER')) { if ((E_NOTICE & error_reporting()) == E_NOTICE) @@ -267,6 +268,7 @@ class phpbb_template error_reporting(error_reporting() ^ E_NOTICE); } } + */ $_tpldata = &$this->_tpldata; $_rootref = &$this->_rootref; -- cgit v1.2.1 From 5afc0b9b905814718ed0292fa5cc7342786c1fca Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 24 Apr 2011 22:46:34 -0400 Subject: [feature/template-engine] Corrected an off-by-one error in nested namespaces. This error resulted in a dot from the namespace being placed into variable reference in compiled template code, thus creating bogus compiled template code. PHPBB3-9726 --- phpBB/includes/template_compile.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php index 07e497eca4..cba402f83b 100644 --- a/phpBB/includes/template_compile.php +++ b/phpBB/includes/template_compile.php @@ -520,7 +520,11 @@ class phpbb_template_filter extends php_user_filter if (!empty($varrefs[1])) { $namespace = substr($varrefs[1], 0, -1); - $namespace = (strpos($namespace, '.') === false) ? $namespace : strrchr($namespace, '.'); + $dot_pos = strrchr($namespace, '.'); + if ($dot_pos !== false) + { + $namespace = substr($dot_pos, 1); + } // S_ROW_COUNT is deceptive, it returns the current row number not the number of rows // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM -- cgit v1.2.1 From 8d5e468eb47f35287214ed4a12722d5add5f37ba Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 24 Apr 2011 23:13:44 -0400 Subject: [feature/template-engine] Created a script to compile templates. Script takes path to template as the only argument and outputs the compiled template to standard output. PHPBB3-9726 --- phpBB/develop/compile_template.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 phpBB/develop/compile_template.php (limited to 'phpBB') diff --git a/phpBB/develop/compile_template.php b/phpBB/develop/compile_template.php new file mode 100644 index 0000000000..e80e0f21b5 --- /dev/null +++ b/phpBB/develop/compile_template.php @@ -0,0 +1,24 @@ +compile_gen($file); -- cgit v1.2.1 From f97411b91143a0c75ef0ecec3ff03fc36a879728 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Mon, 25 Apr 2011 13:03:55 -0400 Subject: [feature/template-engine] Corrected miscompilation of loop size constructs. PHPBB3-9726 --- phpBB/includes/template_compile.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php index cba402f83b..9a8bc05343 100644 --- a/phpBB/includes/template_compile.php +++ b/phpBB/includes/template_compile.php @@ -588,7 +588,7 @@ class phpbb_template_filter extends php_user_filter // Add the block reference for the last child. $varref .= "['" . $blocks[0] . "']"; } - $token = "isset($varref) && sizeof($varref)"; + $token = "(isset($varref) ? sizeof($varref) : 0)"; } break; -- cgit v1.2.1 From 427a5122d55f06c861277297411f7e39a03a703c Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Tue, 26 Apr 2011 02:09:51 +0200 Subject: [feature/template-engine] Fix negative variable expressions compile_tag_if had the flawed approach of adding an isset statement for all variables to the beginning of the if. This fails for negative expressions, and checking those takes a considerable effort. The easier solution is to make the variable expression itself conditional, defaulting to null if it is not set. Thanks to naderman for the solution. PHPBB3-9726 --- phpBB/includes/template_compile.php | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php index 9a8bc05343..3f8a028e25 100644 --- a/phpBB/includes/template_compile.php +++ b/phpBB/includes/template_compile.php @@ -408,7 +408,7 @@ class phpbb_template_filter extends php_user_filter * some adaptions for our block level methods * @access private */ - private function compile_expression($tag_args, &$vars = array()) + private function compile_expression($tag_args) { $match = array(); preg_match_all('/(?: @@ -553,14 +553,14 @@ class phpbb_template_filter extends php_user_filter default: $token = $this->generate_block_data_ref(substr($varrefs[1], 0, -1), true, $varrefs[2]) . '[\'' . $varrefs[3] . '\']'; - $vars[$token] = true; + $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; break; } } else { $token = ($varrefs[2]) ? '$_tpldata[\'DEFINE\'][\'.\'][\'' . $varrefs[3] . '\']' : '$_rootref[\'' . $varrefs[3] . '\']'; - $vars[$token] = true; + $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; } } @@ -601,17 +601,10 @@ class phpbb_template_filter extends php_user_filter private function compile_tag_if($tag_args, $elseif) { - $vars = array(); - - $tokens = $this->compile_expression($tag_args, $vars); + $tokens = $this->compile_expression($tag_args); $tpl = ($elseif) ? '} else if (' : 'if ('; - if (!empty($vars)) - { - $tpl .= '(isset(' . implode(') && isset(', array_keys($vars)) . ')) && '; - } - $tpl .= implode(' ', $tokens); $tpl .= ') { '; -- cgit v1.2.1 From 909ee59871402aa8dc7fa4e540d2f7e5da1628fc Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 26 Apr 2011 12:10:52 -0400 Subject: [feature/template-engine] Removed $this from new phpbb_template_compile calls. The compile class no longer takes template as a parameter. PHPBB3-9726 --- phpBB/includes/template.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 109f7a29ee..ae68f5fad3 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -378,7 +378,7 @@ class phpbb_template $source_file = $this->_source_file_for_handle($handle); - $compile = new phpbb_template_compile($this); + $compile = new phpbb_template_compile(); if ($compile->compile_write($source_file, $this->_compiled_file_for_handle($handle)) === false) { @@ -435,7 +435,7 @@ class phpbb_template */ private function _tpl_eval($handle) { - $compile = new phpbb_template_compile($this); + $compile = new phpbb_template_compile(); $source_file = $this->_source_file_for_handle($handle); @@ -831,7 +831,7 @@ class phpbb_template } else { - $compile = new phpbb_template_compile($this); + $compile = new phpbb_template_compile(); $source_file = $this->_source_file_for_handle($handle); if (($code = $compile->compile_gen($source_file)) !== false) -- cgit v1.2.1 From e6eb11bb1168236cbaba0263d322170dc2c7bdcd Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 00:03:49 -0400 Subject: [ticket/10003] Ported d7d96223e7bae7cd60b13c6e7896d95838c3633c to db_tools. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index f4b181c6ad..f22ddc2ee8 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1371,24 +1371,29 @@ class phpbb_db_tools switch ($this->sql_layer) { case 'firebird': + // Does not support AFTER statement, only POSITION (and there you need the column position) $statements[] = 'ALTER TABLE ' . $table_name . ' ADD "' . strtoupper($column_name) . '" ' . $column_data['column_type_sql']; break; case 'mssql': case 'mssqlnative': + // Does not support AFTER, only through temporary table $statements[] = 'ALTER TABLE [' . $table_name . '] ADD [' . $column_name . '] ' . $column_data['column_type_sql_default']; break; case 'mysql_40': case 'mysql_41': - $statements[] = 'ALTER TABLE `' . $table_name . '` ADD COLUMN `' . $column_name . '` ' . $column_data['column_type_sql']; + $after = (!empty($column_data['after'])) ? ' AFTER ' . $column_data['after'] : ''; + $statements[] = 'ALTER TABLE `' . $table_name . '` ADD COLUMN `' . $column_name . '` ' . $column_data['column_type_sql'] . $after; break; case 'oracle': + // Does not support AFTER, only through temporary table $statements[] = 'ALTER TABLE ' . $table_name . ' ADD ' . $column_name . ' ' . $column_data['column_type_sql']; break; case 'postgres': + // Does not support AFTER, only through temporary table if (version_compare($this->db->sql_server_info(true), '8.0', '>=')) { $statements[] = 'ALTER TABLE ' . $table_name . ' ADD COLUMN "' . $column_name . '" ' . $column_data['column_type_sql']; @@ -2120,4 +2125,4 @@ class phpbb_db_tools } } -?> \ No newline at end of file +?> -- cgit v1.2.1 From 3cb1b90ca6afcf0533f8f398f2a3f4066b697ed3 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 00:34:24 -0400 Subject: [ticket/10003] Ported 96a30afcca3ebd832c9b3083bb5c9a9f2a2dc54b to db_tools. This change is somewhat questionable, maybe it should be reviewed. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index f22ddc2ee8..d9ff811e34 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -681,10 +681,12 @@ class phpbb_db_tools { foreach ($columns as $column_name => $column_data) { - // Only add the column if it does not exist yet, else change it (to be consistent) + // Only add the column if it does not exist yet if ($column_exists = $this->sql_column_exists($table, $column_name)) { - $result = $this->sql_column_change($table, $column_name, $column_data, true); + continue; + // This is commented out here because it can take tremendous time on updates +// $result = $this->sql_column_change($table, $column_name, $column_data, true); } else { -- cgit v1.2.1 From 9f34aa0b79456f5d2d60f62361f483c76a3f89dd Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 00:39:36 -0400 Subject: [ticket/10003] Ported 54c22ae52a0e18232cac8fed342ea52f2e2a793d to db_tools. This diff applied cleanly. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 110 ++++++++++++++++++++++++++++++++++++++++- 1 file changed, 109 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index d9ff811e34..a793a2f313 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -697,7 +697,8 @@ class phpbb_db_tools { if ($column_exists) { - $sqlite_data[$table]['change_columns'][] = $result; + continue; +// $sqlite_data[$table]['change_columns'][] = $result; } else { @@ -719,6 +720,11 @@ class phpbb_db_tools { foreach ($indexes as $index_name) { + if (!$this->sql_index_exists($table, $index_name)) + { + continue; + } + $result = $this->sql_index_drop($table, $index_name); if ($this->return_statements) @@ -779,6 +785,11 @@ class phpbb_db_tools { foreach ($index_array as $index_name => $column) { + if ($this->sql_index_exists($table, $index_name)) + { + continue; + } + $result = $this->sql_create_unique_index($table, $index_name, $column); if ($this->return_statements) @@ -796,6 +807,11 @@ class phpbb_db_tools { foreach ($index_array as $index_name => $column) { + if ($this->sql_index_exists($table, $index_name)) + { + continue; + } + $result = $this->sql_create_index($table, $index_name, $column); if ($this->return_statements) @@ -1104,6 +1120,98 @@ class phpbb_db_tools } } + /** + * Check if a specified index exists in table + * + * @param string $table_name Table to check the index at + * @param string $index_name The index name to check + * + * @return bool True if index exists, else false + */ + function sql_index_exists($table_name, $index_name) + { + if ($this->sql_layer == 'mssql') + { + $sql = "EXEC sp_statistics '$table_name'"; + $result = $this->db->sql_query($sql); + + while ($row = $this->db->sql_fetchrow($result)) + { + if ($row['TYPE'] == 3) + { + if (strtolower($row['INDEX_NAME']) == strtolower($index_name)) + { + $this->db->sql_freeresult($result); + return true; + } + } + } + $this->db->sql_freeresult($result); + + return false; + } + + switch ($this->sql_layer) + { + case 'firebird': + $sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name + FROM RDB\$INDICES + WHERE RDB\$RELATION_NAME = " . strtoupper($table_name) . " + AND RDB\$UNIQUE_FLAG IS NULL + AND RDB\$FOREIGN_KEY IS NULL"; + $col = 'index_name'; + break; + + case 'postgres': + $sql = "SELECT ic.relname as index_name + FROM pg_class bc, pg_class ic, pg_index i + WHERE (bc.oid = i.indrelid) + AND (ic.oid = i.indexrelid) + AND (bc.relname = '" . $table_name . "') + AND (i.indisunique != 't') + AND (i.indisprimary != 't')"; + $col = 'index_name'; + break; + + case 'mysql_40': + case 'mysql_41': + $sql = 'SHOW KEYS + FROM ' . $table_name; + $col = 'Key_name'; + break; + + case 'oracle': + $sql = "SELECT index_name + FROM user_indexes + WHERE table_name = '" . $table_name . "' + AND generated = 'N'"; + break; + + case 'sqlite': + $sql = "PRAGMA index_info('" . $table_name . "');"; + $col = 'name'; + break; + } + + $result = $this->db->sql_query($sql); + while ($row = $this->db->sql_fetchrow($result)) + { + if (($this->sql_layer == 'mysql_40' || $this->sql_layer == 'mysql_41') && !$row['Non_unique']) + { + continue; + } + + if (strtolower($row[$col]) == strtolower($index_name)) + { + $this->db->sql_freeresult($result); + return true; + } + } + $this->db->sql_freeresult($result); + + return false; + } + /** * Private method for performing sql statements (either execute them or return them) * @access private -- cgit v1.2.1 From 761e3dd36f3b42fdaac99ba76f8d214b47983c05 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 01:07:46 -0400 Subject: [ticket/10003] Ported 023760c8b2402418310a3717db8349cac0342e42 to db_tools. This was painful. Git wanted to patch hunks in wrong places. Hopefully I got it right. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 143 +++++++++++++++++++++++++++++++++++++++-- 1 file changed, 137 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index a793a2f313..f72498af9b 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -785,7 +785,7 @@ class phpbb_db_tools { foreach ($index_array as $index_name => $column) { - if ($this->sql_index_exists($table, $index_name)) + if ($this->sql_unique_index_exists($table, $index_name)) { continue; } @@ -1121,7 +1121,7 @@ class phpbb_db_tools } /** - * Check if a specified index exists in table + * Check if a specified index exists in table. Does not return PRIMARY KEY and UNIQUE indexes. * * @param string $table_name Table to check the index at * @param string $index_name The index name to check @@ -1156,7 +1156,7 @@ class phpbb_db_tools case 'firebird': $sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name FROM RDB\$INDICES - WHERE RDB\$RELATION_NAME = " . strtoupper($table_name) . " + WHERE RDB\$RELATION_NAME = '" . strtoupper($table_name) . "' AND RDB\$UNIQUE_FLAG IS NULL AND RDB\$FOREIGN_KEY IS NULL"; $col = 'index_name'; @@ -1183,12 +1183,14 @@ class phpbb_db_tools case 'oracle': $sql = "SELECT index_name FROM user_indexes - WHERE table_name = '" . $table_name . "' - AND generated = 'N'"; + WHERE table_name = '" . strtoupper($table_name) . "' + AND generated = 'N' + AND uniqueness = 'NONUNIQUE'"; + $col = 'index_name'; break; case 'sqlite': - $sql = "PRAGMA index_info('" . $table_name . "');"; + $sql = "PRAGMA index_list('" . $table_name . "');"; $col = 'name'; break; } @@ -1201,6 +1203,135 @@ class phpbb_db_tools continue; } + // These DBMS prefix index name with the table name + switch ($this->sql_layer) + { + case 'firebird': + case 'oracle': + case 'postgres': + case 'sqlite': + $row[$col] = substr($row[$col], strlen($table_name) + 1); + break; + } + + if (strtolower($row[$col]) == strtolower($index_name)) + { + $this->db->sql_freeresult($result); + return true; + } + } + $this->db->sql_freeresult($result); + + return false; + } + + /** + * Check if a specified index exists in table. Does not return PRIMARY KEY and UNIQUE indexes. + * + * @param string $table_name Table to check the index at + * @param string $index_name The index name to check + * + * @return bool True if index exists, else false + */ + function sql_unique_index_exists($table_name, $index_name) + { + if ($this->sql_layer == 'mssql') + { + $sql = "EXEC sp_statistics '$table_name'"; + $result = $this->db->sql_query($sql); + + while ($row = $this->db->sql_fetchrow($result)) + { + // Usually NON_UNIQUE is the column we want to check, but we allow for both + if ($row['TYPE'] == 3) + { + if (strtolower($row['INDEX_NAME']) == strtolower($index_name)) + { + $this->db->sql_freeresult($result); + return true; + } + } + } + $this->db->sql_freeresult($result); + return false; + } + + switch ($this->sql_layer) + { + case 'firebird': + $sql = "SELECT LOWER(RDB\$INDEX_NAME) as index_name + FROM RDB\$INDICES + WHERE RDB\$RELATION_NAME = '" . strtoupper($table_name) . "' + AND RDB\$UNIQUE_FLAG IS NOT NULL + AND RDB\$FOREIGN_KEY IS NULL"; + $col = 'index_name'; + break; + + case 'postgres': + $sql = "SELECT ic.relname as index_name, i.indisunique + FROM pg_class bc, pg_class ic, pg_index i + WHERE (bc.oid = i.indrelid) + AND (ic.oid = i.indexrelid) + AND (bc.relname = '" . $table_name . "') + AND (i.indisprimary != 't')"; + $col = 'index_name'; + break; + + case 'mysql_40': + case 'mysql_41': + $sql = 'SHOW KEYS + FROM ' . $table_name; + $col = 'Key_name'; + break; + + case 'oracle': + $sql = "SELECT index_name, table_owner + FROM user_indexes + WHERE table_name = '" . strtoupper($table_name) . "' + AND generated = 'N' + AND uniqueness = 'UNIQUE' + AND index_name LIKE 'U_%'"; + $col = 'index_name'; + break; + + case 'sqlite': + $sql = "PRAGMA index_list('" . $table_name . "') WHERE unique = 1;"; + $col = 'name'; + break; + } + + $result = $this->db->sql_query($sql); + while ($row = $this->db->sql_fetchrow($result)) + { + if (($this->sql_layer == 'mysql_40' || $this->sql_layer == 'mysql_41') && ($row['Non_unique'] || $row[$col] == 'PRIMARY')) + { + continue; + } + + if ($this->sql_layer == 'sqlite' && !$row['unique']) + { + continue; + } + + if ($this->sql_layer == 'postgres' && $row['indisunique'] != 't') + { + continue; + } + + // These DBMS prefix index name with the table name + switch ($this->sql_layer) + { + case 'oracle': + $row[$col] = substr($row[$col], strlen('U_' . $row['table_owner']) + 1); + break; + + case 'firebird': + case 'postgres': + case 'sqlite': + $row[$col] = substr($row[$col], strlen($table_name) + 1); + break; + } + if (strtolower($row[$col]) == strtolower($index_name)) { $this->db->sql_freeresult($result); -- cgit v1.2.1 From 55ff5da70b6598218b032725f73de7c4f94a7c89 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 01:25:46 -0400 Subject: [ticket/10003] Ported 5553cfc2ed81ba9eb571804c431def962720b39e to db_tools. The diff in database_update was only partially relevant. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index f72498af9b..01061c77b1 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1289,13 +1289,12 @@ class phpbb_db_tools FROM user_indexes WHERE table_name = '" . strtoupper($table_name) . "' AND generated = 'N' - AND uniqueness = 'UNIQUE' - AND index_name LIKE 'U_%'"; + AND uniqueness = 'UNIQUE'"; $col = 'index_name'; break; case 'sqlite': - $sql = "PRAGMA index_list('" . $table_name . "') WHERE unique = 1;"; + $sql = "PRAGMA index_list('" . $table_name . "');"; $col = 'name'; break; } @@ -1322,7 +1321,15 @@ class phpbb_db_tools switch ($this->sql_layer) { case 'oracle': - $row[$col] = substr($row[$col], strlen('U_' . $row['table_owner']) + 1); + // Two cases here... prefixed with U_[table_owner] and not prefixed with table_name + if (strpos($row[$col], 'U_') === 0) + { + $row[$col] = substr($row[$col], strlen('U_' . $row['table_owner']) + 1); + } + else if (strpos($row[$col], strtoupper($table_name)) === 0) + { + $row[$col] = substr($row[$col], strlen($table_name) + 1); + } break; case 'firebird': @@ -2203,6 +2210,7 @@ class phpbb_db_tools } else { + // TODO: try to change pkey without removing trigger, generator or constraints. ATM this query may fail. $statements[] = 'ALTER TABLE ' . $table_name . ' ALTER COLUMN "' . strtoupper($column_name) . '" TYPE ' . ' ' . $column_data['column_type_sql_type']; } break; -- cgit v1.2.1 From 85549fad8324afc6e9358e98d75b8fdcc5faa416 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 01:46:01 -0400 Subject: [ticket/10003] Ported 1802b9ff9286a7fc24493e71b3432816cbdbfcd8 to db_tools. Most of it was already in db_tools, these changes could have applied to code that did not exist in db_tools at the time of the commit. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index 01061c77b1..fd09ccde3f 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1130,7 +1130,7 @@ class phpbb_db_tools */ function sql_index_exists($table_name, $index_name) { - if ($this->sql_layer == 'mssql') + if ($this->sql_layer == 'mssql' || $this->sql_layer == 'mssqlnative') { $sql = "EXEC sp_statistics '$table_name'"; $result = $this->db->sql_query($sql); @@ -1235,7 +1235,7 @@ class phpbb_db_tools */ function sql_unique_index_exists($table_name, $index_name) { - if ($this->sql_layer == 'mssql') + if ($this->sql_layer == 'mssql' || $this->sql_layer == 'mssqlnative') { $sql = "EXEC sp_statistics '$table_name'"; $result = $this->db->sql_query($sql); -- cgit v1.2.1 From 1e2c19f4b443692b18a3a167dc464f63b19da47f Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 29 Apr 2011 02:16:02 -0400 Subject: [ticket/10003] Delete EOL at EOF for the benefit of 3.0 modifications. PHPBB3-10003 --- phpBB/includes/db/db_tools.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index fd09ccde3f..483ceee043 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -2374,4 +2374,4 @@ class phpbb_db_tools } } -?> +?> \ No newline at end of file -- cgit v1.2.1 From 820f22f784d55edf22db5f065cba739308b37ed2 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 30 Apr 2011 13:20:27 -0400 Subject: [ticket/9693] Removed useless $auth globalizations. PHPBB3-9693 --- phpBB/includes/functions_posting.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 0bb0ef8722..7630e05695 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -21,7 +21,7 @@ if (!defined('IN_PHPBB')) */ function generate_smilies($mode, $forum_id) { - global $auth, $db, $user, $config, $template; + global $db, $user, $config, $template; global $phpEx, $phpbb_root_path; $start = request_var('start', 0); @@ -803,7 +803,7 @@ function posting_gen_inline_attachments(&$attachment_data) */ function posting_gen_attachment_entry($attachment_data, &$filename_data, $show_attach_box = true) { - global $template, $config, $phpbb_root_path, $phpEx, $user, $auth; + global $template, $config, $phpbb_root_path, $phpEx, $user; // Some default template variables $template->assign_vars(array( -- cgit v1.2.1 From 8155bc5a9dbbe5ad6a9ceb722baf4587db8f3689 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 30 Apr 2011 15:39:19 -0400 Subject: [ticket/10067] Clarify language for user activation options in ACP. PHPBB3-10067 --- phpBB/includes/acp/acp_board.php | 10 ++++++++-- phpBB/language/en/acp/board.php | 10 +++++----- 2 files changed, 13 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php index a5e80e1f6d..8f7d08cc8f 100644 --- a/phpBB/includes/acp/acp_board.php +++ b/phpBB/includes/acp/acp_board.php @@ -770,12 +770,18 @@ class acp_board global $user, $config; $radio_ary = array(USER_ACTIVATION_DISABLE => 'ACC_DISABLE', USER_ACTIVATION_NONE => 'ACC_NONE'); + $radio_text = h_radio('config[require_activation]', $radio_ary, $value, $key); if ($config['email_enable']) { - $radio_ary += array(USER_ACTIVATION_SELF => 'ACC_USER', USER_ACTIVATION_ADMIN => 'ACC_ADMIN'); + $radio_ary = array(USER_ACTIVATION_SELF => 'ACC_USER', USER_ACTIVATION_ADMIN => 'ACC_ADMIN'); + // With longer labels the four options no longer fit + // onto a single line. Separate them onto two lines. + // This also requires two h_radio calls to generate HTML. + $radio_text .= '

'; + $radio_text .= h_radio('config[require_activation]', $radio_ary, $value, $key); } - return h_radio('config[require_activation]', $radio_ary, $value, $key); + return $radio_text; } /** diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php index 5293b835d6..c770497655 100644 --- a/phpBB/language/en/acp/board.php +++ b/phpBB/language/en/acp/board.php @@ -208,16 +208,16 @@ $lang = array_merge($lang, array( 'ACP_REGISTER_SETTINGS_EXPLAIN' => 'Here you are able to define registration and profile related settings.', 'ACC_ACTIVATION' => 'Account activation', - 'ACC_ACTIVATION_EXPLAIN' => 'This determines whether users have immediate access to the board or if confirmation is required. You can also completely disable new registrations.', + 'ACC_ACTIVATION_EXPLAIN' => 'This determines whether users have immediate access to the board or if confirmation is required. You can also completely disable new registrations. "Board-wide e-mail" must be enabled in order to use user or admin activation.', 'NEW_MEMBER_POST_LIMIT' => 'New member post limit', 'NEW_MEMBER_POST_LIMIT_EXPLAIN' => 'New members are within the Newly Registered Users group until they reach this number of posts. You can use this group to keep them from using the PM system or to review their posts. A value of 0 disables this feature.', 'NEW_MEMBER_GROUP_DEFAULT' => 'Set Newly Registered Users group to default', 'NEW_MEMBER_GROUP_DEFAULT_EXPLAIN' => 'If set to yes, and a new member post limit is specified, newly registered users will not only be put into the Newly Registered Users group, but this group will also be their default one. This may come in handy if you want to assign a group default rank and/or avatar the user then inherits.', - 'ACC_ADMIN' => 'By Admin', - 'ACC_DISABLE' => 'Disable', - 'ACC_NONE' => 'None', - 'ACC_USER' => 'By User', + 'ACC_ADMIN' => 'By admin', + 'ACC_DISABLE' => 'Disable registration', + 'ACC_NONE' => 'No activation (immediate access)', + 'ACC_USER' => 'By user (email verification)', // 'ACC_USER_ADMIN' => 'User + Admin', 'ALLOW_EMAIL_REUSE' => 'Allow e-mail address re-use', 'ALLOW_EMAIL_REUSE_EXPLAIN' => 'Different users can register with the same e-mail address.', -- cgit v1.2.1 From 5254ec27959d8a4b2e6af61d0d28080a81ff86b5 Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 1 May 2011 13:38:39 +0800 Subject: [ticket/6712] Add phpbb_ function name prefix, more docs, rename current_time PHPBB3-6712 --- phpBB/includes/functions_posting.php | 31 +++++++++++++++++++++---------- phpBB/posting.php | 2 +- 2 files changed, 22 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index ab346afb38..7713c07bc0 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -2611,16 +2611,27 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u return $url; } -/* +/** * Handle topic bumping +* @param int $forum_id The ID of the forum the topic is being bumped belongs to +* @param int $topic_id The ID of the topic is being bumping +* @param array $post_data Passes some topic parameters: +* - 'topic_title' +* - 'topic_last_post_id' +* - 'topic_last_poster_id' +* - 'topic_last_post_subject' +* - 'topic_last_poster_name' +* - 'topic_last_poster_colour' +* @param int $bump_time The time at which topic was bumped, usually it is a current time as obtained via time(). +* @return string An URL to the bumped topic, example: ./viewtopic.php?forum_id=1&topic_id=2&p=3#p3 */ -function bump_topic($forum_id, $topic_id, $post_data, $current_time = false) +function phpbb_bump_topic($forum_id, $topic_id, $post_data, $bump_time = false) { global $config, $db, $user, $phpEx, $phpbb_root_path; - if ($current_time === false) + if ($bump_time === false) { - $current_time = time(); + $bump_time = time(); } // Begin bumping @@ -2628,14 +2639,14 @@ function bump_topic($forum_id, $topic_id, $post_data, $current_time = false) // Update the topic's last post post_time $sql = 'UPDATE ' . POSTS_TABLE . " - SET post_time = $current_time + SET post_time = $bump_time WHERE post_id = {$post_data['topic_last_post_id']} AND topic_id = $topic_id"; $db->sql_query($sql); // Sync the topic's last post time, the rest of the topic's last post data isn't changed $sql = 'UPDATE ' . TOPICS_TABLE . " - SET topic_last_post_time = $current_time, + SET topic_last_post_time = $bump_time, topic_bumped = 1, topic_bumper = " . $user->data['user_id'] . " WHERE topic_id = $topic_id"; @@ -2646,7 +2657,7 @@ function bump_topic($forum_id, $topic_id, $post_data, $current_time = false) SET forum_last_post_id = " . $post_data['topic_last_post_id'] . ", forum_last_poster_id = " . $post_data['topic_last_poster_id'] . ", forum_last_post_subject = '" . $db->sql_escape($post_data['topic_last_post_subject']) . "', - forum_last_post_time = $current_time, + forum_last_post_time = $bump_time, forum_last_poster_name = '" . $db->sql_escape($post_data['topic_last_poster_name']) . "', forum_last_poster_colour = '" . $db->sql_escape($post_data['topic_last_poster_colour']) . "' WHERE forum_id = $forum_id"; @@ -2654,17 +2665,17 @@ function bump_topic($forum_id, $topic_id, $post_data, $current_time = false) // Update bumper's time of the last posting to prevent flood $sql = 'UPDATE ' . USERS_TABLE . " - SET user_lastpost_time = $current_time + SET user_lastpost_time = $bump_time WHERE user_id = " . $user->data['user_id']; $db->sql_query($sql); $db->sql_transaction('commit'); // Mark this topic as posted to - markread('post', $forum_id, $topic_id, $current_time); + markread('post', $forum_id, $topic_id, $bump_time); // Mark this topic as read - markread('topic', $forum_id, $topic_id, $current_time); + markread('topic', $forum_id, $topic_id, $bump_time); // Update forum tracking info if ($config['load_db_lastread'] && $user->data['is_registered']) diff --git a/phpBB/posting.php b/phpBB/posting.php index 89f2dfa2a6..5860219c45 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -321,7 +321,7 @@ if ($mode == 'bump') if ($bump_time = bump_topic_allowed($forum_id, $post_data['topic_bumped'], $post_data['topic_last_post_time'], $post_data['topic_poster'], $post_data['topic_last_poster_id']) && check_link_hash(request_var('hash', ''), "topic_{$post_data['topic_id']}")) { - $meta_url = bump_topic($forum_id, $topic_id, $post_data, $current_time); + $meta_url = phpbb_bump_topic($forum_id, $topic_id, $post_data, $current_time); meta_refresh(3, $meta_url); $message = $user->lang['TOPIC_BUMPED'] . '

' . sprintf($user->lang['VIEW_MESSAGE'], '', ''); -- cgit v1.2.1 From c844a277b2a6e4ad6232925fa78868cd945fc8a1 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 1 May 2011 03:09:49 -0400 Subject: [feature/template-engine] Check return value of display() in assign_display(). If display() failed, propagate the failure out of assign_display(). PHPBB3-9726 --- phpBB/includes/template.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index ae68f5fad3..b07e77989c 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -304,7 +304,11 @@ class phpbb_template public function assign_display($handle, $template_var = '', $return_content = true, $include_once = false) { ob_start(); - $this->display($handle, $include_once); + $result = $this->display($handle, $include_once); + if ($result === false) + { + return false; + } $contents = ob_get_clean(); if ($return_content) -- cgit v1.2.1 From 234b891a4be11dc0f20d93dd272242ad20344aa0 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 1 May 2011 03:14:11 -0400 Subject: [feature/template-engine] Fixed description of assign_display(). This function returns false on failure, which can happen if display() failed. Document the failure return value. PHPBB3-9726 --- phpBB/includes/template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index b07e77989c..ac37dc3dd2 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -299,7 +299,7 @@ class phpbb_template * @param string $template_var Template variable to assign compiled handle to * @param bool $return_content If true return compiled handle, otherwise assign to $template_var * @param bool $include_once Allow multiple inclusions of the file - * @return bool|string If $return_content is true return string of the compiled handle, otherwise return true + * @return bool|string false on failure, otherwise if $return_content is true return string of the compiled handle, otherwise return true */ public function assign_display($handle, $template_var = '', $return_content = true, $include_once = false) { -- cgit v1.2.1 From 63ca4c2104e7c61b6f2238b13bd5428b579be9e7 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 1 May 2011 03:25:22 -0400 Subject: [feature/template-engine] Close output stream in compile(). There is no need to leave the stream to the garbage collector, and the amount of data stuck in it may be substantial. PHPBB3-9726 --- phpBB/includes/template_compile.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php index 3f8a028e25..e2bb9fd869 100644 --- a/phpBB/includes/template_compile.php +++ b/phpBB/includes/template_compile.php @@ -920,6 +920,9 @@ class phpbb_template_compile @fclose($source_handle); rewind($destination_handle); - return stream_get_contents($destination_handle); + $contents = stream_get_contents($destination_handle); + @fclose($dest_handle); + + return $contents; } } -- cgit v1.2.1 From d840de560cc59cd9b6c7da7b794dc3b2756e7377 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 1 May 2011 03:28:53 -0400 Subject: [feature/template-engine] Extracted compile_stream_to_stream. PHPBB3-9726 --- phpBB/includes/template_compile.php | 23 +++++++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php index e2bb9fd869..dfbf578b58 100644 --- a/phpBB/includes/template_compile.php +++ b/phpBB/includes/template_compile.php @@ -883,8 +883,7 @@ class phpbb_template_compile @flock($destination_handle, LOCK_EX); - stream_filter_append($source_handle, 'phpbb_template'); - stream_copy_to_stream($source_handle, $destination_handle); + $this->compile_stream_to_stream($source_handle, $destination_handle); @fclose($source_handle); @flock($destination_handle, LOCK_UN); @@ -914,8 +913,7 @@ class phpbb_template_compile return false; } - stream_filter_append($source_handle, 'phpbb_template'); - stream_copy_to_stream($source_handle, $destination_handle); + $this->compile_stream_to_stream($source_handle, $destination_handle); @fclose($source_handle); @@ -925,4 +923,21 @@ class phpbb_template_compile return $contents; } + + /** + * Compiles contents of $source_stream into $dest_stream. + * + * A stream filter is appended to $source_stream as part of the + * process. + * + * @access private + * @param resource $source_stream Source stream + * @param resource $dest_stream Destination stream + * @return void + */ + private function compile_stream_to_stream($source_stream, $dest_stream) + { + stream_filter_append($source_stream, 'phpbb_template'); + stream_copy_to_stream($source_stream, $dest_stream); + } } -- cgit v1.2.1 From c651948cb3effbd2960062114f4b93d6507a2fe8 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Mon, 2 May 2011 23:54:35 -0400 Subject: [ticket/9630] Make language for moving posts clearer in quickmod/mcp. PHPBB3-9630 --- phpBB/language/en/common.php | 2 +- phpBB/language/en/mcp.php | 5 ++--- phpBB/styles/prosilver/template/mcp_topic.html | 2 +- phpBB/styles/subsilver2/template/mcp_topic.html | 2 +- 4 files changed, 5 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 731f674120..da0088a2ec 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -329,7 +329,7 @@ $lang = array_merge($lang, array( 'MEMBERLIST' => 'Members', 'MEMBERLIST_EXPLAIN' => 'View complete list of members', 'MERGE' => 'Merge', - 'MERGE_POSTS' => 'Merge posts', + 'MERGE_POSTS' => 'Move posts', 'MERGE_TOPIC' => 'Merge topic', 'MESSAGE' => 'Message', 'MESSAGES' => 'Messages', diff --git a/phpBB/language/en/mcp.php b/phpBB/language/en/mcp.php index fc1b8c8f62..d0bcec0d9c 100644 --- a/phpBB/language/en/mcp.php +++ b/phpBB/language/en/mcp.php @@ -209,9 +209,8 @@ $lang = array_merge($lang, array( 'MCP_WARN_POST' => 'Warn for specific post', 'MCP_WARN_USER' => 'Warn user', - 'MERGE_POSTS' => 'Merge posts', - 'MERGE_POSTS_CONFIRM' => 'Are you sure you want to merge the selected posts?', - 'MERGE_TOPIC_EXPLAIN' => 'Using the form below you can merge selected posts into another topic. These posts will not be reordered and will appear as if the users posted them to the new topic.
Please enter the destination topic id or click on “Select topic†to search for one.', + 'MERGE_POSTS_CONFIRM' => 'Are you sure you want to move the selected posts?', + 'MERGE_TOPIC_EXPLAIN' => 'Using the form below you can move selected posts into another topic. The posts will be split from this topic and merged into the other topic. These posts will not be reordered and will appear as if the users posted them to the new topic.
Please enter the destination topic id or click on “Select topic†to search for one.', 'MERGE_TOPIC_ID' => 'Destination topic identification number', 'MERGE_TOPICS' => 'Merge topics', 'MERGE_TOPICS_CONFIRM' => 'Are you sure you want to merge the selected topics?', diff --git a/phpBB/styles/prosilver/template/mcp_topic.html b/phpBB/styles/prosilver/template/mcp_topic.html index db36ebf5ac..a4d2a0f600 100644 --- a/phpBB/styles/prosilver/template/mcp_topic.html +++ b/phpBB/styles/prosilver/template/mcp_topic.html @@ -31,7 +31,7 @@ onload_functions.push('subPanels()');
  • class="activetab"> - {L_MERGE_TOPIC} + {L_MERGE_POSTS}
  • diff --git a/phpBB/styles/subsilver2/template/mcp_topic.html b/phpBB/styles/subsilver2/template/mcp_topic.html index 12c0f73b97..13865d26ee 100644 --- a/phpBB/styles/subsilver2/template/mcp_topic.html +++ b/phpBB/styles/subsilver2/template/mcp_topic.html @@ -35,7 +35,7 @@ - {L_MERGE_TOPIC} + {L_MERGE_POSTS} {L_MERGE_TOPIC_EXPLAIN} -- cgit v1.2.1 From 48691b53a6b3397ede4f009e8a108b14b7f7f305 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 1 May 2011 04:00:24 -0400 Subject: [feature/template-engine] Rename template_compile methods for clarity. PHPBB3-9726 --- phpBB/develop/compile_template.php | 2 +- phpBB/includes/template.php | 18 +++++++++--------- phpBB/includes/template_compile.php | 4 ++-- 3 files changed, 12 insertions(+), 12 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/compile_template.php b/phpBB/develop/compile_template.php index e80e0f21b5..e741e909d8 100644 --- a/phpBB/develop/compile_template.php +++ b/phpBB/develop/compile_template.php @@ -21,4 +21,4 @@ include($phpbb_root_path . 'includes/template_compile.'.$phpEx); $file = $argv[1]; $compile = new phpbb_template_compile(); -echo $compile->compile_gen($file); +echo $compile->compile_file($file); diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index ac37dc3dd2..dc461fb60e 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -384,7 +384,7 @@ class phpbb_template $compile = new phpbb_template_compile(); - if ($compile->compile_write($source_file, $this->_compiled_file_for_handle($handle)) === false) + if ($compile->compile_file_to_file($source_file, $this->_compiled_file_for_handle($handle)) === false) { return false; } @@ -443,7 +443,7 @@ class phpbb_template $source_file = $this->_source_file_for_handle($handle); - if (($code = $compile->compile_gen($source_file)) === false) + if (($code = $compile->compile_file($source_file)) === false) { return false; } @@ -509,13 +509,13 @@ class phpbb_template { if ($row['template_filename'] == $this->filename[$handle]) { - $compile->compile_write($source_file, $this->_compiled_file_for_handle($handle)); + $compile->compile_file_to_file($source_file, $this->_compiled_file_for_handle($handle)); } else { $this->files[$row['template_filename']] = $file; $this->filename[$row['template_filename']] = $row['template_filename']; - $compile->compile_write($this->_source_file_for_handle($row['template_filename']), $this->_compiled_file_for_handle($row['template_filename'])); + $compile->compile_file_to_file($this->_source_file_for_handle($row['template_filename']), $this->_compiled_file_for_handle($row['template_filename'])); unset($this->compiled_code[$row['template_filename']]); unset($this->files[$row['template_filename']]); unset($this->filename[$row['template_filename']]); @@ -525,7 +525,7 @@ class phpbb_template if ($row['template_filename'] == $this->filename[$handle]) { $this->compiled_code[$handle] = $compile->compile(trim($row['template_data'])); - $compile->compile_write($handle, $this->compiled_code[$handle]); + $compile->compile_file_to_file($handle, $this->compiled_code[$handle]); } else { @@ -533,7 +533,7 @@ class phpbb_template if (!file_exists($this->cachepath . str_replace('/', '.', $row['template_filename']) . '.' . $phpEx)) { $this->filename[$row['template_filename']] = $row['template_filename']; - $compile->compile_write($row['template_filename'], $compile->compile(trim($row['template_data']))); + $compile->compile_file_to_file($row['template_filename'], $compile->compile(trim($row['template_data']))); unset($this->filename[$row['template_filename']]); } } @@ -551,14 +551,14 @@ class phpbb_template $this->files_template[$row['template_filename']] = $user->theme['template_inherits_id']; } // Try to load from filesystem and instruct to insert into the styles table... - $compile->compile_write($source_file, $this->_compiled_file_for_handle($handle)); + $compile->compile_file_to_file($source_file, $this->_compiled_file_for_handle($handle)); return false; } return false; } - $compile->compile_write($source_file, $this->_compiled_file_for_handle($handle)); + $compile->compile_file_to_file($source_file, $this->_compiled_file_for_handle($handle)); return false; } @@ -838,7 +838,7 @@ class phpbb_template $compile = new phpbb_template_compile(); $source_file = $this->_source_file_for_handle($handle); - if (($code = $compile->compile_gen($source_file)) !== false) + if (($code = $compile->compile_file($source_file)) !== false) { $code = ' ?> ' . $code . ' Date: Sun, 1 May 2011 04:03:06 -0400 Subject: [feature/template-engine] Delete template class, use phpbb_template instead. PHPBB3-9726 --- phpBB/common.php | 2 +- phpBB/includes/functions_messenger.php | 2 +- phpBB/includes/template.php | 9 --------- phpBB/install/index.php | 2 +- 4 files changed, 3 insertions(+), 12 deletions(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index ccd043ba70..a6ae7dff75 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -209,7 +209,7 @@ $class_loader->set_cache($cache->get_driver()); $request = new phpbb_request(); $user = new user(); $auth = new auth(); -$template = new template(); +$template = new phpbb_template(); $db = new $sql_db(); // make sure request_var uses this request instance diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index f5d102b1da..8255d4b148 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -193,7 +193,7 @@ class messenger // tpl_msg now holds a template object we can use to parse the template file if (!isset($this->tpl_msg[$template_lang . $template_file])) { - $this->tpl_msg[$template_lang . $template_file] = new template(); + $this->tpl_msg[$template_lang . $template_file] = new phpbb_template(); $tpl = &$this->tpl_msg[$template_lang . $template_file]; $fallback_template_path = false; diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index dc461fb60e..2a32af406c 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -866,12 +866,3 @@ class phpbb_template include($file); } } - -/** - * @todo remove this - * - */ -class template extends phpbb_template -{ - // dirty hack -} diff --git a/phpBB/install/index.php b/phpBB/install/index.php index 3cbc8744dd..6618e42ae8 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -262,7 +262,7 @@ set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handle $user = new user(); $auth = new auth(); -$template = new template(); +$template = new phpbb_template(); // Add own hook handler, if present. :o if (file_exists($phpbb_root_path . 'includes/hooks/index.' . $phpEx)) -- cgit v1.2.1 From 237deb12cea909822e0f2fa3c072d31adfec3fb1 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 3 May 2011 23:50:17 -0400 Subject: [feature/template-engine] Removed storedb-related logic. phpBB 3.1 will not provide the option to store templates in the database. This commit removes code that handles templates stored in database from the template engine. PHPBB3-9726 --- phpBB/includes/template.php | 126 +------------------------------------------- 1 file changed, 2 insertions(+), 124 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 2a32af406c..add52b5c30 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -74,7 +74,6 @@ class phpbb_template public $files_template = array(); public $inherit_root = ''; - public $orig_tpl_storedb; public $orig_tpl_inherits_id; // this will hash handle names to the compiled/uncompiled code for that handle. @@ -93,17 +92,11 @@ class phpbb_template $this->root = $phpbb_root_path . 'styles/' . $user->theme['template_path'] . '/template'; $this->cachepath = $phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $user->theme['template_path']) . '_'; - if ($this->orig_tpl_storedb === null) - { - $this->orig_tpl_storedb = $user->theme['template_storedb']; - } - if ($this->orig_tpl_inherits_id === null) { $this->orig_tpl_inherits_id = $user->theme['template_inherits_id']; } - $user->theme['template_storedb'] = $this->orig_tpl_storedb; $user->theme['template_inherits_id'] = $this->orig_tpl_inherits_id; if ($user->theme['template_inherits_id']) @@ -156,10 +149,6 @@ class phpbb_template $this->orig_tpl_inherits_id = false; } - // the database does not store the path or name of a custom template - // so there is no way we can properly store custom templates there - $this->orig_tpl_storedb = false; - $this->_rootref = &$this->_tpldata['.'][0]; return true; @@ -337,10 +326,9 @@ class phpbb_template trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR); } - // reload these settings to have the values they had when this object was initialised + // reload this setting to have the values they had when this object was initialised // using set_template or set_custom_template, they might otherwise have been overwritten // by other template class instances in between. - $user->theme['template_storedb'] = $this->orig_tpl_storedb; $user->theme['template_inherits_id'] = $this->orig_tpl_inherits_id; $filename = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $phpEx; @@ -373,7 +361,7 @@ class phpbb_template return $filename; } - // Inheritance - we point to another template file for this one. Equality is also used for store_db + // Inheritance - we point to another template file for this one. if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) { $this->files[$handle] = $this->files_inherit[$handle]; @@ -448,116 +436,6 @@ class phpbb_template return false; } - if (isset($user->theme['template_storedb']) && $user->theme['template_storedb']) - { - $rows = array(); - $ids = array(); - // Inheritance - if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id']) - { - $ids[] = $user->theme['template_inherits_id']; - } - $ids[] = $user->theme['template_id']; - - global $db; - - foreach ($ids as $id) - { - $sql = 'SELECT * - FROM ' . STYLES_TEMPLATE_DATA_TABLE . ' - WHERE template_id = ' . $id . " - AND (template_filename = '" . $db->sql_escape($this->filename[$handle]) . "' - OR template_included " . $db->sql_like_expression($db->any_char . $this->filename[$handle] . ':' . $db->any_char) . ')'; - - $result = $db->sql_query($sql); - while ($row = $db->sql_fetchrow($result)) - { - $rows[$row['template_filename']] = $row; - } - $db->sql_freeresult($result); - } - - if (sizeof($rows)) - { - foreach ($rows as $row) - { - $file = $this->root . '/' . $row['template_filename']; - $force_reload = false; - if ($row['template_id'] != $user->theme['template_id']) - { - // make sure that we are not overlooking a file not in the db yet - if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'] && !file_exists($file)) - { - $file = $this->inherit_root . '/' . $row['template_filename']; - $this->files[$row['template_filename']] = $file; - $this->files_inherit[$row['template_filename']] = $file; - $this->files_template[$row['template_filename']] = $user->theme['template_inherits_id']; - } - else if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id']) - { - // Ok, we have a situation. There is a file in the subtemplate, but nothing in the DB. We have to fix that. - $force_reload = true; - $this->files_template[$row['template_filename']] = $user->theme['template_inherits_id']; - } - } - else - { - $this->files_template[$row['template_filename']] = $user->theme['template_id']; - } - - if ($force_reload || $row['template_mtime'] < @filemtime($file)) - { - if ($row['template_filename'] == $this->filename[$handle]) - { - $compile->compile_file_to_file($source_file, $this->_compiled_file_for_handle($handle)); - } - else - { - $this->files[$row['template_filename']] = $file; - $this->filename[$row['template_filename']] = $row['template_filename']; - $compile->compile_file_to_file($this->_source_file_for_handle($row['template_filename']), $this->_compiled_file_for_handle($row['template_filename'])); - unset($this->compiled_code[$row['template_filename']]); - unset($this->files[$row['template_filename']]); - unset($this->filename[$row['template_filename']]); - } - } - - if ($row['template_filename'] == $this->filename[$handle]) - { - $this->compiled_code[$handle] = $compile->compile(trim($row['template_data'])); - $compile->compile_file_to_file($handle, $this->compiled_code[$handle]); - } - else - { - // Only bother compiling if it doesn't already exist - if (!file_exists($this->cachepath . str_replace('/', '.', $row['template_filename']) . '.' . $phpEx)) - { - $this->filename[$row['template_filename']] = $row['template_filename']; - $compile->compile_file_to_file($row['template_filename'], $compile->compile(trim($row['template_data']))); - unset($this->filename[$row['template_filename']]); - } - } - } - } - else - { - $file = $this->root . '/' . $row['template_filename']; - - if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'] && !file_exists($file)) - { - $file = $this->inherit_root . '/' . $row['template_filename']; - $this->files[$row['template_filename']] = $file; - $this->files_inherit[$row['template_filename']] = $file; - $this->files_template[$row['template_filename']] = $user->theme['template_inherits_id']; - } - // Try to load from filesystem and instruct to insert into the styles table... - $compile->compile_file_to_file($source_file, $this->_compiled_file_for_handle($handle)); - return false; - } - - return false; - } - $compile->compile_file_to_file($source_file, $this->_compiled_file_for_handle($handle)); return false; } -- cgit v1.2.1 From d06e59f63bc8213a4d679ff0c20a23dcf8cd524e Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 3 May 2011 23:53:22 -0400 Subject: [feature/template-engine] Split template execution logic into classes. Template executor interface defines a template executor object. It is an object which can execute (i.e. display/render) a template. Currently there are two implementations: * phpbb_template_executor_include includes php code from a file. * phpbb_template_executor_eval eval's php code. PHPBB3-9726 --- phpBB/includes/template.php | 107 +++++++++++---------------- phpBB/includes/template_executor.php | 15 ++++ phpBB/includes/template_executor_eval.php | 32 ++++++++ phpBB/includes/template_executor_include.php | 32 ++++++++ 4 files changed, 123 insertions(+), 63 deletions(-) create mode 100644 phpBB/includes/template_executor.php create mode 100644 phpBB/includes/template_executor_eval.php create mode 100644 phpBB/includes/template_executor_include.php (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index add52b5c30..8529b90719 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -263,22 +263,17 @@ class phpbb_template $_rootref = &$this->_rootref; $_lang = &$user->lang; - if (($filename = $this->_tpl_load($handle)) !== false) - { - ($include_once) ? include_once($filename) : include($filename); - } - else if (($code = $this->_tpl_eval($handle)) !== false) + $executor = $this->_tpl_load($handle); + + if ($executor) { - $code = ' ?> ' . $code . ' execute(); + return true; } else { - // if we could not eval AND the file exists, something horrific has occured return false; } - - return true; } /** @@ -311,11 +306,27 @@ class phpbb_template } /** - * Load a compiled template if possible, if not, recompile it + * Obtains a template executor for a template identified by specified + * handle. THe template executor can execute the template later. + * + * Template source will first be compiled into php code. + * If template cache is writable the compiled php code will be stored + * on filesystem and template will not be subsequently recompiled. + * If template cache is not writable template source will be recompiled + * every time it is needed. DEBUG_EXTRA define and load_tplcompile + * configuration setting may be used to force templates to be always + * recompiled. + * + * Returns an object implementing phpbb_template_executor, or null + * if template loading or compilation failed. Call execute() on the + * executor to execute the template. This will result in template + * contents sent to the output stream (unless, of course, output + * buffering is in effect). + * * @access private * @param string $handle Handle of the template to load - * @return string|bool Return filename on success otherwise false - * @uses template_compile is used to compile uncached templates + * @return phpbb_template_executor Template executor object, or null on failure + * @uses template_compile is used to compile template source */ private function _tpl_load($handle) { @@ -358,7 +369,7 @@ class phpbb_template // Recompile page if the original template is newer, otherwise load the compiled version if (!$recompile) { - return $filename; + return new phpbb_template_executor_include($filename); } // Inheritance - we point to another template file for this one. @@ -372,12 +383,21 @@ class phpbb_template $compile = new phpbb_template_compile(); - if ($compile->compile_file_to_file($source_file, $this->_compiled_file_for_handle($handle)) === false) + $output_file = $this->_compiled_file_for_handle($handle); + if ($compile->compile_file_to_file($source_file, $output_file) !== false) { - return false; + $executor = new phpbb_template_executor_include($output_file); + } + else if (($code = $compile->compile_file($source_file)) !== false) + { + $executor = new phpbb_template_executor_eval($code); + } + else + { + $executor = null; } - return $filename; + return $executor; } /** @@ -418,28 +438,6 @@ class phpbb_template return $compiled_file; } - /** - * This code should only run when some high level error prevents us from writing to the cache. - * @access private - * @param string $handle Template handle to compile - * @return string|bool Return compiled code on success otherwise false - * @uses template_compile is used to compile template - */ - private function _tpl_eval($handle) - { - $compile = new phpbb_template_compile(); - - $source_file = $this->_source_file_for_handle($handle); - - if (($code = $compile->compile_file($source_file)) === false) - { - return false; - } - - $compile->compile_file_to_file($source_file, $this->_compiled_file_for_handle($handle)); - return false; - } - /** * Assign key variable pairs from an array * @access public @@ -696,32 +694,15 @@ class phpbb_template $this->files_inherit[$handle] = $this->inherit_root . '/' . $filename; } - $filename = $this->_tpl_load($handle); + $executor = $this->_tpl_load($handle); - if ($include) + if ($executor) { - global $user; - - $_tpldata = &$this->_tpldata; - $_rootref = &$this->_rootref; - $_lang = &$user->lang; - - if ($filename) - { - include($filename); - return; - } - else - { - $compile = new phpbb_template_compile(); - - $source_file = $this->_source_file_for_handle($handle); - if (($code = $compile->compile_file($source_file)) !== false) - { - $code = ' ?> ' . $code . ' execute(); + } + else + { + // What should we do here? } } diff --git a/phpBB/includes/template_executor.php b/phpBB/includes/template_executor.php new file mode 100644 index 0000000000..9bbb3dca0d --- /dev/null +++ b/phpBB/includes/template_executor.php @@ -0,0 +1,15 @@ +code = $code; + } + + /** + * Executes the template managed by this executor by eval'ing php code + * of the template. + */ + public function execute() + { + eval($this->code); + } +} diff --git a/phpBB/includes/template_executor_include.php b/phpBB/includes/template_executor_include.php new file mode 100644 index 0000000000..74f0593b13 --- /dev/null +++ b/phpBB/includes/template_executor_include.php @@ -0,0 +1,32 @@ +path = $path; + } + + /** + * Executes the template managed by this executor by including + * the php file containing the template. + */ + public function execute() + { + include($this->path); + } +} -- cgit v1.2.1 From b057d7439e9ed27ec0aa6cff021fd6a9df6e85eb Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 4 May 2011 01:00:40 -0400 Subject: [feature/template-engine] Removed some dead code. PHPBB3-9726 --- phpBB/includes/template_compile.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php index 553f99bd8c..1feab3b7c4 100644 --- a/phpBB/includes/template_compile.php +++ b/phpBB/includes/template_compile.php @@ -118,8 +118,6 @@ class phpbb_template_filter extends php_user_filter $data = preg_replace('~.*?$~', '', $data); } - "?>/**/"; - /* Preserve whitespace. PHP removes a newline after the closing tag (if it's there). This is by design. @@ -145,7 +143,7 @@ class phpbb_template_filter extends php_user_filter */ -//* + $data = preg_replace('~(?).)+(?)$~m', "$1\n", $data); $data = str_replace('/**/?>', "?>\n", $data); $data = str_replace('?> Date: Thu, 5 May 2011 10:49:54 +0200 Subject: [ticket/10158] Add "Return to Inbox"-link to "PM send"-message. PHPBB3-10158 --- phpBB/includes/ucp/ucp_pm_compose.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_pm_compose.php b/phpBB/includes/ucp/ucp_pm_compose.php index b596e72c41..d7fe0af361 100644 --- a/phpBB/includes/ucp/ucp_pm_compose.php +++ b/phpBB/includes/ucp/ucp_pm_compose.php @@ -741,10 +741,13 @@ function compose_pm($id, $mode, $action) $msg_id = submit_pm($action, $subject, $pm_data); $return_message_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=view&p=' . $msg_id); - $return_folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=outbox'); + $return_folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'); + $outbox_folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=outbox'); meta_refresh(3, $return_message_url); - $message = $user->lang['MESSAGE_STORED'] . '

    ' . sprintf($user->lang['VIEW_PRIVATE_MESSAGE'], '', '') . '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_OUTBOX']); + $message = $user->lang['MESSAGE_STORED'] . '

    ' . sprintf($user->lang['VIEW_PRIVATE_MESSAGE'], '', ''); + $message .= '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_INBOX']); + $message .= '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_OUTBOX']); trigger_error($message); } -- cgit v1.2.1 From 0d234cabf4193a93dff3a19eda45879608e24f89 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 5 May 2011 11:24:39 +0200 Subject: [ticket/10171] Fix displaying the "PM marking colours" in Firefox4. PHPBB3-10171 --- phpBB/styles/prosilver/theme/cp.css | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/cp.css b/phpBB/styles/prosilver/theme/cp.css index 1e0edc616f..b574b0ae1f 100644 --- a/phpBB/styles/prosilver/theme/cp.css +++ b/phpBB/styles/prosilver/theme/cp.css @@ -393,13 +393,11 @@ ol.def-rules li { /* PM marking colours */ .pmlist li.bg1 { - border: solid 3px transparent; - border-width: 0 3px; + padding: 0 3px; } .pmlist li.bg2 { - border: solid 3px transparent; - border-width: 0 3px; + padding: 0 3px; } .pmlist li.pm_message_reported_colour, .pm_message_reported_colour { @@ -408,21 +406,25 @@ ol.def-rules li { } .pmlist li.pm_marked_colour, .pm_marked_colour { + padding: 0; border: solid 3px #ffffff; border-width: 0 3px; } .pmlist li.pm_replied_colour, .pm_replied_colour { + padding: 0; border: solid 3px #c2c2c2; - border-width: 0 3px; + border-width: 0 3px; } .pmlist li.pm_friend_colour, .pm_friend_colour { + padding: 0; border: solid 3px #bdbdbd; border-width: 0 3px; } .pmlist li.pm_foe_colour, .pm_foe_colour { + padding: 0; border: solid 3px #000000; border-width: 0 3px; } -- cgit v1.2.1 From 963a67332af12af31d231baf315fdd29d30149cb Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 7 Mar 2011 02:05:37 +0100 Subject: [ticket/9922] Link post subject to the post's anchor in subsilver2. Link post subject to the post's anchor in subsilver2 to expose full URL to post which is otherwise only hidden behind the small post icon. PHPBB3-9922 --- phpBB/styles/subsilver2/template/viewtopic_body.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/viewtopic_body.html b/phpBB/styles/subsilver2/template/viewtopic_body.html index bba00ce685..630871af61 100644 --- a/phpBB/styles/subsilver2/template/viewtopic_body.html +++ b/phpBB/styles/subsilver2/template/viewtopic_body.html @@ -150,7 +150,7 @@ -
     {L_POST_SUBJECT}: {postrow.POST_SUBJECT}
    {postrow.MINI_POST_IMG}{postrow.MINI_POST_IMG}{L_POSTED}: {postrow.POST_DATE} 
    +
     {L_POST_SUBJECT}: {postrow.POST_SUBJECT}
    {postrow.MINI_POST_IMG}{postrow.MINI_POST_IMG}{L_POSTED}: {postrow.POST_DATE} 
    -- cgit v1.2.1 From d8122df3329214f8710c8af3c0ce1ed86505e810 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 5 May 2011 19:03:46 -0400 Subject: [feature/template-engine] Always call ob_end_clean. We have to stop output buffering even when rendering fails. PHPBB3-9726 --- phpBB/includes/template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 8529b90719..8d7eb57dc4 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -289,11 +289,11 @@ class phpbb_template { ob_start(); $result = $this->display($handle, $include_once); + $contents = ob_get_clean(); if ($result === false) { return false; } - $contents = ob_get_clean(); if ($return_content) { -- cgit v1.2.1 From 0501640d5db158a010741e27803191ab469834c4 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 7 May 2011 15:10:50 -0400 Subject: [feature/template-engine] Added phpbb_template_context class. Objects of this class hold variables assigned to templates. PHPBB3-9726 --- phpBB/includes/template.php | 281 ++++--------------------- phpBB/includes/template_compile.php | 2 +- phpBB/includes/template_context.php | 299 +++++++++++++++++++++++++++ phpBB/includes/template_executor.php | 4 +- phpBB/includes/template_executor_eval.php | 14 +- phpBB/includes/template_executor_include.php | 13 +- 6 files changed, 367 insertions(+), 246 deletions(-) create mode 100644 phpBB/includes/template_context.php (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 8d7eb57dc4..755e6adba9 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -36,19 +36,11 @@ class phpbb_template public $phpbb_optional = array(); /** - * variable that holds all the data we'll be substituting into - * the compiled templates. Takes form: - * --> $this->_tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value - * if it's a root-level variable, it'll be like this: - * --> $this->_tpldata[.][0][varname] == value - * @var array - */ - private $_tpldata = array('.' => array(0 => array())); - - /** - * @var array Reference to template->_tpldata['.'][0] + * @var phpbb_template_context Template context. + * Stores template data used during template rendering. + * @access private */ - private $_rootref; + private $_context; /** * @var string Root dir for template. @@ -109,7 +101,7 @@ class phpbb_template trigger_error('Template path could not be found: styles/' . $user->theme['template_path'] . '/template', E_USER_ERROR); } - $this->_rootref = &$this->_tpldata['.'][0]; + $this->_context = new phpbb_template_context(); return true; } @@ -149,7 +141,7 @@ class phpbb_template $this->orig_tpl_inherits_id = false; } - $this->_rootref = &$this->_tpldata['.'][0]; + $this->_context = new phpbb_template_context(); return true; } @@ -181,24 +173,6 @@ class phpbb_template return true; } - /** - * Destroy template data set - * @access public - */ - public function destroy() - { - $this->_tpldata = array('.' => array(0 => array())); - $this->_rootref = &$this->_tpldata['.'][0]; - } - - /** - * destroy method kept for compatibility. - */ - public function __destruct() - { - $this->destroy(); - } - /** * Reset/empty complete block * @access public @@ -206,28 +180,7 @@ class phpbb_template */ public function destroy_block_vars($blockname) { - if (strpos($blockname, '.') !== false) - { - // Nested block. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - $str = &$this->_tpldata; - for ($i = 0; $i < $blockcount; $i++) - { - $str = &$str[$blocks[$i]]; - $str = &$str[sizeof($str) - 1]; - } - - unset($str[$blocks[$blockcount]]); - } - else - { - // Top-level block. - unset($this->_tpldata[$blockname]); - } - - return true; + $this->_context->destroy_block_vars($blockname); } /** @@ -239,7 +192,7 @@ class phpbb_template */ public function display($handle, $include_once = true) { - global $user, $phpbb_hook; + global $phpbb_hook; if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once, $this)) { @@ -259,15 +212,11 @@ class phpbb_template } */ - $_tpldata = &$this->_tpldata; - $_rootref = &$this->_rootref; - $_lang = &$user->lang; - $executor = $this->_tpl_load($handle); if ($executor) { - $executor->execute(); + $executor->execute($this->_context, $this->get_lang()); return true; } else @@ -276,6 +225,27 @@ class phpbb_template } } + /** + * Obtains language array. + * This is either lang property of global $user object, or if + * it is not set an empty array. + * @return array language entries + */ + public function get_lang() + { + global $user; + + if (isset($user->lang)) + { + $lang = $user->lang; + } + else + { + $lang = array(); + } + return $lang; + } + /** * Display the handle and assign the output to a template variable or return the compiled result. * @access public @@ -369,7 +339,7 @@ class phpbb_template // Recompile page if the original template is newer, otherwise load the compiled version if (!$recompile) { - return new phpbb_template_executor_include($filename); + return new phpbb_template_executor_include($filename, $this); } // Inheritance - we point to another template file for this one. @@ -386,11 +356,11 @@ class phpbb_template $output_file = $this->_compiled_file_for_handle($handle); if ($compile->compile_file_to_file($source_file, $output_file) !== false) { - $executor = new phpbb_template_executor_include($output_file); + $executor = new phpbb_template_executor_include($output_file, $this); } else if (($code = $compile->compile_file($source_file)) !== false) { - $executor = new phpbb_template_executor_eval($code); + $executor = new phpbb_template_executor_eval($code, $this); } else { @@ -447,10 +417,8 @@ class phpbb_template { foreach ($vararray as $key => $val) { - $this->_rootref[$key] = $val; + $this->assign_var($key, $val); } - - return true; } /** @@ -461,11 +429,10 @@ class phpbb_template */ public function assign_var($varname, $varval) { - $this->_rootref[$varname] = $varval; - - return true; + $this->_context->assign_var($varname, $varval); } + // Docstring is copied from phpbb_template_context method with the same name. /** * Assign key variable pairs from an array to a specified block * @access public @@ -474,67 +441,10 @@ class phpbb_template */ public function assign_block_vars($blockname, array $vararray) { - if (strpos($blockname, '.') !== false) - { - // Nested block. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - $str = &$this->_tpldata; - for ($i = 0; $i < $blockcount; $i++) - { - $str = &$str[$blocks[$i]]; - $str = &$str[sizeof($str) - 1]; - } - - $s_row_count = isset($str[$blocks[$blockcount]]) ? sizeof($str[$blocks[$blockcount]]) : 0; - $vararray['S_ROW_COUNT'] = $s_row_count; - - // Assign S_FIRST_ROW - if (!$s_row_count) - { - $vararray['S_FIRST_ROW'] = true; - } - - // Now the tricky part, we always assign S_LAST_ROW and remove the entry before - // This is much more clever than going through the complete template data on display (phew) - $vararray['S_LAST_ROW'] = true; - if ($s_row_count > 0) - { - unset($str[$blocks[$blockcount]][($s_row_count - 1)]['S_LAST_ROW']); - } - - // Now we add the block that we're actually assigning to. - // We're adding a new iteration to this block with the given - // variable assignments. - $str[$blocks[$blockcount]][] = $vararray; - } - else - { - // Top-level block. - $s_row_count = (isset($this->_tpldata[$blockname])) ? sizeof($this->_tpldata[$blockname]) : 0; - $vararray['S_ROW_COUNT'] = $s_row_count; - - // Assign S_FIRST_ROW - if (!$s_row_count) - { - $vararray['S_FIRST_ROW'] = true; - } - - // We always assign S_LAST_ROW and remove the entry before - $vararray['S_LAST_ROW'] = true; - if ($s_row_count > 0) - { - unset($this->_tpldata[$blockname][($s_row_count - 1)]['S_LAST_ROW']); - } - - // Add a new iteration to this block with the variable assignments we were given. - $this->_tpldata[$blockname][] = $vararray; - } - - return true; + return $this->_context->assign_block_vars($blockname, $vararray); } + // Docstring is copied from phpbb_template_context method with the same name. /** * Change already assigned key variable pair (one-dimensional - single loop entry) * @@ -565,116 +475,7 @@ class phpbb_template */ public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') { - if (strpos($blockname, '.') !== false) - { - // Nested block. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - $block = &$this->_tpldata; - for ($i = 0; $i < $blockcount; $i++) - { - if (($pos = strpos($blocks[$i], '[')) !== false) - { - $name = substr($blocks[$i], 0, $pos); - - if (strpos($blocks[$i], '[]') === $pos) - { - $index = sizeof($block[$name]) - 1; - } - else - { - $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1); - } - } - else - { - $name = $blocks[$i]; - $index = sizeof($block[$name]) - 1; - } - $block = &$block[$name]; - $block = &$block[$index]; - } - - $block = &$block[$blocks[$i]]; // Traverse the last block - } - else - { - // Top-level block. - $block = &$this->_tpldata[$blockname]; - } - - // Change key to zero (change first position) if false and to last position if true - if ($key === false || $key === true) - { - $key = ($key === false) ? 0 : sizeof($block); - } - - // Get correct position if array given - if (is_array($key)) - { - // Search array to get correct position - list($search_key, $search_value) = @each($key); - - $key = NULL; - foreach ($block as $i => $val_ary) - { - if ($val_ary[$search_key] === $search_value) - { - $key = $i; - break; - } - } - - // key/value pair not found - if ($key === NULL) - { - return false; - } - } - - // Insert Block - if ($mode == 'insert') - { - // Make sure we are not exceeding the last iteration - if ($key >= sizeof($this->_tpldata[$blockname])) - { - $key = sizeof($this->_tpldata[$blockname]); - unset($this->_tpldata[$blockname][($key - 1)]['S_LAST_ROW']); - $vararray['S_LAST_ROW'] = true; - } - else if ($key === 0) - { - unset($this->_tpldata[$blockname][0]['S_FIRST_ROW']); - $vararray['S_FIRST_ROW'] = true; - } - - // Re-position template blocks - for ($i = sizeof($block); $i > $key; $i--) - { - $block[$i] = $block[$i-1]; - } - - // Insert vararray at given position - $block[$key] = $vararray; - - return true; - } - - // Which block to change? - if ($mode == 'change') - { - if ($key == sizeof($block)) - { - $key--; - } - - $block[$key] = array_merge($block[$key], $vararray); - - return true; - } - - return false; + return $this->_context->alter_block_array($blockname, $vararray, $key, $mode); } /** @@ -684,7 +485,7 @@ class phpbb_template * @param bool $include True to include the file, false to just load it * @uses template_compile is used to compile uncached templates */ - private function _tpl_include($filename, $include = true) + public function _tpl_include($filename, $include = true) { $handle = $filename; $this->filename[$handle] = $filename; @@ -698,7 +499,7 @@ class phpbb_template if ($executor) { - $executor->execute(); + $executor->execute($this->_context, $this->get_lang()); } else { diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php index 1feab3b7c4..4132fb2e34 100644 --- a/phpBB/includes/template_compile.php +++ b/phpBB/includes/template_compile.php @@ -639,7 +639,7 @@ class phpbb_template_filter extends php_user_filter */ private function compile_tag_include($tag_args) { - return "\$this->_tpl_include('$tag_args');"; + return "\$_template->_tpl_include('$tag_args');"; } /** diff --git a/phpBB/includes/template_context.php b/phpBB/includes/template_context.php new file mode 100644 index 0000000000..ae898e9be1 --- /dev/null +++ b/phpBB/includes/template_context.php @@ -0,0 +1,299 @@ + $this->_tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value + * if it's a root-level variable, it'll be like this: + * --> $this->_tpldata[.][0][varname] == value + * @var array + */ + private $_tpldata = array('.' => array(0 => array())); + + /** + * @var array Reference to template->_tpldata['.'][0] + */ + private $_rootref; + + public function __construct() + { + $this->clear(); + } + + /** + * Clears template data set. + * @access public + */ + public function clear() + { + $this->_tpldata = array('.' => array(0 => array())); + $this->_rootref = &$this->_tpldata['.'][0]; + } + + /** + * Assign a single variable to a single key + * @access public + * @param string $varname Variable name + * @param string $varval Value to assign to variable + */ + public function assign_var($varname, $varval) + { + $this->_rootref[$varname] = $varval; + + return true; + } + + public function get_data_ref() + { + return $this->_tpldata; + } + + public function get_root_ref() + { + return $this->_rootref; + } + + /** + * Assign key variable pairs from an array to a specified block + * @access public + * @param string $blockname Name of block to assign $vararray to + * @param array $vararray A hash of variable name => value pairs + */ + public function assign_block_vars($blockname, array $vararray) + { + if (strpos($blockname, '.') !== false) + { + // Nested block. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $str = &$this->_tpldata; + for ($i = 0; $i < $blockcount; $i++) + { + $str = &$str[$blocks[$i]]; + $str = &$str[sizeof($str) - 1]; + } + + $s_row_count = isset($str[$blocks[$blockcount]]) ? sizeof($str[$blocks[$blockcount]]) : 0; + $vararray['S_ROW_COUNT'] = $s_row_count; + + // Assign S_FIRST_ROW + if (!$s_row_count) + { + $vararray['S_FIRST_ROW'] = true; + } + + // Now the tricky part, we always assign S_LAST_ROW and remove the entry before + // This is much more clever than going through the complete template data on display (phew) + $vararray['S_LAST_ROW'] = true; + if ($s_row_count > 0) + { + unset($str[$blocks[$blockcount]][($s_row_count - 1)]['S_LAST_ROW']); + } + + // Now we add the block that we're actually assigning to. + // We're adding a new iteration to this block with the given + // variable assignments. + $str[$blocks[$blockcount]][] = $vararray; + } + else + { + // Top-level block. + $s_row_count = (isset($this->_tpldata[$blockname])) ? sizeof($this->_tpldata[$blockname]) : 0; + $vararray['S_ROW_COUNT'] = $s_row_count; + + // Assign S_FIRST_ROW + if (!$s_row_count) + { + $vararray['S_FIRST_ROW'] = true; + } + + // We always assign S_LAST_ROW and remove the entry before + $vararray['S_LAST_ROW'] = true; + if ($s_row_count > 0) + { + unset($this->_tpldata[$blockname][($s_row_count - 1)]['S_LAST_ROW']); + } + + // Add a new iteration to this block with the variable assignments we were given. + $this->_tpldata[$blockname][] = $vararray; + } + + return true; + } + + /** + * Change already assigned key variable pair (one-dimensional - single loop entry) + * + * An example of how to use this function: + * {@example alter_block_array.php} + * + * @param string $blockname the blockname, for example 'loop' + * @param array $vararray the var array to insert/add or merge + * @param mixed $key Key to search for + * + * array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position] + * + * int: Position [the position to change or insert at directly given] + * + * If key is false the position is set to 0 + * If key is true the position is set to the last entry + * + * @param string $mode Mode to execute (valid modes are 'insert' and 'change') + * + * If insert, the vararray is inserted at the given position (position counting from zero). + * If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value). + * + * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) + * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) + * + * @return bool false on error, true on success + * @access public + */ + public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') + { + if (strpos($blockname, '.') !== false) + { + // Nested block. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $block = &$this->_tpldata; + for ($i = 0; $i < $blockcount; $i++) + { + if (($pos = strpos($blocks[$i], '[')) !== false) + { + $name = substr($blocks[$i], 0, $pos); + + if (strpos($blocks[$i], '[]') === $pos) + { + $index = sizeof($block[$name]) - 1; + } + else + { + $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1); + } + } + else + { + $name = $blocks[$i]; + $index = sizeof($block[$name]) - 1; + } + $block = &$block[$name]; + $block = &$block[$index]; + } + + $block = &$block[$blocks[$i]]; // Traverse the last block + } + else + { + // Top-level block. + $block = &$this->_tpldata[$blockname]; + } + + // Change key to zero (change first position) if false and to last position if true + if ($key === false || $key === true) + { + $key = ($key === false) ? 0 : sizeof($block); + } + + // Get correct position if array given + if (is_array($key)) + { + // Search array to get correct position + list($search_key, $search_value) = @each($key); + + $key = NULL; + foreach ($block as $i => $val_ary) + { + if ($val_ary[$search_key] === $search_value) + { + $key = $i; + break; + } + } + + // key/value pair not found + if ($key === NULL) + { + return false; + } + } + + // Insert Block + if ($mode == 'insert') + { + // Make sure we are not exceeding the last iteration + if ($key >= sizeof($this->_tpldata[$blockname])) + { + $key = sizeof($this->_tpldata[$blockname]); + unset($this->_tpldata[$blockname][($key - 1)]['S_LAST_ROW']); + $vararray['S_LAST_ROW'] = true; + } + else if ($key === 0) + { + unset($this->_tpldata[$blockname][0]['S_FIRST_ROW']); + $vararray['S_FIRST_ROW'] = true; + } + + // Re-position template blocks + for ($i = sizeof($block); $i > $key; $i--) + { + $block[$i] = $block[$i-1]; + } + + // Insert vararray at given position + $block[$key] = $vararray; + + return true; + } + + // Which block to change? + if ($mode == 'change') + { + if ($key == sizeof($block)) + { + $key--; + } + + $block[$key] = array_merge($block[$key], $vararray); + + return true; + } + + return false; + } + + /** + * Reset/empty complete block + * @access public + * @param string $blockname Name of block to destroy + */ + public function destroy_block_vars($blockname) + { + if (strpos($blockname, '.') !== false) + { + // Nested block. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $str = &$this->_tpldata; + for ($i = 0; $i < $blockcount; $i++) + { + $str = &$str[$blocks[$i]]; + $str = &$str[sizeof($str) - 1]; + } + + unset($str[$blocks[$blockcount]]); + } + else + { + // Top-level block. + unset($this->_tpldata[$blockname]); + } + + return true; + } +} diff --git a/phpBB/includes/template_executor.php b/phpBB/includes/template_executor.php index 9bbb3dca0d..32e4e9a7b4 100644 --- a/phpBB/includes/template_executor.php +++ b/phpBB/includes/template_executor.php @@ -10,6 +10,8 @@ interface phpbb_template_executor { /** * Executes the template managed by this executor. + * @param phpbb_template_context $context Template context to use + * @param array $lang Language entries to use */ - public function execute(); + public function execute($context, $lang); } diff --git a/phpBB/includes/template_executor_eval.php b/phpBB/includes/template_executor_eval.php index 27bdf95b52..af7d68fef3 100644 --- a/phpBB/includes/template_executor_eval.php +++ b/phpBB/includes/template_executor_eval.php @@ -13,20 +13,30 @@ class phpbb_template_executor_eval implements phpbb_template_executor /** * Constructor. Stores provided code for future evaluation. + * Template includes are delegated to template object $template. * * @param string $code php code of the template + * @param phpbb_template $template template object */ - public function __construct($code) + public function __construct($code, $template) { $this->code = $code; + $this->template = $template; } /** * Executes the template managed by this executor by eval'ing php code * of the template. + * @param phpbb_template_context $context Template context to use + * @param array $lang Language entries to use */ - public function execute() + public function execute($context, $lang) { + $_template = &$this->template; + $_tpldata = &$context->get_data_ref(); + $_rootref = &$context->get_root_ref(); + $_lang = &$lang; + eval($this->code); } } diff --git a/phpBB/includes/template_executor_include.php b/phpBB/includes/template_executor_include.php index 74f0593b13..3671265cca 100644 --- a/phpBB/includes/template_executor_include.php +++ b/phpBB/includes/template_executor_include.php @@ -13,20 +13,29 @@ class phpbb_template_executor_include implements phpbb_template_executor /** * Constructor. Stores path to the template for future inclusion. + * Template includes are delegated to template object $template. * * @param string $path path to the template */ - public function __construct($path) + public function __construct($path, $template) { $this->path = $path; + $this->template = $template; } /** * Executes the template managed by this executor by including * the php file containing the template. + * @param phpbb_template_context $context Template context to use + * @param array $lang Language entries to use */ - public function execute() + public function execute($context, $lang) { + $_template = &$this->template; + $_tpldata = &$context->get_data_ref(); + $_rootref = &$context->get_root_ref(); + $_lang = &$lang; + include($this->path); } } -- cgit v1.2.1 From b5444a7d7d1f6ac694468d8cc37fc0489e714547 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 7 May 2011 17:50:48 -0400 Subject: [feature/template-engine] Removed more dead code. PHPBB3-9726 --- phpBB/includes/template.php | 6 ------ 1 file changed, 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 755e6adba9..02815c4e15 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -32,9 +32,6 @@ if (!defined('IN_PHPBB')) */ class phpbb_template { - public $phpbb_required = array('user', 'config'); - public $phpbb_optional = array(); - /** * @var phpbb_template_context Template context. * Stores template data used during template rendering. @@ -68,9 +65,6 @@ class phpbb_template public $orig_tpl_inherits_id; - // this will hash handle names to the compiled/uncompiled code for that handle. - public $compiled_code = array(); - /** * Set template location * @access public -- cgit v1.2.1 From 1cba674b9a04390ff754bdb34691b3654f5916f9 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 7 May 2011 17:58:56 -0400 Subject: [feature/template-engine] Added docblocks and boilerplate to new files. PHPBB3-9726 --- phpBB/includes/template_context.php | 21 +++++++++++++++++++++ phpBB/includes/template_executor.php | 18 ++++++++++++++++++ phpBB/includes/template_executor_eval.php | 18 ++++++++++++++++++ phpBB/includes/template_executor_include.php | 19 +++++++++++++++++++ 4 files changed, 76 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/template_context.php b/phpBB/includes/template_context.php index ae898e9be1..df5c4afb24 100644 --- a/phpBB/includes/template_context.php +++ b/phpBB/includes/template_context.php @@ -1,5 +1,26 @@ Date: Sun, 8 May 2011 04:03:41 -0400 Subject: [feature/template-engine] Renamed template executor and friends to renderer. PHPBB3-9726 --- phpBB/includes/template.php | 34 ++++++++-------- phpBB/includes/template_executor.php | 35 ---------------- phpBB/includes/template_executor_eval.php | 60 ---------------------------- phpBB/includes/template_executor_include.php | 60 ---------------------------- phpBB/includes/template_renderer.php | 35 ++++++++++++++++ phpBB/includes/template_renderer_eval.php | 60 ++++++++++++++++++++++++++++ phpBB/includes/template_renderer_include.php | 60 ++++++++++++++++++++++++++++ 7 files changed, 172 insertions(+), 172 deletions(-) delete mode 100644 phpBB/includes/template_executor.php delete mode 100644 phpBB/includes/template_executor_eval.php delete mode 100644 phpBB/includes/template_executor_include.php create mode 100644 phpBB/includes/template_renderer.php create mode 100644 phpBB/includes/template_renderer_eval.php create mode 100644 phpBB/includes/template_renderer_include.php (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 02815c4e15..f27d0c7560 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -206,11 +206,11 @@ class phpbb_template } */ - $executor = $this->_tpl_load($handle); + $renderer = $this->_tpl_load($handle); - if ($executor) + if ($renderer) { - $executor->execute($this->_context, $this->get_lang()); + $renderer->render($this->_context, $this->get_lang()); return true; } else @@ -270,8 +270,8 @@ class phpbb_template } /** - * Obtains a template executor for a template identified by specified - * handle. THe template executor can execute the template later. + * Obtains a template renderer for a template identified by specified + * handle. The template renderer can display the template later. * * Template source will first be compiled into php code. * If template cache is writable the compiled php code will be stored @@ -281,15 +281,15 @@ class phpbb_template * configuration setting may be used to force templates to be always * recompiled. * - * Returns an object implementing phpbb_template_executor, or null - * if template loading or compilation failed. Call execute() on the - * executor to execute the template. This will result in template + * Returns an object implementing phpbb_template_renderer, or null + * if template loading or compilation failed. Call render() on the + * renderer to display the template. This will result in template * contents sent to the output stream (unless, of course, output * buffering is in effect). * * @access private * @param string $handle Handle of the template to load - * @return phpbb_template_executor Template executor object, or null on failure + * @return phpbb_template_renderer Template renderer object, or null on failure * @uses template_compile is used to compile template source */ private function _tpl_load($handle) @@ -333,7 +333,7 @@ class phpbb_template // Recompile page if the original template is newer, otherwise load the compiled version if (!$recompile) { - return new phpbb_template_executor_include($filename, $this); + return new phpbb_template_renderer_include($filename, $this); } // Inheritance - we point to another template file for this one. @@ -350,18 +350,18 @@ class phpbb_template $output_file = $this->_compiled_file_for_handle($handle); if ($compile->compile_file_to_file($source_file, $output_file) !== false) { - $executor = new phpbb_template_executor_include($output_file, $this); + $renderer = new phpbb_template_renderer_include($output_file, $this); } else if (($code = $compile->compile_file($source_file)) !== false) { - $executor = new phpbb_template_executor_eval($code, $this); + $renderer = new phpbb_template_renderer_eval($code, $this); } else { - $executor = null; + $renderer = null; } - return $executor; + return $renderer; } /** @@ -489,11 +489,11 @@ class phpbb_template $this->files_inherit[$handle] = $this->inherit_root . '/' . $filename; } - $executor = $this->_tpl_load($handle); + $renderer = $this->_tpl_load($handle); - if ($executor) + if ($renderer) { - $executor->execute($this->_context, $this->get_lang()); + $renderer->render($this->_context, $this->get_lang()); } else { diff --git a/phpBB/includes/template_executor.php b/phpBB/includes/template_executor.php deleted file mode 100644 index 0d410679b9..0000000000 --- a/phpBB/includes/template_executor.php +++ /dev/null @@ -1,35 +0,0 @@ -code = $code; - $this->template = $template; - } - - /** - * Executes the template managed by this executor by eval'ing php code - * of the template. - * @param phpbb_template_context $context Template context to use - * @param array $lang Language entries to use - */ - public function execute($context, $lang) - { - $_template = &$this->template; - $_tpldata = &$context->get_data_ref(); - $_rootref = &$context->get_root_ref(); - $_lang = &$lang; - - eval($this->code); - } -} diff --git a/phpBB/includes/template_executor_include.php b/phpBB/includes/template_executor_include.php deleted file mode 100644 index aacabc61e4..0000000000 --- a/phpBB/includes/template_executor_include.php +++ /dev/null @@ -1,60 +0,0 @@ -path = $path; - $this->template = $template; - } - - /** - * Executes the template managed by this executor by including - * the php file containing the template. - * @param phpbb_template_context $context Template context to use - * @param array $lang Language entries to use - */ - public function execute($context, $lang) - { - $_template = &$this->template; - $_tpldata = &$context->get_data_ref(); - $_rootref = &$context->get_root_ref(); - $_lang = &$lang; - - include($this->path); - } -} diff --git a/phpBB/includes/template_renderer.php b/phpBB/includes/template_renderer.php new file mode 100644 index 0000000000..0af2d94bb6 --- /dev/null +++ b/phpBB/includes/template_renderer.php @@ -0,0 +1,35 @@ +code = $code; + $this->template = $template; + } + + /** + * Displays the template managed by this renderer by eval'ing php code + * of the template. + * @param phpbb_template_context $context Template context to use + * @param array $lang Language entries to use + */ + public function render($context, $lang) + { + $_template = &$this->template; + $_tpldata = &$context->get_data_ref(); + $_rootref = &$context->get_root_ref(); + $_lang = &$lang; + + eval($this->code); + } +} diff --git a/phpBB/includes/template_renderer_include.php b/phpBB/includes/template_renderer_include.php new file mode 100644 index 0000000000..aca3a3634d --- /dev/null +++ b/phpBB/includes/template_renderer_include.php @@ -0,0 +1,60 @@ +path = $path; + $this->template = $template; + } + + /** + * Displays the template managed by this renderer by including + * the php file containing the template. + * @param phpbb_template_context $context Template context to use + * @param array $lang Language entries to use + */ + public function render($context, $lang) + { + $_template = &$this->template; + $_tpldata = &$context->get_data_ref(); + $_rootref = &$context->get_root_ref(); + $_lang = &$lang; + + include($this->path); + } +} -- cgit v1.2.1 From 49cf28a9c43060d2a4c4d5fe882fc3c7dedd7d0b Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 8 May 2011 04:05:09 -0400 Subject: [feature/template-engine] Moved template classes to subdirectory. PHPBB3-9726 --- phpBB/includes/template/compile.php | 941 +++++++++++++++++++++++++++ phpBB/includes/template/context.php | 320 +++++++++ phpBB/includes/template/renderer.php | 35 + phpBB/includes/template/renderer_eval.php | 60 ++ phpBB/includes/template/renderer_include.php | 60 ++ phpBB/includes/template_compile.php | 941 --------------------------- phpBB/includes/template_context.php | 320 --------- phpBB/includes/template_renderer.php | 35 - phpBB/includes/template_renderer_eval.php | 60 -- phpBB/includes/template_renderer_include.php | 60 -- 10 files changed, 1416 insertions(+), 1416 deletions(-) create mode 100644 phpBB/includes/template/compile.php create mode 100644 phpBB/includes/template/context.php create mode 100644 phpBB/includes/template/renderer.php create mode 100644 phpBB/includes/template/renderer_eval.php create mode 100644 phpBB/includes/template/renderer_include.php delete mode 100644 phpBB/includes/template_compile.php delete mode 100644 phpBB/includes/template_context.php delete mode 100644 phpBB/includes/template_renderer.php delete mode 100644 phpBB/includes/template_renderer_eval.php delete mode 100644 phpBB/includes/template_renderer_include.php (limited to 'phpBB') diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php new file mode 100644 index 0000000000..4132fb2e34 --- /dev/null +++ b/phpBB/includes/template/compile.php @@ -0,0 +1,941 @@ +'; + + const REGEX_TOKENS = '~|{((?:[a-z_][a-z_0-9]+\.)*\\$?[A-Z][A-Z_0-9]+)}~'; + + /** + * @var array + */ + private $block_names = array(); + + /** + * @var array + */ + private $block_else_level = array(); + + /** + * @var string + */ + private $chunk; + + /** + * @var bool + */ + private $in_php; + + public function filter($in, $out, &$consumed, $closing) + { + $written = false; + + while ($bucket = stream_bucket_make_writeable($in)) + { + $consumed += $bucket->datalen; + + $data = $this->chunk . $bucket->data; + $last_nl = strrpos($data, "\n"); + $this->chunk = substr($data, $last_nl); + $data = substr($data, 0, $last_nl); + + if (!strlen($data)) + { + continue; + } + + $written = true; + + $bucket->data = $this->compile($data); + $bucket->datalen = strlen($bucket->data); + stream_bucket_append($out, $bucket); + } + + if ($closing && strlen($this->chunk)) + { + $written = true; + $bucket = stream_bucket_new($this->stream, $this->compile($this->chunk)); + stream_bucket_append($out, $bucket); + } + + return $written ? PSFS_PASS_ON : PSFS_FEED_ME; + } + + public function onCreate() + { + $this->chunk = ''; + $this->in_php = false; + return true; + } + + private function compile($data) + { + $block_start_in_php = $this->in_php; + + $data = preg_replace('#<(?:[\\?%]|script)#s', '', $data); + $data = preg_replace_callback(self::REGEX_TOKENS, array($this, 'replace'), $data); + + global $config; + + // Remove php + if (!$config['tpl_allow_php']) + { + if ($block_start_in_php + && $this->in_php + && strpos($data, '') === false + && strpos($data, '') === false) + { + // This is just php code + return ''; + } + $data = preg_replace('~^.*?~', '', $data); + $data = preg_replace('~.*?~', '', $data); + $data = preg_replace('~.*?$~', '', $data); + } + + /* + Preserve whitespace. + PHP removes a newline after the closing tag (if it's there). This is by design. + + + Consider the following template: + + + some content + + + If we were to simply preserve all whitespace, we could simply replace all "?>" tags + with "?>\n". + Doing that, would add additional newlines to the compiled tempalte in place of the + IF and ENDIF statements. These newlines are unwanted (and one is conditional). + The IF and ENDIF are usually on their own line for ease of reading. + + This replacement preserves newlines only for statements that aren't the only statement on a line. + It will NOT preserve newlines at the end of statements in the above examle. + It will preserve newlines in situations like: + + inline content + + + */ + + $data = preg_replace('~(?).)+(?)$~m', "$1\n", $data); + $data = str_replace('/**/?>', "?>\n", $data); + $data = str_replace('?>in_php && $matches[1] != 'ENDPHP') + { + return ''; + } + + if (isset($matches[3])) + { + return $this->compile_var_tags($matches[0]); + } + + global $config; + + switch ($matches[1]) + { + case 'BEGIN': + $this->block_else_level[] = false; + return 'compile_tag_block($matches[2]) . ' ?>'; + break; + + case 'BEGINELSE': + $this->block_else_level[sizeof($this->block_else_level) - 1] = true; + return ''; + break; + + case 'END': + array_pop($this->block_names); + return 'block_else_level)) ? '}' : '}}') . ' ?>'; + break; + + case 'IF': + return 'compile_tag_if($matches[2], false) . ' ?>'; + break; + + case 'ELSE': + return ''; + break; + + case 'ELSEIF': + return 'compile_tag_if($matches[2], true) . ' ?>'; + break; + + case 'ENDIF': + return ''; + break; + + case 'DEFINE': + return 'compile_tag_define($matches[2], true) . ' ?>'; + break; + + case 'UNDEFINE': + return 'compile_tag_define($matches[2], false) . ' ?>'; + break; + + case 'INCLUDE': + return 'compile_tag_include($matches[2]) . ' ?>'; + break; + + case 'INCLUDEPHP': + return ($config['tpl_allow_php']) ? 'compile_tag_include_php($matches[2]) . ' ?>' : ''; + break; + + case 'PHP': + if ($config['tpl_allow_php']) + { + $this->in_php = true; + return ''; + break; + + case 'ENDPHP': + if ($config['tpl_allow_php']) + { + $this->in_php = false; + return ' ?>'; + } + return ''; + break; + + default: + return $matches[0]; + break; + + } + return ''; + } + + /** + * Compile variables + * @access private + */ + private function compile_var_tags(&$text_blocks) + { + // change template varrefs into PHP varrefs + $varrefs = array(); + + // This one will handle varrefs WITH namespaces + preg_match_all('#\{((?:' . self::REGEX_NS . '\.)+)(\$)?(' . self::REGEX_VAR . ')\}#', $text_blocks, $varrefs, PREG_SET_ORDER); + + foreach ($varrefs as $var_val) + { + $namespace = $var_val[1]; + $varname = $var_val[3]; + $new = $this->generate_block_varref($namespace, $varname, true, $var_val[2]); + + $text_blocks = str_replace($var_val[0], $new, $text_blocks); + } + + // Handle special language tags L_ and LA_ + $this->compile_language_tags($text_blocks); + + // This will handle the remaining root-level varrefs + $text_blocks = preg_replace('#\{(' . self::REGEX_VAR . ')\}#', "", $text_blocks); + $text_blocks = preg_replace('#\{\$(' . self::REGEX_VAR . ')\}#', "", $text_blocks); + + return $text_blocks; + } + + /** + * Handles special language tags L_ and LA_ + */ + private function compile_language_tags(&$text_blocks) + { + // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array + if (strpos($text_blocks, '{L_') !== false) + { + $text_blocks = preg_replace('#\{L_(' . self::REGEX_VAR . ')\}#', "", $text_blocks); + } + + // Handle addslashed language variables prefixed with LA_ + // If a template variable already exist, it will be used in favor of it... + if (strpos($text_blocks, '{LA_') !== false) + { + $text_blocks = preg_replace('#\{LA_(' . self::REGEX_VAR . '+)\}#', "", $text_blocks); + } + } + + /** + * Compile blocks + * @access private + */ + private function compile_tag_block($tag_args) + { + $no_nesting = false; + + // Is the designer wanting to call another loop in a loop? + // + // + // + // + // 'loop2' is actually on the same nesting level as 'loop' you assign + // variables to it with template->assign_block_vars('loop2', array(...)) + if (strpos($tag_args, '!') === 0) + { + // Count the number if ! occurrences (not allowed in vars) + $no_nesting = substr_count($tag_args, '!'); + $tag_args = substr($tag_args, $no_nesting); + } + + // Allow for control of looping (indexes start from zero): + // foo(2) : Will start the loop on the 3rd entry + // foo(-2) : Will start the loop two entries from the end + // foo(3,4) : Will start the loop on the fourth entry and end it on the fifth + // foo(3,-4) : Will start the loop on the fourth entry and end it four from last + $match = array(); + + if (preg_match('#^([^()]*)\(([\-\d]+)(?:,([\-\d]+))?\)$#', $tag_args, $match)) + { + $tag_args = $match[1]; + + if ($match[2] < 0) + { + $loop_start = '($_' . $tag_args . '_count ' . $match[2] . ' < 0 ? 0 : $_' . $tag_args . '_count ' . $match[2] . ')'; + } + else + { + $loop_start = '($_' . $tag_args . '_count < ' . $match[2] . ' ? $_' . $tag_args . '_count : ' . $match[2] . ')'; + } + + if (!isset($match[3]) || strlen($match[3]) < 1 || $match[3] == -1) + { + $loop_end = '$_' . $tag_args . '_count'; + } + else if ($match[3] >= 0) + { + $loop_end = '(' . ($match[3] + 1) . ' > $_' . $tag_args . '_count ? $_' . $tag_args . '_count : ' . ($match[3] + 1) . ')'; + } + else //if ($match[3] < -1) + { + $loop_end = '$_' . $tag_args . '_count' . ($match[3] + 1); + } + } + else + { + $loop_start = 0; + $loop_end = '$_' . $tag_args . '_count'; + } + + $tag_template_php = ''; + array_push($this->block_names, $tag_args); + + if ($no_nesting !== false) + { + // We need to implode $no_nesting times from the end... + $block = array_slice($this->block_names, -$no_nesting); + } + else + { + $block = $this->block_names; + } + + if (sizeof($block) < 2) + { + // Block is not nested. + $tag_template_php = '$_' . $tag_args . "_count = (isset(\$_tpldata['$tag_args'])) ? sizeof(\$_tpldata['$tag_args']) : 0;"; + $varref = "\$_tpldata['$tag_args']"; + } + else + { + // This block is nested. + // Generate a namespace string for this block. + $namespace = implode('.', $block); + + // Get a reference to the data array for this block that depends on the + // current indices of all parent blocks. + $varref = $this->generate_block_data_ref($namespace, false); + + // Create the for loop code to iterate over this block. + $tag_template_php = '$_' . $tag_args . '_count = (isset(' . $varref . ')) ? sizeof(' . $varref . ') : 0;'; + } + + $tag_template_php .= 'if ($_' . $tag_args . '_count) {'; + + /** + * The following uses foreach for iteration instead of a for loop, foreach is faster but requires PHP to make a copy of the contents of the array which uses more memory + * + * if (!$offset) + * { + * $tag_template_php .= 'foreach (' . $varref . ' as $_' . $tag_args . '_i => $_' . $tag_args . '_val){'; + * } + * + */ + + $tag_template_php .= 'for ($_' . $tag_args . '_i = ' . $loop_start . '; $_' . $tag_args . '_i < ' . $loop_end . '; ++$_' . $tag_args . '_i){'; + $tag_template_php .= '$_' . $tag_args . '_val = &' . $varref . '[$_' . $tag_args . '_i];'; + + return $tag_template_php; + } + + /** + * Compile a general expression - much of this is from Smarty with + * some adaptions for our block level methods + * @access private + */ + private function compile_expression($tag_args) + { + $match = array(); + preg_match_all('/(?: + "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" | + \'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' | + [(),] | + [^\s(),]+)/x', $tag_args, $match); + + $tokens = $match[0]; + $is_arg_stack = array(); + + for ($i = 0, $size = sizeof($tokens); $i < $size; $i++) + { + $token = &$tokens[$i]; + + switch ($token) + { + case '!==': + case '===': + case '<<': + case '>>': + case '|': + case '^': + case '&': + case '~': + case ')': + case ',': + case '+': + case '-': + case '*': + case '/': + case '@': + break; + + case '==': + case 'eq': + $token = '=='; + break; + + case '!=': + case '<>': + case 'ne': + case 'neq': + $token = '!='; + break; + + case '<': + case 'lt': + $token = '<'; + break; + + case '<=': + case 'le': + case 'lte': + $token = '<='; + break; + + case '>': + case 'gt': + $token = '>'; + break; + + case '>=': + case 'ge': + case 'gte': + $token = '>='; + break; + + case '&&': + case 'and': + $token = '&&'; + break; + + case '||': + case 'or': + $token = '||'; + break; + + case '!': + case 'not': + $token = '!'; + break; + + case '%': + case 'mod': + $token = '%'; + break; + + case '(': + array_push($is_arg_stack, $i); + break; + + case 'is': + $is_arg_start = ($tokens[$i-1] == ')') ? array_pop($is_arg_stack) : $i-1; + $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); + + $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); + + array_splice($tokens, $is_arg_start, sizeof($tokens), $new_tokens); + + $i = $is_arg_start; + + // no break + + default: + $varrefs = array(); + if (preg_match('#^((?:' . self::REGEX_NS . '\.)+)?(\$)?(?=[A-Z])([A-Z0-9\-_]+)#s', $token, $varrefs)) + { + if (!empty($varrefs[1])) + { + $namespace = substr($varrefs[1], 0, -1); + $dot_pos = strrchr($namespace, '.'); + if ($dot_pos !== false) + { + $namespace = substr($dot_pos, 1); + } + + // S_ROW_COUNT is deceptive, it returns the current row number not the number of rows + // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM + switch ($varrefs[3]) + { + case 'S_ROW_NUM': + case 'S_ROW_COUNT': + $token = "\$_${namespace}_i"; + break; + + case 'S_NUM_ROWS': + $token = "\$_${namespace}_count"; + break; + + case 'S_FIRST_ROW': + $token = "(\$_${namespace}_i == 0)"; + break; + + case 'S_LAST_ROW': + $token = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; + break; + + case 'S_BLOCK_NAME': + $token = "'$namespace'"; + break; + + default: + $token = $this->generate_block_data_ref(substr($varrefs[1], 0, -1), true, $varrefs[2]) . '[\'' . $varrefs[3] . '\']'; + $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; + break; + } + } + else + { + $token = ($varrefs[2]) ? '$_tpldata[\'DEFINE\'][\'.\'][\'' . $varrefs[3] . '\']' : '$_rootref[\'' . $varrefs[3] . '\']'; + $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; + } + + } + else if (preg_match('#^\.((?:' . self::REGEX_NS . '\.?)+)$#s', $token, $varrefs)) + { + // Allow checking if loops are set with .loopname + // It is also possible to check the loop count by doing for example + $blocks = explode('.', $varrefs[1]); + + // If the block is nested, we have a reference that we can grab. + // If the block is not nested, we just go and grab the block from _tpldata + if (sizeof($blocks) > 1) + { + $block = array_pop($blocks); + $namespace = implode('.', $blocks); + $varref = $this->generate_block_data_ref($namespace, true); + + // Add the block reference for the last child. + $varref .= "['" . $block . "']"; + } + else + { + $varref = '$_tpldata'; + + // Add the block reference for the last child. + $varref .= "['" . $blocks[0] . "']"; + } + $token = "(isset($varref) ? sizeof($varref) : 0)"; + } + + break; + } + } + + return $tokens; + } + + + private function compile_tag_if($tag_args, $elseif) + { + $tokens = $this->compile_expression($tag_args); + + $tpl = ($elseif) ? '} else if (' : 'if ('; + + $tpl .= implode(' ', $tokens); + $tpl .= ') { '; + + return $tpl; + } + + /** + * Compile DEFINE tags + * @access private + */ + private function compile_tag_define($tag_args, $op) + { + $match = array(); + preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (.*?))?$#', $tag_args, $match); + + if (empty($match[2]) || (!isset($match[3]) && $op)) + { + return ''; + } + + if (!$op) + { + return 'unset(' . (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ');'; + } + + $parsed_statement = implode(' ', $this->compile_expression($match[3])); + + return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $parsed_statement . ';'; + } + + /** + * Compile INCLUDE tag + * @access private + */ + private function compile_tag_include($tag_args) + { + return "\$_template->_tpl_include('$tag_args');"; + } + + /** + * Compile INCLUDE_PHP tag + * @access private + */ + private function compile_tag_include_php($tag_args) + { + return "include('$tag_args');"; + } + + /** + * parse expression + * This is from Smarty + * @access private + */ + private function _parse_is_expr($is_arg, $tokens) + { + $expr_end = 0; + $negate_expr = false; + + if (($first_token = array_shift($tokens)) == 'not') + { + $negate_expr = true; + $expr_type = array_shift($tokens); + } + else + { + $expr_type = $first_token; + } + + switch ($expr_type) + { + case 'even': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!(($is_arg / $expr_arg) & 1)"; + } + else + { + $expr = "!($is_arg & 1)"; + } + break; + + case 'odd': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "(($is_arg / $expr_arg) & 1)"; + } + else + { + $expr = "($is_arg & 1)"; + } + break; + + case 'div': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!($is_arg % $expr_arg)"; + } + break; + } + + if ($negate_expr) + { + if ($expr[0] == '!') + { + // Negated expression, de-negate it. + $expr = substr($expr, 1); + } + else + { + $expr = "!($expr)"; + } + } + + array_splice($tokens, 0, $expr_end, $expr); + + return $tokens; + } + + /** + * Generates a reference to the given variable inside the given (possibly nested) + * block namespace. This is a string of the form: + * ' . $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . ' + * It's ready to be inserted into an "echo" line in one of the templates. + * + * @access private + * @param string $namespace Namespace to access (expects a trailing "." on the namespace) + * @param string $varname Variable name to use + * @param bool $echo If true return an echo statement, otherwise a reference to the internal variable + * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable + * @return string Code to access variable or echo it if $echo is true + */ + private function generate_block_varref($namespace, $varname, $echo = true, $defop = false) + { + // Strip the trailing period. + $namespace = substr($namespace, 0, -1); + + $expr = true; + $isset = false; + + // S_ROW_COUNT is deceptive, it returns the current row number now the number of rows + // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM + switch ($varname) + { + case 'S_ROW_NUM': + case 'S_ROW_COUNT': + $varref = "\$_${namespace}_i"; + break; + + case 'S_NUM_ROWS': + $varref = "\$_${namespace}_count"; + break; + + case 'S_FIRST_ROW': + $varref = "(\$_${namespace}_i == 0)"; + break; + + case 'S_LAST_ROW': + $varref = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; + break; + + case 'S_BLOCK_NAME': + $varref = "'$namespace'"; + break; + + default: + // Get a reference to the data block for this namespace. + $varref = $this->generate_block_data_ref($namespace, true, $defop); + // Prepend the necessary code to stick this in an echo line. + + // Append the variable reference. + $varref .= "['$varname']"; + + $expr = false; + $isset = true; + break; + } + // @todo Test the !$expr more + $varref = ($echo) ? '' : (($expr || isset($varref)) ? $varref : ''); + + return $varref; + } + + /** + * Generates a reference to the array of data values for the given + * (possibly nested) block namespace. This is a string of the form: + * $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['$childN'] + * + * @access private + * @param string $blockname Block to access (does not expect a trailing "." on the blockname) + * @param bool $include_last_iterator If $include_last_iterator is true, then [$_childN_i] will be appended to the form shown above. + * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable + * @return string Code to access variable + */ + private function generate_block_data_ref($blockname, $include_last_iterator, $defop = false) + { + // Get an array of the blocks involved. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + // DEFINE is not an element of any referenced variable, we must use _tpldata to access it + if ($defop) + { + $varref = '$_tpldata[\'DEFINE\']'; + // Build up the string with everything but the last child. + for ($i = 0; $i < $blockcount; $i++) + { + $varref .= "['" . $blocks[$i] . "'][\$_" . $blocks[$i] . '_i]'; + } + // Add the block reference for the last child. + $varref .= "['" . $blocks[$blockcount] . "']"; + // Add the iterator for the last child if requried. + if ($include_last_iterator) + { + $varref .= '[$_' . $blocks[$blockcount] . '_i]'; + } + return $varref; + } + else if ($include_last_iterator) + { + return '$_'. $blocks[$blockcount] . '_val'; + } + else + { + return '$_'. $blocks[$blockcount - 1] . '_val[\''. $blocks[$blockcount]. '\']'; + } + } +} + +stream_filter_register('phpbb_template', 'phpbb_template_filter'); + +/** +* Extension of template class - Functions needed for compiling templates only. +* +* psoTFX, phpBB Development Team - Completion of file caching, decompilation +* routines and implementation of conditionals/keywords and associated changes +* +* The interface was inspired by PHPLib templates, and the template file (formats are +* quite similar) +* +* The keyword/conditional implementation is currently based on sections of code from +* the Smarty templating engine (c) 2001 ispi of Lincoln, Inc. which is released +* (on its own and in whole) under the LGPL. Section 3 of the LGPL states that any code +* derived from an LGPL application may be relicenced under the GPL, this applies +* to this source +* +* DEFINE directive inspired by a request by Cyberalien +* +* @package phpBB3 +* @uses template_filter As a PHP stream filter to perform compilation of templates +*/ +class phpbb_template_compile +{ + /** + * Compiles template in $source_file and writes compiled template to + * cache directory + * @access public + * @param string $handle Template handle to compile + * @param string $source_file Source template file + * @return bool Return true on success otherwise false + */ + public function compile_file_to_file($source_file, $compiled_file) + { + $source_handle = @fopen($source_file, 'rb'); + $destination_handle = @fopen($compiled_file, 'wb'); + + if (!$source_handle || !$destination_handle) + { + return false; + } + + @flock($destination_handle, LOCK_EX); + + $this->compile_stream_to_stream($source_handle, $destination_handle); + + @fclose($source_handle); + @flock($destination_handle, LOCK_UN); + @fclose($destination_handle); + + phpbb_chmod($compiled_file, CHMOD_READ | CHMOD_WRITE); + + clearstatcache(); + + return true; + } + + /** + * Compiles a template located at $source_file. + * Returns PHP source suitable for eval(). + * @access public + * @param string $source_file Source template file + * @return string|bool Return compiled code on successful compilation otherwise false + */ + public function compile_file($source_file) + { + $source_handle = @fopen($source_file, 'rb'); + $destination_handle = @fopen('php://temp' ,'r+b'); + + if (!$source_handle || !$destination_handle) + { + return false; + } + + $this->compile_stream_to_stream($source_handle, $destination_handle); + + @fclose($source_handle); + + rewind($destination_handle); + $contents = stream_get_contents($destination_handle); + @fclose($dest_handle); + + return $contents; + } + + /** + * Compiles contents of $source_stream into $dest_stream. + * + * A stream filter is appended to $source_stream as part of the + * process. + * + * @access private + * @param resource $source_stream Source stream + * @param resource $dest_stream Destination stream + * @return void + */ + private function compile_stream_to_stream($source_stream, $dest_stream) + { + stream_filter_append($source_stream, 'phpbb_template'); + stream_copy_to_stream($source_stream, $dest_stream); + } +} diff --git a/phpBB/includes/template/context.php b/phpBB/includes/template/context.php new file mode 100644 index 0000000000..df5c4afb24 --- /dev/null +++ b/phpBB/includes/template/context.php @@ -0,0 +1,320 @@ + $this->_tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value + * if it's a root-level variable, it'll be like this: + * --> $this->_tpldata[.][0][varname] == value + * @var array + */ + private $_tpldata = array('.' => array(0 => array())); + + /** + * @var array Reference to template->_tpldata['.'][0] + */ + private $_rootref; + + public function __construct() + { + $this->clear(); + } + + /** + * Clears template data set. + * @access public + */ + public function clear() + { + $this->_tpldata = array('.' => array(0 => array())); + $this->_rootref = &$this->_tpldata['.'][0]; + } + + /** + * Assign a single variable to a single key + * @access public + * @param string $varname Variable name + * @param string $varval Value to assign to variable + */ + public function assign_var($varname, $varval) + { + $this->_rootref[$varname] = $varval; + + return true; + } + + public function get_data_ref() + { + return $this->_tpldata; + } + + public function get_root_ref() + { + return $this->_rootref; + } + + /** + * Assign key variable pairs from an array to a specified block + * @access public + * @param string $blockname Name of block to assign $vararray to + * @param array $vararray A hash of variable name => value pairs + */ + public function assign_block_vars($blockname, array $vararray) + { + if (strpos($blockname, '.') !== false) + { + // Nested block. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $str = &$this->_tpldata; + for ($i = 0; $i < $blockcount; $i++) + { + $str = &$str[$blocks[$i]]; + $str = &$str[sizeof($str) - 1]; + } + + $s_row_count = isset($str[$blocks[$blockcount]]) ? sizeof($str[$blocks[$blockcount]]) : 0; + $vararray['S_ROW_COUNT'] = $s_row_count; + + // Assign S_FIRST_ROW + if (!$s_row_count) + { + $vararray['S_FIRST_ROW'] = true; + } + + // Now the tricky part, we always assign S_LAST_ROW and remove the entry before + // This is much more clever than going through the complete template data on display (phew) + $vararray['S_LAST_ROW'] = true; + if ($s_row_count > 0) + { + unset($str[$blocks[$blockcount]][($s_row_count - 1)]['S_LAST_ROW']); + } + + // Now we add the block that we're actually assigning to. + // We're adding a new iteration to this block with the given + // variable assignments. + $str[$blocks[$blockcount]][] = $vararray; + } + else + { + // Top-level block. + $s_row_count = (isset($this->_tpldata[$blockname])) ? sizeof($this->_tpldata[$blockname]) : 0; + $vararray['S_ROW_COUNT'] = $s_row_count; + + // Assign S_FIRST_ROW + if (!$s_row_count) + { + $vararray['S_FIRST_ROW'] = true; + } + + // We always assign S_LAST_ROW and remove the entry before + $vararray['S_LAST_ROW'] = true; + if ($s_row_count > 0) + { + unset($this->_tpldata[$blockname][($s_row_count - 1)]['S_LAST_ROW']); + } + + // Add a new iteration to this block with the variable assignments we were given. + $this->_tpldata[$blockname][] = $vararray; + } + + return true; + } + + /** + * Change already assigned key variable pair (one-dimensional - single loop entry) + * + * An example of how to use this function: + * {@example alter_block_array.php} + * + * @param string $blockname the blockname, for example 'loop' + * @param array $vararray the var array to insert/add or merge + * @param mixed $key Key to search for + * + * array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position] + * + * int: Position [the position to change or insert at directly given] + * + * If key is false the position is set to 0 + * If key is true the position is set to the last entry + * + * @param string $mode Mode to execute (valid modes are 'insert' and 'change') + * + * If insert, the vararray is inserted at the given position (position counting from zero). + * If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value). + * + * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) + * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) + * + * @return bool false on error, true on success + * @access public + */ + public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') + { + if (strpos($blockname, '.') !== false) + { + // Nested block. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $block = &$this->_tpldata; + for ($i = 0; $i < $blockcount; $i++) + { + if (($pos = strpos($blocks[$i], '[')) !== false) + { + $name = substr($blocks[$i], 0, $pos); + + if (strpos($blocks[$i], '[]') === $pos) + { + $index = sizeof($block[$name]) - 1; + } + else + { + $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1); + } + } + else + { + $name = $blocks[$i]; + $index = sizeof($block[$name]) - 1; + } + $block = &$block[$name]; + $block = &$block[$index]; + } + + $block = &$block[$blocks[$i]]; // Traverse the last block + } + else + { + // Top-level block. + $block = &$this->_tpldata[$blockname]; + } + + // Change key to zero (change first position) if false and to last position if true + if ($key === false || $key === true) + { + $key = ($key === false) ? 0 : sizeof($block); + } + + // Get correct position if array given + if (is_array($key)) + { + // Search array to get correct position + list($search_key, $search_value) = @each($key); + + $key = NULL; + foreach ($block as $i => $val_ary) + { + if ($val_ary[$search_key] === $search_value) + { + $key = $i; + break; + } + } + + // key/value pair not found + if ($key === NULL) + { + return false; + } + } + + // Insert Block + if ($mode == 'insert') + { + // Make sure we are not exceeding the last iteration + if ($key >= sizeof($this->_tpldata[$blockname])) + { + $key = sizeof($this->_tpldata[$blockname]); + unset($this->_tpldata[$blockname][($key - 1)]['S_LAST_ROW']); + $vararray['S_LAST_ROW'] = true; + } + else if ($key === 0) + { + unset($this->_tpldata[$blockname][0]['S_FIRST_ROW']); + $vararray['S_FIRST_ROW'] = true; + } + + // Re-position template blocks + for ($i = sizeof($block); $i > $key; $i--) + { + $block[$i] = $block[$i-1]; + } + + // Insert vararray at given position + $block[$key] = $vararray; + + return true; + } + + // Which block to change? + if ($mode == 'change') + { + if ($key == sizeof($block)) + { + $key--; + } + + $block[$key] = array_merge($block[$key], $vararray); + + return true; + } + + return false; + } + + /** + * Reset/empty complete block + * @access public + * @param string $blockname Name of block to destroy + */ + public function destroy_block_vars($blockname) + { + if (strpos($blockname, '.') !== false) + { + // Nested block. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $str = &$this->_tpldata; + for ($i = 0; $i < $blockcount; $i++) + { + $str = &$str[$blocks[$i]]; + $str = &$str[sizeof($str) - 1]; + } + + unset($str[$blocks[$blockcount]]); + } + else + { + // Top-level block. + unset($this->_tpldata[$blockname]); + } + + return true; + } +} diff --git a/phpBB/includes/template/renderer.php b/phpBB/includes/template/renderer.php new file mode 100644 index 0000000000..0af2d94bb6 --- /dev/null +++ b/phpBB/includes/template/renderer.php @@ -0,0 +1,35 @@ +code = $code; + $this->template = $template; + } + + /** + * Displays the template managed by this renderer by eval'ing php code + * of the template. + * @param phpbb_template_context $context Template context to use + * @param array $lang Language entries to use + */ + public function render($context, $lang) + { + $_template = &$this->template; + $_tpldata = &$context->get_data_ref(); + $_rootref = &$context->get_root_ref(); + $_lang = &$lang; + + eval($this->code); + } +} diff --git a/phpBB/includes/template/renderer_include.php b/phpBB/includes/template/renderer_include.php new file mode 100644 index 0000000000..aca3a3634d --- /dev/null +++ b/phpBB/includes/template/renderer_include.php @@ -0,0 +1,60 @@ +path = $path; + $this->template = $template; + } + + /** + * Displays the template managed by this renderer by including + * the php file containing the template. + * @param phpbb_template_context $context Template context to use + * @param array $lang Language entries to use + */ + public function render($context, $lang) + { + $_template = &$this->template; + $_tpldata = &$context->get_data_ref(); + $_rootref = &$context->get_root_ref(); + $_lang = &$lang; + + include($this->path); + } +} diff --git a/phpBB/includes/template_compile.php b/phpBB/includes/template_compile.php deleted file mode 100644 index 4132fb2e34..0000000000 --- a/phpBB/includes/template_compile.php +++ /dev/null @@ -1,941 +0,0 @@ -'; - - const REGEX_TOKENS = '~|{((?:[a-z_][a-z_0-9]+\.)*\\$?[A-Z][A-Z_0-9]+)}~'; - - /** - * @var array - */ - private $block_names = array(); - - /** - * @var array - */ - private $block_else_level = array(); - - /** - * @var string - */ - private $chunk; - - /** - * @var bool - */ - private $in_php; - - public function filter($in, $out, &$consumed, $closing) - { - $written = false; - - while ($bucket = stream_bucket_make_writeable($in)) - { - $consumed += $bucket->datalen; - - $data = $this->chunk . $bucket->data; - $last_nl = strrpos($data, "\n"); - $this->chunk = substr($data, $last_nl); - $data = substr($data, 0, $last_nl); - - if (!strlen($data)) - { - continue; - } - - $written = true; - - $bucket->data = $this->compile($data); - $bucket->datalen = strlen($bucket->data); - stream_bucket_append($out, $bucket); - } - - if ($closing && strlen($this->chunk)) - { - $written = true; - $bucket = stream_bucket_new($this->stream, $this->compile($this->chunk)); - stream_bucket_append($out, $bucket); - } - - return $written ? PSFS_PASS_ON : PSFS_FEED_ME; - } - - public function onCreate() - { - $this->chunk = ''; - $this->in_php = false; - return true; - } - - private function compile($data) - { - $block_start_in_php = $this->in_php; - - $data = preg_replace('#<(?:[\\?%]|script)#s', '', $data); - $data = preg_replace_callback(self::REGEX_TOKENS, array($this, 'replace'), $data); - - global $config; - - // Remove php - if (!$config['tpl_allow_php']) - { - if ($block_start_in_php - && $this->in_php - && strpos($data, '') === false - && strpos($data, '') === false) - { - // This is just php code - return ''; - } - $data = preg_replace('~^.*?~', '', $data); - $data = preg_replace('~.*?~', '', $data); - $data = preg_replace('~.*?$~', '', $data); - } - - /* - Preserve whitespace. - PHP removes a newline after the closing tag (if it's there). This is by design. - - - Consider the following template: - - - some content - - - If we were to simply preserve all whitespace, we could simply replace all "?>" tags - with "?>\n". - Doing that, would add additional newlines to the compiled tempalte in place of the - IF and ENDIF statements. These newlines are unwanted (and one is conditional). - The IF and ENDIF are usually on their own line for ease of reading. - - This replacement preserves newlines only for statements that aren't the only statement on a line. - It will NOT preserve newlines at the end of statements in the above examle. - It will preserve newlines in situations like: - - inline content - - - */ - - $data = preg_replace('~(?).)+(?)$~m', "$1\n", $data); - $data = str_replace('/**/?>', "?>\n", $data); - $data = str_replace('?>in_php && $matches[1] != 'ENDPHP') - { - return ''; - } - - if (isset($matches[3])) - { - return $this->compile_var_tags($matches[0]); - } - - global $config; - - switch ($matches[1]) - { - case 'BEGIN': - $this->block_else_level[] = false; - return 'compile_tag_block($matches[2]) . ' ?>'; - break; - - case 'BEGINELSE': - $this->block_else_level[sizeof($this->block_else_level) - 1] = true; - return ''; - break; - - case 'END': - array_pop($this->block_names); - return 'block_else_level)) ? '}' : '}}') . ' ?>'; - break; - - case 'IF': - return 'compile_tag_if($matches[2], false) . ' ?>'; - break; - - case 'ELSE': - return ''; - break; - - case 'ELSEIF': - return 'compile_tag_if($matches[2], true) . ' ?>'; - break; - - case 'ENDIF': - return ''; - break; - - case 'DEFINE': - return 'compile_tag_define($matches[2], true) . ' ?>'; - break; - - case 'UNDEFINE': - return 'compile_tag_define($matches[2], false) . ' ?>'; - break; - - case 'INCLUDE': - return 'compile_tag_include($matches[2]) . ' ?>'; - break; - - case 'INCLUDEPHP': - return ($config['tpl_allow_php']) ? 'compile_tag_include_php($matches[2]) . ' ?>' : ''; - break; - - case 'PHP': - if ($config['tpl_allow_php']) - { - $this->in_php = true; - return ''; - break; - - case 'ENDPHP': - if ($config['tpl_allow_php']) - { - $this->in_php = false; - return ' ?>'; - } - return ''; - break; - - default: - return $matches[0]; - break; - - } - return ''; - } - - /** - * Compile variables - * @access private - */ - private function compile_var_tags(&$text_blocks) - { - // change template varrefs into PHP varrefs - $varrefs = array(); - - // This one will handle varrefs WITH namespaces - preg_match_all('#\{((?:' . self::REGEX_NS . '\.)+)(\$)?(' . self::REGEX_VAR . ')\}#', $text_blocks, $varrefs, PREG_SET_ORDER); - - foreach ($varrefs as $var_val) - { - $namespace = $var_val[1]; - $varname = $var_val[3]; - $new = $this->generate_block_varref($namespace, $varname, true, $var_val[2]); - - $text_blocks = str_replace($var_val[0], $new, $text_blocks); - } - - // Handle special language tags L_ and LA_ - $this->compile_language_tags($text_blocks); - - // This will handle the remaining root-level varrefs - $text_blocks = preg_replace('#\{(' . self::REGEX_VAR . ')\}#', "", $text_blocks); - $text_blocks = preg_replace('#\{\$(' . self::REGEX_VAR . ')\}#', "", $text_blocks); - - return $text_blocks; - } - - /** - * Handles special language tags L_ and LA_ - */ - private function compile_language_tags(&$text_blocks) - { - // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array - if (strpos($text_blocks, '{L_') !== false) - { - $text_blocks = preg_replace('#\{L_(' . self::REGEX_VAR . ')\}#', "", $text_blocks); - } - - // Handle addslashed language variables prefixed with LA_ - // If a template variable already exist, it will be used in favor of it... - if (strpos($text_blocks, '{LA_') !== false) - { - $text_blocks = preg_replace('#\{LA_(' . self::REGEX_VAR . '+)\}#', "", $text_blocks); - } - } - - /** - * Compile blocks - * @access private - */ - private function compile_tag_block($tag_args) - { - $no_nesting = false; - - // Is the designer wanting to call another loop in a loop? - // - // - // - // - // 'loop2' is actually on the same nesting level as 'loop' you assign - // variables to it with template->assign_block_vars('loop2', array(...)) - if (strpos($tag_args, '!') === 0) - { - // Count the number if ! occurrences (not allowed in vars) - $no_nesting = substr_count($tag_args, '!'); - $tag_args = substr($tag_args, $no_nesting); - } - - // Allow for control of looping (indexes start from zero): - // foo(2) : Will start the loop on the 3rd entry - // foo(-2) : Will start the loop two entries from the end - // foo(3,4) : Will start the loop on the fourth entry and end it on the fifth - // foo(3,-4) : Will start the loop on the fourth entry and end it four from last - $match = array(); - - if (preg_match('#^([^()]*)\(([\-\d]+)(?:,([\-\d]+))?\)$#', $tag_args, $match)) - { - $tag_args = $match[1]; - - if ($match[2] < 0) - { - $loop_start = '($_' . $tag_args . '_count ' . $match[2] . ' < 0 ? 0 : $_' . $tag_args . '_count ' . $match[2] . ')'; - } - else - { - $loop_start = '($_' . $tag_args . '_count < ' . $match[2] . ' ? $_' . $tag_args . '_count : ' . $match[2] . ')'; - } - - if (!isset($match[3]) || strlen($match[3]) < 1 || $match[3] == -1) - { - $loop_end = '$_' . $tag_args . '_count'; - } - else if ($match[3] >= 0) - { - $loop_end = '(' . ($match[3] + 1) . ' > $_' . $tag_args . '_count ? $_' . $tag_args . '_count : ' . ($match[3] + 1) . ')'; - } - else //if ($match[3] < -1) - { - $loop_end = '$_' . $tag_args . '_count' . ($match[3] + 1); - } - } - else - { - $loop_start = 0; - $loop_end = '$_' . $tag_args . '_count'; - } - - $tag_template_php = ''; - array_push($this->block_names, $tag_args); - - if ($no_nesting !== false) - { - // We need to implode $no_nesting times from the end... - $block = array_slice($this->block_names, -$no_nesting); - } - else - { - $block = $this->block_names; - } - - if (sizeof($block) < 2) - { - // Block is not nested. - $tag_template_php = '$_' . $tag_args . "_count = (isset(\$_tpldata['$tag_args'])) ? sizeof(\$_tpldata['$tag_args']) : 0;"; - $varref = "\$_tpldata['$tag_args']"; - } - else - { - // This block is nested. - // Generate a namespace string for this block. - $namespace = implode('.', $block); - - // Get a reference to the data array for this block that depends on the - // current indices of all parent blocks. - $varref = $this->generate_block_data_ref($namespace, false); - - // Create the for loop code to iterate over this block. - $tag_template_php = '$_' . $tag_args . '_count = (isset(' . $varref . ')) ? sizeof(' . $varref . ') : 0;'; - } - - $tag_template_php .= 'if ($_' . $tag_args . '_count) {'; - - /** - * The following uses foreach for iteration instead of a for loop, foreach is faster but requires PHP to make a copy of the contents of the array which uses more memory - * - * if (!$offset) - * { - * $tag_template_php .= 'foreach (' . $varref . ' as $_' . $tag_args . '_i => $_' . $tag_args . '_val){'; - * } - * - */ - - $tag_template_php .= 'for ($_' . $tag_args . '_i = ' . $loop_start . '; $_' . $tag_args . '_i < ' . $loop_end . '; ++$_' . $tag_args . '_i){'; - $tag_template_php .= '$_' . $tag_args . '_val = &' . $varref . '[$_' . $tag_args . '_i];'; - - return $tag_template_php; - } - - /** - * Compile a general expression - much of this is from Smarty with - * some adaptions for our block level methods - * @access private - */ - private function compile_expression($tag_args) - { - $match = array(); - preg_match_all('/(?: - "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" | - \'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' | - [(),] | - [^\s(),]+)/x', $tag_args, $match); - - $tokens = $match[0]; - $is_arg_stack = array(); - - for ($i = 0, $size = sizeof($tokens); $i < $size; $i++) - { - $token = &$tokens[$i]; - - switch ($token) - { - case '!==': - case '===': - case '<<': - case '>>': - case '|': - case '^': - case '&': - case '~': - case ')': - case ',': - case '+': - case '-': - case '*': - case '/': - case '@': - break; - - case '==': - case 'eq': - $token = '=='; - break; - - case '!=': - case '<>': - case 'ne': - case 'neq': - $token = '!='; - break; - - case '<': - case 'lt': - $token = '<'; - break; - - case '<=': - case 'le': - case 'lte': - $token = '<='; - break; - - case '>': - case 'gt': - $token = '>'; - break; - - case '>=': - case 'ge': - case 'gte': - $token = '>='; - break; - - case '&&': - case 'and': - $token = '&&'; - break; - - case '||': - case 'or': - $token = '||'; - break; - - case '!': - case 'not': - $token = '!'; - break; - - case '%': - case 'mod': - $token = '%'; - break; - - case '(': - array_push($is_arg_stack, $i); - break; - - case 'is': - $is_arg_start = ($tokens[$i-1] == ')') ? array_pop($is_arg_stack) : $i-1; - $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); - - $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); - - array_splice($tokens, $is_arg_start, sizeof($tokens), $new_tokens); - - $i = $is_arg_start; - - // no break - - default: - $varrefs = array(); - if (preg_match('#^((?:' . self::REGEX_NS . '\.)+)?(\$)?(?=[A-Z])([A-Z0-9\-_]+)#s', $token, $varrefs)) - { - if (!empty($varrefs[1])) - { - $namespace = substr($varrefs[1], 0, -1); - $dot_pos = strrchr($namespace, '.'); - if ($dot_pos !== false) - { - $namespace = substr($dot_pos, 1); - } - - // S_ROW_COUNT is deceptive, it returns the current row number not the number of rows - // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM - switch ($varrefs[3]) - { - case 'S_ROW_NUM': - case 'S_ROW_COUNT': - $token = "\$_${namespace}_i"; - break; - - case 'S_NUM_ROWS': - $token = "\$_${namespace}_count"; - break; - - case 'S_FIRST_ROW': - $token = "(\$_${namespace}_i == 0)"; - break; - - case 'S_LAST_ROW': - $token = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; - break; - - case 'S_BLOCK_NAME': - $token = "'$namespace'"; - break; - - default: - $token = $this->generate_block_data_ref(substr($varrefs[1], 0, -1), true, $varrefs[2]) . '[\'' . $varrefs[3] . '\']'; - $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; - break; - } - } - else - { - $token = ($varrefs[2]) ? '$_tpldata[\'DEFINE\'][\'.\'][\'' . $varrefs[3] . '\']' : '$_rootref[\'' . $varrefs[3] . '\']'; - $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; - } - - } - else if (preg_match('#^\.((?:' . self::REGEX_NS . '\.?)+)$#s', $token, $varrefs)) - { - // Allow checking if loops are set with .loopname - // It is also possible to check the loop count by doing for example - $blocks = explode('.', $varrefs[1]); - - // If the block is nested, we have a reference that we can grab. - // If the block is not nested, we just go and grab the block from _tpldata - if (sizeof($blocks) > 1) - { - $block = array_pop($blocks); - $namespace = implode('.', $blocks); - $varref = $this->generate_block_data_ref($namespace, true); - - // Add the block reference for the last child. - $varref .= "['" . $block . "']"; - } - else - { - $varref = '$_tpldata'; - - // Add the block reference for the last child. - $varref .= "['" . $blocks[0] . "']"; - } - $token = "(isset($varref) ? sizeof($varref) : 0)"; - } - - break; - } - } - - return $tokens; - } - - - private function compile_tag_if($tag_args, $elseif) - { - $tokens = $this->compile_expression($tag_args); - - $tpl = ($elseif) ? '} else if (' : 'if ('; - - $tpl .= implode(' ', $tokens); - $tpl .= ') { '; - - return $tpl; - } - - /** - * Compile DEFINE tags - * @access private - */ - private function compile_tag_define($tag_args, $op) - { - $match = array(); - preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (.*?))?$#', $tag_args, $match); - - if (empty($match[2]) || (!isset($match[3]) && $op)) - { - return ''; - } - - if (!$op) - { - return 'unset(' . (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ');'; - } - - $parsed_statement = implode(' ', $this->compile_expression($match[3])); - - return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $parsed_statement . ';'; - } - - /** - * Compile INCLUDE tag - * @access private - */ - private function compile_tag_include($tag_args) - { - return "\$_template->_tpl_include('$tag_args');"; - } - - /** - * Compile INCLUDE_PHP tag - * @access private - */ - private function compile_tag_include_php($tag_args) - { - return "include('$tag_args');"; - } - - /** - * parse expression - * This is from Smarty - * @access private - */ - private function _parse_is_expr($is_arg, $tokens) - { - $expr_end = 0; - $negate_expr = false; - - if (($first_token = array_shift($tokens)) == 'not') - { - $negate_expr = true; - $expr_type = array_shift($tokens); - } - else - { - $expr_type = $first_token; - } - - switch ($expr_type) - { - case 'even': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!(($is_arg / $expr_arg) & 1)"; - } - else - { - $expr = "!($is_arg & 1)"; - } - break; - - case 'odd': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "(($is_arg / $expr_arg) & 1)"; - } - else - { - $expr = "($is_arg & 1)"; - } - break; - - case 'div': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!($is_arg % $expr_arg)"; - } - break; - } - - if ($negate_expr) - { - if ($expr[0] == '!') - { - // Negated expression, de-negate it. - $expr = substr($expr, 1); - } - else - { - $expr = "!($expr)"; - } - } - - array_splice($tokens, 0, $expr_end, $expr); - - return $tokens; - } - - /** - * Generates a reference to the given variable inside the given (possibly nested) - * block namespace. This is a string of the form: - * ' . $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . ' - * It's ready to be inserted into an "echo" line in one of the templates. - * - * @access private - * @param string $namespace Namespace to access (expects a trailing "." on the namespace) - * @param string $varname Variable name to use - * @param bool $echo If true return an echo statement, otherwise a reference to the internal variable - * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable - * @return string Code to access variable or echo it if $echo is true - */ - private function generate_block_varref($namespace, $varname, $echo = true, $defop = false) - { - // Strip the trailing period. - $namespace = substr($namespace, 0, -1); - - $expr = true; - $isset = false; - - // S_ROW_COUNT is deceptive, it returns the current row number now the number of rows - // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM - switch ($varname) - { - case 'S_ROW_NUM': - case 'S_ROW_COUNT': - $varref = "\$_${namespace}_i"; - break; - - case 'S_NUM_ROWS': - $varref = "\$_${namespace}_count"; - break; - - case 'S_FIRST_ROW': - $varref = "(\$_${namespace}_i == 0)"; - break; - - case 'S_LAST_ROW': - $varref = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; - break; - - case 'S_BLOCK_NAME': - $varref = "'$namespace'"; - break; - - default: - // Get a reference to the data block for this namespace. - $varref = $this->generate_block_data_ref($namespace, true, $defop); - // Prepend the necessary code to stick this in an echo line. - - // Append the variable reference. - $varref .= "['$varname']"; - - $expr = false; - $isset = true; - break; - } - // @todo Test the !$expr more - $varref = ($echo) ? '' : (($expr || isset($varref)) ? $varref : ''); - - return $varref; - } - - /** - * Generates a reference to the array of data values for the given - * (possibly nested) block namespace. This is a string of the form: - * $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['$childN'] - * - * @access private - * @param string $blockname Block to access (does not expect a trailing "." on the blockname) - * @param bool $include_last_iterator If $include_last_iterator is true, then [$_childN_i] will be appended to the form shown above. - * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable - * @return string Code to access variable - */ - private function generate_block_data_ref($blockname, $include_last_iterator, $defop = false) - { - // Get an array of the blocks involved. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - // DEFINE is not an element of any referenced variable, we must use _tpldata to access it - if ($defop) - { - $varref = '$_tpldata[\'DEFINE\']'; - // Build up the string with everything but the last child. - for ($i = 0; $i < $blockcount; $i++) - { - $varref .= "['" . $blocks[$i] . "'][\$_" . $blocks[$i] . '_i]'; - } - // Add the block reference for the last child. - $varref .= "['" . $blocks[$blockcount] . "']"; - // Add the iterator for the last child if requried. - if ($include_last_iterator) - { - $varref .= '[$_' . $blocks[$blockcount] . '_i]'; - } - return $varref; - } - else if ($include_last_iterator) - { - return '$_'. $blocks[$blockcount] . '_val'; - } - else - { - return '$_'. $blocks[$blockcount - 1] . '_val[\''. $blocks[$blockcount]. '\']'; - } - } -} - -stream_filter_register('phpbb_template', 'phpbb_template_filter'); - -/** -* Extension of template class - Functions needed for compiling templates only. -* -* psoTFX, phpBB Development Team - Completion of file caching, decompilation -* routines and implementation of conditionals/keywords and associated changes -* -* The interface was inspired by PHPLib templates, and the template file (formats are -* quite similar) -* -* The keyword/conditional implementation is currently based on sections of code from -* the Smarty templating engine (c) 2001 ispi of Lincoln, Inc. which is released -* (on its own and in whole) under the LGPL. Section 3 of the LGPL states that any code -* derived from an LGPL application may be relicenced under the GPL, this applies -* to this source -* -* DEFINE directive inspired by a request by Cyberalien -* -* @package phpBB3 -* @uses template_filter As a PHP stream filter to perform compilation of templates -*/ -class phpbb_template_compile -{ - /** - * Compiles template in $source_file and writes compiled template to - * cache directory - * @access public - * @param string $handle Template handle to compile - * @param string $source_file Source template file - * @return bool Return true on success otherwise false - */ - public function compile_file_to_file($source_file, $compiled_file) - { - $source_handle = @fopen($source_file, 'rb'); - $destination_handle = @fopen($compiled_file, 'wb'); - - if (!$source_handle || !$destination_handle) - { - return false; - } - - @flock($destination_handle, LOCK_EX); - - $this->compile_stream_to_stream($source_handle, $destination_handle); - - @fclose($source_handle); - @flock($destination_handle, LOCK_UN); - @fclose($destination_handle); - - phpbb_chmod($compiled_file, CHMOD_READ | CHMOD_WRITE); - - clearstatcache(); - - return true; - } - - /** - * Compiles a template located at $source_file. - * Returns PHP source suitable for eval(). - * @access public - * @param string $source_file Source template file - * @return string|bool Return compiled code on successful compilation otherwise false - */ - public function compile_file($source_file) - { - $source_handle = @fopen($source_file, 'rb'); - $destination_handle = @fopen('php://temp' ,'r+b'); - - if (!$source_handle || !$destination_handle) - { - return false; - } - - $this->compile_stream_to_stream($source_handle, $destination_handle); - - @fclose($source_handle); - - rewind($destination_handle); - $contents = stream_get_contents($destination_handle); - @fclose($dest_handle); - - return $contents; - } - - /** - * Compiles contents of $source_stream into $dest_stream. - * - * A stream filter is appended to $source_stream as part of the - * process. - * - * @access private - * @param resource $source_stream Source stream - * @param resource $dest_stream Destination stream - * @return void - */ - private function compile_stream_to_stream($source_stream, $dest_stream) - { - stream_filter_append($source_stream, 'phpbb_template'); - stream_copy_to_stream($source_stream, $dest_stream); - } -} diff --git a/phpBB/includes/template_context.php b/phpBB/includes/template_context.php deleted file mode 100644 index df5c4afb24..0000000000 --- a/phpBB/includes/template_context.php +++ /dev/null @@ -1,320 +0,0 @@ - $this->_tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value - * if it's a root-level variable, it'll be like this: - * --> $this->_tpldata[.][0][varname] == value - * @var array - */ - private $_tpldata = array('.' => array(0 => array())); - - /** - * @var array Reference to template->_tpldata['.'][0] - */ - private $_rootref; - - public function __construct() - { - $this->clear(); - } - - /** - * Clears template data set. - * @access public - */ - public function clear() - { - $this->_tpldata = array('.' => array(0 => array())); - $this->_rootref = &$this->_tpldata['.'][0]; - } - - /** - * Assign a single variable to a single key - * @access public - * @param string $varname Variable name - * @param string $varval Value to assign to variable - */ - public function assign_var($varname, $varval) - { - $this->_rootref[$varname] = $varval; - - return true; - } - - public function get_data_ref() - { - return $this->_tpldata; - } - - public function get_root_ref() - { - return $this->_rootref; - } - - /** - * Assign key variable pairs from an array to a specified block - * @access public - * @param string $blockname Name of block to assign $vararray to - * @param array $vararray A hash of variable name => value pairs - */ - public function assign_block_vars($blockname, array $vararray) - { - if (strpos($blockname, '.') !== false) - { - // Nested block. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - $str = &$this->_tpldata; - for ($i = 0; $i < $blockcount; $i++) - { - $str = &$str[$blocks[$i]]; - $str = &$str[sizeof($str) - 1]; - } - - $s_row_count = isset($str[$blocks[$blockcount]]) ? sizeof($str[$blocks[$blockcount]]) : 0; - $vararray['S_ROW_COUNT'] = $s_row_count; - - // Assign S_FIRST_ROW - if (!$s_row_count) - { - $vararray['S_FIRST_ROW'] = true; - } - - // Now the tricky part, we always assign S_LAST_ROW and remove the entry before - // This is much more clever than going through the complete template data on display (phew) - $vararray['S_LAST_ROW'] = true; - if ($s_row_count > 0) - { - unset($str[$blocks[$blockcount]][($s_row_count - 1)]['S_LAST_ROW']); - } - - // Now we add the block that we're actually assigning to. - // We're adding a new iteration to this block with the given - // variable assignments. - $str[$blocks[$blockcount]][] = $vararray; - } - else - { - // Top-level block. - $s_row_count = (isset($this->_tpldata[$blockname])) ? sizeof($this->_tpldata[$blockname]) : 0; - $vararray['S_ROW_COUNT'] = $s_row_count; - - // Assign S_FIRST_ROW - if (!$s_row_count) - { - $vararray['S_FIRST_ROW'] = true; - } - - // We always assign S_LAST_ROW and remove the entry before - $vararray['S_LAST_ROW'] = true; - if ($s_row_count > 0) - { - unset($this->_tpldata[$blockname][($s_row_count - 1)]['S_LAST_ROW']); - } - - // Add a new iteration to this block with the variable assignments we were given. - $this->_tpldata[$blockname][] = $vararray; - } - - return true; - } - - /** - * Change already assigned key variable pair (one-dimensional - single loop entry) - * - * An example of how to use this function: - * {@example alter_block_array.php} - * - * @param string $blockname the blockname, for example 'loop' - * @param array $vararray the var array to insert/add or merge - * @param mixed $key Key to search for - * - * array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position] - * - * int: Position [the position to change or insert at directly given] - * - * If key is false the position is set to 0 - * If key is true the position is set to the last entry - * - * @param string $mode Mode to execute (valid modes are 'insert' and 'change') - * - * If insert, the vararray is inserted at the given position (position counting from zero). - * If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value). - * - * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) - * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) - * - * @return bool false on error, true on success - * @access public - */ - public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') - { - if (strpos($blockname, '.') !== false) - { - // Nested block. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - $block = &$this->_tpldata; - for ($i = 0; $i < $blockcount; $i++) - { - if (($pos = strpos($blocks[$i], '[')) !== false) - { - $name = substr($blocks[$i], 0, $pos); - - if (strpos($blocks[$i], '[]') === $pos) - { - $index = sizeof($block[$name]) - 1; - } - else - { - $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1); - } - } - else - { - $name = $blocks[$i]; - $index = sizeof($block[$name]) - 1; - } - $block = &$block[$name]; - $block = &$block[$index]; - } - - $block = &$block[$blocks[$i]]; // Traverse the last block - } - else - { - // Top-level block. - $block = &$this->_tpldata[$blockname]; - } - - // Change key to zero (change first position) if false and to last position if true - if ($key === false || $key === true) - { - $key = ($key === false) ? 0 : sizeof($block); - } - - // Get correct position if array given - if (is_array($key)) - { - // Search array to get correct position - list($search_key, $search_value) = @each($key); - - $key = NULL; - foreach ($block as $i => $val_ary) - { - if ($val_ary[$search_key] === $search_value) - { - $key = $i; - break; - } - } - - // key/value pair not found - if ($key === NULL) - { - return false; - } - } - - // Insert Block - if ($mode == 'insert') - { - // Make sure we are not exceeding the last iteration - if ($key >= sizeof($this->_tpldata[$blockname])) - { - $key = sizeof($this->_tpldata[$blockname]); - unset($this->_tpldata[$blockname][($key - 1)]['S_LAST_ROW']); - $vararray['S_LAST_ROW'] = true; - } - else if ($key === 0) - { - unset($this->_tpldata[$blockname][0]['S_FIRST_ROW']); - $vararray['S_FIRST_ROW'] = true; - } - - // Re-position template blocks - for ($i = sizeof($block); $i > $key; $i--) - { - $block[$i] = $block[$i-1]; - } - - // Insert vararray at given position - $block[$key] = $vararray; - - return true; - } - - // Which block to change? - if ($mode == 'change') - { - if ($key == sizeof($block)) - { - $key--; - } - - $block[$key] = array_merge($block[$key], $vararray); - - return true; - } - - return false; - } - - /** - * Reset/empty complete block - * @access public - * @param string $blockname Name of block to destroy - */ - public function destroy_block_vars($blockname) - { - if (strpos($blockname, '.') !== false) - { - // Nested block. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - $str = &$this->_tpldata; - for ($i = 0; $i < $blockcount; $i++) - { - $str = &$str[$blocks[$i]]; - $str = &$str[sizeof($str) - 1]; - } - - unset($str[$blocks[$blockcount]]); - } - else - { - // Top-level block. - unset($this->_tpldata[$blockname]); - } - - return true; - } -} diff --git a/phpBB/includes/template_renderer.php b/phpBB/includes/template_renderer.php deleted file mode 100644 index 0af2d94bb6..0000000000 --- a/phpBB/includes/template_renderer.php +++ /dev/null @@ -1,35 +0,0 @@ -code = $code; - $this->template = $template; - } - - /** - * Displays the template managed by this renderer by eval'ing php code - * of the template. - * @param phpbb_template_context $context Template context to use - * @param array $lang Language entries to use - */ - public function render($context, $lang) - { - $_template = &$this->template; - $_tpldata = &$context->get_data_ref(); - $_rootref = &$context->get_root_ref(); - $_lang = &$lang; - - eval($this->code); - } -} diff --git a/phpBB/includes/template_renderer_include.php b/phpBB/includes/template_renderer_include.php deleted file mode 100644 index aca3a3634d..0000000000 --- a/phpBB/includes/template_renderer_include.php +++ /dev/null @@ -1,60 +0,0 @@ -path = $path; - $this->template = $template; - } - - /** - * Displays the template managed by this renderer by including - * the php file containing the template. - * @param phpbb_template_context $context Template context to use - * @param array $lang Language entries to use - */ - public function render($context, $lang) - { - $_template = &$this->template; - $_tpldata = &$context->get_data_ref(); - $_rootref = &$context->get_root_ref(); - $_lang = &$lang; - - include($this->path); - } -} -- cgit v1.2.1 From 2f458352b8660386021af6868dcec75943bb8483 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 8 May 2011 15:24:03 +0200 Subject: [ticket/10173] Use a loop var for the birthdays list to allow proper templating Introduce a loop variable for the list of birthdays to allow templates to handle how the list is displayed. We keep the old BIRTHDAY_LIST variable that contains the precompiled list around for backward compatibility. PHPBB3-10173 --- phpBB/index.php | 14 +++++++++++--- phpBB/styles/prosilver/template/index_body.html | 4 ++-- phpBB/styles/subsilver2/template/index_body.html | 2 +- 3 files changed, 14 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/index.php b/phpBB/index.php index 0830dd0686..e5dceeacf2 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -96,12 +96,20 @@ if ($config['load_birthdays'] && $config['allow_birthdays']) while ($row = $db->sql_fetchrow($result)) { - $birthday_list .= (($birthday_list != '') ? ', ' : '') . get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']); + $birthday_username = get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']); + $birthday_list .= (($birthday_list != '') ? ', ' : '') . $birthday_username; + $birthday_year = (int) substr($row['user_birthday'], -4); + $birthday_age = $now['year'] - $birthday_year; - if ($age = (int) substr($row['user_birthday'], -4)) + if ($birthday_year) { - $birthday_list .= ' (' . ($now['year'] - $age) . ')'; + $birthday_list .= ' (' . $birthday_age . ')'; } + + $template->assign_block_vars('birthdays', array( + 'USERNAME' => $birthday_username, + 'AGE' => ($birthday_year) ? $birthday_age : '', + )); } $db->sql_freeresult($result); } diff --git a/phpBB/styles/prosilver/template/index_body.html b/phpBB/styles/prosilver/template/index_body.html index 539c851d1d..b183cf4372 100644 --- a/phpBB/styles/prosilver/template/index_body.html +++ b/phpBB/styles/prosilver/template/index_body.html @@ -35,9 +35,9 @@
    {L_LEGEND}: {LEGEND}

    - +

    {L_BIRTHDAYS}

    -

    {L_CONGRATULATIONS}: {BIRTHDAY_LIST}{L_NO_BIRTHDAYS}

    +

    {L_CONGRATULATIONS}: {birthdays.USERNAME} ({birthdays.AGE}), {L_NO_BIRTHDAYS}

    diff --git a/phpBB/styles/subsilver2/template/index_body.html b/phpBB/styles/subsilver2/template/index_body.html index e52e357564..100199c209 100644 --- a/phpBB/styles/subsilver2/template/index_body.html +++ b/phpBB/styles/subsilver2/template/index_body.html @@ -50,7 +50,7 @@ {L_BIRTHDAYS} -

    {L_CONGRATULATIONS}: {BIRTHDAY_LIST}{L_NO_BIRTHDAYS}

    +

    {L_CONGRATULATIONS}: {birthdays.USERNAME} ({birthdays.AGE}), {L_NO_BIRTHDAYS}

    -- cgit v1.2.1 From 6a7d7285fbee7fd7838f1bf45e631cb3307ac514 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 8 May 2011 16:41:55 +0200 Subject: [ticket/10173] Use an array for the legacy birthday list as per rxu. PHPBB3-10173 --- phpBB/index.php | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/index.php b/phpBB/index.php index e5dceeacf2..62c229f0b5 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -81,7 +81,7 @@ $db->sql_freeresult($result); $legend = implode(', ', $legend); // Generate birthday list if required ... -$birthday_list = ''; +$birthday_list = array(); if ($config['load_birthdays'] && $config['allow_birthdays']) { $now = getdate(time() + $user->timezone + $user->dst - date('Z')); @@ -96,20 +96,17 @@ if ($config['load_birthdays'] && $config['allow_birthdays']) while ($row = $db->sql_fetchrow($result)) { - $birthday_username = get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']); - $birthday_list .= (($birthday_list != '') ? ', ' : '') . $birthday_username; - $birthday_year = (int) substr($row['user_birthday'], -4); - $birthday_age = $now['year'] - $birthday_year; - - if ($birthday_year) - { - $birthday_list .= ' (' . $birthday_age . ')'; - } + $birthday_username = get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']); + $birthday_year = (int) substr($row['user_birthday'], -4); + $birthday_age = $now['year'] - $birthday_year; $template->assign_block_vars('birthdays', array( 'USERNAME' => $birthday_username, 'AGE' => ($birthday_year) ? $birthday_age : '', )); + + // For 3.0 compatibility + $birthday_list[] = $birthday_username . (($birthday_year) ? ' (' . $birthday_age . ')' : ''); } $db->sql_freeresult($result); } @@ -122,7 +119,7 @@ $template->assign_vars(array( 'NEWEST_USER' => sprintf($user->lang['NEWEST_USER'], get_username_string('full', $config['newest_user_id'], $config['newest_username'], $config['newest_user_colour'])), 'LEGEND' => $legend, - 'BIRTHDAY_LIST' => $birthday_list, + 'BIRTHDAY_LIST' => (empty($birthday_list)) ? '' : implode(', ', $birthday_list), 'FORUM_IMG' => $user->img('forum_read', 'NO_UNREAD_POSTS'), 'FORUM_UNREAD_IMG' => $user->img('forum_unread', 'UNREAD_POSTS'), -- cgit v1.2.1 From a072526890a5ebbe363f57f31f9c516a9a416883 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 8 May 2011 21:31:19 +0200 Subject: [ticket/10173] Only calculate age if year is not false as per nn-. PHPBB3-10173 --- phpBB/index.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/index.php b/phpBB/index.php index 62c229f0b5..5d62cb1071 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -98,15 +98,15 @@ if ($config['load_birthdays'] && $config['allow_birthdays']) { $birthday_username = get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']); $birthday_year = (int) substr($row['user_birthday'], -4); - $birthday_age = $now['year'] - $birthday_year; + $birthday_age = ($birthday_year) ? $now['year'] - $birthday_year : ''; $template->assign_block_vars('birthdays', array( 'USERNAME' => $birthday_username, - 'AGE' => ($birthday_year) ? $birthday_age : '', + 'AGE' => $birthday_age, )); // For 3.0 compatibility - $birthday_list[] = $birthday_username . (($birthday_year) ? ' (' . $birthday_age . ')' : ''); + $birthday_list[] = $birthday_username . (($birthday_age) ? ' (' . $birthday_age . ')' : ''); } $db->sql_freeresult($result); } -- cgit v1.2.1 From 437013194a516932b6f85ba4ee355dcf5836ef19 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 9 May 2011 12:46:34 +0200 Subject: [ticket/10158] Add return-link to folder, when the user replied from a folder. PHPBB3-10158 --- phpBB/includes/ucp/ucp_pm.php | 4 ++-- phpBB/includes/ucp/ucp_pm_compose.php | 20 +++++++++++++++----- 2 files changed, 17 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_pm.php b/phpBB/includes/ucp/ucp_pm.php index e1c51170db..c675928a5b 100644 --- a/phpBB/includes/ucp/ucp_pm.php +++ b/phpBB/includes/ucp/ucp_pm.php @@ -115,7 +115,7 @@ class ucp_pm case 'compose': $action = request_var('action', 'post'); - get_folder($user->data['user_id']); + $user_folders = get_folder($user->data['user_id']); if (!$auth->acl_get('u_sendpm')) { @@ -130,7 +130,7 @@ class ucp_pm } include($phpbb_root_path . 'includes/ucp/ucp_pm_compose.' . $phpEx); - compose_pm($id, $mode, $action); + compose_pm($id, $mode, $action, $user_folders); $tpl_file = 'posting_body'; break; diff --git a/phpBB/includes/ucp/ucp_pm_compose.php b/phpBB/includes/ucp/ucp_pm_compose.php index d7fe0af361..6ea702570e 100644 --- a/phpBB/includes/ucp/ucp_pm_compose.php +++ b/phpBB/includes/ucp/ucp_pm_compose.php @@ -20,7 +20,7 @@ if (!defined('IN_PHPBB')) * Compose private message * Called from ucp_pm with mode == 'compose' */ -function compose_pm($id, $mode, $action) +function compose_pm($id, $mode, $action, $user_folders = array()) { global $template, $db, $auth, $user; global $phpbb_root_path, $phpEx, $config; @@ -398,7 +398,7 @@ function compose_pm($id, $mode, $action) unset($message_text); $s_action = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=$id&mode=$mode&action=$action", true, $user->session_id); - $s_action .= ($msg_id) ? "&p=$msg_id" : ''; + $s_action .= (($folder_id) ? "&f=$folder_id" : '') . (($msg_id) ? "&p=$msg_id" : ''); // Delete triggered ? if ($action == 'delete') @@ -741,13 +741,23 @@ function compose_pm($id, $mode, $action) $msg_id = submit_pm($action, $subject, $pm_data); $return_message_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&mode=view&p=' . $msg_id); - $return_folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'); + $inbox_folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'); $outbox_folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=outbox'); - meta_refresh(3, $return_message_url); + + $folder_return_message = ''; + $return_message_url = $inbox_folder_url; + if ($folder_id && isset($user_folders[$folder_id])) + { + $return_message_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=' . $folder_id); + $folder_return_message = '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user_folders[$folder_id]['folder_name']); + } $message = $user->lang['MESSAGE_STORED'] . '

    ' . sprintf($user->lang['VIEW_PRIVATE_MESSAGE'], '', ''); - $message .= '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_INBOX']); + $message .= $folder_return_message; + $message .= '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_INBOX']); $message .= '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_OUTBOX']); + + meta_refresh(3, $return_message_url); trigger_error($message); } -- cgit v1.2.1 From 2d35e6044300293916f26df4495af542b24c63a8 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 9 May 2011 22:53:08 +0200 Subject: [ticket/10154] Move "copy permissions from" to below "parent" on forum creation Move "copy permissions from" to below "parent forum" in forum creation form. PHPBB3-10154 --- phpBB/adm/style/acp_forums.html | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_forums.html b/phpBB/adm/style/acp_forums.html index d27cea28f7..9201736085 100644 --- a/phpBB/adm/style/acp_forums.html +++ b/phpBB/adm/style/acp_forums.html @@ -140,6 +140,12 @@
    + +
    +

    {L_COPY_PERMISSIONS_EXPLAIN}
    +
    +
    +
    @@ -176,12 +182,6 @@
    - -
    -

    {L_COPY_PERMISSIONS_EXPLAIN}
    -
    -
    -
    -- cgit v1.2.1 From 4038091382fb9d5e429c1eaee79413f077a54d2d Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 9 May 2011 23:11:56 +0200 Subject: [ticket/9999] Remove broken and unused L_FORUM_FOLDER_ALT variable. L_FORUM_FOLDER_ALT was supposed to be a language variable but the language variable is never looked up but directly passed as L_FORUM_FOLDER_ALT instead. Also, the expected functionality is correctly implemented by FORUM_FOLDER_IMG_ALT. PHPBB3-9999 --- phpBB/includes/functions_display.php | 1 - 1 file changed, 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index acaef49fe8..d7422aa2c9 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -477,7 +477,6 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod 'SUBFORUMS' => $s_subforums_list, 'L_SUBFORUM_STR' => $l_subforums, - 'L_FORUM_FOLDER_ALT' => $folder_alt, 'L_MODERATOR_STR' => $l_moderator, 'U_UNAPPROVED_TOPICS' => ($row['forum_id_unapproved_topics']) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue&mode=unapproved_topics&f=' . $row['forum_id_unapproved_topics']) : '', -- cgit v1.2.1 From ccb78f74a4e3e86cefa2e36b64ca0e55451b7416 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 9 May 2011 23:20:17 +0200 Subject: [ticket/9999] SEARCH_USER_POSTS is also used on viewtopic. Move to common. PHPBB3-9999 --- phpBB/language/en/common.php | 1 + phpBB/language/en/memberlist.php | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 731f674120..e74c9ea0e4 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -530,6 +530,7 @@ $lang = array_merge($lang, array( 'SEARCH_TOPIC' => 'Search this topic…', 'SEARCH_UNANSWERED' => 'View unanswered posts', 'SEARCH_UNREAD' => 'View unread posts', + 'SEARCH_USER_POSTS' => 'Search user’s posts', 'SECONDS' => 'Seconds', 'SELECT' => 'Select', 'SELECT_ALL_CODE' => 'Select all', diff --git a/phpBB/language/en/memberlist.php b/phpBB/language/en/memberlist.php index 213f766610..e71f9d6565 100644 --- a/phpBB/language/en/memberlist.php +++ b/phpBB/language/en/memberlist.php @@ -116,7 +116,6 @@ $lang = array_merge($lang, array( 'REMOVE_FOE' => 'Remove foe', 'REMOVE_FRIEND' => 'Remove friend', - 'SEARCH_USER_POSTS' => 'Search user’s posts', 'SELECT_MARKED' => 'Select marked', 'SELECT_SORT_METHOD' => 'Select sort method', 'SEND_AIM_MESSAGE' => 'Send AIM message', -- cgit v1.2.1 From ca981b6d1819560f7722773796ac33407f18cde8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Fr=C3=A8rejean?= Date: Tue, 10 May 2011 23:31:41 +0200 Subject: [ticket/10170] reCaptcha API has been moved. The reCaptcha API has been moved from recaptcha.net to google.com/recaptcha. PHPBB3-10170 --- phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php b/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php index ea171dbe2c..f3bc1a859f 100644 --- a/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php +++ b/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php @@ -27,9 +27,9 @@ if (!class_exists('phpbb_default_captcha')) */ class phpbb_recaptcha extends phpbb_default_captcha { - var $recaptcha_server = 'http://api.recaptcha.net'; - var $recaptcha_server_secure = 'https://api-secure.recaptcha.net'; // class constants :( - var $recaptcha_verify_server = 'api-verify.recaptcha.net'; + var $recaptcha_server = 'http://www.google.com/recaptcha/api'; + var $recaptcha_server_secure = 'https://www.google.com/recaptcha/api'; // class constants :( + var $recaptcha_verify_server = 'http://www.google.com/recaptcha/api/verify'; var $challenge; var $response; -- cgit v1.2.1 From 46fcf9c8e4d1c3c867b7013a25f915af2b531d1b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Fr=C3=A8rejean?= Date: Tue, 10 May 2011 23:34:38 +0200 Subject: [ticket/10170] Update language entries Update the language entries to reflect the reCaptcha API change. PHPBB3-10170 --- phpBB/language/en/captcha_recaptcha.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/captcha_recaptcha.php b/phpBB/language/en/captcha_recaptcha.php index 463bfffe0d..fd7e3853b7 100644 --- a/phpBB/language/en/captcha_recaptcha.php +++ b/phpBB/language/en/captcha_recaptcha.php @@ -37,14 +37,14 @@ if (empty($lang) || !is_array($lang)) $lang = array_merge($lang, array( 'RECAPTCHA_LANG' => 'en', - 'RECAPTCHA_NOT_AVAILABLE' => 'In order to use reCaptcha, you must create an account on reCaptcha.net.', + 'RECAPTCHA_NOT_AVAILABLE' => 'In order to use reCaptcha, you must create an account on google.com/recaptcha.', 'CAPTCHA_RECAPTCHA' => 'reCaptcha', 'RECAPTCHA_INCORRECT' => 'The visual confirmation code you submitted was incorrect', 'RECAPTCHA_PUBLIC' => 'Public reCaptcha key', - 'RECAPTCHA_PUBLIC_EXPLAIN' => 'Your public reCaptcha key. Keys can be obtained on reCaptcha.net.', + 'RECAPTCHA_PUBLIC_EXPLAIN' => 'Your public reCaptcha key. Keys can be obtained on google.com/recaptcha.', 'RECAPTCHA_PRIVATE' => 'Private reCaptcha key', - 'RECAPTCHA_PRIVATE_EXPLAIN' => 'Your private reCaptcha key. Keys can be obtained on reCaptcha.net.', + 'RECAPTCHA_PRIVATE_EXPLAIN' => 'Your private reCaptcha key. Keys can be obtained on google.com/recaptcha.', 'RECAPTCHA_EXPLAIN' => 'In an effort to prevent automatic submissions, we require that you enter both of the words displayed into the text field underneath.', )); -- cgit v1.2.1 From 2c0c8a580f23225d6757ba49c70c01b29447fb0a Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 11 May 2011 03:14:14 +0200 Subject: [ticket/10170] Include www in hostname in language strings. PHPBB3-10170 --- phpBB/language/en/captcha_recaptcha.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/captcha_recaptcha.php b/phpBB/language/en/captcha_recaptcha.php index fd7e3853b7..9b2fb2049d 100644 --- a/phpBB/language/en/captcha_recaptcha.php +++ b/phpBB/language/en/captcha_recaptcha.php @@ -37,14 +37,14 @@ if (empty($lang) || !is_array($lang)) $lang = array_merge($lang, array( 'RECAPTCHA_LANG' => 'en', - 'RECAPTCHA_NOT_AVAILABLE' => 'In order to use reCaptcha, you must create an account on google.com/recaptcha.', + 'RECAPTCHA_NOT_AVAILABLE' => 'In order to use reCaptcha, you must create an account on www.google.com/recaptcha.', 'CAPTCHA_RECAPTCHA' => 'reCaptcha', 'RECAPTCHA_INCORRECT' => 'The visual confirmation code you submitted was incorrect', 'RECAPTCHA_PUBLIC' => 'Public reCaptcha key', - 'RECAPTCHA_PUBLIC_EXPLAIN' => 'Your public reCaptcha key. Keys can be obtained on google.com/recaptcha.', + 'RECAPTCHA_PUBLIC_EXPLAIN' => 'Your public reCaptcha key. Keys can be obtained on www.google.com/recaptcha.', 'RECAPTCHA_PRIVATE' => 'Private reCaptcha key', - 'RECAPTCHA_PRIVATE_EXPLAIN' => 'Your private reCaptcha key. Keys can be obtained on google.com/recaptcha.', + 'RECAPTCHA_PRIVATE_EXPLAIN' => 'Your private reCaptcha key. Keys can be obtained on www.google.com/recaptcha.', 'RECAPTCHA_EXPLAIN' => 'In an effort to prevent automatic submissions, we require that you enter both of the words displayed into the text field underneath.', )); -- cgit v1.2.1 From eded608a53b3882a7a42bddf6b1c9f479c2b0304 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 11 May 2011 03:23:31 +0200 Subject: [ticket/10170] Fix broken recaptcha verification host. PHPBB3-10170 --- phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php b/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php index f3bc1a859f..0b0270f568 100644 --- a/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php +++ b/phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php @@ -29,7 +29,12 @@ class phpbb_recaptcha extends phpbb_default_captcha { var $recaptcha_server = 'http://www.google.com/recaptcha/api'; var $recaptcha_server_secure = 'https://www.google.com/recaptcha/api'; // class constants :( - var $recaptcha_verify_server = 'http://www.google.com/recaptcha/api/verify'; + + // We are opening a socket to port 80 of this host and send + // the POST request asking for verification to the path specified here. + var $recaptcha_verify_server = 'www.google.com'; + var $recaptcha_verify_path = '/recaptcha/api/verify'; + var $challenge; var $response; @@ -296,7 +301,7 @@ class phpbb_recaptcha extends phpbb_default_captcha return $user->lang['RECAPTCHA_INCORRECT']; } - $response = $this->_recaptcha_http_post($this->recaptcha_verify_server, '/verify', + $response = $this->_recaptcha_http_post($this->recaptcha_verify_server, $this->recaptcha_verify_path, array( 'privatekey' => $config['recaptcha_privkey'], 'remoteip' => $user->ip, -- cgit v1.2.1 From 5a4a1e3c25b0e10a3ce008dc2eded29decb0f469 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 11 May 2011 03:51:34 +0200 Subject: [ticket/10126] Use binary "and not" instead of binary "xor" in error_reporting. Make what we want to achieve clear by using "and not" instead of "xor". PHPBB3-10126 --- phpBB/common.php | 2 +- phpBB/download/file.php | 2 +- phpBB/install/database_update.php | 2 +- phpBB/install/index.php | 2 +- phpBB/style.php | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index ae174c8441..ceafdbd3bd 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -24,7 +24,7 @@ if (!defined('E_DEPRECATED')) { define('E_DEPRECATED', 8192); } -error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); +error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); /* * Remove variables created by register_globals from the global scope diff --git a/phpBB/download/file.php b/phpBB/download/file.php index e1ec835b9b..ed5c4f55b8 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -35,7 +35,7 @@ if (isset($_GET['avatar'])) { define('E_DEPRECATED', 8192); } - error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); + error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); require($phpbb_root_path . 'config.' . $phpEx); diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 01048520d2..3d32a82cc6 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -35,7 +35,7 @@ if (!defined('E_DEPRECATED')) { define('E_DEPRECATED', 8192); } -//error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); +//error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); error_reporting(E_ALL); @set_time_limit(0); diff --git a/phpBB/install/index.php b/phpBB/install/index.php index 49c99da0d7..bace22f177 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -23,7 +23,7 @@ if (!defined('E_DEPRECATED')) { define('E_DEPRECATED', 8192); } -error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); +error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); // @todo Review this test and see if we can find out what it is which prevents PHP 4.2.x from even displaying the page with requirements on it if (version_compare(PHP_VERSION, '4.3.3') < 0) diff --git a/phpBB/style.php b/phpBB/style.php index 8ca1751391..f3e1b4c89e 100644 --- a/phpBB/style.php +++ b/phpBB/style.php @@ -20,7 +20,7 @@ if (!defined('E_DEPRECATED')) { define('E_DEPRECATED', 8192); } -error_reporting(E_ALL ^ E_NOTICE ^ E_DEPRECATED); +error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); require($phpbb_root_path . 'config.' . $phpEx); -- cgit v1.2.1 From 6aa2f9e7422c41193294c871913867ee42dc34a0 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 11 May 2011 11:21:37 +0200 Subject: [ticket/10173] Use correct variable, checking for $birthday_year was correct. PHPBB3-10173 --- phpBB/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/index.php b/phpBB/index.php index 5d62cb1071..427377a2cd 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -106,7 +106,7 @@ if ($config['load_birthdays'] && $config['allow_birthdays']) )); // For 3.0 compatibility - $birthday_list[] = $birthday_username . (($birthday_age) ? ' (' . $birthday_age . ')' : ''); + $birthday_list[] = $birthday_username . (($birthday_year) ? ' (' . $birthday_age . ')' : ''); } $db->sql_freeresult($result); } -- cgit v1.2.1 From bfdb5c413deb15588c4e6d29e54cc42aae2ff5ae Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 11 May 2011 11:32:09 +0200 Subject: [ticket/10146] Fix Firebird DECIMAL precision issue on develop. PHPBB3-10146 --- phpBB/includes/db/firebird.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index 8868d4e317..8acc84b1c0 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -497,7 +497,8 @@ class dbal_firebird extends dbal */ function cast_expr_to_bigint($expression) { - return 'CAST(' . $expression . ' as DECIMAL(255, 0))'; + // Precision must be from 1 to 18 + return 'CAST(' . $expression . ' as DECIMAL(18, 0))'; } /** -- cgit v1.2.1 From f6fa52540c0fb20d79b4d59cb08c49484d9f3116 Mon Sep 17 00:00:00 2001 From: RMcGirr83 Date: Thu, 12 May 2011 09:45:09 -0400 Subject: [ticket/10186] UCP signature panel displays when not authed for signatures The signature panel link was displayed even when a user did not have the auths to create/edit their signature. Clicking on the link gave a trigger_error of "Not authorised to have a signature". Hide the link when user does not have permissions to edit their signature. PHPBB3-10186 --- phpBB/ucp.php | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'phpBB') diff --git a/phpBB/ucp.php b/phpBB/ucp.php index f5a2ec9648..8fa022668b 100644 --- a/phpBB/ucp.php +++ b/phpBB/ucp.php @@ -314,6 +314,12 @@ if (!$config['allow_topic_notify'] && !$config['allow_forum_notify']) $module->set_display('main', 'subscribed', false); } +// Do not display signature panel if not authed to do so +if (!$auth->acl_get('u_sig')) +{ + $module->set_display('profile', 'signature', false); +} + // Select the active module $module->set_active($id, $mode); -- cgit v1.2.1 From 0462ab3a4a5cea64699eaf4b2e9900e36d027e50 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Mon, 9 May 2011 22:00:38 -0400 Subject: [feature/template-engine] Add back IN_PHPBB preamble. PHPBB3-9726 --- phpBB/includes/template/compile.php | 21 ++++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php index 4132fb2e34..18a52e87a6 100644 --- a/phpBB/includes/template/compile.php +++ b/phpBB/includes/template/compile.php @@ -54,6 +54,7 @@ class phpbb_template_filter extends php_user_filter public function filter($in, $out, &$consumed, $closing) { $written = false; + $first = false; while ($bucket = stream_bucket_make_writeable($in)) { @@ -71,7 +72,13 @@ class phpbb_template_filter extends php_user_filter $written = true; - $bucket->data = $this->compile($data); + $data = $this->compile($data); + if (!$first) + { + $data = $this->prepend_preamble($data); + $first = false; + } + $bucket->data = $data; $bucket->datalen = strlen($bucket->data); stream_bucket_append($out, $bucket); } @@ -150,6 +157,18 @@ class phpbb_template_filter extends php_user_filter return $data; } + /** + * Prepends a preamble to compiled template. + * Currently preamble checks if IN_PHPBB is defined and calls exit() if it is not. + * @param string $data Compiled template chunk + * @return string Compiled template chunk with preamble prepended + */ + private function prepend_preamble($data) + { + $data = "' . $data); + return $data; + } + private function replace($matches) { if ($this->in_php && $matches[1] != 'ENDPHP') -- cgit v1.2.1 From df76885b11e56348f7fbe6274a6dbc727bb677ad Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Mon, 9 May 2011 22:01:07 -0400 Subject: [feature/template-engine] Reinstate phpbb_template#destroy function. PHPBB3-9726 --- phpBB/includes/template.php | 9 +++++++++ 1 file changed, 9 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index f27d0c7560..c03b87b13c 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -167,6 +167,15 @@ class phpbb_template return true; } + /** + * Clears all variables and blocks assigned to this template. + * @access public + */ + public function destroy() + { + $this->_context->clear(); + } + /** * Reset/empty complete block * @access public -- cgit v1.2.1 From 0ca7ad66dc8d9173394e0c5fb7e8393977de22ed Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Mon, 9 May 2011 22:01:54 -0400 Subject: [feature/template-engine] Refactor hook logic into a separate function. PHPBB3-9726 --- phpBB/includes/template.php | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index c03b87b13c..9a030ffd35 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -195,14 +195,10 @@ class phpbb_template */ public function display($handle, $include_once = true) { - global $phpbb_hook; - - if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once, $this)) + $result = $this->call_hook($handle, $include_once); + if ($result !== false) { - if ($phpbb_hook->hook_return(array(__CLASS__, __FUNCTION__))) - { - return $phpbb_hook->hook_return_result(array(__CLASS__, __FUNCTION__)); - } + return $result[0]; } /* @@ -228,6 +224,27 @@ class phpbb_template } } + /** + * Calls hook if any is defined. + * @param string $handle Template handle being displayed. + * @param bool $include_once Allow multiple inclusions + */ + private function call_hook($handle, $include_once) + { + global $phpbb_hook; + + if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $include_once, $this)) + { + if ($phpbb_hook->hook_return(array(__CLASS__, __FUNCTION__))) + { + $result = $phpbb_hook->hook_return_result(array(__CLASS__, __FUNCTION__)); + return array($result); + } + } + + return false; + } + /** * Obtains language array. * This is either lang property of global $user object, or if -- cgit v1.2.1 From 97d2a6527e75a5db9249a7c57360087cbaf424ac Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Mon, 9 May 2011 22:02:14 -0400 Subject: [feature/template-engine] Remove commented out error reporting logic. PHPBB3-9726 --- phpBB/includes/template.php | 10 ---------- 1 file changed, 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 9a030ffd35..a30690615d 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -201,16 +201,6 @@ class phpbb_template return $result[0]; } - /* - if (defined('IN_ERROR_HANDLER')) - { - if ((E_NOTICE & error_reporting()) == E_NOTICE) - { - error_reporting(error_reporting() ^ E_NOTICE); - } - } - */ - $renderer = $this->_tpl_load($handle); if ($renderer) -- cgit v1.2.1 From 169c4377e98826432411db773ebcbfa19bcdb439 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 11 May 2011 09:04:07 -0400 Subject: [feature/template-engine] Disposed of underscores in property names. PHPBB3-9726 --- phpBB/includes/template.php | 20 ++++++++--------- phpBB/includes/template/context.php | 44 ++++++++++++++++++------------------- 2 files changed, 32 insertions(+), 32 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index a30690615d..4dadfac571 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -37,7 +37,7 @@ class phpbb_template * Stores template data used during template rendering. * @access private */ - private $_context; + private $context; /** * @var string Root dir for template. @@ -95,7 +95,7 @@ class phpbb_template trigger_error('Template path could not be found: styles/' . $user->theme['template_path'] . '/template', E_USER_ERROR); } - $this->_context = new phpbb_template_context(); + $this->context = new phpbb_template_context(); return true; } @@ -135,7 +135,7 @@ class phpbb_template $this->orig_tpl_inherits_id = false; } - $this->_context = new phpbb_template_context(); + $this->context = new phpbb_template_context(); return true; } @@ -173,7 +173,7 @@ class phpbb_template */ public function destroy() { - $this->_context->clear(); + $this->context->clear(); } /** @@ -183,7 +183,7 @@ class phpbb_template */ public function destroy_block_vars($blockname) { - $this->_context->destroy_block_vars($blockname); + $this->context->destroy_block_vars($blockname); } /** @@ -205,7 +205,7 @@ class phpbb_template if ($renderer) { - $renderer->render($this->_context, $this->get_lang()); + $renderer->render($this->context, $this->get_lang()); return true; } else @@ -439,7 +439,7 @@ class phpbb_template */ public function assign_var($varname, $varval) { - $this->_context->assign_var($varname, $varval); + $this->context->assign_var($varname, $varval); } // Docstring is copied from phpbb_template_context method with the same name. @@ -451,7 +451,7 @@ class phpbb_template */ public function assign_block_vars($blockname, array $vararray) { - return $this->_context->assign_block_vars($blockname, $vararray); + return $this->context->assign_block_vars($blockname, $vararray); } // Docstring is copied from phpbb_template_context method with the same name. @@ -485,7 +485,7 @@ class phpbb_template */ public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') { - return $this->_context->alter_block_array($blockname, $vararray, $key, $mode); + return $this->context->alter_block_array($blockname, $vararray, $key, $mode); } /** @@ -509,7 +509,7 @@ class phpbb_template if ($renderer) { - $renderer->render($this->_context, $this->get_lang()); + $renderer->render($this->context, $this->get_lang()); } else { diff --git a/phpBB/includes/template/context.php b/phpBB/includes/template/context.php index df5c4afb24..c667282f7b 100644 --- a/phpBB/includes/template/context.php +++ b/phpBB/includes/template/context.php @@ -26,17 +26,17 @@ class phpbb_template_context /** * variable that holds all the data we'll be substituting into * the compiled templates. Takes form: - * --> $this->_tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value + * --> $this->tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value * if it's a root-level variable, it'll be like this: - * --> $this->_tpldata[.][0][varname] == value + * --> $this->tpldata[.][0][varname] == value * @var array */ - private $_tpldata = array('.' => array(0 => array())); + private $tpldata = array('.' => array(0 => array())); /** - * @var array Reference to template->_tpldata['.'][0] + * @var array Reference to template->tpldata['.'][0] */ - private $_rootref; + private $rootref; public function __construct() { @@ -49,8 +49,8 @@ class phpbb_template_context */ public function clear() { - $this->_tpldata = array('.' => array(0 => array())); - $this->_rootref = &$this->_tpldata['.'][0]; + $this->tpldata = array('.' => array(0 => array())); + $this->rootref = &$this->tpldata['.'][0]; } /** @@ -61,19 +61,19 @@ class phpbb_template_context */ public function assign_var($varname, $varval) { - $this->_rootref[$varname] = $varval; + $this->rootref[$varname] = $varval; return true; } public function get_data_ref() { - return $this->_tpldata; + return $this->tpldata; } public function get_root_ref() { - return $this->_rootref; + return $this->rootref; } /** @@ -90,7 +90,7 @@ class phpbb_template_context $blocks = explode('.', $blockname); $blockcount = sizeof($blocks) - 1; - $str = &$this->_tpldata; + $str = &$this->tpldata; for ($i = 0; $i < $blockcount; $i++) { $str = &$str[$blocks[$i]]; @@ -122,7 +122,7 @@ class phpbb_template_context else { // Top-level block. - $s_row_count = (isset($this->_tpldata[$blockname])) ? sizeof($this->_tpldata[$blockname]) : 0; + $s_row_count = (isset($this->tpldata[$blockname])) ? sizeof($this->tpldata[$blockname]) : 0; $vararray['S_ROW_COUNT'] = $s_row_count; // Assign S_FIRST_ROW @@ -135,11 +135,11 @@ class phpbb_template_context $vararray['S_LAST_ROW'] = true; if ($s_row_count > 0) { - unset($this->_tpldata[$blockname][($s_row_count - 1)]['S_LAST_ROW']); + unset($this->tpldata[$blockname][($s_row_count - 1)]['S_LAST_ROW']); } // Add a new iteration to this block with the variable assignments we were given. - $this->_tpldata[$blockname][] = $vararray; + $this->tpldata[$blockname][] = $vararray; } return true; @@ -181,7 +181,7 @@ class phpbb_template_context $blocks = explode('.', $blockname); $blockcount = sizeof($blocks) - 1; - $block = &$this->_tpldata; + $block = &$this->tpldata; for ($i = 0; $i < $blockcount; $i++) { if (($pos = strpos($blocks[$i], '[')) !== false) @@ -211,7 +211,7 @@ class phpbb_template_context else { // Top-level block. - $block = &$this->_tpldata[$blockname]; + $block = &$this->tpldata[$blockname]; } // Change key to zero (change first position) if false and to last position if true @@ -247,15 +247,15 @@ class phpbb_template_context if ($mode == 'insert') { // Make sure we are not exceeding the last iteration - if ($key >= sizeof($this->_tpldata[$blockname])) + if ($key >= sizeof($this->tpldata[$blockname])) { - $key = sizeof($this->_tpldata[$blockname]); - unset($this->_tpldata[$blockname][($key - 1)]['S_LAST_ROW']); + $key = sizeof($this->tpldata[$blockname]); + unset($this->tpldata[$blockname][($key - 1)]['S_LAST_ROW']); $vararray['S_LAST_ROW'] = true; } else if ($key === 0) { - unset($this->_tpldata[$blockname][0]['S_FIRST_ROW']); + unset($this->tpldata[$blockname][0]['S_FIRST_ROW']); $vararray['S_FIRST_ROW'] = true; } @@ -300,7 +300,7 @@ class phpbb_template_context $blocks = explode('.', $blockname); $blockcount = sizeof($blocks) - 1; - $str = &$this->_tpldata; + $str = &$this->tpldata; for ($i = 0; $i < $blockcount; $i++) { $str = &$str[$blocks[$i]]; @@ -312,7 +312,7 @@ class phpbb_template_context else { // Top-level block. - unset($this->_tpldata[$blockname]); + unset($this->tpldata[$blockname]); } return true; -- cgit v1.2.1 From 635460fa6dda70be8ae8b36c4c4be012c9c0a590 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 11 May 2011 09:12:52 -0400 Subject: [feature/template-engine] Fixed reference usage. Hopefully this is right, I have not checked it against the manual (assuming the manual even covers these things). PHPBB3-9726 --- phpBB/includes/template/context.php | 6 +++++- phpBB/includes/template/renderer_eval.php | 2 +- phpBB/includes/template/renderer_include.php | 2 +- 3 files changed, 7 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template/context.php b/phpBB/includes/template/context.php index c667282f7b..695f6e0ed3 100644 --- a/phpBB/includes/template/context.php +++ b/phpBB/includes/template/context.php @@ -68,11 +68,15 @@ class phpbb_template_context public function get_data_ref() { - return $this->tpldata; + // returning a reference directly is not + // something php is capable of doing + $ref = &$this->tpldata; + return $ref; } public function get_root_ref() { + // rootref is already a reference return $this->rootref; } diff --git a/phpBB/includes/template/renderer_eval.php b/phpBB/includes/template/renderer_eval.php index a3d7f88fa5..f3365ff8a7 100644 --- a/phpBB/includes/template/renderer_eval.php +++ b/phpBB/includes/template/renderer_eval.php @@ -50,7 +50,7 @@ class phpbb_template_renderer_eval implements phpbb_template_renderer */ public function render($context, $lang) { - $_template = &$this->template; + $_template = $this->template; $_tpldata = &$context->get_data_ref(); $_rootref = &$context->get_root_ref(); $_lang = &$lang; diff --git a/phpBB/includes/template/renderer_include.php b/phpBB/includes/template/renderer_include.php index aca3a3634d..28a8027df3 100644 --- a/phpBB/includes/template/renderer_include.php +++ b/phpBB/includes/template/renderer_include.php @@ -50,7 +50,7 @@ class phpbb_template_renderer_include implements phpbb_template_renderer */ public function render($context, $lang) { - $_template = &$this->template; + $_template = $this->template; $_tpldata = &$context->get_data_ref(); $_rootref = &$context->get_root_ref(); $_lang = &$lang; -- cgit v1.2.1 From d6f75e97d60981efd3ca2792e1a9d379d922631d Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 11 May 2011 09:17:20 -0400 Subject: [feature/template-engine] Added docblocks to get_*_ref in context. PHPBB3-9726 --- phpBB/includes/template/context.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/template/context.php b/phpBB/includes/template/context.php index 695f6e0ed3..73f1373655 100644 --- a/phpBB/includes/template/context.php +++ b/phpBB/includes/template/context.php @@ -66,6 +66,17 @@ class phpbb_template_context return true; } + /** + * Returns a reference to template data array. + * + * This function is public so that template renderer may invoke it. + * Users should alter template variables via functions in phpbb_template. + * + * Note: modifying returned array will affect data stored in the context. + * + * @access public + * @return array template data + */ public function get_data_ref() { // returning a reference directly is not @@ -74,6 +85,17 @@ class phpbb_template_context return $ref; } + /** + * Returns a reference to template root scope. + * + * This function is public so that template renderer may invoke it. + * Users should not need to invoke this function. + * + * Note: modifying returned array will affect data stored in the context. + * + * @access public + * @return array template data + */ public function get_root_ref() { // rootref is already a reference -- cgit v1.2.1 From 504acaba6b898de13d1c27dde567f1a01c0b0bd6 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 11 May 2011 09:23:16 -0400 Subject: [feature/template-engine] Deleted useless assignment. PHPBB3-9726 --- phpBB/includes/template.php | 1 - 1 file changed, 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 4dadfac571..85d378fa67 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -325,7 +325,6 @@ class phpbb_template $filename = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $phpEx; $this->files_template[$handle] = (isset($user->theme['template_id'])) ? $user->theme['template_id'] : 0; - $recompile = false; $recompile = (!file_exists($filename) || @filesize($filename) === 0 || ($config['load_tplcompile'] && @filemtime($filename) < @filemtime($this->files[$handle]))) ? true : false; if (!$recompile) -- cgit v1.2.1 From 77787718196c05b98efccec668c4a9762591398f Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 11 May 2011 19:25:07 -0400 Subject: [feature/template-engine] Move DEBUG_EXTRA check for $recompile up. PHPBB3-9726 --- phpBB/includes/template.php | 24 ++++++++++-------------- 1 file changed, 10 insertions(+), 14 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 85d378fa67..865535cfd5 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -325,24 +325,20 @@ class phpbb_template $filename = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $phpEx; $this->files_template[$handle] = (isset($user->theme['template_id'])) ? $user->theme['template_id'] : 0; - $recompile = (!file_exists($filename) || @filesize($filename) === 0 || ($config['load_tplcompile'] && @filemtime($filename) < @filemtime($this->files[$handle]))) ? true : false; + $recompile = defined('DEBUG_EXTRA') || + !file_exists($filename) || + @filesize($filename) === 0 || + ($config['load_tplcompile'] && @filemtime($filename) < @filemtime($this->files[$handle])); - if (!$recompile) + if (!$recompile && $config['load_tplcompile']) { - if (defined('DEBUG_EXTRA')) - { - $recompile = true; - } - else if ($config['load_tplcompile']) + // No way around it: we need to check inheritance here + if ($user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) { - // No way around it: we need to check inheritance here - if ($user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) - { - $this->files[$handle] = $this->files_inherit[$handle]; - $this->files_template[$handle] = $user->theme['template_inherits_id']; - } - $recompile = (@filemtime($filename) < @filemtime($this->files[$handle])) ? true : false; + $this->files[$handle] = $this->files_inherit[$handle]; + $this->files_template[$handle] = $user->theme['template_inherits_id']; } + $recompile = (@filemtime($filename) < @filemtime($this->files[$handle])) ? true : false; } // Recompile page if the original template is newer, otherwise load the compiled version -- cgit v1.2.1 From 7638bcb56011ebde65005a0ce1abfe7f4a6be4b7 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 11 May 2011 19:32:32 -0400 Subject: [feature/template-engine] Rename $filename to $compiled_path for clarity. PHPBB3-9726 --- phpBB/includes/template.php | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 865535cfd5..2ebbca3568 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -322,13 +322,13 @@ class phpbb_template // by other template class instances in between. $user->theme['template_inherits_id'] = $this->orig_tpl_inherits_id; - $filename = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $phpEx; + $compiled_path = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $phpEx; $this->files_template[$handle] = (isset($user->theme['template_id'])) ? $user->theme['template_id'] : 0; $recompile = defined('DEBUG_EXTRA') || - !file_exists($filename) || - @filesize($filename) === 0 || - ($config['load_tplcompile'] && @filemtime($filename) < @filemtime($this->files[$handle])); + !file_exists($compiled_path) || + @filesize($compiled_path) === 0 || + ($config['load_tplcompile'] && @filemtime($compiled_path) < @filemtime($this->files[$handle])); if (!$recompile && $config['load_tplcompile']) { @@ -338,13 +338,13 @@ class phpbb_template $this->files[$handle] = $this->files_inherit[$handle]; $this->files_template[$handle] = $user->theme['template_inherits_id']; } - $recompile = (@filemtime($filename) < @filemtime($this->files[$handle])) ? true : false; + $recompile = (@filemtime($compiled_path) < @filemtime($this->files[$handle])) ? true : false; } // Recompile page if the original template is newer, otherwise load the compiled version if (!$recompile) { - return new phpbb_template_renderer_include($filename, $this); + return new phpbb_template_renderer_include($compiled_path, $this); } // Inheritance - we point to another template file for this one. -- cgit v1.2.1 From d2daaf0317ac6bb224b8f93c1ac9578c9d570dc9 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 11 May 2011 19:38:04 -0400 Subject: [feature/template-engine] Try to handle failed template includes. PHPBB3-9726 --- phpBB/includes/template.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 2ebbca3568..90b8bb2a22 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -508,7 +508,8 @@ class phpbb_template } else { - // What should we do here? + // trigger_error cannot be used here, as the output already started + echo 'template->_tpl_include(): Failed including ' . htmlspecialchars($handle) . "\n"; } } @@ -525,7 +526,7 @@ class phpbb_template if (!file_exists($file)) { // trigger_error cannot be used here, as the output already started - echo 'template->_php_include(): File ' . htmlspecialchars($file) . ' does not exist or is empty'; + echo 'template->_php_include(): File ' . htmlspecialchars($file) . " does not exist\n"; return; } include($file); -- cgit v1.2.1 From 345852d240fe224fa825f90b0ef8a34398c91291 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 11 May 2011 19:43:08 -0400 Subject: [feature/template-engine] Clarify cache directory path for set_custom_template Even if the template may be outside of phpBB, phpBB's cache directory is still going to be used for storing compiled template code. PHPBB3-9726 --- phpBB/includes/template.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 90b8bb2a22..daff785dc0 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -101,7 +101,10 @@ class phpbb_template } /** - * Set custom template location (able to use directory outside of phpBB) + * Set custom template location (able to use directory outside of phpBB). + * + * Note: Templates are still compiled to phpBB's cache directory. + * * @access public * @param string $template_path Path to template directory * @param string $template_name Name of template -- cgit v1.2.1 From d2ac05aa74d3a1c9723be41a4c0ffe86542f223f Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 12 May 2011 18:08:36 -0400 Subject: [feature/template-engine] Replaced globals with dependency injection. PHPBB3-9726 --- phpBB/common.php | 3 +- phpBB/includes/functions_messenger.php | 4 +- phpBB/includes/template.php | 93 +++++++++++++++++++++------------- 3 files changed, 62 insertions(+), 38 deletions(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index a6ae7dff75..46f78a7926 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -209,7 +209,6 @@ $class_loader->set_cache($cache->get_driver()); $request = new phpbb_request(); $user = new user(); $auth = new auth(); -$template = new phpbb_template(); $db = new $sql_db(); // make sure request_var uses this request instance @@ -226,6 +225,8 @@ $config = new phpbb_config_db($db, $cache->get_driver(), CONFIG_TABLE); set_config(null, null, null, $config); set_config_count(null, null, null, $config); +$template = new phpbb_template($phpbb_root_path, $phpEx, $config, $user); + // Add own hook handler require($phpbb_root_path . 'includes/hooks/index.' . $phpEx); $phpbb_hook = new phpbb_hook(array('exit_handler', 'phpbb_user_session_handler', 'append_sid', array('template', 'display'))); diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index 8255d4b148..da7e7cb9e4 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -175,7 +175,7 @@ class messenger */ function template($template_file, $template_lang = '', $template_path = '') { - global $config, $phpbb_root_path, $user; + global $config, $phpbb_root_path, $phpEx, $user; if (!trim($template_file)) { @@ -193,7 +193,7 @@ class messenger // tpl_msg now holds a template object we can use to parse the template file if (!isset($this->tpl_msg[$template_lang . $template_file])) { - $this->tpl_msg[$template_lang . $template_file] = new phpbb_template(); + $this->tpl_msg[$template_lang . $template_file] = new phpbb_template($phpbb_root_path, $phpEx, $config, $user); $tpl = &$this->tpl_msg[$template_lang . $template_file]; $fallback_template_path = false; diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index daff785dc0..64a3b80f07 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -65,34 +65,67 @@ class phpbb_template public $orig_tpl_inherits_id; + /** + * @var string phpBB root path + */ + private $phpbb_root_path; + + /** + * @var phpEx PHP file extension + */ + private $phpEx; + + /** + * @var phpbb_config phpBB config instance + */ + private $config; + + /** + * @var user current user + */ + private $user; + + /** + * Constructor. + * + * @param string $phpbb_root_path phpBB root path + * @param user $user current user + */ + public function __construct($phpbb_root_path, $phpEx, $config, $user) + { + $this->phpbb_root_path = $phpbb_root_path; + $this->phpEx = $phpEx; + $this->config = $config; + $this->user = $user; + } + /** * Set template location * @access public */ public function set_template() { - global $phpbb_root_path, $user; - - if (file_exists($phpbb_root_path . 'styles/' . $user->theme['template_path'] . '/template')) + $template_path = $this->user->theme['template_path']; + if (file_exists($this->phpbb_root_path . 'styles/' . $template_path . '/template')) { - $this->root = $phpbb_root_path . 'styles/' . $user->theme['template_path'] . '/template'; - $this->cachepath = $phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $user->theme['template_path']) . '_'; + $this->root = $this->phpbb_root_path . 'styles/' . $template_path . '/template'; + $this->cachepath = $this->phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $template_path) . '_'; if ($this->orig_tpl_inherits_id === null) { - $this->orig_tpl_inherits_id = $user->theme['template_inherits_id']; + $this->orig_tpl_inherits_id = $this->user->theme['template_inherits_id']; } - $user->theme['template_inherits_id'] = $this->orig_tpl_inherits_id; + $this->user->theme['template_inherits_id'] = $this->orig_tpl_inherits_id; - if ($user->theme['template_inherits_id']) + if ($this->user->theme['template_inherits_id']) { - $this->inherit_root = $phpbb_root_path . 'styles/' . $user->theme['template_inherit_path'] . '/template'; + $this->inherit_root = $this->phpbb_root_path . 'styles/' . $this->user->theme['template_inherit_path'] . '/template'; } } else { - trigger_error('Template path could not be found: styles/' . $user->theme['template_path'] . '/template', E_USER_ERROR); + trigger_error('Template path could not be found: styles/' . $template_path . '/template', E_USER_ERROR); } $this->context = new phpbb_template_context(); @@ -112,8 +145,6 @@ class phpbb_template */ public function set_custom_template($template_path, $template_name, $fallback_template_path = false) { - global $phpbb_root_path, $user; - // Make sure $template_path has no ending slash if (substr($template_path, -1) == '/') { @@ -121,7 +152,7 @@ class phpbb_template } $this->root = $template_path; - $this->cachepath = $phpbb_root_path . 'cache/ctpl_' . str_replace('_', '-', $template_name) . '_'; + $this->cachepath = $this->phpbb_root_path . 'cache/ctpl_' . str_replace('_', '-', $template_name) . '_'; if ($fallback_template_path !== false) { @@ -240,17 +271,15 @@ class phpbb_template /** * Obtains language array. - * This is either lang property of global $user object, or if + * This is either lang property of $user property, or if * it is not set an empty array. * @return array language entries */ public function get_lang() { - global $user; - - if (isset($user->lang)) + if (isset($this->user->lang)) { - $lang = $user->lang; + $lang = $this->user->lang; } else { @@ -313,8 +342,6 @@ class phpbb_template */ private function _tpl_load($handle) { - global $user, $phpEx, $config; - if (!isset($this->filename[$handle])) { trigger_error("template->_tpl_load(): No file specified for handle $handle", E_USER_ERROR); @@ -323,23 +350,23 @@ class phpbb_template // reload this setting to have the values they had when this object was initialised // using set_template or set_custom_template, they might otherwise have been overwritten // by other template class instances in between. - $user->theme['template_inherits_id'] = $this->orig_tpl_inherits_id; + $this->user->theme['template_inherits_id'] = $this->orig_tpl_inherits_id; - $compiled_path = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $phpEx; - $this->files_template[$handle] = (isset($user->theme['template_id'])) ? $user->theme['template_id'] : 0; + $compiled_path = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $this->phpEx; + $this->files_template[$handle] = (isset($this->user->theme['template_id'])) ? $this->user->theme['template_id'] : 0; $recompile = defined('DEBUG_EXTRA') || !file_exists($compiled_path) || @filesize($compiled_path) === 0 || - ($config['load_tplcompile'] && @filemtime($compiled_path) < @filemtime($this->files[$handle])); + ($this->config['load_tplcompile'] && @filemtime($compiled_path) < @filemtime($this->files[$handle])); - if (!$recompile && $config['load_tplcompile']) + if (!$recompile && $this->config['load_tplcompile']) { // No way around it: we need to check inheritance here - if ($user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) + if ($this->user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) { $this->files[$handle] = $this->files_inherit[$handle]; - $this->files_template[$handle] = $user->theme['template_inherits_id']; + $this->files_template[$handle] = $this->user->theme['template_inherits_id']; } $recompile = (@filemtime($compiled_path) < @filemtime($this->files[$handle])) ? true : false; } @@ -351,10 +378,10 @@ class phpbb_template } // Inheritance - we point to another template file for this one. - if (isset($user->theme['template_inherits_id']) && $user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) + if (isset($this->user->theme['template_inherits_id']) && $this->user->theme['template_inherits_id'] && !file_exists($this->files[$handle])) { $this->files[$handle] = $this->files_inherit[$handle]; - $this->files_template[$handle] = $user->theme['template_inherits_id']; + $this->files_template[$handle] = $this->user->theme['template_inherits_id']; } $source_file = $this->_source_file_for_handle($handle); @@ -410,9 +437,7 @@ class phpbb_template */ private function _compiled_file_for_handle($handle) { - global $phpEx; - - $compiled_file = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $phpEx; + $compiled_file = $this->cachepath . str_replace('/', '.', $this->filename[$handle]) . '.' . $this->phpEx; return $compiled_file; } @@ -522,9 +547,7 @@ class phpbb_template */ private function _php_include($filename) { - global $phpbb_root_path; - - $file = $phpbb_root_path . $filename; + $file = $this->phpbb_root_path . $filename; if (!file_exists($file)) { -- cgit v1.2.1 From 94560d708649df876f8486d4ba5361475037f1ff Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 12 May 2011 20:09:41 -0400 Subject: [feature/template-engine] Make INCLUDEPHP relative to board root. PHPBB3-9726 --- phpBB/includes/template.php | 6 +++--- phpBB/includes/template/compile.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 64a3b80f07..f2b1cccd2c 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -513,7 +513,7 @@ class phpbb_template /** * Include a separate template - * @access private + * @access public * @param string $filename Template filename to include * @param bool $include True to include the file, false to just load it * @uses template_compile is used to compile uncached templates @@ -543,9 +543,9 @@ class phpbb_template /** * Include a php-file - * @access private + * @access public */ - private function _php_include($filename) + public function _php_include($filename) { $file = $this->phpbb_root_path . $filename; diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php index 18a52e87a6..46a30d26d3 100644 --- a/phpBB/includes/template/compile.php +++ b/phpBB/includes/template/compile.php @@ -667,7 +667,7 @@ class phpbb_template_filter extends php_user_filter */ private function compile_tag_include_php($tag_args) { - return "include('$tag_args');"; + return "\$_template->_php_include('$tag_args');"; } /** -- cgit v1.2.1 From 94c28efe079c0c06cdc6ebacb49cfa4dd98d09c0 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Tue, 1 Mar 2011 21:19:38 -0500 Subject: [ticket/10039] Added mssqlnative cases to phpBB 2.0 converter. PHPBB3-10039 --- phpBB/install/convertors/functions_phpbb20.php | 3 +++ 1 file changed, 3 insertions(+) (limited to 'phpBB') diff --git a/phpBB/install/convertors/functions_phpbb20.php b/phpBB/install/convertors/functions_phpbb20.php index 78224dd5da..466f57a572 100644 --- a/phpBB/install/convertors/functions_phpbb20.php +++ b/phpBB/install/convertors/functions_phpbb20.php @@ -94,6 +94,7 @@ function phpbb_insert_forums() { case 'mssql': case 'mssql_odbc': + case 'mssqlnative': $db->sql_query('SET IDENTITY_INSERT ' . FORUMS_TABLE . ' ON'); break; } @@ -291,6 +292,7 @@ function phpbb_insert_forums() case 'mssql': case 'mssql_odbc': + case 'mssqlnative': $db->sql_query('SET IDENTITY_INSERT ' . FORUMS_TABLE . ' OFF'); break; @@ -1727,6 +1729,7 @@ function phpbb_create_userconv_table() case 'mssql': case 'mssql_odbc': + case 'mssqlnative': $map_dbms = 'mssql'; break; -- cgit v1.2.1 From b04f0a5f70ed79d45e254d7b6db61f6fc1f484f5 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 13 May 2011 10:49:53 -0400 Subject: [feature/template-engine] Delete @access everywhere. Access specification in php 5 is done directly on functions/properties. PHPBB3-9726 --- phpBB/includes/template.php | 17 ----------------- phpBB/includes/template/compile.php | 12 ------------ phpBB/includes/template/context.php | 7 ------- 3 files changed, 36 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index f2b1cccd2c..5fb0f41311 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -35,7 +35,6 @@ class phpbb_template /** * @var phpbb_template_context Template context. * Stores template data used during template rendering. - * @access private */ private $context; @@ -101,7 +100,6 @@ class phpbb_template /** * Set template location - * @access public */ public function set_template() { @@ -138,7 +136,6 @@ class phpbb_template * * Note: Templates are still compiled to phpBB's cache directory. * - * @access public * @param string $template_path Path to template directory * @param string $template_name Name of template * @param string $fallback_template_path Path to fallback template @@ -177,7 +174,6 @@ class phpbb_template /** * Sets the template filenames for handles. $filename_array * should be a hash of handle => filename pairs. - * @access public * @param array $filname_array Should be a hash of handle => filename pairs. */ public function set_filenames(array $filename_array) @@ -203,7 +199,6 @@ class phpbb_template /** * Clears all variables and blocks assigned to this template. - * @access public */ public function destroy() { @@ -212,7 +207,6 @@ class phpbb_template /** * Reset/empty complete block - * @access public * @param string $blockname Name of block to destroy */ public function destroy_block_vars($blockname) @@ -222,7 +216,6 @@ class phpbb_template /** * Display handle - * @access public * @param string $handle Handle to display * @param bool $include_once Allow multiple inclusions * @return bool True on success, false on failure @@ -290,7 +283,6 @@ class phpbb_template /** * Display the handle and assign the output to a template variable or return the compiled result. - * @access public * @param string $handle Handle to operate on * @param string $template_var Template variable to assign compiled handle to * @param bool $return_content If true return compiled handle, otherwise assign to $template_var @@ -335,7 +327,6 @@ class phpbb_template * contents sent to the output stream (unless, of course, output * buffering is in effect). * - * @access private * @param string $handle Handle of the template to load * @return phpbb_template_renderer Template renderer object, or null on failure * @uses template_compile is used to compile template source @@ -407,7 +398,6 @@ class phpbb_template /** * Resolves template handle $handle to source file path. - * @access private * @param string $handle Template handle (i.e. "friendly" template name) * @return string Source file path */ @@ -431,7 +421,6 @@ class phpbb_template /** * Determines compiled file path for handle $handle. - * @access private * @param string $handle Template handle (i.e. "friendly" template name) * @return string Compiled file path */ @@ -443,7 +432,6 @@ class phpbb_template /** * Assign key variable pairs from an array - * @access public * @param array $vararray A hash of variable name => value pairs */ public function assign_vars(array $vararray) @@ -456,7 +444,6 @@ class phpbb_template /** * Assign a single variable to a single key - * @access public * @param string $varname Variable name * @param string $varval Value to assign to variable */ @@ -468,7 +455,6 @@ class phpbb_template // Docstring is copied from phpbb_template_context method with the same name. /** * Assign key variable pairs from an array to a specified block - * @access public * @param string $blockname Name of block to assign $vararray to * @param array $vararray A hash of variable name => value pairs */ @@ -504,7 +490,6 @@ class phpbb_template * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) * * @return bool false on error, true on success - * @access public */ public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') { @@ -513,7 +498,6 @@ class phpbb_template /** * Include a separate template - * @access public * @param string $filename Template filename to include * @param bool $include True to include the file, false to just load it * @uses template_compile is used to compile uncached templates @@ -543,7 +527,6 @@ class phpbb_template /** * Include a php-file - * @access public */ public function _php_include($filename) { diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php index 46a30d26d3..79a7d784cd 100644 --- a/phpBB/includes/template/compile.php +++ b/phpBB/includes/template/compile.php @@ -260,7 +260,6 @@ class phpbb_template_filter extends php_user_filter /** * Compile variables - * @access private */ private function compile_var_tags(&$text_blocks) { @@ -310,7 +309,6 @@ class phpbb_template_filter extends php_user_filter /** * Compile blocks - * @access private */ private function compile_tag_block($tag_args) { @@ -423,7 +421,6 @@ class phpbb_template_filter extends php_user_filter /** * Compile a general expression - much of this is from Smarty with * some adaptions for our block level methods - * @access private */ private function compile_expression($tag_args) { @@ -630,7 +627,6 @@ class phpbb_template_filter extends php_user_filter /** * Compile DEFINE tags - * @access private */ private function compile_tag_define($tag_args, $op) { @@ -654,7 +650,6 @@ class phpbb_template_filter extends php_user_filter /** * Compile INCLUDE tag - * @access private */ private function compile_tag_include($tag_args) { @@ -663,7 +658,6 @@ class phpbb_template_filter extends php_user_filter /** * Compile INCLUDE_PHP tag - * @access private */ private function compile_tag_include_php($tag_args) { @@ -673,7 +667,6 @@ class phpbb_template_filter extends php_user_filter /** * parse expression * This is from Smarty - * @access private */ private function _parse_is_expr($is_arg, $tokens) { @@ -752,7 +745,6 @@ class phpbb_template_filter extends php_user_filter * ' . $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . ' * It's ready to be inserted into an "echo" line in one of the templates. * - * @access private * @param string $namespace Namespace to access (expects a trailing "." on the namespace) * @param string $varname Variable name to use * @param bool $echo If true return an echo statement, otherwise a reference to the internal variable @@ -815,7 +807,6 @@ class phpbb_template_filter extends php_user_filter * (possibly nested) block namespace. This is a string of the form: * $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['$childN'] * - * @access private * @param string $blockname Block to access (does not expect a trailing "." on the blockname) * @param bool $include_last_iterator If $include_last_iterator is true, then [$_childN_i] will be appended to the form shown above. * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable @@ -883,7 +874,6 @@ class phpbb_template_compile /** * Compiles template in $source_file and writes compiled template to * cache directory - * @access public * @param string $handle Template handle to compile * @param string $source_file Source template file * @return bool Return true on success otherwise false @@ -916,7 +906,6 @@ class phpbb_template_compile /** * Compiles a template located at $source_file. * Returns PHP source suitable for eval(). - * @access public * @param string $source_file Source template file * @return string|bool Return compiled code on successful compilation otherwise false */ @@ -947,7 +936,6 @@ class phpbb_template_compile * A stream filter is appended to $source_stream as part of the * process. * - * @access private * @param resource $source_stream Source stream * @param resource $dest_stream Destination stream * @return void diff --git a/phpBB/includes/template/context.php b/phpBB/includes/template/context.php index 73f1373655..3c0dceb981 100644 --- a/phpBB/includes/template/context.php +++ b/phpBB/includes/template/context.php @@ -45,7 +45,6 @@ class phpbb_template_context /** * Clears template data set. - * @access public */ public function clear() { @@ -55,7 +54,6 @@ class phpbb_template_context /** * Assign a single variable to a single key - * @access public * @param string $varname Variable name * @param string $varval Value to assign to variable */ @@ -74,7 +72,6 @@ class phpbb_template_context * * Note: modifying returned array will affect data stored in the context. * - * @access public * @return array template data */ public function get_data_ref() @@ -93,7 +90,6 @@ class phpbb_template_context * * Note: modifying returned array will affect data stored in the context. * - * @access public * @return array template data */ public function get_root_ref() @@ -104,7 +100,6 @@ class phpbb_template_context /** * Assign key variable pairs from an array to a specified block - * @access public * @param string $blockname Name of block to assign $vararray to * @param array $vararray A hash of variable name => value pairs */ @@ -197,7 +192,6 @@ class phpbb_template_context * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) * * @return bool false on error, true on success - * @access public */ public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') { @@ -315,7 +309,6 @@ class phpbb_template_context /** * Reset/empty complete block - * @access public * @param string $blockname Name of block to destroy */ public function destroy_block_vars($blockname) -- cgit v1.2.1 From 70ccf04e068c3de1611049d094b8295fb6f07b45 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 13 May 2011 10:52:33 -0400 Subject: [feature/template-engine] Moved phpbb_template_filter into own file. PHPBB3-9726 --- phpBB/includes/template/compile.php | 831 ----------------------------------- phpBB/includes/template/filter.php | 848 ++++++++++++++++++++++++++++++++++++ 2 files changed, 848 insertions(+), 831 deletions(-) create mode 100644 phpBB/includes/template/filter.php (limited to 'phpBB') diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php index 79a7d784cd..246c83a010 100644 --- a/phpBB/includes/template/compile.php +++ b/phpBB/includes/template/compile.php @@ -16,837 +16,6 @@ if (!defined('IN_PHPBB')) exit; } -/** -* The template filter that does the actual compilation -* @see template_compile -* @package phpBB3 -*/ -class phpbb_template_filter extends php_user_filter -{ - const REGEX_NS = '[a-z_][a-z_0-9]+'; - - const REGEX_VAR = '[A-Z_][A-Z_0-9]+'; - - const REGEX_TAG = ''; - - const REGEX_TOKENS = '~|{((?:[a-z_][a-z_0-9]+\.)*\\$?[A-Z][A-Z_0-9]+)}~'; - - /** - * @var array - */ - private $block_names = array(); - - /** - * @var array - */ - private $block_else_level = array(); - - /** - * @var string - */ - private $chunk; - - /** - * @var bool - */ - private $in_php; - - public function filter($in, $out, &$consumed, $closing) - { - $written = false; - $first = false; - - while ($bucket = stream_bucket_make_writeable($in)) - { - $consumed += $bucket->datalen; - - $data = $this->chunk . $bucket->data; - $last_nl = strrpos($data, "\n"); - $this->chunk = substr($data, $last_nl); - $data = substr($data, 0, $last_nl); - - if (!strlen($data)) - { - continue; - } - - $written = true; - - $data = $this->compile($data); - if (!$first) - { - $data = $this->prepend_preamble($data); - $first = false; - } - $bucket->data = $data; - $bucket->datalen = strlen($bucket->data); - stream_bucket_append($out, $bucket); - } - - if ($closing && strlen($this->chunk)) - { - $written = true; - $bucket = stream_bucket_new($this->stream, $this->compile($this->chunk)); - stream_bucket_append($out, $bucket); - } - - return $written ? PSFS_PASS_ON : PSFS_FEED_ME; - } - - public function onCreate() - { - $this->chunk = ''; - $this->in_php = false; - return true; - } - - private function compile($data) - { - $block_start_in_php = $this->in_php; - - $data = preg_replace('#<(?:[\\?%]|script)#s', '', $data); - $data = preg_replace_callback(self::REGEX_TOKENS, array($this, 'replace'), $data); - - global $config; - - // Remove php - if (!$config['tpl_allow_php']) - { - if ($block_start_in_php - && $this->in_php - && strpos($data, '') === false - && strpos($data, '') === false) - { - // This is just php code - return ''; - } - $data = preg_replace('~^.*?~', '', $data); - $data = preg_replace('~.*?~', '', $data); - $data = preg_replace('~.*?$~', '', $data); - } - - /* - Preserve whitespace. - PHP removes a newline after the closing tag (if it's there). This is by design. - - - Consider the following template: - - - some content - - - If we were to simply preserve all whitespace, we could simply replace all "?>" tags - with "?>\n". - Doing that, would add additional newlines to the compiled tempalte in place of the - IF and ENDIF statements. These newlines are unwanted (and one is conditional). - The IF and ENDIF are usually on their own line for ease of reading. - - This replacement preserves newlines only for statements that aren't the only statement on a line. - It will NOT preserve newlines at the end of statements in the above examle. - It will preserve newlines in situations like: - - inline content - - - */ - - $data = preg_replace('~(?).)+(?)$~m', "$1\n", $data); - $data = str_replace('/**/?>', "?>\n", $data); - $data = str_replace('?>' . $data); - return $data; - } - - private function replace($matches) - { - if ($this->in_php && $matches[1] != 'ENDPHP') - { - return ''; - } - - if (isset($matches[3])) - { - return $this->compile_var_tags($matches[0]); - } - - global $config; - - switch ($matches[1]) - { - case 'BEGIN': - $this->block_else_level[] = false; - return 'compile_tag_block($matches[2]) . ' ?>'; - break; - - case 'BEGINELSE': - $this->block_else_level[sizeof($this->block_else_level) - 1] = true; - return ''; - break; - - case 'END': - array_pop($this->block_names); - return 'block_else_level)) ? '}' : '}}') . ' ?>'; - break; - - case 'IF': - return 'compile_tag_if($matches[2], false) . ' ?>'; - break; - - case 'ELSE': - return ''; - break; - - case 'ELSEIF': - return 'compile_tag_if($matches[2], true) . ' ?>'; - break; - - case 'ENDIF': - return ''; - break; - - case 'DEFINE': - return 'compile_tag_define($matches[2], true) . ' ?>'; - break; - - case 'UNDEFINE': - return 'compile_tag_define($matches[2], false) . ' ?>'; - break; - - case 'INCLUDE': - return 'compile_tag_include($matches[2]) . ' ?>'; - break; - - case 'INCLUDEPHP': - return ($config['tpl_allow_php']) ? 'compile_tag_include_php($matches[2]) . ' ?>' : ''; - break; - - case 'PHP': - if ($config['tpl_allow_php']) - { - $this->in_php = true; - return ''; - break; - - case 'ENDPHP': - if ($config['tpl_allow_php']) - { - $this->in_php = false; - return ' ?>'; - } - return ''; - break; - - default: - return $matches[0]; - break; - - } - return ''; - } - - /** - * Compile variables - */ - private function compile_var_tags(&$text_blocks) - { - // change template varrefs into PHP varrefs - $varrefs = array(); - - // This one will handle varrefs WITH namespaces - preg_match_all('#\{((?:' . self::REGEX_NS . '\.)+)(\$)?(' . self::REGEX_VAR . ')\}#', $text_blocks, $varrefs, PREG_SET_ORDER); - - foreach ($varrefs as $var_val) - { - $namespace = $var_val[1]; - $varname = $var_val[3]; - $new = $this->generate_block_varref($namespace, $varname, true, $var_val[2]); - - $text_blocks = str_replace($var_val[0], $new, $text_blocks); - } - - // Handle special language tags L_ and LA_ - $this->compile_language_tags($text_blocks); - - // This will handle the remaining root-level varrefs - $text_blocks = preg_replace('#\{(' . self::REGEX_VAR . ')\}#', "", $text_blocks); - $text_blocks = preg_replace('#\{\$(' . self::REGEX_VAR . ')\}#', "", $text_blocks); - - return $text_blocks; - } - - /** - * Handles special language tags L_ and LA_ - */ - private function compile_language_tags(&$text_blocks) - { - // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array - if (strpos($text_blocks, '{L_') !== false) - { - $text_blocks = preg_replace('#\{L_(' . self::REGEX_VAR . ')\}#', "", $text_blocks); - } - - // Handle addslashed language variables prefixed with LA_ - // If a template variable already exist, it will be used in favor of it... - if (strpos($text_blocks, '{LA_') !== false) - { - $text_blocks = preg_replace('#\{LA_(' . self::REGEX_VAR . '+)\}#', "", $text_blocks); - } - } - - /** - * Compile blocks - */ - private function compile_tag_block($tag_args) - { - $no_nesting = false; - - // Is the designer wanting to call another loop in a loop? - // - // - // - // - // 'loop2' is actually on the same nesting level as 'loop' you assign - // variables to it with template->assign_block_vars('loop2', array(...)) - if (strpos($tag_args, '!') === 0) - { - // Count the number if ! occurrences (not allowed in vars) - $no_nesting = substr_count($tag_args, '!'); - $tag_args = substr($tag_args, $no_nesting); - } - - // Allow for control of looping (indexes start from zero): - // foo(2) : Will start the loop on the 3rd entry - // foo(-2) : Will start the loop two entries from the end - // foo(3,4) : Will start the loop on the fourth entry and end it on the fifth - // foo(3,-4) : Will start the loop on the fourth entry and end it four from last - $match = array(); - - if (preg_match('#^([^()]*)\(([\-\d]+)(?:,([\-\d]+))?\)$#', $tag_args, $match)) - { - $tag_args = $match[1]; - - if ($match[2] < 0) - { - $loop_start = '($_' . $tag_args . '_count ' . $match[2] . ' < 0 ? 0 : $_' . $tag_args . '_count ' . $match[2] . ')'; - } - else - { - $loop_start = '($_' . $tag_args . '_count < ' . $match[2] . ' ? $_' . $tag_args . '_count : ' . $match[2] . ')'; - } - - if (!isset($match[3]) || strlen($match[3]) < 1 || $match[3] == -1) - { - $loop_end = '$_' . $tag_args . '_count'; - } - else if ($match[3] >= 0) - { - $loop_end = '(' . ($match[3] + 1) . ' > $_' . $tag_args . '_count ? $_' . $tag_args . '_count : ' . ($match[3] + 1) . ')'; - } - else //if ($match[3] < -1) - { - $loop_end = '$_' . $tag_args . '_count' . ($match[3] + 1); - } - } - else - { - $loop_start = 0; - $loop_end = '$_' . $tag_args . '_count'; - } - - $tag_template_php = ''; - array_push($this->block_names, $tag_args); - - if ($no_nesting !== false) - { - // We need to implode $no_nesting times from the end... - $block = array_slice($this->block_names, -$no_nesting); - } - else - { - $block = $this->block_names; - } - - if (sizeof($block) < 2) - { - // Block is not nested. - $tag_template_php = '$_' . $tag_args . "_count = (isset(\$_tpldata['$tag_args'])) ? sizeof(\$_tpldata['$tag_args']) : 0;"; - $varref = "\$_tpldata['$tag_args']"; - } - else - { - // This block is nested. - // Generate a namespace string for this block. - $namespace = implode('.', $block); - - // Get a reference to the data array for this block that depends on the - // current indices of all parent blocks. - $varref = $this->generate_block_data_ref($namespace, false); - - // Create the for loop code to iterate over this block. - $tag_template_php = '$_' . $tag_args . '_count = (isset(' . $varref . ')) ? sizeof(' . $varref . ') : 0;'; - } - - $tag_template_php .= 'if ($_' . $tag_args . '_count) {'; - - /** - * The following uses foreach for iteration instead of a for loop, foreach is faster but requires PHP to make a copy of the contents of the array which uses more memory - * - * if (!$offset) - * { - * $tag_template_php .= 'foreach (' . $varref . ' as $_' . $tag_args . '_i => $_' . $tag_args . '_val){'; - * } - * - */ - - $tag_template_php .= 'for ($_' . $tag_args . '_i = ' . $loop_start . '; $_' . $tag_args . '_i < ' . $loop_end . '; ++$_' . $tag_args . '_i){'; - $tag_template_php .= '$_' . $tag_args . '_val = &' . $varref . '[$_' . $tag_args . '_i];'; - - return $tag_template_php; - } - - /** - * Compile a general expression - much of this is from Smarty with - * some adaptions for our block level methods - */ - private function compile_expression($tag_args) - { - $match = array(); - preg_match_all('/(?: - "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" | - \'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' | - [(),] | - [^\s(),]+)/x', $tag_args, $match); - - $tokens = $match[0]; - $is_arg_stack = array(); - - for ($i = 0, $size = sizeof($tokens); $i < $size; $i++) - { - $token = &$tokens[$i]; - - switch ($token) - { - case '!==': - case '===': - case '<<': - case '>>': - case '|': - case '^': - case '&': - case '~': - case ')': - case ',': - case '+': - case '-': - case '*': - case '/': - case '@': - break; - - case '==': - case 'eq': - $token = '=='; - break; - - case '!=': - case '<>': - case 'ne': - case 'neq': - $token = '!='; - break; - - case '<': - case 'lt': - $token = '<'; - break; - - case '<=': - case 'le': - case 'lte': - $token = '<='; - break; - - case '>': - case 'gt': - $token = '>'; - break; - - case '>=': - case 'ge': - case 'gte': - $token = '>='; - break; - - case '&&': - case 'and': - $token = '&&'; - break; - - case '||': - case 'or': - $token = '||'; - break; - - case '!': - case 'not': - $token = '!'; - break; - - case '%': - case 'mod': - $token = '%'; - break; - - case '(': - array_push($is_arg_stack, $i); - break; - - case 'is': - $is_arg_start = ($tokens[$i-1] == ')') ? array_pop($is_arg_stack) : $i-1; - $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); - - $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); - - array_splice($tokens, $is_arg_start, sizeof($tokens), $new_tokens); - - $i = $is_arg_start; - - // no break - - default: - $varrefs = array(); - if (preg_match('#^((?:' . self::REGEX_NS . '\.)+)?(\$)?(?=[A-Z])([A-Z0-9\-_]+)#s', $token, $varrefs)) - { - if (!empty($varrefs[1])) - { - $namespace = substr($varrefs[1], 0, -1); - $dot_pos = strrchr($namespace, '.'); - if ($dot_pos !== false) - { - $namespace = substr($dot_pos, 1); - } - - // S_ROW_COUNT is deceptive, it returns the current row number not the number of rows - // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM - switch ($varrefs[3]) - { - case 'S_ROW_NUM': - case 'S_ROW_COUNT': - $token = "\$_${namespace}_i"; - break; - - case 'S_NUM_ROWS': - $token = "\$_${namespace}_count"; - break; - - case 'S_FIRST_ROW': - $token = "(\$_${namespace}_i == 0)"; - break; - - case 'S_LAST_ROW': - $token = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; - break; - - case 'S_BLOCK_NAME': - $token = "'$namespace'"; - break; - - default: - $token = $this->generate_block_data_ref(substr($varrefs[1], 0, -1), true, $varrefs[2]) . '[\'' . $varrefs[3] . '\']'; - $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; - break; - } - } - else - { - $token = ($varrefs[2]) ? '$_tpldata[\'DEFINE\'][\'.\'][\'' . $varrefs[3] . '\']' : '$_rootref[\'' . $varrefs[3] . '\']'; - $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; - } - - } - else if (preg_match('#^\.((?:' . self::REGEX_NS . '\.?)+)$#s', $token, $varrefs)) - { - // Allow checking if loops are set with .loopname - // It is also possible to check the loop count by doing for example - $blocks = explode('.', $varrefs[1]); - - // If the block is nested, we have a reference that we can grab. - // If the block is not nested, we just go and grab the block from _tpldata - if (sizeof($blocks) > 1) - { - $block = array_pop($blocks); - $namespace = implode('.', $blocks); - $varref = $this->generate_block_data_ref($namespace, true); - - // Add the block reference for the last child. - $varref .= "['" . $block . "']"; - } - else - { - $varref = '$_tpldata'; - - // Add the block reference for the last child. - $varref .= "['" . $blocks[0] . "']"; - } - $token = "(isset($varref) ? sizeof($varref) : 0)"; - } - - break; - } - } - - return $tokens; - } - - - private function compile_tag_if($tag_args, $elseif) - { - $tokens = $this->compile_expression($tag_args); - - $tpl = ($elseif) ? '} else if (' : 'if ('; - - $tpl .= implode(' ', $tokens); - $tpl .= ') { '; - - return $tpl; - } - - /** - * Compile DEFINE tags - */ - private function compile_tag_define($tag_args, $op) - { - $match = array(); - preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (.*?))?$#', $tag_args, $match); - - if (empty($match[2]) || (!isset($match[3]) && $op)) - { - return ''; - } - - if (!$op) - { - return 'unset(' . (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ');'; - } - - $parsed_statement = implode(' ', $this->compile_expression($match[3])); - - return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $parsed_statement . ';'; - } - - /** - * Compile INCLUDE tag - */ - private function compile_tag_include($tag_args) - { - return "\$_template->_tpl_include('$tag_args');"; - } - - /** - * Compile INCLUDE_PHP tag - */ - private function compile_tag_include_php($tag_args) - { - return "\$_template->_php_include('$tag_args');"; - } - - /** - * parse expression - * This is from Smarty - */ - private function _parse_is_expr($is_arg, $tokens) - { - $expr_end = 0; - $negate_expr = false; - - if (($first_token = array_shift($tokens)) == 'not') - { - $negate_expr = true; - $expr_type = array_shift($tokens); - } - else - { - $expr_type = $first_token; - } - - switch ($expr_type) - { - case 'even': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!(($is_arg / $expr_arg) & 1)"; - } - else - { - $expr = "!($is_arg & 1)"; - } - break; - - case 'odd': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "(($is_arg / $expr_arg) & 1)"; - } - else - { - $expr = "($is_arg & 1)"; - } - break; - - case 'div': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!($is_arg % $expr_arg)"; - } - break; - } - - if ($negate_expr) - { - if ($expr[0] == '!') - { - // Negated expression, de-negate it. - $expr = substr($expr, 1); - } - else - { - $expr = "!($expr)"; - } - } - - array_splice($tokens, 0, $expr_end, $expr); - - return $tokens; - } - - /** - * Generates a reference to the given variable inside the given (possibly nested) - * block namespace. This is a string of the form: - * ' . $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . ' - * It's ready to be inserted into an "echo" line in one of the templates. - * - * @param string $namespace Namespace to access (expects a trailing "." on the namespace) - * @param string $varname Variable name to use - * @param bool $echo If true return an echo statement, otherwise a reference to the internal variable - * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable - * @return string Code to access variable or echo it if $echo is true - */ - private function generate_block_varref($namespace, $varname, $echo = true, $defop = false) - { - // Strip the trailing period. - $namespace = substr($namespace, 0, -1); - - $expr = true; - $isset = false; - - // S_ROW_COUNT is deceptive, it returns the current row number now the number of rows - // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM - switch ($varname) - { - case 'S_ROW_NUM': - case 'S_ROW_COUNT': - $varref = "\$_${namespace}_i"; - break; - - case 'S_NUM_ROWS': - $varref = "\$_${namespace}_count"; - break; - - case 'S_FIRST_ROW': - $varref = "(\$_${namespace}_i == 0)"; - break; - - case 'S_LAST_ROW': - $varref = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; - break; - - case 'S_BLOCK_NAME': - $varref = "'$namespace'"; - break; - - default: - // Get a reference to the data block for this namespace. - $varref = $this->generate_block_data_ref($namespace, true, $defop); - // Prepend the necessary code to stick this in an echo line. - - // Append the variable reference. - $varref .= "['$varname']"; - - $expr = false; - $isset = true; - break; - } - // @todo Test the !$expr more - $varref = ($echo) ? '' : (($expr || isset($varref)) ? $varref : ''); - - return $varref; - } - - /** - * Generates a reference to the array of data values for the given - * (possibly nested) block namespace. This is a string of the form: - * $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['$childN'] - * - * @param string $blockname Block to access (does not expect a trailing "." on the blockname) - * @param bool $include_last_iterator If $include_last_iterator is true, then [$_childN_i] will be appended to the form shown above. - * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable - * @return string Code to access variable - */ - private function generate_block_data_ref($blockname, $include_last_iterator, $defop = false) - { - // Get an array of the blocks involved. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - // DEFINE is not an element of any referenced variable, we must use _tpldata to access it - if ($defop) - { - $varref = '$_tpldata[\'DEFINE\']'; - // Build up the string with everything but the last child. - for ($i = 0; $i < $blockcount; $i++) - { - $varref .= "['" . $blocks[$i] . "'][\$_" . $blocks[$i] . '_i]'; - } - // Add the block reference for the last child. - $varref .= "['" . $blocks[$blockcount] . "']"; - // Add the iterator for the last child if requried. - if ($include_last_iterator) - { - $varref .= '[$_' . $blocks[$blockcount] . '_i]'; - } - return $varref; - } - else if ($include_last_iterator) - { - return '$_'. $blocks[$blockcount] . '_val'; - } - else - { - return '$_'. $blocks[$blockcount - 1] . '_val[\''. $blocks[$blockcount]. '\']'; - } - } -} - stream_filter_register('phpbb_template', 'phpbb_template_filter'); /** diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php new file mode 100644 index 0000000000..1c64cdb8da --- /dev/null +++ b/phpBB/includes/template/filter.php @@ -0,0 +1,848 @@ +'; + + const REGEX_TOKENS = '~|{((?:[a-z_][a-z_0-9]+\.)*\\$?[A-Z][A-Z_0-9]+)}~'; + + /** + * @var array + */ + private $block_names = array(); + + /** + * @var array + */ + private $block_else_level = array(); + + /** + * @var string + */ + private $chunk; + + /** + * @var bool + */ + private $in_php; + + public function filter($in, $out, &$consumed, $closing) + { + $written = false; + $first = false; + + while ($bucket = stream_bucket_make_writeable($in)) + { + $consumed += $bucket->datalen; + + $data = $this->chunk . $bucket->data; + $last_nl = strrpos($data, "\n"); + $this->chunk = substr($data, $last_nl); + $data = substr($data, 0, $last_nl); + + if (!strlen($data)) + { + continue; + } + + $written = true; + + $data = $this->compile($data); + if (!$first) + { + $data = $this->prepend_preamble($data); + $first = false; + } + $bucket->data = $data; + $bucket->datalen = strlen($bucket->data); + stream_bucket_append($out, $bucket); + } + + if ($closing && strlen($this->chunk)) + { + $written = true; + $bucket = stream_bucket_new($this->stream, $this->compile($this->chunk)); + stream_bucket_append($out, $bucket); + } + + return $written ? PSFS_PASS_ON : PSFS_FEED_ME; + } + + public function onCreate() + { + $this->chunk = ''; + $this->in_php = false; + return true; + } + + private function compile($data) + { + $block_start_in_php = $this->in_php; + + $data = preg_replace('#<(?:[\\?%]|script)#s', '', $data); + $data = preg_replace_callback(self::REGEX_TOKENS, array($this, 'replace'), $data); + + global $config; + + // Remove php + if (!$config['tpl_allow_php']) + { + if ($block_start_in_php + && $this->in_php + && strpos($data, '') === false + && strpos($data, '') === false) + { + // This is just php code + return ''; + } + $data = preg_replace('~^.*?~', '', $data); + $data = preg_replace('~.*?~', '', $data); + $data = preg_replace('~.*?$~', '', $data); + } + + /* + Preserve whitespace. + PHP removes a newline after the closing tag (if it's there). This is by design. + + + Consider the following template: + + + some content + + + If we were to simply preserve all whitespace, we could simply replace all "?>" tags + with "?>\n". + Doing that, would add additional newlines to the compiled tempalte in place of the + IF and ENDIF statements. These newlines are unwanted (and one is conditional). + The IF and ENDIF are usually on their own line for ease of reading. + + This replacement preserves newlines only for statements that aren't the only statement on a line. + It will NOT preserve newlines at the end of statements in the above examle. + It will preserve newlines in situations like: + + inline content + + + */ + + $data = preg_replace('~(?).)+(?)$~m', "$1\n", $data); + $data = str_replace('/**/?>', "?>\n", $data); + $data = str_replace('?>' . $data); + return $data; + } + + private function replace($matches) + { + if ($this->in_php && $matches[1] != 'ENDPHP') + { + return ''; + } + + if (isset($matches[3])) + { + return $this->compile_var_tags($matches[0]); + } + + global $config; + + switch ($matches[1]) + { + case 'BEGIN': + $this->block_else_level[] = false; + return 'compile_tag_block($matches[2]) . ' ?>'; + break; + + case 'BEGINELSE': + $this->block_else_level[sizeof($this->block_else_level) - 1] = true; + return ''; + break; + + case 'END': + array_pop($this->block_names); + return 'block_else_level)) ? '}' : '}}') . ' ?>'; + break; + + case 'IF': + return 'compile_tag_if($matches[2], false) . ' ?>'; + break; + + case 'ELSE': + return ''; + break; + + case 'ELSEIF': + return 'compile_tag_if($matches[2], true) . ' ?>'; + break; + + case 'ENDIF': + return ''; + break; + + case 'DEFINE': + return 'compile_tag_define($matches[2], true) . ' ?>'; + break; + + case 'UNDEFINE': + return 'compile_tag_define($matches[2], false) . ' ?>'; + break; + + case 'INCLUDE': + return 'compile_tag_include($matches[2]) . ' ?>'; + break; + + case 'INCLUDEPHP': + return ($config['tpl_allow_php']) ? 'compile_tag_include_php($matches[2]) . ' ?>' : ''; + break; + + case 'PHP': + if ($config['tpl_allow_php']) + { + $this->in_php = true; + return ''; + break; + + case 'ENDPHP': + if ($config['tpl_allow_php']) + { + $this->in_php = false; + return ' ?>'; + } + return ''; + break; + + default: + return $matches[0]; + break; + + } + return ''; + } + + /** + * Compile variables + */ + private function compile_var_tags(&$text_blocks) + { + // change template varrefs into PHP varrefs + $varrefs = array(); + + // This one will handle varrefs WITH namespaces + preg_match_all('#\{((?:' . self::REGEX_NS . '\.)+)(\$)?(' . self::REGEX_VAR . ')\}#', $text_blocks, $varrefs, PREG_SET_ORDER); + + foreach ($varrefs as $var_val) + { + $namespace = $var_val[1]; + $varname = $var_val[3]; + $new = $this->generate_block_varref($namespace, $varname, true, $var_val[2]); + + $text_blocks = str_replace($var_val[0], $new, $text_blocks); + } + + // Handle special language tags L_ and LA_ + $this->compile_language_tags($text_blocks); + + // This will handle the remaining root-level varrefs + $text_blocks = preg_replace('#\{(' . self::REGEX_VAR . ')\}#', "", $text_blocks); + $text_blocks = preg_replace('#\{\$(' . self::REGEX_VAR . ')\}#', "", $text_blocks); + + return $text_blocks; + } + + /** + * Handles special language tags L_ and LA_ + */ + private function compile_language_tags(&$text_blocks) + { + // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array + if (strpos($text_blocks, '{L_') !== false) + { + $text_blocks = preg_replace('#\{L_(' . self::REGEX_VAR . ')\}#', "", $text_blocks); + } + + // Handle addslashed language variables prefixed with LA_ + // If a template variable already exist, it will be used in favor of it... + if (strpos($text_blocks, '{LA_') !== false) + { + $text_blocks = preg_replace('#\{LA_(' . self::REGEX_VAR . '+)\}#', "", $text_blocks); + } + } + + /** + * Compile blocks + */ + private function compile_tag_block($tag_args) + { + $no_nesting = false; + + // Is the designer wanting to call another loop in a loop? + // + // + // + // + // 'loop2' is actually on the same nesting level as 'loop' you assign + // variables to it with template->assign_block_vars('loop2', array(...)) + if (strpos($tag_args, '!') === 0) + { + // Count the number if ! occurrences (not allowed in vars) + $no_nesting = substr_count($tag_args, '!'); + $tag_args = substr($tag_args, $no_nesting); + } + + // Allow for control of looping (indexes start from zero): + // foo(2) : Will start the loop on the 3rd entry + // foo(-2) : Will start the loop two entries from the end + // foo(3,4) : Will start the loop on the fourth entry and end it on the fifth + // foo(3,-4) : Will start the loop on the fourth entry and end it four from last + $match = array(); + + if (preg_match('#^([^()]*)\(([\-\d]+)(?:,([\-\d]+))?\)$#', $tag_args, $match)) + { + $tag_args = $match[1]; + + if ($match[2] < 0) + { + $loop_start = '($_' . $tag_args . '_count ' . $match[2] . ' < 0 ? 0 : $_' . $tag_args . '_count ' . $match[2] . ')'; + } + else + { + $loop_start = '($_' . $tag_args . '_count < ' . $match[2] . ' ? $_' . $tag_args . '_count : ' . $match[2] . ')'; + } + + if (!isset($match[3]) || strlen($match[3]) < 1 || $match[3] == -1) + { + $loop_end = '$_' . $tag_args . '_count'; + } + else if ($match[3] >= 0) + { + $loop_end = '(' . ($match[3] + 1) . ' > $_' . $tag_args . '_count ? $_' . $tag_args . '_count : ' . ($match[3] + 1) . ')'; + } + else //if ($match[3] < -1) + { + $loop_end = '$_' . $tag_args . '_count' . ($match[3] + 1); + } + } + else + { + $loop_start = 0; + $loop_end = '$_' . $tag_args . '_count'; + } + + $tag_template_php = ''; + array_push($this->block_names, $tag_args); + + if ($no_nesting !== false) + { + // We need to implode $no_nesting times from the end... + $block = array_slice($this->block_names, -$no_nesting); + } + else + { + $block = $this->block_names; + } + + if (sizeof($block) < 2) + { + // Block is not nested. + $tag_template_php = '$_' . $tag_args . "_count = (isset(\$_tpldata['$tag_args'])) ? sizeof(\$_tpldata['$tag_args']) : 0;"; + $varref = "\$_tpldata['$tag_args']"; + } + else + { + // This block is nested. + // Generate a namespace string for this block. + $namespace = implode('.', $block); + + // Get a reference to the data array for this block that depends on the + // current indices of all parent blocks. + $varref = $this->generate_block_data_ref($namespace, false); + + // Create the for loop code to iterate over this block. + $tag_template_php = '$_' . $tag_args . '_count = (isset(' . $varref . ')) ? sizeof(' . $varref . ') : 0;'; + } + + $tag_template_php .= 'if ($_' . $tag_args . '_count) {'; + + /** + * The following uses foreach for iteration instead of a for loop, foreach is faster but requires PHP to make a copy of the contents of the array which uses more memory + * + * if (!$offset) + * { + * $tag_template_php .= 'foreach (' . $varref . ' as $_' . $tag_args . '_i => $_' . $tag_args . '_val){'; + * } + * + */ + + $tag_template_php .= 'for ($_' . $tag_args . '_i = ' . $loop_start . '; $_' . $tag_args . '_i < ' . $loop_end . '; ++$_' . $tag_args . '_i){'; + $tag_template_php .= '$_' . $tag_args . '_val = &' . $varref . '[$_' . $tag_args . '_i];'; + + return $tag_template_php; + } + + /** + * Compile a general expression - much of this is from Smarty with + * some adaptions for our block level methods + */ + private function compile_expression($tag_args) + { + $match = array(); + preg_match_all('/(?: + "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" | + \'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' | + [(),] | + [^\s(),]+)/x', $tag_args, $match); + + $tokens = $match[0]; + $is_arg_stack = array(); + + for ($i = 0, $size = sizeof($tokens); $i < $size; $i++) + { + $token = &$tokens[$i]; + + switch ($token) + { + case '!==': + case '===': + case '<<': + case '>>': + case '|': + case '^': + case '&': + case '~': + case ')': + case ',': + case '+': + case '-': + case '*': + case '/': + case '@': + break; + + case '==': + case 'eq': + $token = '=='; + break; + + case '!=': + case '<>': + case 'ne': + case 'neq': + $token = '!='; + break; + + case '<': + case 'lt': + $token = '<'; + break; + + case '<=': + case 'le': + case 'lte': + $token = '<='; + break; + + case '>': + case 'gt': + $token = '>'; + break; + + case '>=': + case 'ge': + case 'gte': + $token = '>='; + break; + + case '&&': + case 'and': + $token = '&&'; + break; + + case '||': + case 'or': + $token = '||'; + break; + + case '!': + case 'not': + $token = '!'; + break; + + case '%': + case 'mod': + $token = '%'; + break; + + case '(': + array_push($is_arg_stack, $i); + break; + + case 'is': + $is_arg_start = ($tokens[$i-1] == ')') ? array_pop($is_arg_stack) : $i-1; + $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); + + $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); + + array_splice($tokens, $is_arg_start, sizeof($tokens), $new_tokens); + + $i = $is_arg_start; + + // no break + + default: + $varrefs = array(); + if (preg_match('#^((?:' . self::REGEX_NS . '\.)+)?(\$)?(?=[A-Z])([A-Z0-9\-_]+)#s', $token, $varrefs)) + { + if (!empty($varrefs[1])) + { + $namespace = substr($varrefs[1], 0, -1); + $dot_pos = strrchr($namespace, '.'); + if ($dot_pos !== false) + { + $namespace = substr($dot_pos, 1); + } + + // S_ROW_COUNT is deceptive, it returns the current row number not the number of rows + // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM + switch ($varrefs[3]) + { + case 'S_ROW_NUM': + case 'S_ROW_COUNT': + $token = "\$_${namespace}_i"; + break; + + case 'S_NUM_ROWS': + $token = "\$_${namespace}_count"; + break; + + case 'S_FIRST_ROW': + $token = "(\$_${namespace}_i == 0)"; + break; + + case 'S_LAST_ROW': + $token = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; + break; + + case 'S_BLOCK_NAME': + $token = "'$namespace'"; + break; + + default: + $token = $this->generate_block_data_ref(substr($varrefs[1], 0, -1), true, $varrefs[2]) . '[\'' . $varrefs[3] . '\']'; + $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; + break; + } + } + else + { + $token = ($varrefs[2]) ? '$_tpldata[\'DEFINE\'][\'.\'][\'' . $varrefs[3] . '\']' : '$_rootref[\'' . $varrefs[3] . '\']'; + $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; + } + + } + else if (preg_match('#^\.((?:' . self::REGEX_NS . '\.?)+)$#s', $token, $varrefs)) + { + // Allow checking if loops are set with .loopname + // It is also possible to check the loop count by doing for example + $blocks = explode('.', $varrefs[1]); + + // If the block is nested, we have a reference that we can grab. + // If the block is not nested, we just go and grab the block from _tpldata + if (sizeof($blocks) > 1) + { + $block = array_pop($blocks); + $namespace = implode('.', $blocks); + $varref = $this->generate_block_data_ref($namespace, true); + + // Add the block reference for the last child. + $varref .= "['" . $block . "']"; + } + else + { + $varref = '$_tpldata'; + + // Add the block reference for the last child. + $varref .= "['" . $blocks[0] . "']"; + } + $token = "(isset($varref) ? sizeof($varref) : 0)"; + } + + break; + } + } + + return $tokens; + } + + + private function compile_tag_if($tag_args, $elseif) + { + $tokens = $this->compile_expression($tag_args); + + $tpl = ($elseif) ? '} else if (' : 'if ('; + + $tpl .= implode(' ', $tokens); + $tpl .= ') { '; + + return $tpl; + } + + /** + * Compile DEFINE tags + */ + private function compile_tag_define($tag_args, $op) + { + $match = array(); + preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (.*?))?$#', $tag_args, $match); + + if (empty($match[2]) || (!isset($match[3]) && $op)) + { + return ''; + } + + if (!$op) + { + return 'unset(' . (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ');'; + } + + $parsed_statement = implode(' ', $this->compile_expression($match[3])); + + return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $parsed_statement . ';'; + } + + /** + * Compile INCLUDE tag + */ + private function compile_tag_include($tag_args) + { + return "\$_template->_tpl_include('$tag_args');"; + } + + /** + * Compile INCLUDE_PHP tag + */ + private function compile_tag_include_php($tag_args) + { + return "\$_template->_php_include('$tag_args');"; + } + + /** + * parse expression + * This is from Smarty + */ + private function _parse_is_expr($is_arg, $tokens) + { + $expr_end = 0; + $negate_expr = false; + + if (($first_token = array_shift($tokens)) == 'not') + { + $negate_expr = true; + $expr_type = array_shift($tokens); + } + else + { + $expr_type = $first_token; + } + + switch ($expr_type) + { + case 'even': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!(($is_arg / $expr_arg) & 1)"; + } + else + { + $expr = "!($is_arg & 1)"; + } + break; + + case 'odd': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "(($is_arg / $expr_arg) & 1)"; + } + else + { + $expr = "($is_arg & 1)"; + } + break; + + case 'div': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!($is_arg % $expr_arg)"; + } + break; + } + + if ($negate_expr) + { + if ($expr[0] == '!') + { + // Negated expression, de-negate it. + $expr = substr($expr, 1); + } + else + { + $expr = "!($expr)"; + } + } + + array_splice($tokens, 0, $expr_end, $expr); + + return $tokens; + } + + /** + * Generates a reference to the given variable inside the given (possibly nested) + * block namespace. This is a string of the form: + * ' . $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . ' + * It's ready to be inserted into an "echo" line in one of the templates. + * + * @param string $namespace Namespace to access (expects a trailing "." on the namespace) + * @param string $varname Variable name to use + * @param bool $echo If true return an echo statement, otherwise a reference to the internal variable + * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable + * @return string Code to access variable or echo it if $echo is true + */ + private function generate_block_varref($namespace, $varname, $echo = true, $defop = false) + { + // Strip the trailing period. + $namespace = substr($namespace, 0, -1); + + $expr = true; + $isset = false; + + // S_ROW_COUNT is deceptive, it returns the current row number now the number of rows + // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM + switch ($varname) + { + case 'S_ROW_NUM': + case 'S_ROW_COUNT': + $varref = "\$_${namespace}_i"; + break; + + case 'S_NUM_ROWS': + $varref = "\$_${namespace}_count"; + break; + + case 'S_FIRST_ROW': + $varref = "(\$_${namespace}_i == 0)"; + break; + + case 'S_LAST_ROW': + $varref = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; + break; + + case 'S_BLOCK_NAME': + $varref = "'$namespace'"; + break; + + default: + // Get a reference to the data block for this namespace. + $varref = $this->generate_block_data_ref($namespace, true, $defop); + // Prepend the necessary code to stick this in an echo line. + + // Append the variable reference. + $varref .= "['$varname']"; + + $expr = false; + $isset = true; + break; + } + // @todo Test the !$expr more + $varref = ($echo) ? '' : (($expr || isset($varref)) ? $varref : ''); + + return $varref; + } + + /** + * Generates a reference to the array of data values for the given + * (possibly nested) block namespace. This is a string of the form: + * $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['$childN'] + * + * @param string $blockname Block to access (does not expect a trailing "." on the blockname) + * @param bool $include_last_iterator If $include_last_iterator is true, then [$_childN_i] will be appended to the form shown above. + * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable + * @return string Code to access variable + */ + private function generate_block_data_ref($blockname, $include_last_iterator, $defop = false) + { + // Get an array of the blocks involved. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + // DEFINE is not an element of any referenced variable, we must use _tpldata to access it + if ($defop) + { + $varref = '$_tpldata[\'DEFINE\']'; + // Build up the string with everything but the last child. + for ($i = 0; $i < $blockcount; $i++) + { + $varref .= "['" . $blocks[$i] . "'][\$_" . $blocks[$i] . '_i]'; + } + // Add the block reference for the last child. + $varref .= "['" . $blocks[$blockcount] . "']"; + // Add the iterator for the last child if requried. + if ($include_last_iterator) + { + $varref .= '[$_' . $blocks[$blockcount] . '_i]'; + } + return $varref; + } + else if ($include_last_iterator) + { + return '$_'. $blocks[$blockcount] . '_val'; + } + else + { + return '$_'. $blocks[$blockcount - 1] . '_val[\''. $blocks[$blockcount]. '\']'; + } + } +} -- cgit v1.2.1 From 7d911e0bc1475ee769bfd3849d1eca6db7cc95d2 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 13 May 2011 10:54:23 -0400 Subject: [feature/template-engine] Delete @version everywhere. This is not used since the switch to git. PHPBB3-9726 --- phpBB/includes/template.php | 1 - phpBB/includes/template/compile.php | 1 - phpBB/includes/template/context.php | 1 - phpBB/includes/template/filter.php | 1 - phpBB/includes/template/renderer.php | 1 - phpBB/includes/template/renderer_eval.php | 1 - phpBB/includes/template/renderer_include.php | 1 - 7 files changed, 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index 5fb0f41311..e99b9a8c6c 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -2,7 +2,6 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2005 phpBB Group, sections (c) 2001 ispi of Lincoln Inc * @license http://opensource.org/licenses/gpl-license.php GNU Public License * diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php index 246c83a010..837af1df05 100644 --- a/phpBB/includes/template/compile.php +++ b/phpBB/includes/template/compile.php @@ -2,7 +2,6 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2005 phpBB Group, sections (c) 2001 ispi of Lincoln Inc * @license http://opensource.org/licenses/gpl-license.php GNU Public License * diff --git a/phpBB/includes/template/context.php b/phpBB/includes/template/context.php index 3c0dceb981..169add036e 100644 --- a/phpBB/includes/template/context.php +++ b/phpBB/includes/template/context.php @@ -2,7 +2,6 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2011 phpBB Group * @license http://opensource.org/licenses/gpl-license.php GNU Public License * diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php index 1c64cdb8da..2332a8281e 100644 --- a/phpBB/includes/template/filter.php +++ b/phpBB/includes/template/filter.php @@ -2,7 +2,6 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2011 phpBB Group, sections (c) 2001 ispi of Lincoln Inc * @license http://opensource.org/licenses/gpl-license.php GNU Public License * diff --git a/phpBB/includes/template/renderer.php b/phpBB/includes/template/renderer.php index 0af2d94bb6..c15252fd83 100644 --- a/phpBB/includes/template/renderer.php +++ b/phpBB/includes/template/renderer.php @@ -2,7 +2,6 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2011 phpBB Group * @license http://opensource.org/licenses/gpl-license.php GNU Public License * diff --git a/phpBB/includes/template/renderer_eval.php b/phpBB/includes/template/renderer_eval.php index f3365ff8a7..6cbcf5ce40 100644 --- a/phpBB/includes/template/renderer_eval.php +++ b/phpBB/includes/template/renderer_eval.php @@ -2,7 +2,6 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2011 phpBB Group * @license http://opensource.org/licenses/gpl-license.php GNU Public License * diff --git a/phpBB/includes/template/renderer_include.php b/phpBB/includes/template/renderer_include.php index 28a8027df3..0e05630d55 100644 --- a/phpBB/includes/template/renderer_include.php +++ b/phpBB/includes/template/renderer_include.php @@ -2,7 +2,6 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2011 phpBB Group * @license http://opensource.org/licenses/gpl-license.php GNU Public License * -- cgit v1.2.1 From 6ae5a64f6c12937367ad56cac5e38104b445c780 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 19 May 2011 12:18:16 -0400 Subject: [feature/template-engine] Fixed absolute path PHP includes, added test. PHPBB3-9726 --- phpBB/includes/template.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template.php b/phpBB/includes/template.php index e99b9a8c6c..935605b12a 100644 --- a/phpBB/includes/template.php +++ b/phpBB/includes/template.php @@ -529,7 +529,14 @@ class phpbb_template */ public function _php_include($filename) { - $file = $this->phpbb_root_path . $filename; + if (is_absolute($filename)) + { + $file = $filename; + } + else + { + $file = $this->phpbb_root_path . $filename; + } if (!file_exists($file)) { -- cgit v1.2.1 From f231590c7b39a8e8503bcc3a7c9db593dde339dd Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 19 May 2011 12:31:06 -0400 Subject: [ticket/10156] Fix new cron on windows. PHPBB3-10156 --- phpBB/includes/cron/manager.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/cron/manager.php b/phpBB/includes/cron/manager.php index 21dcb91695..31be1a69cb 100644 --- a/phpBB/includes/cron/manager.php +++ b/phpBB/includes/cron/manager.php @@ -73,6 +73,14 @@ class phpbb_cron_manager */ public function __construct($task_path, $phpEx, phpbb_cache_driver_interface $cache = null) { + if (DIRECTORY_SEPARATOR != '/') + { + // Need this on some platforms since the code elsewhere uses / + // to separate directory components, but PHP iterators return + // paths with platform-specific directory separators. + $task_path = str_replace('/', DIRECTORY_SEPARATOR, $task_path); + } + $this->task_path = $task_path; $this->phpEx = $phpEx; $this->cache = $cache; @@ -116,9 +124,9 @@ class phpbb_cron_manager $file = preg_replace('#^' . preg_quote($this->task_path, '#') . '#', '', $fileinfo->getPathname()); // skip directories and files direclty in the task root path - if ($fileinfo->isFile() && strpos($file, '/') !== false) + if ($fileinfo->isFile() && strpos($file, DIRECTORY_SEPARATOR) !== false) { - $task_name = str_replace('/', '_', substr($file, 0, -$ext_length)); + $task_name = str_replace(DIRECTORY_SEPARATOR, '_', substr($file, 0, -$ext_length)); if (substr($file, -$ext_length) == $ext && $this->is_valid_name($task_name)) { $task_names[] = 'phpbb_cron_task_' . $task_name; -- cgit v1.2.1 From 8fa44cc3b9778f84ca20eab1c1d404c4f848eab4 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 19 Oct 2010 17:06:23 +0200 Subject: [ticket/8542] Display custom profile fields in private messages Introduce an option to display the cpf in the PM view. PHPBB3-8542 --- phpBB/adm/style/acp_profile.html | 4 ++ phpBB/develop/create_schema_files.php | 1 + phpBB/includes/acp/acp_board.php | 2 + phpBB/includes/acp/acp_profile.php | 6 ++- phpBB/includes/ucp/ucp_pm_viewmessage.php | 43 ++++++++++++++++++++++ phpBB/install/database_update.php | 6 +++ phpBB/install/schemas/firebird_schema.sql | 1 + phpBB/install/schemas/mssql_schema.sql | 1 + phpBB/install/schemas/mysql_40_schema.sql | 1 + phpBB/install/schemas/mysql_41_schema.sql | 1 + phpBB/install/schemas/oracle_schema.sql | 1 + phpBB/install/schemas/postgres_schema.sql | 1 + phpBB/install/schemas/schema_data.sql | 1 + phpBB/install/schemas/sqlite_schema.sql | 1 + phpBB/language/en/acp/board.php | 1 + phpBB/language/en/acp/profile.php | 2 + .../prosilver/template/ucp_pm_viewmessage.html | 7 +++- 17 files changed, 78 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_profile.html b/phpBB/adm/style/acp_profile.html index 85d37568c2..c1143e9ba4 100644 --- a/phpBB/adm/style/acp_profile.html +++ b/phpBB/adm/style/acp_profile.html @@ -55,6 +55,10 @@

    {L_DISPLAY_AT_REGISTER_EXPLAIN}
    checked="checked" />
    +
    +

    {L_DISPLAY_ON_PM_EXPLAIN}
    +
    checked="checked" />
    +

    {L_DISPLAY_ON_VT_EXPLAIN}
    checked="checked" />
    diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php index 8a4c4a329a..0abd0763d7 100644 --- a/phpBB/develop/create_schema_files.php +++ b/phpBB/develop/create_schema_files.php @@ -1413,6 +1413,7 @@ function get_schema_struct() 'field_validation' => array('VCHAR_UNI:20', ''), 'field_required' => array('BOOL', 0), 'field_show_on_reg' => array('BOOL', 0), + 'field_show_on_pm' => array('BOOL', 0), 'field_show_on_vt' => array('BOOL', 0), 'field_show_profile' => array('BOOL', 0), 'field_hide' => array('BOOL', 0), diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php index 6821073749..54cdcb8e32 100644 --- a/phpBB/includes/acp/acp_board.php +++ b/phpBB/includes/acp/acp_board.php @@ -96,6 +96,7 @@ class acp_board 'load_moderators' => array('lang' => 'YES_MODERATORS', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_jumpbox' => array('lang' => 'YES_JUMPBOX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_memberlist' => array('lang' => 'LOAD_CPF_MEMBERLIST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), + 'load_cpf_pm' => array('lang' => 'LOAD_CPF_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewprofile' => array('lang' => 'LOAD_CPF_VIEWPROFILE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewtopic' => array('lang' => 'LOAD_CPF_VIEWTOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), @@ -327,6 +328,7 @@ class acp_board 'legend3' => 'CUSTOM_PROFILE_FIELDS', 'load_cpf_memberlist' => array('lang' => 'LOAD_CPF_MEMBERLIST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), + 'load_cpf_pm' => array('lang' => 'LOAD_CPF_PM', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewprofile' => array('lang' => 'LOAD_CPF_VIEWPROFILE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'load_cpf_viewtopic' => array('lang' => 'LOAD_CPF_VIEWTOPIC', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), diff --git a/phpBB/includes/acp/acp_profile.php b/phpBB/includes/acp/acp_profile.php index ca6a5f04d2..a18a01c44a 100644 --- a/phpBB/includes/acp/acp_profile.php +++ b/phpBB/includes/acp/acp_profile.php @@ -370,6 +370,7 @@ class acp_profile 'field_show_profile'=> 0, 'field_no_view' => 0, 'field_show_on_reg' => 0, + 'field_show_on_pm' => 0, 'field_show_on_vt' => 0, 'lang_name' => utf8_normalize_nfc(request_var('field_ident', '', true)), 'lang_explain' => '', @@ -381,7 +382,7 @@ class acp_profile // $exclude contains the data we gather in each step $exclude = array( - 1 => array('field_ident', 'lang_name', 'lang_explain', 'field_option_none', 'field_show_on_reg', 'field_show_on_vt', 'field_required', 'field_hide', 'field_show_profile', 'field_no_view'), + 1 => array('field_ident', 'lang_name', 'lang_explain', 'field_option_none', 'field_show_on_reg', 'field_show_on_pm', 'field_show_on_vt', 'field_required', 'field_hide', 'field_show_profile', 'field_no_view'), 2 => array('field_length', 'field_maxlen', 'field_minlen', 'field_validation', 'field_novalue', 'field_default_value'), 3 => array('l_lang_name', 'l_lang_explain', 'l_lang_default_value', 'l_lang_options') ); @@ -407,6 +408,7 @@ class acp_profile $visibility_ary = array( 'field_required', 'field_show_on_reg', + 'field_show_on_pm', 'field_show_on_vt', 'field_show_profile', 'field_hide', @@ -734,6 +736,7 @@ class acp_profile 'S_STEP_ONE' => true, 'S_FIELD_REQUIRED' => ($cp->vars['field_required']) ? true : false, 'S_SHOW_ON_REG' => ($cp->vars['field_show_on_reg']) ? true : false, + 'S_SHOW_ON_PM' => ($cp->vars['field_show_on_pm']) ? true : false, 'S_SHOW_ON_VT' => ($cp->vars['field_show_on_vt']) ? true : false, 'S_FIELD_HIDE' => ($cp->vars['field_hide']) ? true : false, 'S_SHOW_PROFILE' => ($cp->vars['field_show_profile']) ? true : false, @@ -1050,6 +1053,7 @@ class acp_profile 'field_validation' => $cp->vars['field_validation'], 'field_required' => $cp->vars['field_required'], 'field_show_on_reg' => $cp->vars['field_show_on_reg'], + 'field_show_on_pm' => $cp->vars['field_show_on_pm'], 'field_show_on_vt' => $cp->vars['field_show_on_vt'], 'field_hide' => $cp->vars['field_hide'], 'field_show_profile' => $cp->vars['field_show_profile'], diff --git a/phpBB/includes/ucp/ucp_pm_viewmessage.php b/phpBB/includes/ucp/ucp_pm_viewmessage.php index 74a32a68c9..8b288f5de1 100644 --- a/phpBB/includes/ucp/ucp_pm_viewmessage.php +++ b/phpBB/includes/ucp/ucp_pm_viewmessage.php @@ -59,6 +59,18 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row) $bbcode = new bbcode($message_row['bbcode_bitfield']); } + // Load the custom profile fields + if ($config['load_cpf_pm']) + { + if (!class_exists('custom_profile')) + { + include($phpbb_root_path . 'includes/functions_profile_fields.' . $phpEx); + } + $cp = new custom_profile(); + + $profile_fields = $cp->generate_profile_fields_template('grab', $author_id); + } + // Assign TO/BCC Addresses to template write_pm_addresses(array('to' => $message_row['to_address'], 'bcc' => $message_row['bcc_address']), $author_id); @@ -174,6 +186,25 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row) $bbcode_status = ($config['allow_bbcode'] && $config['auth_bbcode_pm'] && $auth->acl_get('u_pm_bbcode')) ? true : false; + // Get the profile fields template data + $cp_row = array(); + if ($config['load_cpf_pm'] && isset($profile_fields[$author_id])) + { + // Filter the fields we don't want to show + foreach ($profile_fields[$author_id] as $used_ident => $profile_field) + { + if (!$profile_field['data']['field_show_on_pm']) + { + unset($profile_fields[$author_id][$used_ident]); + } + } + + if (isset($profile_fields[$author_id])) + { + $cp_row = $cp->generate_profile_fields_template('show', false, $profile_fields[$author_id]); + } + } + $template->assign_vars(array( 'MESSAGE_AUTHOR_FULL' => get_username_string('full', $author_id, $user_info['username'], $user_info['user_colour'], $user_info['username']), 'MESSAGE_AUTHOR_COLOUR' => get_username_string('colour', $author_id, $user_info['username'], $user_info['user_colour'], $user_info['username']), @@ -232,11 +263,23 @@ function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row) 'S_SPECIAL_FOLDER' => in_array($folder_id, array(PRIVMSGS_NO_BOX, PRIVMSGS_OUTBOX)), 'S_PM_RECIPIENTS' => $num_recipients, 'S_BBCODE_ALLOWED' => ($bbcode_status) ? 1 : 0, + 'S_CUSTOM_FIELDS' => (!empty($cp_row['row'])) ? true : false, 'U_PRINT_PM' => ($config['print_pm'] && $auth->acl_get('u_pm_printpm')) ? "$url&f=$folder_id&p=" . $message_row['msg_id'] . "&view=print" : '', 'U_FORWARD_PM' => ($config['forward_pm'] && $auth->acl_get('u_sendpm') && $auth->acl_get('u_pm_forward')) ? "$url&mode=compose&action=forward&f=$folder_id&p=" . $message_row['msg_id'] : '') ); + // Display the custom profile fields + if (!empty($cp_row['row'])) + { + $template->assign_vars($cp_row['row']); + + foreach ($cp_row['blockrow'] as $cp_block_row) + { + $template->assign_block_vars('custom_fields', $cp_block_row); + } + } + // Display not already displayed Attachments for this post, we already parsed them. ;) if (isset($attachments) && sizeof($attachments)) { diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index cf611ca951..d646e200a3 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -936,6 +936,9 @@ function database_update_info() GROUPS_TABLE => array( 'group_teampage' => array('UINT', 0, 'after' => 'group_legend'), ), + PROFILE_FIELDS_TABLE => array( + 'field_show_on_pm' => array('BOOL', 0), + ), ), 'change_columns' => array( GROUPS_TABLE => array( @@ -1962,6 +1965,9 @@ function change_database_data(&$no_updates, $version) _add_modules($modules_to_install); + // Allow custom profile fields in pm templates + set_config('load_cpf_pm', '0'); + $no_updates = false; break; } diff --git a/phpBB/install/schemas/firebird_schema.sql b/phpBB/install/schemas/firebird_schema.sql index e16b4ab64c..73b9a283de 100644 --- a/phpBB/install/schemas/firebird_schema.sql +++ b/phpBB/install/schemas/firebird_schema.sql @@ -793,6 +793,7 @@ CREATE TABLE phpbb_profile_fields ( field_validation VARCHAR(20) CHARACTER SET UTF8 DEFAULT '' NOT NULL COLLATE UNICODE, field_required INTEGER DEFAULT 0 NOT NULL, field_show_on_reg INTEGER DEFAULT 0 NOT NULL, + field_show_on_pm INTEGER DEFAULT 0 NOT NULL, field_show_on_vt INTEGER DEFAULT 0 NOT NULL, field_show_profile INTEGER DEFAULT 0 NOT NULL, field_hide INTEGER DEFAULT 0 NOT NULL, diff --git a/phpBB/install/schemas/mssql_schema.sql b/phpBB/install/schemas/mssql_schema.sql index a14e246c8f..f73f0134db 100644 --- a/phpBB/install/schemas/mssql_schema.sql +++ b/phpBB/install/schemas/mssql_schema.sql @@ -950,6 +950,7 @@ CREATE TABLE [phpbb_profile_fields] ( [field_validation] [varchar] (20) DEFAULT ('') NOT NULL , [field_required] [int] DEFAULT (0) NOT NULL , [field_show_on_reg] [int] DEFAULT (0) NOT NULL , + [field_show_on_pm] [int] DEFAULT (0) NOT NULL , [field_show_on_vt] [int] DEFAULT (0) NOT NULL , [field_show_profile] [int] DEFAULT (0) NOT NULL , [field_hide] [int] DEFAULT (0) NOT NULL , diff --git a/phpBB/install/schemas/mysql_40_schema.sql b/phpBB/install/schemas/mysql_40_schema.sql index 3b79afa942..6da9a71420 100644 --- a/phpBB/install/schemas/mysql_40_schema.sql +++ b/phpBB/install/schemas/mysql_40_schema.sql @@ -557,6 +557,7 @@ CREATE TABLE phpbb_profile_fields ( field_validation varbinary(60) DEFAULT '' NOT NULL, field_required tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, field_show_on_reg tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, + field_show_on_pm tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, field_show_on_vt tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, field_show_profile tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, field_hide tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, diff --git a/phpBB/install/schemas/mysql_41_schema.sql b/phpBB/install/schemas/mysql_41_schema.sql index a4b34c05db..743105e485 100644 --- a/phpBB/install/schemas/mysql_41_schema.sql +++ b/phpBB/install/schemas/mysql_41_schema.sql @@ -557,6 +557,7 @@ CREATE TABLE phpbb_profile_fields ( field_validation varchar(20) DEFAULT '' NOT NULL, field_required tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, field_show_on_reg tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, + field_show_on_pm tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, field_show_on_vt tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, field_show_profile tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, field_hide tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, diff --git a/phpBB/install/schemas/oracle_schema.sql b/phpBB/install/schemas/oracle_schema.sql index 9b516b4a56..13c7303a0d 100644 --- a/phpBB/install/schemas/oracle_schema.sql +++ b/phpBB/install/schemas/oracle_schema.sql @@ -1064,6 +1064,7 @@ CREATE TABLE phpbb_profile_fields ( field_validation varchar2(60) DEFAULT '' , field_required number(1) DEFAULT '0' NOT NULL, field_show_on_reg number(1) DEFAULT '0' NOT NULL, + field_show_on_pm number(1) DEFAULT '0' NOT NULL, field_show_on_vt number(1) DEFAULT '0' NOT NULL, field_show_profile number(1) DEFAULT '0' NOT NULL, field_hide number(1) DEFAULT '0' NOT NULL, diff --git a/phpBB/install/schemas/postgres_schema.sql b/phpBB/install/schemas/postgres_schema.sql index 1b9c1a75aa..d2634c7d40 100644 --- a/phpBB/install/schemas/postgres_schema.sql +++ b/phpBB/install/schemas/postgres_schema.sql @@ -744,6 +744,7 @@ CREATE TABLE phpbb_profile_fields ( field_validation varchar(20) DEFAULT '' NOT NULL, field_required INT2 DEFAULT '0' NOT NULL CHECK (field_required >= 0), field_show_on_reg INT2 DEFAULT '0' NOT NULL CHECK (field_show_on_reg >= 0), + field_show_on_pm INT2 DEFAULT '0' NOT NULL CHECK (field_show_on_pm >= 0), field_show_on_vt INT2 DEFAULT '0' NOT NULL CHECK (field_show_on_vt >= 0), field_show_profile INT2 DEFAULT '0' NOT NULL CHECK (field_show_profile >= 0), field_hide INT2 DEFAULT '0' NOT NULL CHECK (field_hide >= 0), diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index f3259b8fe3..76bb6fd6cb 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -157,6 +157,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('limit_search_load' INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_anon_lastread', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_birthdays', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_cpf_memberlist', '0'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_cpf_profile', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_cpf_viewprofile', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_cpf_viewtopic', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('load_db_lastread', '1'); diff --git a/phpBB/install/schemas/sqlite_schema.sql b/phpBB/install/schemas/sqlite_schema.sql index 9344a29929..0c706d67dd 100644 --- a/phpBB/install/schemas/sqlite_schema.sql +++ b/phpBB/install/schemas/sqlite_schema.sql @@ -540,6 +540,7 @@ CREATE TABLE phpbb_profile_fields ( field_validation varchar(20) NOT NULL DEFAULT '', field_required INTEGER UNSIGNED NOT NULL DEFAULT '0', field_show_on_reg INTEGER UNSIGNED NOT NULL DEFAULT '0', + field_show_on_pm INTEGER UNSIGNED NOT NULL DEFAULT '0', field_show_on_vt INTEGER UNSIGNED NOT NULL DEFAULT '0', field_show_profile INTEGER UNSIGNED NOT NULL DEFAULT '0', field_hide INTEGER UNSIGNED NOT NULL DEFAULT '0', diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php index fe023958a9..084076d8dc 100644 --- a/phpBB/language/en/acp/board.php +++ b/phpBB/language/en/acp/board.php @@ -353,6 +353,7 @@ $lang = array_merge($lang, array( 'LIMIT_SESSIONS' => 'Limit sessions', 'LIMIT_SESSIONS_EXPLAIN' => 'If the number of sessions exceeds this value within a one minute period the board will go offline. Set to 0 for unlimited sessions.', 'LOAD_CPF_MEMBERLIST' => 'Allow styles to display custom profile fields in memberlist', + 'LOAD_CPF_PM' => 'Display custom profile fields in private messages', 'LOAD_CPF_VIEWPROFILE' => 'Display custom profile fields in user profiles', 'LOAD_CPF_VIEWTOPIC' => 'Display custom profile fields on topic pages', 'LOAD_USER_ACTIVITY' => 'Show user’s activity', diff --git a/phpBB/language/en/acp/profile.php b/phpBB/language/en/acp/profile.php index 31a82fd38f..ea643157d8 100644 --- a/phpBB/language/en/acp/profile.php +++ b/phpBB/language/en/acp/profile.php @@ -66,6 +66,8 @@ $lang = array_merge($lang, array( 'DISPLAY_AT_PROFILE_EXPLAIN' => 'The user is able to change this profile field within the user control panel.', 'DISPLAY_AT_REGISTER' => 'Display on registration screen', 'DISPLAY_AT_REGISTER_EXPLAIN' => 'If this option is enabled, the field will be displayed on registration.', + 'DISPLAY_ON_PM' => 'Display on view pm screen', + 'DISPLAY_ON_PM_EXPLAIN' => 'If this option is enabled, the field will be displayed in the mini-profile on the pm screen.', 'DISPLAY_ON_VT' => 'Display on viewtopic screen', 'DISPLAY_ON_VT_EXPLAIN' => 'If this option is enabled, the field will be displayed in the mini-profile on the topic screen.', 'DISPLAY_PROFILE_FIELD' => 'Publicly display profile field', diff --git a/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html b/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html index af5213ae30..5317068d89 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html +++ b/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html @@ -69,7 +69,12 @@
    {L_POSTS}: {AUTHOR_POSTS}
    {L_JOINED}: {AUTHOR_JOINED}
    {L_LOCATION}: {AUTHOR_FROM}
    - + + +
    {custom_fields.PROFILE_FIELD_NAME}: {custom_fields.PROFILE_FIELD_VALUE}
    + + +
      -- cgit v1.2.1 From 9b62500a1068fd9c17409e435b53a33bb1cf6838 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 22 May 2011 06:48:59 -0400 Subject: [ticket/10188] Use ob_get_level in msg_handler for output buffering check. Output buffering may be enabled via various approaches, among them: * output_buffering in php.ini; * output_handler in php.ini enables output_buffering; * ob_start call. ob_get_level allows us to query php runtime for the actual output buffering status. PHPBB3-10188 --- phpBB/includes/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index ceaf426850..9f1d39118a 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3743,7 +3743,7 @@ function msg_handler($errno, $msg_text, $errfile, $errline) if (strpos($errfile, 'cache') === false && strpos($errfile, 'template.') === false) { // flush the content, else we get a white page if output buffering is on - if ((int) @ini_get('output_buffering') === 1 || strtolower(@ini_get('output_buffering')) === 'on') + if (ob_get_level() > 0) { @ob_flush(); } -- cgit v1.2.1 From 44cc8153cdfedda1d0733655bc13e5e9beac3431 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 22 May 2011 07:16:40 -0400 Subject: [ticket/10191] Use ob_get_level in exit_handler for output buffering check. Calling flush() when output buffering is enabled causes output to be duplicated. Besides phpBB enabling output buffering for gzip compression, output buffering may be enabled externally to phpBB via output_handler or output_buffering directives in php.ini. Use ob_get_level to determine whether output buffering is active and call ob_flush in that case. PHPBB3-10191 --- phpBB/includes/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index ceaf426850..22373f6d63 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4719,7 +4719,7 @@ function exit_handler() } // As a pre-caution... some setups display a blank page if the flush() is not there. - (empty($config['gzip_compress'])) ? @flush() : @ob_flush(); + (ob_get_level() > 0) ? @ob_flush() : @flush(); exit; } -- cgit v1.2.1 From b5e5ed003346b50ac60b40827498bf974e255f42 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Erik=20Fr=C3=A8rejean?= Date: Mon, 23 May 2011 11:00:58 +0200 Subject: [ticket/10192] Add missing semicolon if the index has to be recreated it will run into the private message table query. PHPBB3-10192 --- phpBB/develop/mysql_upgrader.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/develop/mysql_upgrader.php b/phpBB/develop/mysql_upgrader.php index 70c8173a32..dec8f8c210 100644 --- a/phpBB/develop/mysql_upgrader.php +++ b/phpBB/develop/mysql_upgrader.php @@ -253,7 +253,7 @@ foreach ($schema_data as $table_name => $table_data) // Do we now need to re-add the fulltext index? ;) if ($table_name == ($prefix . 'posts') && $drop_index) { - echo "ALTER TABLE $table_name ADD FULLTEXT (post_subject), ADD FULLTEXT (post_text), ADD FULLTEXT post_content (post_subject, post_text){$newline}"; + echo "ALTER TABLE $table_name ADD FULLTEXT (post_subject), ADD FULLTEXT (post_text), ADD FULLTEXT post_content (post_subject, post_text);{$newline}"; } } -- cgit v1.2.1 From 67449f8f1b1b9eff8430a77d16d6ee2dac1210d9 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 23 May 2011 12:01:11 +0200 Subject: [ticket/10158] Only view "Return to" links if they are useful. PHPBB3-10158 --- phpBB/includes/ucp/ucp_pm_compose.php | 42 ++++++++++++++++++++++++++++------- phpBB/language/en/ucp.php | 1 + 2 files changed, 35 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_pm_compose.php b/phpBB/includes/ucp/ucp_pm_compose.php index 6ea702570e..78b2e7a348 100644 --- a/phpBB/includes/ucp/ucp_pm_compose.php +++ b/phpBB/includes/ucp/ucp_pm_compose.php @@ -135,6 +135,7 @@ function compose_pm($id, $mode, $action, $user_folders = array()) } $sql = ''; + $folder_id = 0; // What is all this following SQL for? Well, we need to know // some basic information in all cases before we do anything. @@ -744,18 +745,43 @@ function compose_pm($id, $mode, $action, $user_folders = array()) $inbox_folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'); $outbox_folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=outbox'); - $folder_return_message = ''; - $return_message_url = $inbox_folder_url; - if ($folder_id && isset($user_folders[$folder_id])) + $folder_url = ''; + if (($folder_id > 0) && isset($user_folders[$folder_id])) { - $return_message_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=' . $folder_id); - $folder_return_message = '

      ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user_folders[$folder_id]['folder_name']); + $folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=' . $folder_id); } $message = $user->lang['MESSAGE_STORED'] . '

      ' . sprintf($user->lang['VIEW_PRIVATE_MESSAGE'], '', ''); - $message .= $folder_return_message; - $message .= '

      ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_INBOX']); - $message .= '

      ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_OUTBOX']); + switch ($action) + { + case 'post': + case 'edit': + if ($folder_url) + { + $message .= '

      ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user_folders[$folder_id]['folder_name']); + $message .= '

      ' . sprintf($user->lang['CLICK_GOTO_FOLDER'], '', '', $user->lang['PM_OUTBOX']); + } + else + { + $message .= '

      ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_OUTBOX']); + } + break; + + case 'quote': + case 'quotepost': + case 'reply': + case 'forward': + if ($folder_url) + { + $message .= '

      ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user_folders[$folder_id]['folder_name']); + $message .= '

      ' . sprintf($user->lang['CLICK_GOTO_FOLDER'], '', '', $user->lang['PM_INBOX']); + } + else + { + $message .= '

      ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_INBOX']); + } + break; + } meta_refresh(3, $return_message_url); trigger_error($message); diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 02b8a282d9..ad7c1ccbff 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -119,6 +119,7 @@ $lang = array_merge($lang, array( 'CANNOT_REMOVE_FOLDER' => 'This folder cannot be removed.', 'CHANGE_DEFAULT_GROUP' => 'Change default group', 'CHANGE_PASSWORD' => 'Change password', + 'CLICK_GOTO_FOLDER' => '%1$sGo to your “%3$s†folder%2$s', 'CLICK_RETURN_FOLDER' => '%1$sReturn to your “%3$s†folder%2$s', 'CONFIRMATION' => 'Confirmation of registration', 'CONFIRM_CHANGES' => 'Confirm changes', -- cgit v1.2.1 From 83dfe0d22c71df8e5701c812d304ef8918c3190f Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 26 May 2011 10:43:14 +0200 Subject: [ticket/10195] Return false in session::check_dnsbl() when IPv6 is passed. There is no support for IPv6 addresses in the blacklists we check right now. PHPBB3-10195 --- phpBB/includes/session.php | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index d803f8d799..2181375dc1 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1238,6 +1238,12 @@ class session $ip = $this->ip; } + // Neither Spamhaus nor Spamcop supports IPv6 addresses. + if (strpos($ip, ':') !== false) + { + return false; + } + $dnsbl_check = array( 'sbl.spamhaus.org' => 'http://www.spamhaus.org/query/bl?ip=', ); -- cgit v1.2.1 From ebe83769e6efff249f94e5337dcd8fd16593a290 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 2 Jun 2011 01:45:12 +0200 Subject: [ticket/9685] Consistently name the new sql_buffer_nested_transactions function PHPBB3-9685 --- phpBB/includes/db/dbal.php | 2 +- phpBB/includes/db/mssqlnative.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index d7860fc8bc..2f9619c8ea 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -246,7 +246,7 @@ class dbal * * @return bool Whether buffering is required. */ - function sql_buffer_nested_transaction() + function sql_buffer_nested_transactions() { return false; } diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index e057e7fe74..6810562d17 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -261,7 +261,7 @@ class dbal_mssqlnative extends dbal /** * {@inheritDoc} */ - function sql_buffer_nested_transaction() + function sql_buffer_nested_transactions() { return true; } -- cgit v1.2.1 From 324c913ac9eb3ce158d1c735ee49b62a06d8327b Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 2 Jun 2011 06:24:28 +0200 Subject: [ticket/9950] Use actual language instead of user's language in overall header PHPBB3-9950 --- phpBB/includes/functions.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 791aa09010..2d9d2c225f 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4529,7 +4529,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'T_TEMPLATE_PATH' => "{$web_path}styles/" . $user->theme['template_path'] . '/template', 'T_SUPER_TEMPLATE_PATH' => (isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? "{$web_path}styles/" . $user->theme['template_inherit_path'] . '/template' : "{$web_path}styles/" . $user->theme['template_path'] . '/template', 'T_IMAGESET_PATH' => "{$web_path}styles/" . $user->theme['imageset_path'] . '/imageset', - 'T_IMAGESET_LANG_PATH' => "{$web_path}styles/" . $user->theme['imageset_path'] . '/imageset/' . $user->data['user_lang'], + 'T_IMAGESET_LANG_PATH' => "{$web_path}styles/" . $user->theme['imageset_path'] . '/imageset/' . $user->lang_name, 'T_IMAGES_PATH' => "{$web_path}images/", 'T_SMILIES_PATH' => "{$web_path}{$config['smilies_path']}/", 'T_AVATAR_PATH' => "{$web_path}{$config['avatar_path']}/", @@ -4537,7 +4537,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'T_ICONS_PATH' => "{$web_path}{$config['icons_path']}/", 'T_RANKS_PATH' => "{$web_path}{$config['ranks_path']}/", 'T_UPLOAD_PATH' => "{$web_path}{$config['upload_path']}/", - 'T_STYLESHEET_LINK' => (!$user->theme['theme_storedb']) ? "{$web_path}styles/" . $user->theme['theme_path'] . '/theme/stylesheet.css' : append_sid("{$phpbb_root_path}style.$phpEx", 'id=' . $user->theme['style_id'] . '&lang=' . $user->data['user_lang']), + 'T_STYLESHEET_LINK' => (!$user->theme['theme_storedb']) ? "{$web_path}styles/" . $user->theme['theme_path'] . '/theme/stylesheet.css' : append_sid("{$phpbb_root_path}style.$phpEx", 'id=' . $user->theme['style_id'] . '&lang=' . $user->lang_name), 'T_STYLESHEET_NAME' => $user->theme['theme_name'], 'T_THEME_NAME' => $user->theme['theme_path'], -- cgit v1.2.1 From 7b10f859decdb5d97ffe97e647db52f29f4661f8 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 2 Jun 2011 08:45:48 +0200 Subject: [ticket/10005] Add validation of dropdown custom profile field values PHPBB3-10005 --- phpBB/includes/functions_profile_fields.php | 14 +++++++++++++- phpBB/language/en/ucp.php | 1 + 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_profile_fields.php b/phpBB/includes/functions_profile_fields.php index 78fe049f40..1eae2a9ad6 100644 --- a/phpBB/includes/functions_profile_fields.php +++ b/phpBB/includes/functions_profile_fields.php @@ -149,7 +149,18 @@ class custom_profile case FIELD_DROPDOWN: $field_value = (int) $field_value; - + + // retrieve option lang data if necessary + if (!isset($this->options_lang[$field_data['field_id']]) || !isset($this->options_lang[$field_data['field_id']][$field_data['lang_id']]) || !sizeof($this->options_lang[$file_data['field_id']][$field_data['lang_id']])) + { + $this->get_option_lang($field_data['field_id'], $field_data['lang_id'], FIELD_DROPDOWN, false); + } + + if (!isset($this->options_lang[$field_data['field_id']][$field_data['lang_id']][$field_value])) + { + return 'FIELD_INVALID_VALUE'; + } + if ($field_value == $field_data['field_novalue'] && $field_data['field_required']) { return 'FIELD_REQUIRED'; @@ -302,6 +313,7 @@ class custom_profile switch ($cp_result) { case 'FIELD_INVALID_DATE': + case 'FIELD_INVALID_VALUE': case 'FIELD_REQUIRED': $error = sprintf($user->lang[$cp_result], $row['lang_name']); break; diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 02b8a282d9..6de6e4856a 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -194,6 +194,7 @@ $lang = array_merge($lang, array( 'FIELD_INVALID_CHARS_ALPHA_ONLY' => 'The field “%s†has invalid characters, only alphanumeric characters are allowed.', 'FIELD_INVALID_CHARS_SPACERS_ONLY' => 'The field “%s†has invalid characters, only alphanumeric, space or -+_[] characters are allowed.', 'FIELD_INVALID_DATE' => 'The field “%s†has an invalid date.', + 'FIELD_INVALID_VALUE' => 'The field “%s†has an invalid value.', 'FOE_MESSAGE' => 'Message from foe', 'FOES_EXPLAIN' => 'Foes are users which will be ignored by default. Posts by these users will not be fully visible. Personal messages from foes are still permitted. Please note that you cannot ignore moderators or administrators.', -- cgit v1.2.1 From d270f736e3a553042879b9a7918d2e9bd513c659 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 2 Jun 2011 09:48:49 +0200 Subject: [ticket/7057] Remove trailing whitespace in functions.php PHPBB3-7057 --- phpBB/includes/functions.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 9a8cc5d6b3..7cbf314309 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3434,7 +3434,7 @@ function get_preg_expression($mode) * Depends on whether installed PHP version supports unicode properties * * @param string $word word template to be replaced -* @param bool $use_unicode whether or not to take advantage of PCRE supporting unicode +* @param bool $use_unicode whether or not to take advantage of PCRE supporting unicode * * @return string $preg_expr regex to use with word censor */ @@ -3544,7 +3544,7 @@ function phpbb_checkdnsrr($host, $type = 'MX') // but until 5.3.3 it only works for MX records // See: http://bugs.php.net/bug.php?id=51844 - // Call checkdnsrr() if + // Call checkdnsrr() if // we're looking for an MX record or // we're not on Windows or // we're running a PHP version where #51844 has been fixed @@ -3564,7 +3564,7 @@ function phpbb_checkdnsrr($host, $type = 'MX') // dns_get_record() is available since PHP 5; since PHP 5.3 also on Windows, // but on Windows it does not work reliable for AAAA records before PHP 5.3.1 - // Call dns_get_record() if + // Call dns_get_record() if // we're not looking for an AAAA record or // we're not on Windows or // we're running a PHP version where AAAA lookups work reliable @@ -3594,7 +3594,7 @@ function phpbb_checkdnsrr($host, $type = 'MX') foreach ($resultset as $result) { if ( - isset($result['host']) && $result['host'] == $host && + isset($result['host']) && $result['host'] == $host && isset($result['type']) && $result['type'] == $type ) { -- cgit v1.2.1 From 6e8b59dce32032cafeb39c3dc1dfe16e20194683 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 2 Jun 2011 09:44:02 +0200 Subject: [ticket/7057] Use GET for quicksearch and add session id to hidden fields Without sid a GET form logs a user out if they have cookies disabled. PHPBB3-7057 --- phpBB/includes/functions.php | 8 ++++++++ phpBB/styles/prosilver/template/overall_header.html | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 7cbf314309..ded69d7150 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4422,6 +4422,12 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 $user_lang = substr($user_lang, 0, strpos($user_lang, '-x-')); } + $s_search_hidden_fields = array(); + if ($_SID) + { + $s_search_hidden_fields['sid'] = $_SID; + } + // The following assigns all _common_ variables that may be used at any point in a template. $template->assign_vars(array( 'SITENAME' => $config['sitename'], @@ -4511,6 +4517,8 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'S_LOAD_UNREADS' => ($config['load_unreads_search'] && ($config['load_anon_lastread'] || $user->data['is_registered'])) ? true : false, + 'S_SEARCH_HIDDEN_FIELDS' => build_hidden_fields($s_search_hidden_fields), + 'T_THEME_PATH' => "{$web_path}styles/" . $user->theme['theme_path'] . '/theme', 'T_TEMPLATE_PATH' => "{$web_path}styles/" . $user->theme['template_path'] . '/template', 'T_SUPER_TEMPLATE_PATH' => (isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? "{$web_path}styles/" . $user->theme['template_inherit_path'] . '/template' : "{$web_path}styles/" . $user->theme['template_path'] . '/template', diff --git a/phpBB/styles/prosilver/template/overall_header.html b/phpBB/styles/prosilver/template/overall_header.html index e537aabf56..ca9ba8ef34 100644 --- a/phpBB/styles/prosilver/template/overall_header.html +++ b/phpBB/styles/prosilver/template/overall_header.html @@ -117,7 +117,7 @@

    {L_FORUM_PASSWORD_EXPLAIN}
    -
    +

    {L_FORUM_PASSWORD_CONFIRM_EXPLAIN}
    -
    +
    diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index 911dcad293..9237e45daf 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -43,19 +43,19 @@
    -
    +

    {L_CONFIRM_EMAIL_EXPLAIN}
    -
    +

    {L_CHANGE_PASSWORD_EXPLAIN}
    -
    +

    {L_CONFIRM_PASSWORD_EXPLAIN}
    -
    +

    -- cgit v1.2.1 From f11ef89c657b0386ea5686dd8cc35dff79690adb Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 3 Jun 2011 19:06:12 +0200 Subject: [ticket/8138] Add autocomplete="off" to acp_board and ldap settings PHPBB3-8138 --- phpBB/adm/index.php | 2 +- phpBB/includes/auth/auth_ldap.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/index.php b/phpBB/adm/index.php index dd8f4c279d..f673e2af05 100644 --- a/phpBB/adm/index.php +++ b/phpBB/adm/index.php @@ -276,7 +276,7 @@ function build_cfg_template($tpl_type, $key, &$new, $config_key, $vars) $size = (int) $tpl_type[1]; $maxlength = (int) $tpl_type[2]; - $tpl = ''; + $tpl = ''; break; case 'dimension': diff --git a/phpBB/includes/auth/auth_ldap.php b/phpBB/includes/auth/auth_ldap.php index e8c957aaa3..5dfa74ddab 100644 --- a/phpBB/includes/auth/auth_ldap.php +++ b/phpBB/includes/auth/auth_ldap.php @@ -335,7 +335,7 @@ function acp_ldap(&$new)


    ' . $user->lang['LDAP_PASSWORD_EXPLAIN'] . '
    -
    +
    '; -- cgit v1.2.1 From 6b6705b852bcd2a86735fa99d00a77426bf12813 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Sun, 5 Jun 2011 01:57:43 +0200 Subject: [ticket/10158] Remove some code duplication from generating the message. PHPBB3-10158 --- phpBB/includes/ucp/ucp_pm_compose.php | 38 +++++++++-------------------------- 1 file changed, 10 insertions(+), 28 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_pm_compose.php b/phpBB/includes/ucp/ucp_pm_compose.php index 78b2e7a348..05243e3d7a 100644 --- a/phpBB/includes/ucp/ucp_pm_compose.php +++ b/phpBB/includes/ucp/ucp_pm_compose.php @@ -751,37 +751,19 @@ function compose_pm($id, $mode, $action, $user_folders = array()) $folder_url = append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=' . $folder_id); } + $return_box_url = ($action === 'post' || $action === 'edit') ? $outbox_folder_url : $inbox_folder_url; + $return_box_lang = ($action === 'post' || $action === 'edit') ? 'PM_OUTBOX' : 'PM_INBOX'; + + $message = $user->lang['MESSAGE_STORED'] . '

    ' . sprintf($user->lang['VIEW_PRIVATE_MESSAGE'], '', ''); - switch ($action) - { - case 'post': - case 'edit': - if ($folder_url) - { - $message .= '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user_folders[$folder_id]['folder_name']); - $message .= '

    ' . sprintf($user->lang['CLICK_GOTO_FOLDER'], '', '', $user->lang['PM_OUTBOX']); - } - else - { - $message .= '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_OUTBOX']); - } - break; - case 'quote': - case 'quotepost': - case 'reply': - case 'forward': - if ($folder_url) - { - $message .= '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user_folders[$folder_id]['folder_name']); - $message .= '

    ' . sprintf($user->lang['CLICK_GOTO_FOLDER'], '', '', $user->lang['PM_INBOX']); - } - else - { - $message .= '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user->lang['PM_INBOX']); - } - break; + $last_click_type = 'CLICK_RETURN_FOLDER'; + if ($folder_url) + { + $message .= '

    ' . sprintf($user->lang['CLICK_RETURN_FOLDER'], '', '', $user_folders[$folder_id]['folder_name']); + $last_click_type = 'CLICK_GOTO_FOLDER'; } + $message .= '

    ' . sprintf($user->lang[$last_click_type], '', '', $user->lang[$return_box_lang]); meta_refresh(3, $return_message_url); trigger_error($message); -- cgit v1.2.1 From 26e052bb26a683bff17d86ae2beecc66ffcd93cf Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Sun, 5 Jun 2011 09:52:17 +0200 Subject: [ticket/10067] Add separator to h_radio to place options on individual lines The previous mechanism for account activation resulted in two h_radio calls with identical id attributes for two elements. PHPBB3/10067 --- phpBB/adm/index.php | 4 ++-- phpBB/includes/acp/acp_board.php | 17 +++++++++-------- 2 files changed, 11 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/index.php b/phpBB/adm/index.php index dd8f4c279d..74e51a8696 100644 --- a/phpBB/adm/index.php +++ b/phpBB/adm/index.php @@ -237,7 +237,7 @@ function build_select($option_ary, $option_default = false) /** * Build radio fields in acp pages */ -function h_radio($name, &$input_ary, $input_default = false, $id = false, $key = false) +function h_radio($name, $input_ary, $input_default = false, $id = false, $key = false, $separator = '') { global $user; @@ -246,7 +246,7 @@ function h_radio($name, &$input_ary, $input_default = false, $id = false, $key = foreach ($input_ary as $value => $title) { $selected = ($input_default !== false && $value == $input_default) ? ' checked="checked"' : ''; - $html .= ''; + $html .= '' . $separator; $id_assigned = true; } diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php index 8f7d08cc8f..d38c4d58ba 100644 --- a/phpBB/includes/acp/acp_board.php +++ b/phpBB/includes/acp/acp_board.php @@ -769,18 +769,19 @@ class acp_board { global $user, $config; - $radio_ary = array(USER_ACTIVATION_DISABLE => 'ACC_DISABLE', USER_ACTIVATION_NONE => 'ACC_NONE'); - $radio_text = h_radio('config[require_activation]', $radio_ary, $value, $key); + $radio_ary = array( + USER_ACTIVATION_DISABLE => 'ACC_DISABLE', + USER_ACTIVATION_NONE => 'ACC_NONE', + ); + if ($config['email_enable']) { - $radio_ary = array(USER_ACTIVATION_SELF => 'ACC_USER', USER_ACTIVATION_ADMIN => 'ACC_ADMIN'); - // With longer labels the four options no longer fit - // onto a single line. Separate them onto two lines. - // This also requires two h_radio calls to generate HTML. - $radio_text .= '

    '; - $radio_text .= h_radio('config[require_activation]', $radio_ary, $value, $key); + $radio_ary[USER_ACTIVATION_SELF] = 'ACC_USER'; + $radio_ary[USER_ACTIVATION_ADMIN] = 'ACC_ADMIN'; } + $radio_text = h_radio('config[require_activation]', $radio_ary, $value, 'require_activation', $key, '
    '); + return $radio_text; } -- cgit v1.2.1 From 16ab0d8c264d88db5e3e961e66e6820b365f45ac Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 17 Apr 2011 17:58:11 +0800 Subject: [ticket/217] Multiline [url] not converted This is the second attempt parse multiline URL text, see the ticket comments. PHPBB3-217 --- phpBB/includes/message_parser.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php index 6951dcf820..8f5e72cbf7 100644 --- a/phpBB/includes/message_parser.php +++ b/phpBB/includes/message_parser.php @@ -109,13 +109,15 @@ class bbcode_firstpass extends bbcode // This array holds all bbcode data. BBCodes will be processed in this // order, so it is important to keep [code] in first position and // [quote] in second position. + // To parse multiline URL we enable dotall option setting only for URL text + // but not for link itself, thus [url][/url] is not affected. $this->bbcodes = array( 'code' => array('bbcode_id' => 8, 'regexp' => array('#\[code(?:=([a-z]+))?\](.+\[/code\])#uise' => "\$this->bbcode_code('\$1', '\$2')")), 'quote' => array('bbcode_id' => 0, 'regexp' => array('#\[quote(?:="(.*?)")?\](.+)\[/quote\]#uise' => "\$this->bbcode_quote('\$0')")), 'attachment' => array('bbcode_id' => 12, 'regexp' => array('#\[attachment=([0-9]+)\](.*?)\[/attachment\]#uise' => "\$this->bbcode_attachment('\$1', '\$2')")), 'b' => array('bbcode_id' => 1, 'regexp' => array('#\[b\](.*?)\[/b\]#uise' => "\$this->bbcode_strong('\$1')")), 'i' => array('bbcode_id' => 2, 'regexp' => array('#\[i\](.*?)\[/i\]#uise' => "\$this->bbcode_italic('\$1')")), - 'url' => array('bbcode_id' => 3, 'regexp' => array('#\[url(=(.*))?\](.*)\[/url\]#uiUe' => "\$this->validate_url('\$2', '\$3')")), + 'url' => array('bbcode_id' => 3, 'regexp' => array('#\[url(=(.*))?\](?(1)((?s).*(?-s))|(.*))\[/url\]#uiUe' => "\$this->validate_url('\$2', '\$3')")), 'img' => array('bbcode_id' => 4, 'regexp' => array('#\[img\](.*)\[/img\]#uiUe' => "\$this->bbcode_img('\$1')")), 'size' => array('bbcode_id' => 5, 'regexp' => array('#\[size=([\-\+]?\d+)\](.*?)\[/size\]#uise' => "\$this->bbcode_size('\$1', '\$2')")), 'color' => array('bbcode_id' => 6, 'regexp' => array('!\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)\](.*?)\[/color\]!uise' => "\$this->bbcode_color('\$1', '\$2')")), -- cgit v1.2.1 From 6585d938d2c441900d8af6d25da2433d3beec856 Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 5 Jun 2011 21:55:28 +0800 Subject: [ticket/217] Adjust patch, add tests PHPBB3-217 --- phpBB/includes/message_parser.php | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php index 8f5e72cbf7..a6a4e530f0 100644 --- a/phpBB/includes/message_parser.php +++ b/phpBB/includes/message_parser.php @@ -102,7 +102,7 @@ class bbcode_firstpass extends bbcode /** * Init bbcode data for later parsing */ - function bbcode_init() + function bbcode_init($no_custom_bbcode = false) { static $rowset; @@ -117,7 +117,7 @@ class bbcode_firstpass extends bbcode 'attachment' => array('bbcode_id' => 12, 'regexp' => array('#\[attachment=([0-9]+)\](.*?)\[/attachment\]#uise' => "\$this->bbcode_attachment('\$1', '\$2')")), 'b' => array('bbcode_id' => 1, 'regexp' => array('#\[b\](.*?)\[/b\]#uise' => "\$this->bbcode_strong('\$1')")), 'i' => array('bbcode_id' => 2, 'regexp' => array('#\[i\](.*?)\[/i\]#uise' => "\$this->bbcode_italic('\$1')")), - 'url' => array('bbcode_id' => 3, 'regexp' => array('#\[url(=(.*))?\](?(1)((?s).*(?-s))|(.*))\[/url\]#uiUe' => "\$this->validate_url('\$2', '\$3')")), + 'url' => array('bbcode_id' => 3, 'regexp' => array('#\[url(=(.*))?\](?(1)((?s).*(?-s))|(.*))\[/url\]#uiUe' => "\$this->validate_url('\$2', ('\$3') ? '\$3' : '\$4')")), 'img' => array('bbcode_id' => 4, 'regexp' => array('#\[img\](.*)\[/img\]#uiUe' => "\$this->bbcode_img('\$1')")), 'size' => array('bbcode_id' => 5, 'regexp' => array('#\[size=([\-\+]?\d+)\](.*?)\[/size\]#uise' => "\$this->bbcode_size('\$1', '\$2')")), 'color' => array('bbcode_id' => 6, 'regexp' => array('!\[color=(#[0-9a-f]{3}|#[0-9a-f]{6}|[a-z\-]+)\](.*?)\[/color\]!uise' => "\$this->bbcode_color('\$1', '\$2')")), @@ -135,6 +135,11 @@ class bbcode_firstpass extends bbcode $this->parsed_items[$tag] = 0; } + if ($no_custom_bbcode) + { + return; + } + if (!is_array($rowset)) { global $db; @@ -970,7 +975,7 @@ class bbcode_firstpass extends bbcode } // Is this a link to somewhere inside this board? If so then remove the session id from the url - if (strpos($url, generate_board_url()) !== false && strpos($url, 'sid=') !== false) + if (strpos($url, @generate_board_url()) !== false && strpos($url, 'sid=') !== false) { $url = preg_replace('/(&|\?)sid=[0-9a-f]{32}&/', '\1', $url); $url = preg_replace('/(&|\?)sid=[0-9a-f]{32}$/', '', $url); -- cgit v1.2.1 From d44b6ba5caeafe220b4959a6de99d035fe10b4f1 Mon Sep 17 00:00:00 2001 From: rxu Date: Mon, 6 Jun 2011 00:50:53 +0800 Subject: [ticket/217] Use positive parameter statement for bbcode_init() PHPBB3-217 --- phpBB/includes/message_parser.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php index a6a4e530f0..9e0e61d0ba 100644 --- a/phpBB/includes/message_parser.php +++ b/phpBB/includes/message_parser.php @@ -102,7 +102,7 @@ class bbcode_firstpass extends bbcode /** * Init bbcode data for later parsing */ - function bbcode_init($no_custom_bbcode = false) + function bbcode_init($allow_custom_bbcode = true) { static $rowset; @@ -135,7 +135,7 @@ class bbcode_firstpass extends bbcode $this->parsed_items[$tag] = 0; } - if ($no_custom_bbcode) + if (!$allow_custom_bbcode) { return; } -- cgit v1.2.1 From 2d1e426ba745fa5b0b7666e5fe4a5fee97caccd7 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 5 Jun 2011 13:23:55 -0400 Subject: [ticket/217] Silence errors in tests, not code. Use a mock user object for testing bbcode. PHPBB3-217 --- phpBB/includes/message_parser.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php index 9e0e61d0ba..a134fab5d3 100644 --- a/phpBB/includes/message_parser.php +++ b/phpBB/includes/message_parser.php @@ -975,7 +975,7 @@ class bbcode_firstpass extends bbcode } // Is this a link to somewhere inside this board? If so then remove the session id from the url - if (strpos($url, @generate_board_url()) !== false && strpos($url, 'sid=') !== false) + if (strpos($url, generate_board_url()) !== false && strpos($url, 'sid=') !== false) { $url = preg_replace('/(&|\?)sid=[0-9a-f]{32}&/', '\1', $url); $url = preg_replace('/(&|\?)sid=[0-9a-f]{32}$/', '', $url); -- cgit v1.2.1 From c07540163c2bf674e384d6df294c83e79e510ce9 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 2 Mar 2011 12:49:59 +0100 Subject: [ticket/10068] Style links posted in posts the same way as in signatures. Firefox4 is going to have some restrictions to :visited for security purpose (see http://hacks.mozilla.org/2010/03/privacy-related-changes-coming-to-css-vistited/ for more information) In phpBB links inside posts therefor can not be displayed with the dotted line anymore. So when we change this anyway we can just make links in signature and posts look the same. PHPBB3-10068 --- phpBB/styles/prosilver/theme/colours.css | 2 +- phpBB/styles/prosilver/theme/links.css | 6 +----- 2 files changed, 2 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/colours.css b/phpBB/styles/prosilver/theme/colours.css index f7747ba73c..e98ce237bc 100644 --- a/phpBB/styles/prosilver/theme/colours.css +++ b/phpBB/styles/prosilver/theme/colours.css @@ -298,7 +298,7 @@ a.topictitle:active { .postlink:visited { color: #5D8FBD; - border-bottom-color: #666666; + border-bottom-color: #5D8FBD; } .postlink:active { diff --git a/phpBB/styles/prosilver/theme/links.css b/phpBB/styles/prosilver/theme/links.css index a406114054..1f6c2af550 100644 --- a/phpBB/styles/prosilver/theme/links.css +++ b/phpBB/styles/prosilver/theme/links.css @@ -87,11 +87,7 @@ a.topictitle:active { padding-bottom: 0; } -.postlink:visited { - color: #bdbdbd; - border-bottom-style: dotted; - border-bottom-color: #666666; -} +/* .postlink:visited { color: #bdbdbd; } */ .postlink:active { color: #d2d2d2; -- cgit v1.2.1 From d2b5d77b2c45b595ca49bc48d51d180404b132c4 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 9 Jun 2011 00:33:27 +0200 Subject: [ticket/10203] Fix quotations and hyphen in language strings for PHPBB3-10067 PHPBB3-10203 --- phpBB/language/en/acp/board.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php index c770497655..10e4aa7b6b 100644 --- a/phpBB/language/en/acp/board.php +++ b/phpBB/language/en/acp/board.php @@ -208,7 +208,7 @@ $lang = array_merge($lang, array( 'ACP_REGISTER_SETTINGS_EXPLAIN' => 'Here you are able to define registration and profile related settings.', 'ACC_ACTIVATION' => 'Account activation', - 'ACC_ACTIVATION_EXPLAIN' => 'This determines whether users have immediate access to the board or if confirmation is required. You can also completely disable new registrations. "Board-wide e-mail" must be enabled in order to use user or admin activation.', + 'ACC_ACTIVATION_EXPLAIN' => 'This determines whether users have immediate access to the board or if confirmation is required. You can also completely disable new registrations. “Board-wide e-mail†must be enabled in order to use user or admin activation.', 'NEW_MEMBER_POST_LIMIT' => 'New member post limit', 'NEW_MEMBER_POST_LIMIT_EXPLAIN' => 'New members are within the Newly Registered Users group until they reach this number of posts. You can use this group to keep them from using the PM system or to review their posts. A value of 0 disables this feature.', 'NEW_MEMBER_GROUP_DEFAULT' => 'Set Newly Registered Users group to default', @@ -217,7 +217,7 @@ $lang = array_merge($lang, array( 'ACC_ADMIN' => 'By admin', 'ACC_DISABLE' => 'Disable registration', 'ACC_NONE' => 'No activation (immediate access)', - 'ACC_USER' => 'By user (email verification)', + 'ACC_USER' => 'By user (e-mail verification)', // 'ACC_USER_ADMIN' => 'User + Admin', 'ALLOW_EMAIL_REUSE' => 'Allow e-mail address re-use', 'ALLOW_EMAIL_REUSE_EXPLAIN' => 'Different users can register with the same e-mail address.', -- cgit v1.2.1 From fe425dedff388e5eb1477874e0419114db996dc2 Mon Sep 17 00:00:00 2001 From: Adam Reyher Date: Thu, 9 Jun 2011 06:52:11 -0400 Subject: [ticket/9878] Remove IE7 emulation from prosilver/subSilver2 With these changes, prosilver and subSilver2 no longer need to force IE7 emulation when browsing with IE8 due to the well-known textarea scrolling bug. PHPBB3-9878 --- phpBB/styles/prosilver/template/overall_header.html | 1 - phpBB/styles/prosilver/theme/forms.css | 5 ++++- phpBB/styles/subsilver2/template/overall_header.html | 1 - phpBB/styles/subsilver2/template/posting_body.html | 2 +- phpBB/styles/subsilver2/template/quickreply_editor.html | 2 +- 5 files changed, 6 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/overall_header.html b/phpBB/styles/prosilver/template/overall_header.html index 51fff0735a..71634c9094 100644 --- a/phpBB/styles/prosilver/template/overall_header.html +++ b/phpBB/styles/prosilver/template/overall_header.html @@ -10,7 +10,6 @@ - {META} {SITENAME} • <!-- IF S_IN_MCP -->{L_MCP} • <!-- ELSEIF S_IN_UCP -->{L_UCP} • <!-- ENDIF -->{PAGE_TITLE} diff --git a/phpBB/styles/prosilver/theme/forms.css b/phpBB/styles/prosilver/theme/forms.css index 4e48a93a55..3f85aa3099 100644 --- a/phpBB/styles/prosilver/theme/forms.css +++ b/phpBB/styles/prosilver/theme/forms.css @@ -262,7 +262,10 @@ fieldset.submit-buttons input { #message-box textarea { font-family: "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif; - width: 100%; + width: 700px; + height: 270px; + min-width: 100%; + max-width: 100%; font-size: 1.2em; color: #333333; } diff --git a/phpBB/styles/subsilver2/template/overall_header.html b/phpBB/styles/subsilver2/template/overall_header.html index be4c7b5b4c..62ed79ed39 100644 --- a/phpBB/styles/subsilver2/template/overall_header.html +++ b/phpBB/styles/subsilver2/template/overall_header.html @@ -10,7 +10,6 @@ - {META} {SITENAME} • <!-- IF S_IN_MCP -->{L_MCP} • <!-- ELSEIF S_IN_UCP -->{L_UCP} • <!-- ENDIF -->{PAGE_TITLE} diff --git a/phpBB/styles/subsilver2/template/posting_body.html b/phpBB/styles/subsilver2/template/posting_body.html index 0021cd2eb3..fec6d7ff6c 100644 --- a/phpBB/styles/subsilver2/template/posting_body.html +++ b/phpBB/styles/subsilver2/template/posting_body.html @@ -210,7 +210,7 @@ - + - - - - - -
    -- cgit v1.2.1 From 773561f862e9cf4016a4176454e3fb59489259ac Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 11 Jul 2011 19:20:45 +0200 Subject: [ticket/10237] Handle watching and unwatching the same way. Also add some information to the confirm-box (forum_name / topic title) PHPBB3-10237 --- phpBB/includes/functions_display.php | 54 +++++++++++++++++++++++++----------- phpBB/language/en/common.php | 6 ++++ phpBB/viewforum.php | 2 +- phpBB/viewtopic.php | 2 +- 4 files changed, 46 insertions(+), 18 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 496da72344..391b56ab69 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -1058,7 +1058,7 @@ function display_user_activity(&$userdata) /** * Topic and forum watching common code */ -function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id, $notify_status = 'unset', $start = 0) +function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id, $notify_status = 'unset', $start = 0, $item_title = '') { global $template, $db, $user, $phpEx, $start, $phpbb_root_path; @@ -1091,15 +1091,17 @@ function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id, if (isset($_GET['unwatch'])) { $uid = request_var('uid', 0); - if ($uid != $user_id) - { - $redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&start=$start"); - $message = $user->lang['ERR_UNWATCHING'] . '

    ' . sprintf($user->lang['RETURN_' . strtoupper($mode)], '', ''); - trigger_error($message); - } + $token = request_var('hash', ''); - if (confirm_box(true)) + if (($token && check_link_hash($token, "{$mode}_$match_id")) || confirm_box(true)) { + if (($uid != $user_id) || ($_GET['unwatch'] != $mode)) + { + $redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&start=$start"); + $message = $user->lang['ERR_UNWATCHING'] . '

    ' . sprintf($user->lang['RETURN_' . strtoupper($mode)], '', ''); + trigger_error($message); + } + $sql = 'DELETE FROM ' . $table_sql . " WHERE $where_sql = $match_id AND user_id = $user_id"; @@ -1123,7 +1125,8 @@ function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id, $s_hidden_fields['t'] = $topic_id; } - confirm_box(false, 'UNWATCH_' . strtoupper($mode), build_hidden_fields($s_hidden_fields)); + $confirm_box_message = (($item_title == '') ? 'UNWATCH_' . strtoupper($mode) : $user->lang('UNWATCH_' . strtoupper($mode) . '_DETAILED', $item_title)); + confirm_box(false, $confirm_box_message, build_hidden_fields($s_hidden_fields)); } } else @@ -1144,26 +1147,45 @@ function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id, { if (isset($_GET['watch'])) { + $uid = request_var('uid', 0); $token = request_var('hash', ''); - $redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&start=$start"); - if ($_GET['watch'] == $mode && check_link_hash($token, "{$mode}_$match_id")) + if (($token && check_link_hash($token, "{$mode}_$match_id")) || confirm_box(true)) { + if (($uid != $user_id) || ($_GET['watch'] != $mode)) + { + $redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&start=$start"); + $message = $user->lang['ERR_WATCHING'] . '

    ' . sprintf($user->lang['RETURN_' . strtoupper($mode)], '', ''); + trigger_error($message); + } + $is_watching = true; $sql = 'INSERT INTO ' . $table_sql . " (user_id, $where_sql, notify_status) VALUES ($user_id, $match_id, " . NOTIFY_YES . ')'; $db->sql_query($sql); + + $redirect_url = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&start=$start"); $message = $user->lang['ARE_WATCHING_' . strtoupper($mode)] . '

    ' . sprintf($user->lang['RETURN_' . strtoupper($mode)], '', ''); + meta_refresh(3, $redirect_url); + trigger_error($message); } else { - $message = $user->lang['ERR_WATCHING'] . '

    ' . sprintf($user->lang['RETURN_' . strtoupper($mode)], '', ''); - } - - meta_refresh(3, $redirect_url); + $s_hidden_fields = array( + 'uid' => $user->data['user_id'], + 'watch' => $mode, + 'start' => $start, + 'f' => $forum_id, + ); + if ($mode != 'forum') + { + $s_hidden_fields['t'] = $topic_id; + } - trigger_error($message); + $confirm_box_message = (($item_title == '') ? 'WATCH_' . strtoupper($mode) : $user->lang('WATCH_' . strtoupper($mode) . '_DETAILED', $item_title)); + confirm_box(false, $confirm_box_message, build_hidden_fields($s_hidden_fields)); + } } else { diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index b48a92124a..1c96818346 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -653,7 +653,9 @@ $lang = array_merge($lang, array( 'UNREAD_POST' => 'Unread post', 'UNREAD_POSTS' => 'Unread posts', 'UNWATCH_FORUM_CONFIRM' => 'Are you sure you wish to unsubscribe from this forum?', + 'UNWATCH_FORUM_DETAILED' => 'Are you sure you wish to unsubscribe from the forum “%sâ€?', 'UNWATCH_TOPIC_CONFIRM' => 'Are you sure you wish to unsubscribe from this topic?', + 'UNWATCH_TOPIC_DETAILED' => 'Are you sure you wish to unsubscribe from the topic “%sâ€?', 'UNWATCHED_FORUMS' => 'You are no longer subscribed to the selected forums.', 'UNWATCHED_TOPICS' => 'You are no longer subscribed to the selected topics.', 'UNWATCHED_FORUMS_TOPICS' => 'You are no longer subscribed to the selected entries.', @@ -702,6 +704,10 @@ $lang = array_merge($lang, array( 'WARNINGS' => 'Warnings', 'WARN_USER' => 'Warn user', + 'WATCH_FORUM_CONFIRM' => 'Are you sure you wish to subscribe to this forum?', + 'WATCH_FORUM_DETAILED' => 'Are you sure you wish to subscribe to the forum “%sâ€?', + 'WATCH_TOPIC_CONFIRM' => 'Are you sure you wish to subscribe to this topic?', + 'WATCH_TOPIC_DETAILED' => 'Are you sure you wish to subscribe to the topic “%sâ€?', 'WELCOME_SUBJECT' => 'Welcome to %s forums', 'WEBSITE' => 'Website', 'WHOIS' => 'Whois', diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php index 61ec27ed79..e0b51bf782 100644 --- a/phpBB/viewforum.php +++ b/phpBB/viewforum.php @@ -208,7 +208,7 @@ $s_watching_forum = array( if (($config['email_enable'] || $config['jab_enable']) && $config['allow_forum_notify'] && $forum_data['forum_type'] == FORUM_POST && $auth->acl_get('f_subscribe', $forum_id)) { $notify_status = (isset($forum_data['notify_status'])) ? $forum_data['notify_status'] : NULL; - watch_topic_forum('forum', $s_watching_forum, $user->data['user_id'], $forum_id, 0, $notify_status); + watch_topic_forum('forum', $s_watching_forum, $user->data['user_id'], $forum_id, 0, $notify_status, $start, $forum_data['forum_name']); } $s_forum_rules = ''; diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 08e82591de..8b081b4aec 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -488,7 +488,7 @@ $s_watching_topic = array( if (($config['email_enable'] || $config['jab_enable']) && $config['allow_topic_notify'] && $user->data['is_registered']) { - watch_topic_forum('topic', $s_watching_topic, $user->data['user_id'], $forum_id, $topic_id, $topic_data['notify_status'], $start); + watch_topic_forum('topic', $s_watching_topic, $user->data['user_id'], $forum_id, $topic_id, $topic_data['notify_status'], $start, $topic_data['topic_title']); // Reset forum notification if forum notify is set if ($config['allow_forum_notify'] && $auth->acl_get('f_subscribe', $forum_id)) -- cgit v1.2.1 From d60ffdd55c4066b8e69c0522c464ec1ada4b0913 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 11 Jul 2011 19:31:11 +0200 Subject: [ticket/10237] Also display login-box on subscribing PHPBB3-10237 --- phpBB/includes/functions_display.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 391b56ab69..7982b9908d 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -1195,7 +1195,7 @@ function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id, } else { - if (isset($_GET['unwatch']) && $_GET['unwatch'] == $mode) + if ((isset($_GET['unwatch']) && $_GET['unwatch'] == $mode) || (isset($_GET['watch']) && $_GET['watch'] == $mode)) { login_box(); } -- cgit v1.2.1 From 136a932303d7d7a427043d1834b6df40dc219b0e Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Tue, 12 Jul 2011 01:32:00 +0200 Subject: [ticket/10258] Remove the meta charset tag The charset tag is useless, because if a charset content-type header is present it takes precedence. And phpBB always sends such a header. PHPBB3-10258 --- phpBB/adm/style/colour_swatch.html | 1 - phpBB/adm/style/install_header.html | 1 - phpBB/adm/style/install_update_diff.html | 1 - phpBB/adm/style/overall_header.html | 1 - phpBB/adm/style/simple_header.html | 1 - phpBB/includes/db/dbal.php | 1 - phpBB/includes/functions.php | 2 -- phpBB/includes/functions_download.php | 1 - phpBB/install/database_update.php | 3 --- phpBB/install/index.php | 1 - phpBB/styles/prosilver/template/overall_header.html | 1 - phpBB/styles/prosilver/template/simple_header.html | 1 - phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html | 1 - phpBB/styles/prosilver/template/viewtopic_print.html | 1 - phpBB/styles/subsilver2/template/overall_header.html | 1 - phpBB/styles/subsilver2/template/simple_header.html | 1 - phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html | 1 - phpBB/styles/subsilver2/template/viewtopic_print.html | 1 - 18 files changed, 21 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/colour_swatch.html b/phpBB/adm/style/colour_swatch.html index 81e3bd9af6..b5627a790f 100644 --- a/phpBB/adm/style/colour_swatch.html +++ b/phpBB/adm/style/colour_swatch.html @@ -1,7 +1,6 @@ - {L_COLOUR_SWATCH} - + + + + + + +{META} +{SITENAME} • {PAGE_TITLE} + + - - - - - - - - - - - - - -
    {SITENAME}
    {L_PRIVATE_MESSAGING}

    {SUBJECT}
    {PAGE_NUMBER}
    - -
    - - - - - - - - - - - - - - - - - - - - - - - -
    {L_PM_FROM}: {MESSAGE_AUTHOR} [ {SENT_DATE} ]
    {L_TO}: - - class="sep">{to_recipient.NAME}  - -
    {L_BCC}: - - class="sep">{bcc_recipient.NAME}  - -

    {MESSAGE}
    - -
    - - - - - - - - -
    {PAGE_NUMBER}{S_TIMEZONE}
    Powered by phpBB® Forum Software © phpBB Group
    http://www.phpbb.com/
    + +
    + + + + +
    +
    {PAGE_NUMBER}
    +
    +

    {SUBJECT}

    +
    {L_SENT_AT} {SENT_DATE}
    +
    {L_PM_FROM} {MESSAGE_AUTHOR}
    + +
    {L_TO} {to_recipient.NAME} 
    + + +
    {L_BCC} {bcc_recipient.NAME} 
    + +
    +
    {MESSAGE}
    +
    +
    +
    + + +
    \ No newline at end of file diff --git a/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html b/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html index 6753a5bc33..24194e4c26 100644 --- a/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html +++ b/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html @@ -61,7 +61,7 @@ hr.sep { - + -- cgit v1.2.1 From 160e89aa06cf75e28b01311489e5b9b16bb2651b Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 14 Nov 2011 18:49:07 +0100 Subject: [ticket/10457] Undefined variable $request, when print-viewing PMs PHPBB3-10457 --- phpBB/includes/ucp/ucp_pm_viewmessage.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_pm_viewmessage.php b/phpBB/includes/ucp/ucp_pm_viewmessage.php index c9451bd202..0458ff6579 100644 --- a/phpBB/includes/ucp/ucp_pm_viewmessage.php +++ b/phpBB/includes/ucp/ucp_pm_viewmessage.php @@ -22,7 +22,7 @@ if (!defined('IN_PHPBB')) function view_message($id, $mode, $folder_id, $msg_id, $folder, $message_row) { global $user, $template, $auth, $db, $cache; - global $phpbb_root_path, $phpEx, $config; + global $phpbb_root_path, $request, $phpEx, $config; $user->add_lang(array('viewtopic', 'memberlist')); -- cgit v1.2.1 From 14af18cb1b81e5dcee70c9eccb35d19f17af6948 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 14 Oct 2011 16:23:16 +0200 Subject: [ticket/9361] View correct error messages when editing account information Currently the "current password" is only checked, when you change something. This means you get "Your profile has been updated." although you enter a wrong password. I also added proper error messages, when you leave the confirm fields empty, and sorted them in the order of the field appearances on the html page. PHPBB3-9361 --- phpBB/includes/ucp/ucp_profile.php | 12 ++++++------ phpBB/language/en/ucp.php | 3 +++ 2 files changed, 9 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index c099e3b3fa..65b32bd0c4 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -78,14 +78,14 @@ class ucp_profile $error = validate_data($data, $check_ary); - if ($auth->acl_get('u_chgpasswd') && $data['new_password'] && $data['password_confirm'] != $data['new_password']) + if ($auth->acl_get('u_chgemail') && $data['email'] != $user->data['user_email'] && $data['email_confirm'] != $data['email']) { - $error[] = 'NEW_PASSWORD_ERROR'; + $error[] = ($data['email_confirm']) ? 'NEW_EMAIL_ERROR' : 'NEW_EMAIL_CONFIRM_EMPTY'; } - if (($data['new_password'] || ($auth->acl_get('u_chgemail') && $data['email'] != $user->data['user_email']) || ($data['username'] != $user->data['username'] && $auth->acl_get('u_chgname') && $config['allow_namechange'])) && !phpbb_check_hash($data['cur_password'], $user->data['user_password'])) + if ($auth->acl_get('u_chgpasswd') && $data['new_password'] && $data['password_confirm'] != $data['new_password']) { - $error[] = 'CUR_PASSWORD_ERROR'; + $error[] = ($data['password_confirm']) ? 'NEW_PASSWORD_ERROR' : 'NEW_PASSWORD_CONFIRM_EMPTY'; } // Only check the new password against the previous password if there have been no errors @@ -94,9 +94,9 @@ class ucp_profile $error[] = 'SAME_PASSWORD_ERROR'; } - if ($auth->acl_get('u_chgemail') && $data['email'] != $user->data['user_email'] && $data['email_confirm'] != $data['email']) + if (!phpbb_check_hash($data['cur_password'], $user->data['user_password'])) { - $error[] = 'NEW_EMAIL_ERROR'; + $error[] = ($data['cur_password']) ? 'CUR_PASSWORD_ERROR' : 'CUR_PASSWORD_EMPTY'; } if (!check_form_key('ucp_reg_details')) diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index c1e3c06c43..3ebc863447 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -138,6 +138,7 @@ $lang = array_merge($lang, array( 'CURRENT_IMAGE' => 'Current image', 'CURRENT_PASSWORD' => 'Current password', 'CURRENT_PASSWORD_EXPLAIN' => 'You must confirm your current password if you wish to change it, alter your e-mail address or username.', + 'CUR_PASSWORD_EMPTY' => 'You did not enter your current password.', 'CUR_PASSWORD_ERROR' => 'The current password you entered is incorrect.', 'CUSTOM_DATEFORMAT' => 'Custom…', @@ -268,9 +269,11 @@ $lang = array_merge($lang, array( 'MOVE_TO_FOLDER' => 'Move to folder', 'MOVE_UP' => 'Move up', + 'NEW_EMAIL_CONFIRM_EMPTY' => 'You did not enter a confirm e-mail address.', 'NEW_EMAIL_ERROR' => 'The e-mail addresses you entered do not match.', 'NEW_FOLDER_NAME' => 'New folder name', 'NEW_PASSWORD' => 'New password', + 'NEW_PASSWORD_CONFIRM_EMPTY' => 'You did not enter a confirm password.', 'NEW_PASSWORD_ERROR' => 'The passwords you entered do not match.', 'NOTIFY_METHOD' => 'Notification method', 'NOTIFY_METHOD_BOTH' => 'Both', -- cgit v1.2.1 From c0ffc8386ccad6a6a3070faed1ae748f61ac9858 Mon Sep 17 00:00:00 2001 From: Raimon Date: Mon, 14 Nov 2011 21:38:10 +0100 Subject: [ticket/10453] PM viewmessage page is misplacing the online icon Removed the position: absolute value, and made it so that if the buttons are bigger the text move with it, also added support for bidi.css (text right to left). PHPBB3-10453 http://tracker.phpbb.com/browse/PHPBB3-10453 --- phpBB/styles/prosilver/template/ucp_pm_message_header.html | 8 +------- phpBB/styles/prosilver/theme/bidi.css | 13 +++++++++++++ phpBB/styles/prosilver/theme/cp.css | 13 ++++++++++--- 3 files changed, 24 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/ucp_pm_message_header.html b/phpBB/styles/prosilver/template/ucp_pm_message_header.html index a1017d4b44..c3b7e54f45 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_message_header.html +++ b/phpBB/styles/prosilver/template/ucp_pm_message_header.html @@ -6,18 +6,12 @@

    {FOLDER_STATUS}

    - - - diff --git a/phpBB/styles/prosilver/theme/bidi.css b/phpBB/styles/prosilver/theme/bidi.css index f441784d85..c4a46b432c 100644 --- a/phpBB/styles/prosilver/theme/bidi.css +++ b/phpBB/styles/prosilver/theme/bidi.css @@ -591,6 +591,19 @@ /* PM Styles ----------------------------------------*/ +/* PM panel adjustments */ +.rtl .reply-all a.right { + background-position: 5% 60%; +} + +.rtl .reply-all a.right:hover { + background-position: 3% 60%; +} + +.rtl .reply-all { + padding-left: 5px; +} + /* Defined rules list for PM options */ .rtl ol.def-rules { padding-right: 0; diff --git a/phpBB/styles/prosilver/theme/cp.css b/phpBB/styles/prosilver/theme/cp.css index 9d04371115..6f45d13cef 100644 --- a/phpBB/styles/prosilver/theme/cp.css +++ b/phpBB/styles/prosilver/theme/cp.css @@ -349,10 +349,17 @@ dl.mini dd { } /* PM panel adjustments */ +.reply-all a.left { + background-position: 3px 60%; +} + +.reply-all a.left:hover { + background-position: 0px 60%; +} + .reply-all { - margin-bottom: -60px; - position: absolute; - margin-left: 200px; + font-size: 11px; + padding-top: 5px; } /* PM Message history */ -- cgit v1.2.1 From f1a53659bdacdc045943b8a09240e6ecadcc5360 Mon Sep 17 00:00:00 2001 From: rxu Date: Tue, 15 Nov 2011 22:33:11 +0800 Subject: [ticket/10419] Reword the language strings PHPBB3-10419 --- phpBB/language/en/acp/common.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/common.php b/phpBB/language/en/acp/common.php index 85da6fbd79..ef8d6f1cb3 100644 --- a/phpBB/language/en/acp/common.php +++ b/phpBB/language/en/acp/common.php @@ -328,14 +328,14 @@ $lang = array_merge($lang, array( 'DATABASE_SIZE' => 'Database size', // Enviroment configuration checks, mbstring related - 'ERROR_MBSTRING_FUNC_OVERLOAD' => 'Function overloading setting is invalid', - 'ERROR_MBSTRING_FUNC_OVERLOAD_EXPLAIN' => 'mbstring.func_overload must be set to either 0 or 4. You can check current value on PHP information page.', - 'ERROR_MBSTRING_ENCODING_TRANSLATION' => 'Transparent character encoding setting is invalid', - 'ERROR_MBSTRING_ENCODING_TRANSLATION_EXPLAIN' => 'mbstring.encoding_translation must be set to 0. You can check current value on PHP information page.', - 'ERROR_MBSTRING_HTTP_INPUT' => 'HTTP input character conversion setting is invalid', - 'ERROR_MBSTRING_HTTP_INPUT_EXPLAIN' => 'mbstring.http_input must be set to pass. You can check current value on PHP information page.', - 'ERROR_MBSTRING_HTTP_OUTPUT' => 'HTTP output character conversion setting is invalid', - 'ERROR_MBSTRING_HTTP_OUTPUT_EXPLAIN' => 'mbstring.http_output must be set to pass. You can check current value on PHP information page.', + 'ERROR_MBSTRING_FUNC_OVERLOAD' => 'Function overloading is improperly configured', + 'ERROR_MBSTRING_FUNC_OVERLOAD_EXPLAIN' => 'mbstring.func_overload must be set to either 0 or 4. You can check the current value on the PHP information page.', + 'ERROR_MBSTRING_ENCODING_TRANSLATION' => 'Transparent character encoding is improperly configured', + 'ERROR_MBSTRING_ENCODING_TRANSLATION_EXPLAIN' => 'mbstring.encoding_translation must be set to 0. You can check the current value on the PHP information page.', + 'ERROR_MBSTRING_HTTP_INPUT' => 'HTTP input character conversion is improperly configured', + 'ERROR_MBSTRING_HTTP_INPUT_EXPLAIN' => 'mbstring.http_input must be set to pass. You can check the current value on the PHP information page.', + 'ERROR_MBSTRING_HTTP_OUTPUT' => 'HTTP output character conversion is improperly configured', + 'ERROR_MBSTRING_HTTP_OUTPUT_EXPLAIN' => 'mbstring.http_output must be set to pass. You can check the current value on the PHP information page.', 'FILES_PER_DAY' => 'Attachments per day', 'FORUM_STATS' => 'Board statistics', -- cgit v1.2.1 From 815dd3591b2618f072791aeb7bf6d87492e690b0 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 15 Nov 2011 17:23:55 +0100 Subject: [ticket/10185] Always set board startdate on conversion The board startdate should always be set to first user registration date. The current code did not do anything at all, as the board_startdate was always set on installation before running the convertor. PHPBB3-10185 --- phpBB/install/install_convert.php | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/install_convert.php b/phpBB/install/install_convert.php index 814b50cf68..62efc3e46b 100644 --- a/phpBB/install/install_convert.php +++ b/phpBB/install/install_convert.php @@ -1716,19 +1716,16 @@ class install_convert extends module fix_empty_primary_groups(); - if (!isset($config['board_startdate'])) - { - $sql = 'SELECT MIN(user_regdate) AS board_startdate - FROM ' . USERS_TABLE; - $result = $db->sql_query($sql); - $row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); + $sql = 'SELECT MIN(user_regdate) AS board_startdate + FROM ' . USERS_TABLE; + $result = $db->sql_query($sql); + $row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); - if (($row['board_startdate'] < $config['board_startdate'] && $row['board_startdate'] > 0) || !isset($config['board_startdate'])) - { - set_config('board_startdate', $row['board_startdate']); - $db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_regdate = ' . $row['board_startdate'] . ' WHERE user_id = ' . ANONYMOUS); - } + if (!isset($config['board_startdate']) || ($row['board_startdate'] < $config['board_startdate'] && $row['board_startdate'] > 0)) + { + set_config('board_startdate', $row['board_startdate']); + $db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_regdate = ' . $row['board_startdate'] . ' WHERE user_id = ' . ANONYMOUS); } update_dynamic_config(); -- cgit v1.2.1 From 3d893c8222646e95aeae0301d954cfe62aa8486a Mon Sep 17 00:00:00 2001 From: dmauri Date: Tue, 15 Nov 2011 22:19:45 +0100 Subject: [ticket/10296] Fix CROSS JOIN with INNER JOIN on MSSQL, Postgres and Oracle PHPBB3-10296 --- phpBB/includes/db/dbal.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 9b45c085a2..b4c1a72e1c 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -609,7 +609,7 @@ class dbal } } - $sql .= $this->_sql_custom_build('FROM', implode(', ', $table_array)); + $sql .= $this->_sql_custom_build('FROM', implode(' CROSS JOIN ', $table_array)); if (!empty($array['LEFT_JOIN'])) { -- cgit v1.2.1 From b2b057910e57961b3d31432267fadb4ddc922783 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 29 Oct 2011 23:04:18 +0200 Subject: [ticket/10157] Add notification to update cpfs when installing a language. We currently just copy the language-strings from the default language. But the admin should be reminded to change them. PHPBB3-10157 --- phpBB/includes/acp/acp_language.php | 9 ++++++++- phpBB/language/en/acp/language.php | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_language.php b/phpBB/includes/acp/acp_language.php index 598b390302..d560cdd0c5 100644 --- a/phpBB/includes/acp/acp_language.php +++ b/phpBB/includes/acp/acp_language.php @@ -919,6 +919,9 @@ class acp_language $default_lang_id = (int) $db->sql_fetchfield('lang_id'); $db->sql_freeresult($result); + // We want to notify the admin that custom profile fields need to be updated for the new language. + $notify_cpf_update = false; + // From the mysql documentation: // Prior to MySQL 4.0.14, the target table of the INSERT statement cannot appear in the FROM clause of the SELECT part of the query. This limitation is lifted in 4.0.14. // Due to this we stay on the safe side if we do the insertion "the manual way" @@ -932,6 +935,7 @@ class acp_language { $row['lang_id'] = $lang_id; $db->sql_query('INSERT INTO ' . PROFILE_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $row)); + $notify_cpf_update = true; } $db->sql_freeresult($result); @@ -944,12 +948,15 @@ class acp_language { $row['lang_id'] = $lang_id; $db->sql_query('INSERT INTO ' . PROFILE_FIELDS_LANG_TABLE . ' ' . $db->sql_build_array('INSERT', $row)); + $notify_cpf_update = true; } $db->sql_freeresult($result); add_log('admin', 'LOG_LANGUAGE_PACK_INSTALLED', $lang_pack['name']); - trigger_error(sprintf($user->lang['LANGUAGE_PACK_INSTALLED'], $lang_pack['name']) . adm_back_link($this->u_action)); + $message = sprintf($user->lang['LANGUAGE_PACK_INSTALLED'], $lang_pack['name']); + $message .= ($notify_cpf_update) ? '

    ' . $user->lang['LANGUAGE_PACK_CPF_UPDATE'] : ''; + trigger_error($message . adm_back_link($this->u_action)); break; diff --git a/phpBB/language/en/acp/language.php b/phpBB/language/en/acp/language.php index 4d11309ebb..dde4e3d722 100644 --- a/phpBB/language/en/acp/language.php +++ b/phpBB/language/en/acp/language.php @@ -59,6 +59,7 @@ $lang = array_merge($lang, array( 'LANGUAGE_PACK_DELETED' => 'The language pack %s has been removed successfully. All users using this language have been reset to the boards default language.', 'LANGUAGE_PACK_DETAILS' => 'Language pack details', 'LANGUAGE_PACK_INSTALLED' => 'The language pack %s has been successfully installed.', + 'LANGUAGE_PACK_CPF_UPDATE' => 'The custom profile fields’ language strings were copied from the default language. Please change them if necessary.', 'LANGUAGE_PACK_ISO' => 'ISO', 'LANGUAGE_PACK_LOCALNAME' => 'Local name', 'LANGUAGE_PACK_NAME' => 'Name', -- cgit v1.2.1 From 3091efc501c7e0d5d0a49cb496364f373a4d0184 Mon Sep 17 00:00:00 2001 From: rxu Date: Thu, 17 Nov 2011 00:56:38 +0800 Subject: [ticket/9416] HTML entities in poll titles and options incorrectly re-encoded PHPBB3-9416 --- phpBB/install/convertors/convert_phpbb20.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/convertors/convert_phpbb20.php b/phpBB/install/convertors/convert_phpbb20.php index 7f6e3c0250..789773e349 100644 --- a/phpBB/install/convertors/convert_phpbb20.php +++ b/phpBB/install/convertors/convert_phpbb20.php @@ -504,7 +504,7 @@ if (!$get_info) array('topic_type', 'topics.topic_type', 'phpbb_convert_topic_type'), array('topic_first_post_id', 'topics.topic_first_post_id', ''), array('topic_last_view_time', 'posts.post_time', 'intval'), - array('poll_title', 'vote_desc.vote_text', array('function1' => 'null_to_str', 'function2' => 'phpbb_set_encoding', 'function3' => 'utf8_htmlspecialchars')), + array('poll_title', 'vote_desc.vote_text', array('function1' => 'null_to_str', 'function2' => 'phpbb_set_encoding', 'function3' => 'htmlspecialchars_decode', 'function4' => 'utf8_htmlspecialchars')), array('poll_start', 'vote_desc.vote_start', 'null_to_zero'), array('poll_length', 'vote_desc.vote_length', 'null_to_zero'), array('poll_max_options', 1, ''), @@ -537,7 +537,7 @@ if (!$get_info) array('topic_type', 'topics.topic_type', 'phpbb_convert_topic_type'), array('topic_first_post_id', 'topics.topic_first_post_id', ''), - array('poll_title', 'vote_desc.vote_text', array('function1' => 'null_to_str', 'function2' => 'phpbb_set_encoding', 'function3' => 'utf8_htmlspecialchars')), + array('poll_title', 'vote_desc.vote_text', array('function1' => 'null_to_str', 'function2' => 'phpbb_set_encoding', 'function3' => 'htmlspecialchars_decode', 'function4' => 'utf8_htmlspecialchars')), array('poll_start', 'vote_desc.vote_start', 'null_to_zero'), array('poll_length', 'vote_desc.vote_length', 'null_to_zero'), array('poll_max_options', 1, ''), @@ -582,7 +582,7 @@ if (!$get_info) array('poll_option_id', 'vote_results.vote_option_id', ''), array('topic_id', 'vote_desc.topic_id', ''), array('', 'topics.topic_poster AS poster_id', 'phpbb_user_id'), - array('poll_option_text', 'vote_results.vote_option_text', array('function1' => 'phpbb_set_encoding', 'function2' => 'utf8_htmlspecialchars')), + array('poll_option_text', 'vote_results.vote_option_text', array('function1' => 'phpbb_set_encoding', 'function2' => 'htmlspecialchars_decode', 'function3' => 'utf8_htmlspecialchars')), array('poll_option_total', 'vote_results.vote_result', ''), 'where' => 'vote_results.vote_id = vote_desc.vote_id', -- cgit v1.2.1 From 64bf03f4ca363f0f4b237a4cb32cde4f48cd158e Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 13:07:14 +0100 Subject: [feature/extension-manager] Fix "disbale" typo in comment PHPBB3-10323 --- phpBB/includes/extension/base.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/base.php b/phpBB/includes/extension/base.php index 8228364d44..fed120c51b 100644 --- a/phpBB/includes/extension/base.php +++ b/phpBB/includes/extension/base.php @@ -16,7 +16,7 @@ if (!defined('IN_PHPBB')) } /** -* A base class for extensions without custom enable/disbale/purge code. +* A base class for extensions without custom enable/disable/purge code. * * @package extension */ -- cgit v1.2.1 From 7ee9a07179d880c788b6ccb0a136c9a957fd918c Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 13:10:09 +0100 Subject: [feature/extension-manager] Correct default path comment & remove double strlen PHPBB3-10323 --- phpBB/includes/extension/finder.php | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index 6084d2672a..d84d27b9c4 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -77,7 +77,7 @@ class phpbb_extension_finder /** * Sets a default path to be searched in addition to extensions * - * @param string $default_path The path relative to / + * @param string $default_path The path relative to phpbb_root_path * @return phpbb_extension_finder This object for chaining calls */ public function default_path($default_path) @@ -162,8 +162,9 @@ class phpbb_extension_finder public function directory($directory) { $directory = preg_replace('#(?:^|/)\./#', '/', $directory); + $dir_len = strlen($directory); - if (strlen($directory) > 1 && $directory[strlen($directory) - 1] === '/') + if ($dir_len > 1 && $directory[$dir_len - 1] === '/') { $directory = substr($directory, 0, -1); } -- cgit v1.2.1 From ef33bd72d04cf778ced3432c026e982cd3571dab Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 13:14:15 +0100 Subject: [feature/extension-manager] Clarify class finding method docblock PHPBB3-10323 --- phpBB/includes/extension/finder.php | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index d84d27b9c4..d6d3b176d3 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -196,10 +196,13 @@ class phpbb_extension_finder } /** - * Finds auto loadable php classes matching the configured options. + * Finds classes matching the configured options if they follow phpBB naming rules. * * The php file extension is automatically added to suffixes. * + * Note: If a file is matched but contains a class name not following the + * phpBB naming rules an incorrect class name will be returned. + * * @param bool $cache Whether the result should be cached * @return array An array of found class names */ -- cgit v1.2.1 From acc42bb2e9ea2556b47030c3c83c0bfac551eea5 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 13:16:32 +0100 Subject: [feature/extension-manager] Clarify is_dir parameter description PHPBB3-10323 --- phpBB/includes/extension/finder.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index d6d3b176d3..ee8ff2ccf4 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -249,7 +249,8 @@ class phpbb_extension_finder * A wrapper around the general find which prepends a root path to results * * @param bool $cache Whether the result should be cached - * @param bool $is_dir Whether the found items should be directories + * @param bool $is_dir Directories will be returned when true, only files + * otherwise * @return array An array of paths to found items */ protected function find_with_root_path($cache = true, $is_dir = false) @@ -269,7 +270,8 @@ class phpbb_extension_finder * Finds all file system entries matching the configured options * * @param bool $cache Whether the result should be cached - * @param bool $is_dir Whether the found items should be directories + * @param bool $is_dir Directories will be returned when true, only files + * otherwise * @return array An array of paths to found items */ public function find($cache = true, $is_dir = false) -- cgit v1.2.1 From 10fa711f0046b667c3291c36f210f1c740fb685a Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 14:37:57 +0100 Subject: [feature/extension-manager] Add more info on suffixes in extension finder PHPBB3-10323 --- phpBB/includes/extension/finder.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index ee8ff2ccf4..f3a9900a67 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -87,7 +87,11 @@ class phpbb_extension_finder } /** - * Sets a suffix all files found in extensions must match + * Sets a suffix all files found in extensions must match. + * + * There is no default file extension, so to find PHP files only, you will + * have to specify .php as a suffix. However when using get_classes, the .php + * file extension is automatically added to suffixes. * * Automatically sets the default_suffix if its value does not differ from * the current suffix. @@ -109,6 +113,10 @@ class phpbb_extension_finder /** * Sets a suffix all files found in the default path must match * + * There is no default file extension, so to find PHP files only, you will + * have to specify .php as a suffix. However when using get_classes, the .php + * file extension is automatically added to suffixes. + * * @param string $default_suffix A filename suffix * @return phpbb_extension_finder This object for chaining calls */ -- cgit v1.2.1 From eab7374f3ff157d7606f16ff548219430417e68b Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 14:38:31 +0100 Subject: [feature/extension-manager] Clarify comment on ext meta class instantiator PHPBB3-10323 --- phpBB/includes/extension/manager.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index 981fa43ab2..29cd89fb34 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -100,7 +100,7 @@ class phpbb_extension_manager } /** - * Instantiates the extension meta class for the given name. + * Instantiates the extension meta class for the extension with the given name * * @param string $name The extension name * @return phpbb_extension_interface Instance of the extension meta class or -- cgit v1.2.1 From 81ac3698089ce86c1e8a44bafacf881d6d8def4a Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 14:43:38 +0100 Subject: [feature/extension-manager] Add docblocks to new methods in functions_module PHPBB3-10323 --- phpBB/includes/functions_module.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php index e2b2d80b3e..ce49c3a798 100644 --- a/phpBB/includes/functions_module.php +++ b/phpBB/includes/functions_module.php @@ -884,7 +884,14 @@ class p_master } } - function get_short_name($basename) + /** + * Retrieve shortened module basename for legacy basenames (with xcp_ prefix) + * + * @param string $basename A module basename + * @return string The basename if it starts with phpbb_ or the basename with + * the current p_class (e.g. acp_) stripped. + */ + protected function get_short_name($basename) { if (substr($basename, 0, 6) === 'phpbb_') { @@ -895,7 +902,13 @@ class p_master return substr($basename, strlen($this->p_class) + 1); } - function is_full_class($basename) + /** + * Checks whether the given module basename is a correct class name + * + * @param string $basename A module basename + * @return bool True if the basename starts with phpbb_ or (x)cp_, false otherwise + */ + protected function is_full_class($basename) { return (substr($basename, 0, 6) === 'phpbb_' || substr($basename, 0, strlen($this->p_class) + 1) === $this->p_class . '_'); } -- cgit v1.2.1 From 121cab1c2932b2de7fa45183501ac6e760953319 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 14:46:30 +0100 Subject: [feature/extension-manager] Add docblocks to new search backend methods PHPBB3-10323 --- phpBB/includes/search/fulltext_mysql.php | 7 ++++++- phpBB/includes/search/fulltext_native.php | 7 ++++++- 2 files changed, 12 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_mysql.php b/phpBB/includes/search/fulltext_mysql.php index b9920da624..4214de3d97 100644 --- a/phpBB/includes/search/fulltext_mysql.php +++ b/phpBB/includes/search/fulltext_mysql.php @@ -52,7 +52,12 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base $error = false; } - function get_name() + /** + * Returns the name of this search backend to be displayed to administrators + * + * @return string Name + */ + public function get_name() { return 'MySQL Fulltext'; } diff --git a/phpBB/includes/search/fulltext_native.php b/phpBB/includes/search/fulltext_native.php index 7c792bba24..a335ddab6e 100644 --- a/phpBB/includes/search/fulltext_native.php +++ b/phpBB/includes/search/fulltext_native.php @@ -54,7 +54,12 @@ class phpbb_search_fulltext_native extends phpbb_search_base $error = false; } - function get_name() + /** + * Returns the name of this search backend to be displayed to administrators + * + * @return string Name + */ + public function get_name() { return 'phpBB Native Fulltext'; } -- cgit v1.2.1 From 8be1500048c2ae811f30e0bd402d7596b60fc2d9 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 14:48:39 +0100 Subject: [feature/extension-manager] Use "core files" instead of "global files" in docs PHPBB3-10323 --- phpBB/includes/session.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index cbef1af30a..497aaf1141 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1901,7 +1901,7 @@ class user extends session * @param mixed $lang_set specifies the language entries to include * @param bool $use_db internal variable for recursion, do not use * @param bool $use_help internal variable for recursion, do not use - * @param string $ext_name The extension to load language from, or empty for global files + * @param string $ext_name The extension to load language from, or empty for core files * * Examples: * @@ -1952,7 +1952,7 @@ class user extends session /** * Add Language Items from an extension - use_db and use_help are assigned where needed (only use them to force inclusion) * - * @param string $ext_name The extension to load language from, or empty for global files + * @param string $ext_name The extension to load language from, or empty for core files * @param mixed $lang_set specifies the language entries to include * @param bool $use_db internal variable for recursion, do not use * @param bool $use_help internal variable for recursion, do not use -- cgit v1.2.1 From 7cdc4bba2512089a02fbfa5cf4e5babbf9e20475 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 15:29:32 +0100 Subject: [feature/extension-manager] Clear up docs of extension related template changes PHPBB3-10323 --- .../includes/template/extension_path_provider.php | 43 +++++++++++++++------- phpBB/includes/template/locator.php | 4 +- phpBB/includes/template/path_provider.php | 3 ++ 3 files changed, 35 insertions(+), 15 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template/extension_path_provider.php b/phpBB/includes/template/extension_path_provider.php index 9578702b65..0feeaafed0 100644 --- a/phpBB/includes/template/extension_path_provider.php +++ b/phpBB/includes/template/extension_path_provider.php @@ -16,7 +16,7 @@ if (!defined('IN_PHPBB')) } /** -* Provides a template locator with template paths and extension template paths +* Provides a template locator with core template paths and extension template paths * * Finds installed template paths and makes them available to the locator. * @@ -24,24 +24,41 @@ if (!defined('IN_PHPBB')) */ class phpbb_template_extension_path_provider extends phpbb_extension_provider implements phpbb_template_path_provider_interface { + /** + * Optional prefix for template paths searched within extensions. + * + * Empty by default. Relative to the extension directory. As an example, it + * could be adm/ for admin templates. + * + * @var string + */ protected $ext_dir_prefix = ''; - protected $base_paths; + + /** + * A provider of paths to be searched for templates + * @var phpbb_template_path_provider + */ + protected $base_path_provider; /** * Constructor stores extension manager * * @param phpbb_extension_manager $extension_manager phpBB extension manager - * @param phpbb_template_path_provider $base_paths A simple path provider + * @param phpbb_template_path_provider $base_path_provider A simple path provider * to provide paths to be located in extensions */ - public function __construct(phpbb_extension_manager $extension_manager, phpbb_template_path_provider $base_paths) + public function __construct(phpbb_extension_manager $extension_manager, phpbb_template_path_provider $base_path_provider) { parent::__construct($extension_manager); - $this->base_paths = $base_paths; + $this->base_path_provider = $base_path_provider; } /** - * Defines a prefix to use for template paths in extensions + * Sets a prefix for template paths searched within extensions. + * + * The prefix is inserted between the extension's path e.g. ext/foo/ and + * the looked up template path, e.g. styles/bar/template/some.html. So it + * should not have a leading slash, but should have a trailing slash. * * @param string $ext_dir_prefix The prefix including trailing slash * @return null @@ -54,9 +71,9 @@ class phpbb_template_extension_path_provider extends phpbb_extension_provider im /** * Finds template paths using the extension manager * - * Finds paths with the same name (e.g. styles/prosilver/template/) in all - * active extensions. Then appends the actual template paths based in the - * current working directory. + * Locates a path (e.g. styles/prosilver/template/) in all active extensions. + * Then appends the core template paths based in the current working + * directory. * * @return array List of template paths */ @@ -65,7 +82,7 @@ class phpbb_template_extension_path_provider extends phpbb_extension_provider im $directories = array(); $finder = $this->extension_manager->get_finder(); - foreach ($this->base_paths as $path) + foreach ($this->base_path_provider as $path) { if ($path && !phpbb_is_absolute($path)) { @@ -76,7 +93,7 @@ class phpbb_template_extension_path_provider extends phpbb_extension_provider im } } - foreach ($this->base_paths as $path) + foreach ($this->base_path_provider as $path) { $directories[] = $path; } @@ -97,7 +114,7 @@ class phpbb_template_extension_path_provider extends phpbb_extension_provider im */ public function set_templates(array $templates, $style_root_path) { - $this->base_paths->set_templates($templates, $style_root_path); + $this->base_path_provider->set_templates($templates, $style_root_path); $this->items = null; } @@ -108,6 +125,6 @@ class phpbb_template_extension_path_provider extends phpbb_extension_provider im */ public function get_main_template_path() { - return $this->base_paths->get_main_template_path(); + return $this->base_path_provider->get_main_template_path(); } } diff --git a/phpBB/includes/template/locator.php b/phpBB/includes/template/locator.php index 44cd2cd7b9..ee9bfa7d48 100644 --- a/phpBB/includes/template/locator.php +++ b/phpBB/includes/template/locator.php @@ -71,8 +71,8 @@ class phpbb_template_locator * Sets the list of template paths * * These paths will be searched for template files in the provided order. - * Paths may be outside of phpBB, but will still be cached to phpBB cache - * directory. + * Paths may be outside of phpBB, but templates loaded from these paths + * will still be cached. * * @param array $template_paths An array of paths to template directories * @return null diff --git a/phpBB/includes/template/path_provider.php b/phpBB/includes/template/path_provider.php index a56269d3c8..c243d1b115 100644 --- a/phpBB/includes/template/path_provider.php +++ b/phpBB/includes/template/path_provider.php @@ -40,6 +40,9 @@ class phpbb_template_path_provider implements IteratorAggregate, phpbb_template_ /** * Overwrites the current template names and paths * + * The first element of the passed templates map, is considered the main + * template and can be retrieved through get_main_template_path(). + * * @param array $templates An associative map from template names to paths. * The first element is the main template. * If the path is false, it will be generated from -- cgit v1.2.1 From 91c0a0d426571e0642c894a921a39f19fbd2e435 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 15:57:51 +0100 Subject: [feature/extension-manager] Add docblock to cached paths map in class loader PHPBB3-10323 --- phpBB/includes/class_loader.php | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/class_loader.php b/phpBB/includes/class_loader.php index 46a271471a..2db807eb77 100644 --- a/phpBB/includes/class_loader.php +++ b/phpBB/includes/class_loader.php @@ -35,6 +35,11 @@ class phpbb_class_loader private $path; private $php_ext; private $cache; + + /** + * A map of looked up class names to paths relative to $this->path. + * @var array + */ private $cached_paths = array(); /** -- cgit v1.2.1 From d8e5783e8c341e38a0b8d572c8482b264cacb9c0 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 16:00:22 +0100 Subject: [feature/extension-manager] Document what the class loader stores in cache PHPBB3-10323 --- phpBB/includes/class_loader.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/class_loader.php b/phpBB/includes/class_loader.php index 2db807eb77..bc268d342e 100644 --- a/phpBB/includes/class_loader.php +++ b/phpBB/includes/class_loader.php @@ -38,6 +38,8 @@ class phpbb_class_loader /** * A map of looked up class names to paths relative to $this->path. + * This map is stored in cache and looked up if the cache is available. + * * @var array */ private $cached_paths = array(); -- cgit v1.2.1 From 0d296785b2364f894f34171d054341cc4979223f Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 16:42:53 +0100 Subject: [feature/extension-manager] Rename default methods to core methods on finder. There are now extension_ and core_ methods for all finder settings as well as a generic method which overwrites both. PHPBB3-10323 --- phpBB/includes/acp/acp_modules.php | 10 +- phpBB/includes/acp/acp_search.php | 8 +- phpBB/includes/captcha/captcha_factory.php | 5 +- phpBB/includes/cron/task/provider.php | 8 +- phpBB/includes/extension/finder.php | 168 +++++++++++++++++------------ phpBB/includes/functions_module.php | 5 +- 6 files changed, 112 insertions(+), 92 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_modules.php b/phpBB/includes/acp/acp_modules.php index a4e140ecfe..e51b440d4d 100644 --- a/phpBB/includes/acp/acp_modules.php +++ b/phpBB/includes/acp/acp_modules.php @@ -544,12 +544,10 @@ class acp_modules $finder = $phpbb_extension_manager->get_finder(); $modules = $finder - ->suffix('_module') - ->directory("/$module_class") - ->default_path("includes/$module_class/info/") - ->default_suffix('') - ->default_prefix($module_class . '_') - ->default_directory('') + ->extension_suffix('_module') + ->extension_directory("/$module_class") + ->core_path("includes/$module_class/info/") + ->core_prefix($module_class . '_') ->get_classes(); foreach ($modules as $module) diff --git a/phpBB/includes/acp/acp_search.php b/phpBB/includes/acp/acp_search.php index 0c34d02ac7..049a70647f 100644 --- a/phpBB/includes/acp/acp_search.php +++ b/phpBB/includes/acp/acp_search.php @@ -559,11 +559,9 @@ class acp_search $finder = $phpbb_extension_manager->get_finder(); return $finder - ->suffix('_backend') - ->directory('/search') - ->default_path('includes/search/') - ->default_suffix('') - ->default_directory('') + ->extension_suffix('_backend') + ->extension_directory('/search') + ->core_path('includes/search/') ->get_classes(); /* diff --git a/phpBB/includes/captcha/captcha_factory.php b/phpBB/includes/captcha/captcha_factory.php index 2779a23d34..e039e92054 100644 --- a/phpBB/includes/captcha/captcha_factory.php +++ b/phpBB/includes/captcha/captcha_factory.php @@ -68,10 +68,9 @@ class phpbb_captcha_factory $finder = $phpbb_extension_manager->get_finder(); $captcha_plugin_classes = $finder - ->directory('/captcha') + ->extension_directory('/captcha') ->suffix('_plugin') - ->default_path('includes/captcha/plugins/') - ->default_directory('') + ->core_path('includes/captcha/plugins/') ->get_classes(); foreach ($captcha_plugin_classes as $class) diff --git a/phpBB/includes/cron/task/provider.php b/phpBB/includes/cron/task/provider.php index 3f07bac051..e6ae0f75ec 100644 --- a/phpBB/includes/cron/task/provider.php +++ b/phpBB/includes/cron/task/provider.php @@ -40,11 +40,9 @@ class phpbb_cron_task_provider extends phpbb_extension_provider $finder = $this->extension_manager->get_finder(); return $finder - ->suffix('_task') - ->directory('/cron') - ->default_path('includes/cron/task/core/') - ->default_suffix('') - ->default_directory('') + ->extension_suffix('_task') + ->extension_directory('/cron') + ->core_path('includes/cron/task/core/') ->get_classes(); } } diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index f3a9900a67..5850ebe406 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -62,106 +62,120 @@ class phpbb_extension_finder $this->cache_name = $cache_name; $this->query = array( - 'default_path' => false, - 'default_suffix' => false, - 'default_prefix' => false, - 'default_directory' => false, - 'suffix' => false, - 'prefix' => false, - 'directory' => false, + 'core_path' => false, + 'core_suffix' => false, + 'core_prefix' => false, + 'core_directory' => false, + 'extension_suffix' => false, + 'extension_prefix' => false, + 'extension_directory' => false, ); $this->cached_queries = ($this->cache) ? $this->cache->get($this->cache_name) : false; } /** - * Sets a default path to be searched in addition to extensions + * Sets a core path to be searched in addition to extensions * - * @param string $default_path The path relative to phpbb_root_path + * @param string $core_path The path relative to phpbb_root_path * @return phpbb_extension_finder This object for chaining calls */ - public function default_path($default_path) + public function core_path($core_path) { - $this->query['default_path'] = $default_path; + $this->query['core_path'] = $core_path; return $this; } /** - * Sets a suffix all files found in extensions must match. + * Sets the suffix all files found in extensions and core must match. * * There is no default file extension, so to find PHP files only, you will * have to specify .php as a suffix. However when using get_classes, the .php * file extension is automatically added to suffixes. * - * Automatically sets the default_suffix if its value does not differ from - * the current suffix. - * * @param string $suffix A filename suffix * @return phpbb_extension_finder This object for chaining calls */ public function suffix($suffix) { - if ($this->query['default_suffix'] === $this->query['suffix']) - { - $this->query['default_suffix'] = $suffix; - } - - $this->query['suffix'] = $suffix; + $this->core_suffix($suffix); + $this->extension_suffix($suffix); return $this; } /** - * Sets a suffix all files found in the default path must match + * Sets a suffix all files found in extensions must match * * There is no default file extension, so to find PHP files only, you will * have to specify .php as a suffix. However when using get_classes, the .php * file extension is automatically added to suffixes. * - * @param string $default_suffix A filename suffix + * @param string $extension_suffix A filename suffix * @return phpbb_extension_finder This object for chaining calls */ - public function default_suffix($default_suffix) + public function extension_suffix($extension_suffix) { - $this->query['default_suffix'] = $default_suffix; + $this->query['extension_suffix'] = $extension_suffix; return $this; } /** - * Sets a prefix all files found in extensions must match + * Sets a suffix all files found in the core path must match * - * Automatically sets the default_prefix if its value does not differ from - * the current prefix. + * There is no default file extension, so to find PHP files only, you will + * have to specify .php as a suffix. However when using get_classes, the .php + * file extension is automatically added to suffixes. + * + * @param string $core_suffix A filename suffix + * @return phpbb_extension_finder This object for chaining calls + */ + public function core_suffix($core_suffix) + { + $this->query['core_suffix'] = $core_suffix; + return $this; + } + + /** + * Sets the prefix all files found in extensions and core must match * * @param string $prefix A filename prefix * @return phpbb_extension_finder This object for chaining calls */ public function prefix($prefix) { - if ($this->query['default_prefix'] === $this->query['prefix']) - { - $this->query['default_prefix'] = $prefix; - } + $this->core_prefix($prefix); + $this->extension_prefix($prefix); + return $this; + } - $this->query['prefix'] = $prefix; + /** + * Sets a prefix all files found in extensions must match + * + * @param string $extension_prefix A filename prefix + * @return phpbb_extension_finder This object for chaining calls + */ + public function extension_prefix($extension_prefix) + { + $this->query['extension_prefix'] = $extension_prefix; return $this; } /** - * Sets a prefix all files found in the default path must match + * Sets a prefix all files found in the core path must match * - * @param string $default_prefix A filename prefix + * @param string $core_prefix A filename prefix * @return phpbb_extension_finder This object for chaining calls */ - public function default_prefix($default_prefix) + public function core_prefix($core_prefix) { - $this->query['default_prefix'] = $default_prefix; + $this->query['core_prefix'] = $core_prefix; return $this; } /** - * Sets a directory all files found in extensions must be contained in + * Sets a directory all files found in extensions and core must be contained in * - * Automatically sets the default_directory if its value does not differ from + * Automatically sets the core_directory if its value does not differ from * the current directory. * * @param string $directory @@ -169,38 +183,52 @@ class phpbb_extension_finder */ public function directory($directory) { - $directory = preg_replace('#(?:^|/)\./#', '/', $directory); - $dir_len = strlen($directory); - - if ($dir_len > 1 && $directory[$dir_len - 1] === '/') - { - $directory = substr($directory, 0, -1); - } - - if ($this->query['default_directory'] === $this->query['directory']) - { - $this->query['default_directory'] = $directory; - } + $this->core_directory($directory); + $this->extension_directory($directory); + return $this; + } - $this->query['directory'] = $directory; + /** + * Sets a directory all files found in extensions must be contained in + * + * @param string $extension_directory + * @return phpbb_extension_finder This object for chaining calls + */ + public function extension_directory($extension_directory) + { + $this->query['extension_directory'] = $this->sanitise_directory($extension_directory); return $this; } /** - * Sets a directory all files found in the default path must be contained in + * Sets a directory all files found in the core path must be contained in * - * @param string $default_directory + * @param string $core_directory * @return phpbb_extension_finder This object for chaining calls */ - public function default_directory($default_directory) + public function core_directory($core_directory) + { + $this->query['core_directory'] = $this->sanitise_directory($core_directory); + return $this; + } + + /** + * Removes occurances of /./ and makes sure path ends without trailing slash + * + * @param string $directory A directory pattern + * @return string A cleaned up directory pattern + */ + protected function sanitise_directory($directory) { - if (strlen($default_directory) > 1 && $default_directory[strlen($default_directory) - 1] === '/') + $directory = preg_replace('#(?:^|/)\./#', '/', $directory); + $dir_len = strlen($directory); + + if ($dir_len > 1 && $directory[$dir_len - 1] === '/') { - $default_directory = substr($default_directory, 0, -1); + $directory = substr($directory, 0, -1); } - $this->query['default_directory'] = $default_directory; - return $this; + return $directory; } /** @@ -216,8 +244,8 @@ class phpbb_extension_finder */ public function get_classes($cache = true) { - $this->query['suffix'] .= $this->phpEx; - $this->query['default_suffix'] .= $this->phpEx; + $this->query['extension_suffix'] .= $this->phpEx; + $this->query['core_suffix'] .= $this->phpEx; $files = $this->find($cache, false); @@ -296,9 +324,9 @@ class phpbb_extension_finder $extensions = $this->extension_manager->all_enabled(); - if ($this->query['default_path']) + if ($this->query['core_path']) { - $extensions['/'] = $this->phpbb_root_path . $this->query['default_path']; + $extensions['/'] = $this->phpbb_root_path . $this->query['core_path']; } foreach ($extensions as $name => $path) @@ -312,19 +340,19 @@ class phpbb_extension_finder if ($name === '/') { - $location = $this->query['default_path']; + $location = $this->query['core_path']; $name = ''; - $suffix = $this->query['default_suffix']; - $prefix = $this->query['default_prefix']; - $directory = $this->query['default_directory']; + $suffix = $this->query['core_suffix']; + $prefix = $this->query['core_prefix']; + $directory = $this->query['core_directory']; } else { $location = 'ext/'; $name .= '/'; - $suffix = $this->query['suffix']; - $prefix = $this->query['prefix']; - $directory = $this->query['directory']; + $suffix = $this->query['extension_suffix']; + $prefix = $this->query['extension_prefix']; + $directory = $this->query['extension_directory']; } // match only first directory if leading slash is given diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php index ce49c3a798..1f451d392d 100644 --- a/phpBB/includes/functions_module.php +++ b/phpBB/includes/functions_module.php @@ -873,9 +873,8 @@ class p_master $lang_files = $finder ->prefix('info_' . strtolower($module_class) . '_') ->suffix(".$phpEx") - ->directory('/language/' . $user->lang_name) - ->default_path('language/' . $user->lang_name . '/mods/') - ->default_directory('') + ->extension_directory('/language/' . $user->lang_name) + ->core_path('language/' . $user->lang_name . '/mods/') ->find(); foreach ($lang_files as $lang_file => $ext_name) -- cgit v1.2.1 From 0c443a089c9884fc18566e8d184a199a0c03eb43 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 17:09:53 +0100 Subject: [feature/extension-manager] Reference correct new module basenames in install PHPBB3-10323 --- phpBB/install/install_install.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index 5ea3525edd..038a409c8f 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -1604,7 +1604,7 @@ class install_install extends module // Move main module 4 up... $sql = 'SELECT * FROM ' . MODULES_TABLE . " - WHERE module_basename = 'main' + WHERE module_basename = 'acp_main' AND module_class = 'acp' AND module_mode = 'main'"; $result = $db->sql_query($sql); @@ -1616,7 +1616,7 @@ class install_install extends module // Move permissions intro screen module 4 up... $sql = 'SELECT * FROM ' . MODULES_TABLE . " - WHERE module_basename = 'permissions' + WHERE module_basename = 'acp_permissions' AND module_class = 'acp' AND module_mode = 'intro'"; $result = $db->sql_query($sql); @@ -1628,7 +1628,7 @@ class install_install extends module // Move manage users screen module 5 up... $sql = 'SELECT * FROM ' . MODULES_TABLE . " - WHERE module_basename = 'users' + WHERE module_basename = 'acp_users' AND module_class = 'acp' AND module_mode = 'overview'"; $result = $db->sql_query($sql); @@ -1643,7 +1643,7 @@ class install_install extends module // Move attachment module 4 down... $sql = 'SELECT * FROM ' . MODULES_TABLE . " - WHERE module_basename = 'attachments' + WHERE module_basename = 'ucp_attachments' AND module_class = 'ucp' AND module_mode = 'attachments'"; $result = $db->sql_query($sql); -- cgit v1.2.1 From 21117c69f313929d23592e3e705de3e4974afaa0 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 17:30:23 +0100 Subject: [feature/extension-manager] Add documentation on caching in ext finder PHPBB3-10323 --- phpBB/includes/extension/finder.php | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index 5850ebe406..a1e6b2b347 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -26,6 +26,13 @@ class phpbb_extension_finder protected $phpbb_root_path; protected $cache; protected $phpEx; + + /** + * The cache variable name used to store $this->cached_queries in $this->cache. + * + * Allows the use of multiple differently configured finders with the same cache. + * @var string + */ protected $cache_name; /** -- cgit v1.2.1 From 5068c0588733f80a8433aea1cd6f763819caa9f7 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 18:15:39 +0100 Subject: [feature/extension-manager] Split disabling extensions up into steps as well PHPBB3-10323 --- phpBB/includes/extension/base.php | 10 +++++--- phpBB/includes/extension/interface.php | 7 ++++-- phpBB/includes/extension/manager.php | 46 +++++++++++++++++++++++++++++----- 3 files changed, 52 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/base.php b/phpBB/includes/extension/base.php index fed120c51b..d9159d57d2 100644 --- a/phpBB/includes/extension/base.php +++ b/phpBB/includes/extension/base.php @@ -25,6 +25,7 @@ class phpbb_extension_base implements phpbb_extension_interface /** * Single enable step that does nothing * + * @param mixed $old_state State returned by previous call of this method * @return false Indicates no further steps are required */ public function enable_step($old_state) @@ -33,17 +34,20 @@ class phpbb_extension_base implements phpbb_extension_interface } /** - * Empty disable method + * Single disable step that does nothing * - * @return null + * @param mixed $old_state State returned by previous call of this method + * @return false Indicates no further steps are required */ - public function disable() + public function disable_step($old_state) { + return false; } /** * Single purge step that does nothing * + * @param mixed $old_state State returned by previous call of this method * @return false Indicates no further steps are required */ public function purge_step($old_state) diff --git a/phpBB/includes/extension/interface.php b/phpBB/includes/extension/interface.php index 7d0ecd72c7..b37cd24d77 100644 --- a/phpBB/includes/extension/interface.php +++ b/phpBB/includes/extension/interface.php @@ -40,11 +40,14 @@ interface phpbb_extension_interface /** * Disables the extension. * - * Must be a quick operation, that finishes within max_execution_time. + * Calls to this function can be made in subsequent requests, when the + * function is invoked through a webserver with a too low max_execution_time. * + * @param mixed $old_state The return value of the previous call + * of this method, or false on the first call * @return null */ - public function disable(); + public function disable_step($old_state); /** * purge_step is executed on purging an extension until it returns false. diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index 29cd89fb34..bcdd21f7f1 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -128,7 +128,7 @@ class phpbb_extension_manager * in the extensions table. * * @param string $name The extension's name - * @return bool Whether another run of enable_step is required + * @return bool False if enabling is finished, true otherwise */ public function enable_step($name) { @@ -191,18 +191,36 @@ class phpbb_extension_manager * process the event. * * @param string $name The extension's name - * @return null + * @return bool False if disabling is finished, true otherwise */ - public function disable($name) + public function disable_step($name) { // ignore extensions that are already disabled if (!isset($this->extensions[$name]) || !$this->extensions[$name]['ext_active']) { - return; + return false; } + $old_state = unserialize($this->extensions[$name]['ext_state']); + $extension = $this->get_extension($name); - $extension->disable(); + $state = $extension->disable_step($old_state); + + // continue until the state is false + if ($state !== false) + { + $extension_data = array( + 'ext_state' => serialize($state), + ); + $this->extensions[$name]['ext_state'] = serialize($state); + + $sql = 'UPDATE ' . $this->extension_table . ' + SET ' . $this->db->sql_build_array('UPDATE', $extension_data) . " + WHERE ext_name = '" . $this->db->sql_escape($name) . "'"; + $this->db->sql_query($sql); + + return true; + } $extension_data = array( 'ext_active' => false, @@ -215,6 +233,22 @@ class phpbb_extension_manager SET ' . $this->db->sql_build_array('UPDATE', $extension_data) . " WHERE ext_name = '" . $this->db->sql_escape($name) . "'"; $this->db->sql_query($sql); + + return false; + } + + /** + * Disables an extension + * + * Disables an extension completely at once. This process could run for a + * while so never call this in a script that has a max_execution time. + * + * @param string $name The extension's name + * @return null + */ + public function disable($name) + { + while ($this->disable_step($name)); } /** @@ -224,7 +258,7 @@ class phpbb_extension_manager * extension's meta class to delete the extension's database content. * * @param string $name The extension's name - * @return null + * @return bool False if purging is finished, true otherwise */ public function purge_step($name) { -- cgit v1.2.1 From 5f48f55cca5d0a6a2c51cdcc8a60b475354f50b1 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 18 Nov 2011 19:57:20 +0100 Subject: [feature/extension-manager] Removing now unused acp_search code PHPBB3-10323 --- phpBB/includes/acp/acp_search.php | 22 ---------------------- 1 file changed, 22 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_search.php b/phpBB/includes/acp/acp_search.php index 049a70647f..ab604cd7cd 100644 --- a/phpBB/includes/acp/acp_search.php +++ b/phpBB/includes/acp/acp_search.php @@ -563,28 +563,6 @@ class acp_search ->extension_directory('/search') ->core_path('includes/search/') ->get_classes(); - -/* - $search_types = array(); - - $dp = @opendir($phpbb_root_path . 'includes/search'); - - if ($dp) - { - while (($file = readdir($dp)) !== false) - { - if ((preg_match('#\.' . $phpEx . '$#', $file)) && ($file != "search.$phpEx")) - { - $search_types[] = preg_replace('#^(.*?)\.' . $phpEx . '$#', '\1', $file); - } - } - closedir($dp); - - sort($search_types); - } - - return $search_types; -*/ } function get_max_post_id() -- cgit v1.2.1 From 4fae5eef6829b997e39099e561cb88cb5d248ff8 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 13 Oct 2011 19:25:15 +0200 Subject: [ticket/9776] Delete poll if no poll options were submitted. PHPBB3-9776 --- phpBB/includes/functions_posting.php | 8 ++++---- phpBB/posting.php | 17 +++++++++++++++++ 2 files changed, 21 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index a641afbaed..77d92e26e2 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -1870,9 +1870,9 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u case 'edit_topic': case 'edit_first_post': - if (isset($poll['poll_options']) && !empty($poll['poll_options'])) + if (isset($poll['poll_options'])) { - $poll_start = ($poll['poll_start']) ? $poll['poll_start'] : $current_time; + $poll_start = ($poll['poll_start'] || empty($poll['poll_options'])) ? $poll['poll_start'] : $current_time; $poll_length = $poll['poll_length'] * 86400; if ($poll_length < 0) { @@ -2075,11 +2075,11 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u } // Update Poll Tables - if (isset($poll['poll_options']) && !empty($poll['poll_options'])) + if (isset($poll['poll_options'])) { $cur_poll_options = array(); - if ($poll['poll_start'] && $mode == 'edit') + if ($mode == 'edit') { $sql = 'SELECT * FROM ' . POLL_OPTIONS_TABLE . ' diff --git a/phpBB/posting.php b/phpBB/posting.php index 1bc498efe7..ea3b53e939 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -904,6 +904,23 @@ if ($submit || $preview || $refresh) $message_parser->warn_msg[] = $user->lang['NO_DELETE_POLL_OPTIONS']; }*/ } + else if ($mode == 'edit' && $post_id == $post_data['topic_first_post_id'] && $auth->acl_get('f_poll', $forum_id)) + { + // The user removed all poll options, this is equal to deleting the poll. + $poll = array( + 'poll_title' => '', + 'poll_length' => 0, + 'poll_max_options' => 0, + 'poll_option_text' => '', + 'poll_start' => 0, + 'poll_last_vote' => 0, + 'poll_vote_change' => 0, + 'poll_options' => array(), + ); + + $post_data['poll_options'] = $post_data['poll_title'] = ''; + $post_data['poll_start'] = $post_data['poll_length'] = $post_data['poll_max_options'] = $post_data['poll_last_vote'] = $post_data['poll_vote_change'] = 0; + } else if (!$auth->acl_get('f_poll', $forum_id) && ($mode == 'edit') && ($post_id == $post_data['topic_first_post_id']) && ($original_poll_data['poll_title'] != '')) { // We have a poll but the editing user is not permitted to create/edit it. -- cgit v1.2.1 From 810016ce944a0fbec70187c9d87c9124ecdccb3a Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Fri, 18 Nov 2011 21:29:02 +0000 Subject: [ticket/10239] Correct undefined variable error. PHPBB3-10239 --- phpBB/includes/acp/acp_database.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_database.php b/phpBB/includes/acp/acp_database.php index 1bf10b0e57..62bcd43a47 100644 --- a/phpBB/includes/acp/acp_database.php +++ b/phpBB/includes/acp/acp_database.php @@ -221,6 +221,7 @@ class acp_database case 'submit': $delete = request_var('delete', ''); $file = request_var('file', ''); + $download = request_var('download', ''); if (!preg_match('#^backup_\d{10,}_[a-z\d]{16}\.(sql(?:\.(?:gz|bz2))?)$#', $file, $matches)) { @@ -249,8 +250,6 @@ class acp_database } else if ($download || confirm_box(true)) { - $download = request_var('download', ''); - if ($download) { $name = $matches[0]; -- cgit v1.2.1 From eb1f15bc8b7b7a284b25b2c9b9942714b6848ebc Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 12 Nov 2011 14:59:11 +0100 Subject: [ticket/8996] Also fix the BBCode bug in subsilver2 and acp --- phpBB/adm/style/editor.js | 68 +++++++++++---------- phpBB/styles/prosilver/template/editor.js | 61 +++++++++---------- phpBB/styles/subsilver2/template/editor.js | 96 +++++++++++++++--------------- 3 files changed, 117 insertions(+), 108 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/editor.js b/phpBB/adm/style/editor.js index 217aa699e2..600fa254cf 100644 --- a/phpBB/adm/style/editor.js +++ b/phpBB/adm/style/editor.js @@ -28,8 +28,8 @@ function helpline(help) /** * Fix a bug involving the TextRange object. From * http://www.frostjedi.com/terra/scripts/demo/caretBug.html -*/ -function initInsertions() +*/ +function initInsertions() { var doc; if(document.forms[form_name]) @@ -66,7 +66,7 @@ function bbstyle(bbnumber) else { insert_text('[*]'); - document.forms[form_name].elements[text_name].focus(); + document.forms[form_name].elements[text_name].focus(); } } @@ -76,7 +76,7 @@ function bbstyle(bbnumber) function bbfontstyle(bbopen, bbclose) { theSelection = false; - + var textarea = document.forms[form_name].elements[text_name]; textarea.focus(); @@ -84,14 +84,10 @@ function bbfontstyle(bbopen, bbclose) if ((clientVer >= 4) && is_ie && is_win) { // Get text selection - theSelection = document.selection.createRange().text; - - if (theSelection) + if (textarea.createTextRange && textarea.caretPos) { - // Add tags around selection - document.selection.createRange().text = bbopen + theSelection + bbclose; - document.forms[form_name].elements[text_name].focus(); - theSelection = ''; + textarea.caretPos.text = bbopen + textarea.caretPos.text + bbclose; + textarea.focus(); return; } } @@ -102,10 +98,10 @@ function bbfontstyle(bbopen, bbclose) theSelection = ''; return; } - + //The new position for the cursor after adding the bbcode var caret_pos = getCaretPosition(textarea).start; - var new_pos = caret_pos + bbopen.length; + var new_pos = caret_pos + bbopen.length; // Open tag insert_text(bbopen + bbclose); @@ -116,12 +112,12 @@ function bbfontstyle(bbopen, bbclose) { textarea.selectionStart = new_pos; textarea.selectionEnd = new_pos; - } + } // IE else if (document.selection) { - var range = textarea.createTextRange(); - range.move("character", new_pos); + var range = textarea.createTextRange(); + range.move("character", bbopen.length); range.select(); storeCaret(textarea); } @@ -136,7 +132,7 @@ function bbfontstyle(bbopen, bbclose) function insert_text(text, spaces, popup) { var textarea; - + if (!popup) { textarea = document.forms[form_name].elements[text_name]; @@ -159,18 +155,18 @@ function insert_text(text, spaces, popup) mozWrap(textarea, text, ''); textarea.selectionStart = sel_start + text.length; textarea.selectionEnd = sel_end + text.length; - } - + } + else if (textarea.createTextRange && textarea.caretPos) { - if (baseHeight != textarea.caretPos.boundingHeight) + if (baseHeight != textarea.caretPos.boundingHeight) { textarea.focus(); storeCaret(textarea); } var caret_pos = textarea.caretPos; caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text; - + } else { @@ -233,7 +229,7 @@ function addquote(post_id, username) theSelection = theSelection.replace(//ig, '\n'); theSelection = theSelection.replace(/<\;/ig, '<'); theSelection = theSelection.replace(/>\;/ig, '>'); - theSelection = theSelection.replace(/&\;/ig, '&'); + theSelection = theSelection.replace(/&\;/ig, '&'); theSelection = theSelection.replace(/ \;/ig, ' '); } else if (document.all) @@ -268,7 +264,7 @@ function mozWrap(txtarea, open, close) var selEnd = txtarea.selectionEnd; var scrollTop = txtarea.scrollTop; - if (selEnd == 1 || selEnd == 2) + if (selEnd == 1 || selEnd == 2) { selEnd = selLength; } @@ -292,7 +288,17 @@ function mozWrap(txtarea, open, close) */ function storeCaret(textEl) { - if (textEl.createTextRange) + var keyCode = false; + if (is_ie) + { + keyCode = (event.keyCode) ? event.keyCode : event.charCode; + } + + // Did the user press Shift (16), Ctrl (17) or Alt (18)? + // If so, we do not update the caretPos, so BBCodes can still be applied correctly. + var is_control_key = (keyCode == 16 || keyCode == 17 || keyCode == 18); + + if ((!is_ie || !is_control_key) && (textEl.createTextRange)) { textEl.caretPos = document.selection.createRange().duplicate(); } @@ -328,7 +334,7 @@ function colorPalette(dir, width, height) { document.writeln('
    '); } - + for (b = 0; b < 5; b++) { color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); @@ -368,9 +374,9 @@ function caretPosition() function getCaretPosition(txtarea) { var caretPos = new caretPosition(); - + // simple Gecko/Opera way - if (txtarea.selectionStart || txtarea.selectionStart == 0) + if (!is_ie && (txtarea.selectionStart || txtarea.selectionStart == 0)) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; @@ -384,19 +390,19 @@ function getCaretPosition(txtarea) // a new selection of the whole textarea var range_all = document.body.createTextRange(); range_all.moveToElementText(txtarea); - + // calculate selection start point by moving beginning of range_all to beginning of range var sel_start; for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) { range_all.moveStart('character', 1); } - + txtarea.sel_start = sel_start; - + // we ignore the end value for IE, this is already dirty enough and we don't need it caretPos.start = txtarea.sel_start; - caretPos.end = txtarea.sel_start; + caretPos.end = txtarea.sel_start; } return caretPos; diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/styles/prosilver/template/editor.js index 957c39b568..5aa486d320 100644 --- a/phpBB/styles/prosilver/template/editor.js +++ b/phpBB/styles/prosilver/template/editor.js @@ -28,8 +28,8 @@ function helpline(help) /** * Fix a bug involving the TextRange object. From * http://www.frostjedi.com/terra/scripts/demo/caretBug.html -*/ -function initInsertions() +*/ +function initInsertions() { var doc; @@ -37,7 +37,7 @@ function initInsertions() { doc = document; } - else + else { doc = opener.document; } @@ -60,12 +60,12 @@ function initInsertions() * bbstyle */ function bbstyle(bbnumber) -{ +{ if (bbnumber != -1) { bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); - } - else + } + else { insert_text('[*]'); document.forms[form_name].elements[text_name].focus(); @@ -86,10 +86,10 @@ function bbfontstyle(bbopen, bbclose) if ((clientVer >= 4) && is_ie && is_win) { // Get text selection - textarea = document.forms[form_name].elements[text_name]; if (textarea.createTextRange && textarea.caretPos) { textarea.caretPos.text = bbopen + textarea.caretPos.text + bbclose; + textarea.focus(); return; } } @@ -100,7 +100,7 @@ function bbfontstyle(bbopen, bbclose) theSelection = ''; return; } - + //The new position for the cursor after adding the bbcode var caret_pos = getCaretPosition(textarea).start; var new_pos = caret_pos + bbopen.length; @@ -114,12 +114,12 @@ function bbfontstyle(bbopen, bbclose) { textarea.selectionStart = new_pos; textarea.selectionEnd = new_pos; - } + } // IE else if (document.selection) { - var range = textarea.createTextRange(); - range.move("character", new_pos); + var range = textarea.createTextRange(); + range.move("character", new_pos); range.select(); storeCaret(textarea); } @@ -134,16 +134,16 @@ function bbfontstyle(bbopen, bbclose) function insert_text(text, spaces, popup) { var textarea; - - if (!popup) + + if (!popup) { textarea = document.forms[form_name].elements[text_name]; - } - else + } + else { textarea = opener.document.forms[form_name].elements[text_name]; } - if (spaces) + if (spaces) { text = ' ' + text + ' '; } @@ -161,7 +161,7 @@ function insert_text(text, spaces, popup) } else if (textarea.createTextRange && textarea.caretPos) { - if (baseHeight != textarea.caretPos.boundingHeight) + if (baseHeight != textarea.caretPos.boundingHeight) { textarea.focus(); storeCaret(textarea); @@ -174,7 +174,7 @@ function insert_text(text, spaces, popup) { textarea.value = textarea.value + text; } - if (!popup) + if (!popup) { textarea.focus(); } @@ -291,7 +291,7 @@ function split_lines(text) do { var splitAt = line.indexOf(' ', 80); - + if (splitAt == -1) { splitLines[j] = line; @@ -319,7 +319,7 @@ function mozWrap(txtarea, open, close) var selEnd = txtarea.selectionEnd; var scrollTop = txtarea.scrollTop; - if (selEnd == 1 || selEnd == 2) + if (selEnd == 1 || selEnd == 2) { selEnd = selLength; } @@ -351,7 +351,9 @@ function storeCaret(textEl) // Did the user press Shift (16), Ctrl (17) or Alt (18)? // If so, we do not update the caretPos, so BBCodes can still be applied correctly. - if ((!is_ie || (keyCode != 16 && keyCode != 17 && keyCode != 18)) && (textEl.createTextRange)) + var is_control_key = (keyCode == 16 || keyCode == 17 || keyCode == 18); + + if ((!is_ie || !is_control_key) && (textEl.createTextRange)) { textEl.caretPos = document.selection.createRange().duplicate(); } @@ -387,7 +389,7 @@ function colorPalette(dir, width, height) { document.writeln(''); } - + for (b = 0; b < 5; b++) { color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); @@ -427,33 +429,32 @@ function caretPosition() function getCaretPosition(txtarea) { var caretPos = new caretPosition(); - + // simple Gecko/Opera way - if(!is_ie && (txtarea.selectionStart || txtarea.selectionStart == 0)) + if (!is_ie && (txtarea.selectionStart || txtarea.selectionStart == 0)) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; } // dirty and slow IE way - else if(document.selection) + else if (document.selection) { - // get current selection var range = document.selection.createRange(); // a new selection of the whole textarea var range_all = document.body.createTextRange(); range_all.moveToElementText(txtarea); - + // calculate selection start point by moving beginning of range_all to beginning of range var sel_start; for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) - { + { range_all.moveStart('character', 1); } - + txtarea.sel_start = sel_start; - + // we ignore the end value for IE, this is already dirty enough and we don't need it caretPos.start = txtarea.sel_start; caretPos.end = txtarea.sel_start; diff --git a/phpBB/styles/subsilver2/template/editor.js b/phpBB/styles/subsilver2/template/editor.js index 7cc5de9034..5aa486d320 100644 --- a/phpBB/styles/subsilver2/template/editor.js +++ b/phpBB/styles/subsilver2/template/editor.js @@ -6,8 +6,8 @@ // Startup variables var imageTag = false; var theSelection = false; -var bbcodeEnabled = true; +var bbcodeEnabled = true; // Check for Browser & Platform for PC & IE specific bits // More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html var clientPC = navigator.userAgent.toLowerCase(); // Get client info @@ -15,7 +15,6 @@ var clientVer = parseInt(navigator.appVersion); // Get browser version var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1)); var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1)); - var baseHeight; /** @@ -29,8 +28,8 @@ function helpline(help) /** * Fix a bug involving the TextRange object. From * http://www.frostjedi.com/terra/scripts/demo/caretBug.html -*/ -function initInsertions() +*/ +function initInsertions() { var doc; @@ -38,14 +37,15 @@ function initInsertions() { doc = document; } - else + else { doc = opener.document; } var textarea = doc.forms[form_name].elements[text_name]; + if (is_ie && typeof(baseHeight) != 'number') - { + { textarea.focus(); baseHeight = doc.selection.createRange().duplicate().boundingHeight; @@ -60,12 +60,12 @@ function initInsertions() * bbstyle */ function bbstyle(bbnumber) -{ +{ if (bbnumber != -1) { bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); - } - else + } + else { insert_text('[*]'); document.forms[form_name].elements[text_name].focus(); @@ -78,7 +78,7 @@ function bbstyle(bbnumber) function bbfontstyle(bbopen, bbclose) { theSelection = false; - + var textarea = document.forms[form_name].elements[text_name]; textarea.focus(); @@ -86,14 +86,10 @@ function bbfontstyle(bbopen, bbclose) if ((clientVer >= 4) && is_ie && is_win) { // Get text selection - theSelection = document.selection.createRange().text; - - if (theSelection) + if (textarea.createTextRange && textarea.caretPos) { - // Add tags around selection - document.selection.createRange().text = bbopen + theSelection + bbclose; - document.forms[form_name].elements[text_name].focus(); - theSelection = ''; + textarea.caretPos.text = bbopen + textarea.caretPos.text + bbclose; + textarea.focus(); return; } } @@ -104,7 +100,7 @@ function bbfontstyle(bbopen, bbclose) theSelection = ''; return; } - + //The new position for the cursor after adding the bbcode var caret_pos = getCaretPosition(textarea).start; var new_pos = caret_pos + bbopen.length; @@ -118,12 +114,12 @@ function bbfontstyle(bbopen, bbclose) { textarea.selectionStart = new_pos; textarea.selectionEnd = new_pos; - } + } // IE else if (document.selection) { - var range = textarea.createTextRange(); - range.move("character", new_pos); + var range = textarea.createTextRange(); + range.move("character", new_pos); range.select(); storeCaret(textarea); } @@ -138,16 +134,16 @@ function bbfontstyle(bbopen, bbclose) function insert_text(text, spaces, popup) { var textarea; - - if (!popup) + + if (!popup) { textarea = document.forms[form_name].elements[text_name]; - } - else + } + else { textarea = opener.document.forms[form_name].elements[text_name]; } - if (spaces) + if (spaces) { text = ' ' + text + ' '; } @@ -162,28 +158,26 @@ function insert_text(text, spaces, popup) mozWrap(textarea, text, ''); textarea.selectionStart = sel_start + text.length; textarea.selectionEnd = sel_end + text.length; - } - + } else if (textarea.createTextRange && textarea.caretPos) { - if (baseHeight != textarea.caretPos.boundingHeight) + if (baseHeight != textarea.caretPos.boundingHeight) { textarea.focus(); storeCaret(textarea); - } + } + var caret_pos = textarea.caretPos; caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text; - } else { textarea.value = textarea.value + text; } - if (!popup) + if (!popup) { textarea.focus(); - } - + } } /** @@ -279,7 +273,6 @@ function addquote(post_id, username, l_wrote) return; } - function split_lines(text) { var lines = text.split('\n'); @@ -298,7 +291,7 @@ function split_lines(text) do { var splitAt = line.indexOf(' ', 80); - + if (splitAt == -1) { splitLines[j] = line; @@ -316,7 +309,6 @@ function split_lines(text) } return splitLines; } - /** * From http://www.massless.org/mozedit/ */ @@ -327,7 +319,7 @@ function mozWrap(txtarea, open, close) var selEnd = txtarea.selectionEnd; var scrollTop = txtarea.scrollTop; - if (selEnd == 1 || selEnd == 2) + if (selEnd == 1 || selEnd == 2) { selEnd = selLength; } @@ -351,7 +343,17 @@ function mozWrap(txtarea, open, close) */ function storeCaret(textEl) { - if (textEl.createTextRange) + var keyCode = false; + if (is_ie) + { + keyCode = (event.keyCode) ? event.keyCode : event.charCode; + } + + // Did the user press Shift (16), Ctrl (17) or Alt (18)? + // If so, we do not update the caretPos, so BBCodes can still be applied correctly. + var is_control_key = (keyCode == 16 || keyCode == 17 || keyCode == 18); + + if ((!is_ie || !is_control_key) && (textEl.createTextRange)) { textEl.caretPos = document.selection.createRange().duplicate(); } @@ -387,7 +389,7 @@ function colorPalette(dir, width, height) { document.writeln(''); } - + for (b = 0; b < 5; b++) { color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); @@ -427,15 +429,15 @@ function caretPosition() function getCaretPosition(txtarea) { var caretPos = new caretPosition(); - + // simple Gecko/Opera way - if(txtarea.selectionStart || txtarea.selectionStart == 0) + if (!is_ie && (txtarea.selectionStart || txtarea.selectionStart == 0)) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; } // dirty and slow IE way - else if(document.selection) + else if (document.selection) { // get current selection var range = document.selection.createRange(); @@ -443,16 +445,16 @@ function getCaretPosition(txtarea) // a new selection of the whole textarea var range_all = document.body.createTextRange(); range_all.moveToElementText(txtarea); - + // calculate selection start point by moving beginning of range_all to beginning of range var sel_start; for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) - { + { range_all.moveStart('character', 1); } - + txtarea.sel_start = sel_start; - + // we ignore the end value for IE, this is already dirty enough and we don't need it caretPos.start = txtarea.sel_start; caretPos.end = txtarea.sel_start; -- cgit v1.2.1 From 658db65cb477b790f217e0b8c6d202fbb1a8836c Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 19 Nov 2011 22:04:43 +0100 Subject: [ticket/10323] make finder work with PHP 5.2 PHPBB3-10323 --- phpBB/includes/extension/finder.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index a1e6b2b347..11eb682f46 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -377,9 +377,14 @@ class phpbb_extension_finder } $directory_pattern = '#' . $directory_pattern . '#'; - $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path, FilesystemIterator::SKIP_DOTS), RecursiveIteratorIterator::SELF_FIRST); + $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); foreach ($iterator as $file_info) { + if (in_array($file_info, array('.', '..'))) + { + continue; + } + if ($file_info->isDir() == $is_dir) { if ($is_dir) -- cgit v1.2.1 From 813b5344e6fa245f174692de71a4fb44f239786d Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sun, 20 Nov 2011 02:08:37 +0100 Subject: [ticket/10323] slight potential performance improvement PHPBB3-10323 --- phpBB/includes/extension/finder.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index 11eb682f46..f4a0b7a371 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -380,7 +380,8 @@ class phpbb_extension_finder $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); foreach ($iterator as $file_info) { - if (in_array($file_info, array('.', '..'))) + $filename = $file_info->getFilename(); + if ($filename == '.' || $filename == '..') { continue; } @@ -389,7 +390,7 @@ class phpbb_extension_finder { if ($is_dir) { - $relative_path = $iterator->getInnerIterator()->getSubPath() . DIRECTORY_SEPARATOR . basename($file_info->getFilename()) . DIRECTORY_SEPARATOR; + $relative_path = $iterator->getInnerIterator()->getSubPath() . DIRECTORY_SEPARATOR . basename($filename) . DIRECTORY_SEPARATOR; if ($relative_path[0] !== DIRECTORY_SEPARATOR) { $relative_path = DIRECTORY_SEPARATOR . $relative_path; @@ -399,10 +400,9 @@ class phpbb_extension_finder { $relative_path = DIRECTORY_SEPARATOR . $iterator->getInnerIterator()->getSubPathname(); } - $item_name = $file_info->getFilename(); if ((!$suffix || substr($relative_path, -strlen($suffix)) === $suffix) && - (!$prefix || substr($item_name, 0, strlen($prefix)) === $prefix) && + (!$prefix || substr($filename, 0, strlen($prefix)) === $prefix) && (!$directory || preg_match($directory_pattern, $relative_path))) { $files[str_replace(DIRECTORY_SEPARATOR, '/', $location . $name . substr($relative_path, 1))] = $ext_name; -- cgit v1.2.1 From 64d62038cd8e2e69eb101c5256ea458cff98ae10 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 20 Nov 2011 04:15:44 -0500 Subject: [ticket/10446] DRY X-AntiAbuse header addition. PHPBB3-10446 --- phpBB/includes/acp/acp_email.php | 5 +---- phpBB/includes/acp/acp_inactive.php | 10 ++-------- phpBB/includes/acp/acp_users.php | 10 ++-------- phpBB/includes/functions_messenger.php | 12 ++++++++++++ phpBB/includes/ucp/ucp_activate.php | 5 +---- phpBB/includes/ucp/ucp_profile.php | 5 +---- phpBB/includes/ucp/ucp_register.php | 9 +++------ phpBB/includes/ucp/ucp_resend.php | 10 ++-------- phpBB/install/install_install.php | 5 +---- phpBB/memberlist.php | 5 +---- 10 files changed, 26 insertions(+), 50 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_email.php b/phpBB/includes/acp/acp_email.php index e98b7a19a5..29d6903691 100644 --- a/phpBB/includes/acp/acp_email.php +++ b/phpBB/includes/acp/acp_email.php @@ -195,10 +195,7 @@ class acp_email $messenger->template('admin_send_email', $used_lang); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->subject(htmlspecialchars_decode($subject)); $messenger->set_mail_priority($priority); diff --git a/phpBB/includes/acp/acp_inactive.php b/phpBB/includes/acp/acp_inactive.php index c93cbc457f..a4b2a3ca2f 100644 --- a/phpBB/includes/acp/acp_inactive.php +++ b/phpBB/includes/acp/acp_inactive.php @@ -118,10 +118,7 @@ class acp_inactive $messenger->to($row['user_email'], $row['username']); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($row['username'])) @@ -209,10 +206,7 @@ class acp_inactive $messenger->to($row['user_email'], $row['username']); $messenger->im($row['user_jabber'], $row['username']); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($row['username']), diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index abf1481000..590103d519 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -348,10 +348,7 @@ class acp_users $messenger->to($user_row['user_email'], $user_row['username']); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'WELCOME_MSG' => htmlspecialchars_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename'])), @@ -406,10 +403,7 @@ class acp_users $messenger->to($user_row['user_email'], $user_row['username']); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($user_row['username'])) diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index 08c686d9e3..04b2502210 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -162,6 +162,18 @@ class messenger $this->extra_headers[] = trim($headers); } + /** + * Adds X-AntiAbuse headers + */ + function anti_abuse_headers($headers) + { + global $config, $user; + $this->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); + $this->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); + $this->headers('X-AntiAbuse: Username - ' . $user->data['username']); + $this->headers('X-AntiAbuse: User IP - ' . $user->ip); + } + /** * Set the email priority */ diff --git a/phpBB/includes/ucp/ucp_activate.php b/phpBB/includes/ucp/ucp_activate.php index b00c1b9f52..a1468895a9 100644 --- a/phpBB/includes/ucp/ucp_activate.php +++ b/phpBB/includes/ucp/ucp_activate.php @@ -117,10 +117,7 @@ class ucp_activate $messenger->to($user_row['user_email'], $user_row['username']); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($user_row['username'])) diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index 65b32bd0c4..03a0e3d746 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -150,10 +150,7 @@ class ucp_profile $messenger->to($data['email'], $data['username']); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($data['username']), diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index 13b9945851..e3e719d63c 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -155,8 +155,8 @@ class ucp_register $this->tpl_name = 'ucp_agreement'; return; } - - + + // The CAPTCHA kicks in here. We can't help that the information gets lost on language change. if ($config['enable_confirm']) { @@ -366,10 +366,7 @@ class ucp_register $messenger->to($data['email'], $data['username']); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'WELCOME_MSG' => htmlspecialchars_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename'])), diff --git a/phpBB/includes/ucp/ucp_resend.php b/phpBB/includes/ucp/ucp_resend.php index 39e9be24a1..c1f9effb01 100644 --- a/phpBB/includes/ucp/ucp_resend.php +++ b/phpBB/includes/ucp/ucp_resend.php @@ -94,10 +94,7 @@ class ucp_resend $messenger->template(($coppa) ? 'coppa_resend_inactive' : 'user_resend_inactive', $user_row['user_lang']); $messenger->to($user_row['user_email'], $user_row['username']); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'WELCOME_MSG' => htmlspecialchars_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename'])), @@ -133,10 +130,7 @@ class ucp_resend $messenger->to($row['user_email'], $row['username']); $messenger->im($row['user_jabber'], $row['username']); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($user_row['username']), diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index ccdcf211f1..4a988bb80a 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -1945,10 +1945,7 @@ class install_install extends module $messenger->to($data['board_email1'], $data['admin_name']); - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($data['admin_name']), diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index 8169ee7a3e..f3af8fd44c 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -899,10 +899,7 @@ switch ($mode) $notify_type = NOTIFY_EMAIL; } - $messenger->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); - $messenger->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $messenger->headers('X-AntiAbuse: Username - ' . $user->data['username']); - $messenger->headers('X-AntiAbuse: User IP - ' . $user->ip); + $messenger->anti_abuse_headers(); $messenger->assign_vars(array( 'BOARD_CONTACT' => $config['board_contact'], -- cgit v1.2.1 From c68973a9e04c51e4a2eeec9c3276c9a89baa09e5 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 20 Nov 2011 04:17:42 -0500 Subject: [ticket/10446] RFC2047 encode user/server names in X-AntiAbuse headers. PHPBB3-10446 --- phpBB/includes/functions_messenger.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index 04b2502210..a2ad51a42e 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -168,9 +168,9 @@ class messenger function anti_abuse_headers($headers) { global $config, $user; - $this->headers('X-AntiAbuse: Board servername - ' . $config['server_name']); + $this->headers('X-AntiAbuse: Board servername - ' . mail_encode($config['server_name'])); $this->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); - $this->headers('X-AntiAbuse: Username - ' . $user->data['username']); + $this->headers('X-AntiAbuse: Username - ' . mail_encode($user->data['username'])); $this->headers('X-AntiAbuse: User IP - ' . $user->ip); } -- cgit v1.2.1 From a7077c91495521a8015a2e1dbbe587b2d97a8edc Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 20 Nov 2011 14:02:22 +0100 Subject: [ticket/10446] Remove leftover $headers parameter from anti_abuse_headers(). PHPBB3-10446 --- phpBB/includes/functions_messenger.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index a2ad51a42e..9087b1c8aa 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -165,9 +165,10 @@ class messenger /** * Adds X-AntiAbuse headers */ - function anti_abuse_headers($headers) + function anti_abuse_headers() { global $config, $user; + $this->headers('X-AntiAbuse: Board servername - ' . mail_encode($config['server_name'])); $this->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); $this->headers('X-AntiAbuse: Username - ' . mail_encode($user->data['username'])); -- cgit v1.2.1 From 37c766819346b830cf184fdfae9407006a621b17 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 20 Nov 2011 16:35:31 +0100 Subject: [ticket/10446] Pass $config and $user via parameter to anti_abuse_headers(). PHPBB3-10446 --- phpBB/includes/acp/acp_email.php | 2 +- phpBB/includes/acp/acp_inactive.php | 4 ++-- phpBB/includes/acp/acp_users.php | 4 ++-- phpBB/includes/functions_messenger.php | 9 ++++++--- phpBB/includes/ucp/ucp_activate.php | 2 +- phpBB/includes/ucp/ucp_profile.php | 2 +- phpBB/includes/ucp/ucp_register.php | 2 +- phpBB/includes/ucp/ucp_resend.php | 4 ++-- phpBB/install/install_install.php | 2 +- phpBB/memberlist.php | 2 +- 10 files changed, 18 insertions(+), 15 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_email.php b/phpBB/includes/acp/acp_email.php index 29d6903691..df0d44c0c5 100644 --- a/phpBB/includes/acp/acp_email.php +++ b/phpBB/includes/acp/acp_email.php @@ -195,7 +195,7 @@ class acp_email $messenger->template('admin_send_email', $used_lang); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->subject(htmlspecialchars_decode($subject)); $messenger->set_mail_priority($priority); diff --git a/phpBB/includes/acp/acp_inactive.php b/phpBB/includes/acp/acp_inactive.php index a4b2a3ca2f..f3f332d707 100644 --- a/phpBB/includes/acp/acp_inactive.php +++ b/phpBB/includes/acp/acp_inactive.php @@ -118,7 +118,7 @@ class acp_inactive $messenger->to($row['user_email'], $row['username']); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($row['username'])) @@ -206,7 +206,7 @@ class acp_inactive $messenger->to($row['user_email'], $row['username']); $messenger->im($row['user_jabber'], $row['username']); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($row['username']), diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 590103d519..4f58434a43 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -348,7 +348,7 @@ class acp_users $messenger->to($user_row['user_email'], $user_row['username']); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'WELCOME_MSG' => htmlspecialchars_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename'])), @@ -403,7 +403,7 @@ class acp_users $messenger->to($user_row['user_email'], $user_row['username']); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($user_row['username'])) diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index 9087b1c8aa..91b361183c 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -164,11 +164,14 @@ class messenger /** * Adds X-AntiAbuse headers + * + * @param array $config Configuration array + * @param user $user A user object + * + * @return null */ - function anti_abuse_headers() + function anti_abuse_headers($config, $user) { - global $config, $user; - $this->headers('X-AntiAbuse: Board servername - ' . mail_encode($config['server_name'])); $this->headers('X-AntiAbuse: User_id - ' . $user->data['user_id']); $this->headers('X-AntiAbuse: Username - ' . mail_encode($user->data['username'])); diff --git a/phpBB/includes/ucp/ucp_activate.php b/phpBB/includes/ucp/ucp_activate.php index a1468895a9..82c1937919 100644 --- a/phpBB/includes/ucp/ucp_activate.php +++ b/phpBB/includes/ucp/ucp_activate.php @@ -117,7 +117,7 @@ class ucp_activate $messenger->to($user_row['user_email'], $user_row['username']); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($user_row['username'])) diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index 03a0e3d746..d35d13b6c1 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -150,7 +150,7 @@ class ucp_profile $messenger->to($data['email'], $data['username']); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($data['username']), diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index e3e719d63c..4e8729db56 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -366,7 +366,7 @@ class ucp_register $messenger->to($data['email'], $data['username']); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'WELCOME_MSG' => htmlspecialchars_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename'])), diff --git a/phpBB/includes/ucp/ucp_resend.php b/phpBB/includes/ucp/ucp_resend.php index c1f9effb01..4d181dba49 100644 --- a/phpBB/includes/ucp/ucp_resend.php +++ b/phpBB/includes/ucp/ucp_resend.php @@ -94,7 +94,7 @@ class ucp_resend $messenger->template(($coppa) ? 'coppa_resend_inactive' : 'user_resend_inactive', $user_row['user_lang']); $messenger->to($user_row['user_email'], $user_row['username']); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'WELCOME_MSG' => htmlspecialchars_decode(sprintf($user->lang['WELCOME_SUBJECT'], $config['sitename'])), @@ -130,7 +130,7 @@ class ucp_resend $messenger->to($row['user_email'], $row['username']); $messenger->im($row['user_jabber'], $row['username']); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($user_row['username']), diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index 4a988bb80a..8b073df44c 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -1945,7 +1945,7 @@ class install_install extends module $messenger->to($data['board_email1'], $data['admin_name']); - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'USERNAME' => htmlspecialchars_decode($data['admin_name']), diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index f3af8fd44c..b3c0bae16a 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -899,7 +899,7 @@ switch ($mode) $notify_type = NOTIFY_EMAIL; } - $messenger->anti_abuse_headers(); + $messenger->anti_abuse_headers($config, $user); $messenger->assign_vars(array( 'BOARD_CONTACT' => $config['board_contact'], -- cgit v1.2.1 From 06ae98b1e557661528f53be08244f6fa7338d9b6 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 20 Nov 2011 21:41:24 +0100 Subject: [develop-olympus] Bumping version numbers to final for 3.0.10 releases. --- phpBB/docs/INSTALL.html | 4 ++-- phpBB/install/convertors/convert_phpbb20.php | 2 +- phpBB/styles/prosilver/imageset/imageset.cfg | 2 +- phpBB/styles/prosilver/style.cfg | 2 +- phpBB/styles/prosilver/template/template.cfg | 2 +- phpBB/styles/prosilver/theme/theme.cfg | 2 +- phpBB/styles/subsilver2/imageset/imageset.cfg | 2 +- phpBB/styles/subsilver2/style.cfg | 2 +- phpBB/styles/subsilver2/template/template.cfg | 2 +- phpBB/styles/subsilver2/theme/theme.cfg | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/INSTALL.html b/phpBB/docs/INSTALL.html index 3c3ccf9f28..e5ba479d9e 100644 --- a/phpBB/docs/INSTALL.html +++ b/phpBB/docs/INSTALL.html @@ -274,7 +274,7 @@

    This package is meant for those wanting to only replace changed files from a previous version to the latest version. This package normally contains the changed files from up to five previous versions.

    -

    This package contains a number of archives, each contains the files changed from a given release to the latest version. You should select the appropriate archive for your current version, e.g. if you currently have 3.0.8 you should select the phpBB-3.0.8_to_3.0.9.zip/tar.gz file.

    +

    This package contains a number of archives, each contains the files changed from a given release to the latest version. You should select the appropriate archive for your current version, e.g. if you currently have 3.0.9 you should select the phpBB-3.0.9_to_3.0.10.zip/tar.gz file.

    The directory structure has been preserved enabling you (if you wish) to simply upload the contents of the archive to the appropriate location on your server, i.e. simply overwrite the existing files with the new versions. Do not forget that if you have installed any MODs these files will overwrite the originals possibly destroying them in the process. You will need to re-add MODs to any affected file before uploading.

    @@ -286,7 +286,7 @@

    The patch file is one solution for those with many Modifications (MODs) or other changes who do not want to re-add them back to all the changed files if they use the method explained above. To use this you will need command line access to a standard UNIX type patch application. If you do not have access to such an application but still want to use this update approach, we strongly recommend the Automatic update package explained below. It is also the recommended update method.

    -

    A number of patch files are provided to allow you to update from previous stable releases. Select the correct patch, e.g. if your current version is 3.0.8 you need the phpBB-3.0.8_to_3.0.9.patch file. Place the correct patch in the parent directory containing the phpBB3 core files (i.e. index.php, viewforum.php, etc.). With this done you should run the following command: patch -cl -d [PHPBB DIRECTORY] -p1 < [PATCH NAME] (where PHPBB DIRECTORY is the directory name your phpBB Installation resides in, for example phpBB3, and where PATCH NAME is the relevant filename of the selected patch file). This should complete quickly, hopefully without any HUNK FAILED comments.

    +

    A number of patch files are provided to allow you to update from previous stable releases. Select the correct patch, e.g. if your current version is 3.0.9 you need the phpBB-3.0.9_to_3.0.10.patch file. Place the correct patch in the parent directory containing the phpBB3 core files (i.e. index.php, viewforum.php, etc.). With this done you should run the following command: patch -cl -d [PHPBB DIRECTORY] -p1 < [PATCH NAME] (where PHPBB DIRECTORY is the directory name your phpBB Installation resides in, for example phpBB3, and where PATCH NAME is the relevant filename of the selected patch file). This should complete quickly, hopefully without any HUNK FAILED comments.

    If you do get failures you should look at using the Changed files only package to replace the files which failed to patch, please note that you will need to manually re-add any Modifications (MODs) to these particular files. Alternatively if you know how you can examine the .rej files to determine what failed where and make manual adjustments to the relevant source.

    diff --git a/phpBB/install/convertors/convert_phpbb20.php b/phpBB/install/convertors/convert_phpbb20.php index 789773e349..81cc2f68f3 100644 --- a/phpBB/install/convertors/convert_phpbb20.php +++ b/phpBB/install/convertors/convert_phpbb20.php @@ -32,7 +32,7 @@ unset($dbpasswd); $convertor_data = array( 'forum_name' => 'phpBB 2.0.x', 'version' => '1.0.3', - 'phpbb_version' => '3.0.9', + 'phpbb_version' => '3.0.10', 'author' => 'phpBB Group', 'dbms' => $dbms, 'dbhost' => $dbhost, diff --git a/phpBB/styles/prosilver/imageset/imageset.cfg b/phpBB/styles/prosilver/imageset/imageset.cfg index 72252079d6..5a703d9e47 100644 --- a/phpBB/styles/prosilver/imageset/imageset.cfg +++ b/phpBB/styles/prosilver/imageset/imageset.cfg @@ -19,7 +19,7 @@ # General Information about this style name = prosilver copyright = © phpBB Group, 2007 -version = 3.0.9 +version = 3.0.10 # Images img_site_logo = site_logo.gif*52*139 diff --git a/phpBB/styles/prosilver/style.cfg b/phpBB/styles/prosilver/style.cfg index 83e762f65b..95d8d287e4 100644 --- a/phpBB/styles/prosilver/style.cfg +++ b/phpBB/styles/prosilver/style.cfg @@ -19,4 +19,4 @@ # General Information about this style name = prosilver copyright = © phpBB Group, 2007 -version = 3.0.9 \ No newline at end of file +version = 3.0.10 \ No newline at end of file diff --git a/phpBB/styles/prosilver/template/template.cfg b/phpBB/styles/prosilver/template/template.cfg index 42383a022f..d31dcb7356 100644 --- a/phpBB/styles/prosilver/template/template.cfg +++ b/phpBB/styles/prosilver/template/template.cfg @@ -19,7 +19,7 @@ # General Information about this template name = prosilver copyright = © phpBB Group, 2007 -version = 3.0.9 +version = 3.0.10 # Defining a different template bitfield template_bitfield = lNg= diff --git a/phpBB/styles/prosilver/theme/theme.cfg b/phpBB/styles/prosilver/theme/theme.cfg index 4270094eab..e8698f7fe4 100644 --- a/phpBB/styles/prosilver/theme/theme.cfg +++ b/phpBB/styles/prosilver/theme/theme.cfg @@ -21,7 +21,7 @@ # General Information about this theme name = prosilver copyright = © phpBB Group, 2007 -version = 3.0.9 +version = 3.0.10 # Some configuration options diff --git a/phpBB/styles/subsilver2/imageset/imageset.cfg b/phpBB/styles/subsilver2/imageset/imageset.cfg index d8cfabcb02..75a4aad038 100644 --- a/phpBB/styles/subsilver2/imageset/imageset.cfg +++ b/phpBB/styles/subsilver2/imageset/imageset.cfg @@ -19,7 +19,7 @@ # General Information about this style name = subsilver2 copyright = © phpBB Group, 2003 -version = 3.0.9 +version = 3.0.10 # Images img_site_logo = site_logo.gif*94*170 diff --git a/phpBB/styles/subsilver2/style.cfg b/phpBB/styles/subsilver2/style.cfg index 0cdb7204bb..13e44435c6 100644 --- a/phpBB/styles/subsilver2/style.cfg +++ b/phpBB/styles/subsilver2/style.cfg @@ -19,4 +19,4 @@ # General Information about this style name = subsilver2 copyright = © 2005 phpBB Group -version = 3.0.9 +version = 3.0.10 diff --git a/phpBB/styles/subsilver2/template/template.cfg b/phpBB/styles/subsilver2/template/template.cfg index 92ccfef35a..4e5c36af99 100644 --- a/phpBB/styles/subsilver2/template/template.cfg +++ b/phpBB/styles/subsilver2/template/template.cfg @@ -19,5 +19,5 @@ # General Information about this template name = subsilver2 copyright = © phpBB Group, 2003 -version = 3.0.9 +version = 3.0.10 diff --git a/phpBB/styles/subsilver2/theme/theme.cfg b/phpBB/styles/subsilver2/theme/theme.cfg index 94e2f6d53d..d7837a3766 100644 --- a/phpBB/styles/subsilver2/theme/theme.cfg +++ b/phpBB/styles/subsilver2/theme/theme.cfg @@ -21,7 +21,7 @@ # General Information about this theme name = subsilver2 copyright = © phpBB Group, 2003 -version = 3.0.9 +version = 3.0.10 # Some configuration options -- cgit v1.2.1 From 3e43b53a63743a81b27b53c01d57e4b73d994ae9 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 20 Nov 2011 21:50:29 +0100 Subject: [develop-olympus] Bump version numbers for 3.0.10-RC1 release. --- phpBB/includes/constants.php | 2 +- phpBB/install/database_update.php | 8 +++++--- phpBB/install/schemas/schema_data.sql | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php index 03b1102602..ec7b8c7123 100644 --- a/phpBB/includes/constants.php +++ b/phpBB/includes/constants.php @@ -25,7 +25,7 @@ if (!defined('IN_PHPBB')) */ // phpBB Version -define('PHPBB_VERSION', '3.0.10-dev'); +define('PHPBB_VERSION', '3.0.10-RC1'); // QA-related // define('PHPBB_QA', 1); diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 21246a215e..9ca011c8aa 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -8,7 +8,7 @@ * */ -define('UPDATES_TO_VERSION', '3.0.10-dev'); +define('UPDATES_TO_VERSION', '3.0.10-RC1'); // Enter any version to update from to test updates. The version within the db will not be updated. define('DEBUG_FROM_VERSION', false); @@ -951,7 +951,7 @@ function database_update_info() // this column was removed from the database updater // after 3.0.9-RC3 was released. It might still exist // in 3.0.9-RCX installations and has to be dropped in - // 3.0.10 after the db_tools class is capable of properly + // 3.0.11 after the db_tools class is capable of properly // removing a primary key. // 'attempt_id' => array('UINT', NULL, 'auto_increment'), 'attempt_ip' => array('VCHAR:40', ''), @@ -985,8 +985,10 @@ function database_update_info() '3.0.9-RC3' => array(), // No changes from 3.0.9-RC4 to 3.0.9 '3.0.9-RC4' => array(), + // No changes from 3.0.9 to 3.0.10-RC1 + '3.0.9' => array(), - /** @todo DROP LOGIN_ATTEMPT_TABLE.attempt_id in 3.0.10-RC1 */ + /** @todo DROP LOGIN_ATTEMPT_TABLE.attempt_id in 3.0.11-RC1 */ ); } diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index 84b25d676e..4f5bf23c58 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -246,7 +246,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_page', INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.10-dev'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.10-RC1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400'); -- cgit v1.2.1 From f5633d281e04d93f5e4c0e0a01ffc82c9df12a8f Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Mon, 21 Nov 2011 00:08:49 +0100 Subject: [develop-olympus] Add changelog for 3.0.10-RC1 --- phpBB/docs/CHANGELOG.html | 162 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 144 insertions(+), 18 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html index 6437fef1d5..a4ed1b5c86 100644 --- a/phpBB/docs/CHANGELOG.html +++ b/phpBB/docs/CHANGELOG.html @@ -53,6 +53,7 @@
    1. Changelog
        +
      1. Changes since 3.0.9
      2. Changes since 3.0.8
      3. Changes since 3.0.7-PL1
      4. Changes since 3.0.7
      5. @@ -90,7 +91,132 @@
        -

        1.i. Changes since 3.0.8

        +

        1.i. Changes since 3.0.9

        + +

        Bug

        +
          +
        • [PHPBB3-5506] - Deleting all items from last page results in empty list display
        • +
        • [PHPBB3-6458] - Width of Topics and Posts columns in Board Index is causing problems with language packs
        • +
        • [PHPBB3-6632] - Better viewing of topics for wide screen displays
        • +
        • [PHPBB3-7138] - Cannot display simple header/footer with trigger_error()
        • +
        • [PHPBB3-7291] - Broken links of char selection in memberlist
        • +
        • [PHPBB3-7932] - Fix font size in select boxes
        • +
        • [PHPBB3-8094] - Text in the forums.php and install.php not matching
        • +
        • [PHPBB3-8173] - Redundant BBCode helpline in JS
        • +
        • [PHPBB3-8177] - February 29th birthdays not shown in non-leap year
        • +
        • [PHPBB3-8571] - Users can make their age a negative number on memberlist
        • +
        • [PHPBB3-8691] - Error creating log_time index
        • +
        • [PHPBB3-8937] - Code tags - single space indent
        • +
        • [PHPBB3-8996] - Wrong position when adding BBCodes with accesskey in IE
        • +
        • [PHPBB3-9008] - Incorrect unread topic tracking for unapproved topics
        • +
        • [PHPBB3-9066] - Invalid Prefix Names Allowed
        • +
        • [PHPBB3-9416] - HTML entities in poll titles and options incorrectly re-encoded
        • +
        • [PHPBB3-9525] - Minimum characters per post/message should never be '0'
        • +
        • [PHPBB3-9645] - XHTML error on phpinfo page in ACP
        • +
        • [PHPBB3-9776] - When deleting and recreating a poll, old options aren't deleted and reappear with the new ones
        • +
        • [PHPBB3-9956] - No error message displayed when disapprove reason is invalid or empty
        • +
        • [PHPBB3-9976] - Direct post links open the wrong page of viewtopic when multiple posts are posted in the same second
        • +
        • [PHPBB3-9978] - Missing semicolons in // <![CDATA[ part of overall_header.html
        • +
        • [PHPBB3-10087] - Limited browser support for ban exclusion emphasis
        • +
        • [PHPBB3-10157] - Missing error handling when a custom profile field is not defined for current language
        • +
        • [PHPBB3-10166] - Post-admin activation email confusingly refers to username
        • +
        • [PHPBB3-10187] - XHTML error in ucp_groups_manage.html
        • +
        • [PHPBB3-10190] - Misleading information about permissions displayed after editing forum settings
        • +
        • [PHPBB3-10212] - Captcha not displayed when username not exists
        • +
        • [PHPBB3-10216] - Updater's failed query language grammatically incorrect
        • +
        • [PHPBB3-10226] - Mysqli dbal extension does not allow connection via pipes
        • +
        • [PHPBB3-10227] - Mysqli dbal extension does not allow persistent connection for PHP >= 5.3.0
        • +
        • [PHPBB3-10237] - Unwatching a forum/topic does not check for correct hash parameter
        • +
        • [PHPBB3-10240] - Word filter evasion
        • +
        • [PHPBB3-10253] - IE9 Quote problem
        • +
        • [PHPBB3-10255] - gitignore ignores too much
        • +
        • [PHPBB3-10257] - AAAA record parsing fails on older versions of Windows
        • +
        • [PHPBB3-10259] - Incorrect email on joining Open group
        • +
        • [PHPBB3-10265] - Unit test tests/random/mt_rand.php is not run because of missing _test suffix.
        • +
        • [PHPBB3-10266] - Poor navigation links after reporting a post
        • +
        • [PHPBB3-10267] - Missing strlen() on $table_prefix in db tools index name length check
        • +
        • [PHPBB3-10274] - Hardcoded module ID in "Re-check version" link on ACP front page
        • +
        • [PHPBB3-10275] - Wrong information about sent passwords in FAQ
        • +
        • [PHPBB3-10292] - Whitespace inconsistency in acp_ranks
        • +
        • [PHPBB3-10293] - Jumpbox allows jumping to invalid forums in prosilver
        • +
        • [PHPBB3-10294] - sqlsrv_rows_affected non-functional in MSSQLNative.php
        • +
        • [PHPBB3-10296] - incorrect cross join in SQL Server
        • +
        • [PHPBB3-10298] - EMBED Tag Not Closed Properly In subSilver2 attachment.html
        • +
        • [PHPBB3-10299] - Typo in comment about $max_store_length in truncate_string() (in functions_content.php)
        • +
        • [PHPBB3-10303] - send_status_line() doesn't validate user input
        • +
        • [PHPBB3-10304] - Bad url in U_ICQ on /ucp_mp_viewmessage.php
        • +
        • [PHPBB3-10307] - Return value of $db->sql_fetchrow() on empty tables is not consistent
        • +
        • [PHPBB3-10309] - Utf tests download data into temporary locations deep in source tree
        • +
        • [PHPBB3-10320] - "Most active topic" can leak topic title of topics in password-protected forums
        • +
        • [PHPBB3-10321] - Link to page 1 of the Memberlist has a useless question mark at the end
        • +
        • [PHPBB3-10324] - XHTML error in Prosilver - MCP - User Notes
        • +
        • [PHPBB3-10339] - Typo in prosilver's mcp_front.html
        • +
        • [PHPBB3-10341] - Topic title of "0" does not show as "Most active topic"
        • +
        • [PHPBB3-10351] - Invalid syntax for Oracle's sql_column_remove()
        • +
        • [PHPBB3-10352] - Missing break for Oracle's sql_table_drop()
        • +
        • [PHPBB3-10365] - Moderators can view forbidden information
        • +
        • [PHPBB3-10377] - All moderators can change topic type
        • +
        • [PHPBB3-10394] - Tests use call-time pass by reference which results in Fatal error on PHP 5.4
        • +
        • [PHPBB3-10397] - Pagination code inconsistency
        • +
        • [PHPBB3-10400] - '0' (zero) not allowed as forum name
        • +
        • [PHPBB3-10408] - Layout of topics/attachments list is broken in UCP and MCP
        • +
        • [PHPBB3-10413] - Make create_schema_files usable
        • +
        • [PHPBB3-10416] - Use dbport in phpbb_database_test_connection_manager::connect()
        • +
        • [PHPBB3-10420] - Update startup to account for PHP 5.4
        • +
        • [PHPBB3-10421] - Interchanged parameters in includes/acp/acp_users.php
        • +
        • [PHPBB3-10422] - Unnecessary <!-- IF --> statement in viewtopic_body.html
        • +
        • [PHPBB3-10435] - Topic count mismatch on viewforum
        • +
        • [PHPBB3-10437] - Announcements on moderation queue are not hidden
        • +
        • [PHPBB3-10446] - Unencoded 8bit characters in email headers
        • +
        • [PHPBB3-10452] - XHTML error when printing a PM
        • +
        +

        Improvement

        +
          +
        • [PHPBB3-8616] - Add direct link to PM to notification message
        • +
        • [PHPBB3-9036] - Forums that can be listed but not red expose forum information
        • +
        • [PHPBB3-9297] - Add support for Extended Passive Mode (EPSV) in class ftp_fsock to better support IPv6 connections.
        • +
        • [PHPBB3-9307] - Mass email $max_chunk_size
        • +
        • [PHPBB3-9361] - Edit account settings - Improved clarification needed
        • +
        • [PHPBB3-9778] - Member Search from the Admin Control Panel is not Intuitive
        • +
        • [PHPBB3-9898] - Readme needs updating to reflect more opening for patches
        • +
        • [PHPBB3-9995] - Unnecessary coding in display_forums() in functions_display.php
        • +
        • [PHPBB3-10032] - BBCode Add List Item Control Name Contains Typo
        • +
        • [PHPBB3-10074] - Change default value of 'Set as special rank' to No for Add new rank
        • +
        • [PHPBB3-10185] - Board startdate not being set
        • +
        • [PHPBB3-10189] - Add "automatically generated" comment into schema-files.
        • +
        • [PHPBB3-10199] - Performance: viewtopic has a useless join
        • +
        • [PHPBB3-10222] - Also build language and styles changes in diff/patch format
        • +
        • [PHPBB3-10239] - Add "Are you sure" confirmation to backup restore in ACP
        • +
        • [PHPBB3-10243] - Add gmgetdate() wrapper for getdate() which returns dates in UTC.
        • +
        • [PHPBB3-10245] - Messenger uses output buffering for error collection, should use error collector instead
        • +
        • [PHPBB3-10246] - Remove VCS section from docs/coding-guidelines.html
        • +
        • [PHPBB3-10254] - Remove style names from themes and fix some information on it
        • +
        • [PHPBB3-10263] - Add phpbb_version_compare() wrapper for version_compare()
        • +
        • [PHPBB3-10278] - Improve timeout handling in get_remote_file()
        • +
        • [PHPBB3-10315] - Radio Buttons in ACP are clipped in Safari - Fix suggested
        • +
        • [PHPBB3-10327] - Use "ALTER TABLE ... ADD INDEX" instead of "CREATE INDEX"
        • +
        • [PHPBB3-10334] - Birthday List display not dependent on user privileges
        • +
        • [PHPBB3-10335] - Responses to bots should have extra header to be used by reverse proxies
        • +
        • [PHPBB3-10346] - Add drop_tables key for database updater
        • +
        • [PHPBB3-10354] - When template tests are skipped because cache is not writable, print cache directory path
        • +
        • [PHPBB3-10369] - Change error collector to always report errfile and errline
        • +
        • [PHPBB3-10370] - Various improvements for get_backtrace()
        • +
        • [PHPBB3-10402] - Displaying report texts with linebreaks and clickable links
        • +
        • [PHPBB3-10419] - Add mbstring PHP ini parameters checks to ACP
        • +
        • [PHPBB3-10430] - Some typos and the like in docs/coding-guidelines.html
        • +
        +

        New Feature

        +
          +
        • [PHPBB3-8240] - Request: db_tools to have two additional functions, table list and column list
        • +
        +

        Task

        + + +

        1.ii. Changes since 3.0.8

        Bug

        @@ -458,7 +584,7 @@ -

        1.ii. Changes since 3.0.7-PL1

        +

        1.iii. Changes since 3.0.7-PL1

        Security

          @@ -916,13 +1042,13 @@
        -

        1.iii. Changes since 3.0.7

        +

        1.iiv. Changes since 3.0.7

        • [Sec] Do not expose forum content of forums with ACL entries but no actual permission in ATOM Feeds. (Bug #58595)
        -

        1.iv. Changes since 3.0.6

        +

        1.v. Changes since 3.0.6

        • [Fix] Allow ban reason and length to be selected and copied in ACP and subsilver2 MCP. (Bug #51095)
        • @@ -1026,7 +1152,7 @@
        -

        1.v. Changes since 3.0.5

        +

        1.vi. Changes since 3.0.5

        • [Fix] Allow whitespaces in avatar gallery names. (Bug #44955)
        • @@ -1248,7 +1374,7 @@
        • [Feature] Send anonymous statistical information to phpBB on installation and update (optional).
        -

        1.vi. Changes since 3.0.4

        +

        1.vii. Changes since 3.0.4

        • [Fix] Delete user entry from ban list table upon user deletion (Bug #40015 - Patch by TerraFrost)
        • @@ -1337,7 +1463,7 @@
        • [Sec] Only use forum id supplied for posting if global announcement detected. (Reported by nickvergessen)
        -

        1.vii. Changes since 3.0.3

        +

        1.viii. Changes since 3.0.3

        • [Fix] Allow mixed-case template directories to be inherited (Bug #36725)
        • @@ -1369,7 +1495,7 @@
        • [Sec] Ask for forum password if post within passworded forum quoted in private message. (Reported by nickvergessen)
        -

        1.viii. Changes since 3.0.2

        +

        1.ix. Changes since 3.0.2

        • [Fix] Correctly set topic starter if first post in topic removed (Bug #30575 - Patch by blueray2048)
        • @@ -1468,7 +1594,7 @@
        • [Sec Precaution] Stricter validation of the HTTP_HOST header (Thanks to Techie-Micheal et al for pointing out possible issues in derived code)
        -

        1.ix. Changes since 3.0.1

        +

        1.x. Changes since 3.0.1

        • [Fix] Ability to set permissions on non-mysql dbms (Bug #24955)
        • @@ -1516,7 +1642,7 @@
        • [Sec] Only allow urls gone through redirect() being used within login_box(). (thanks nookieman)
        -

        1.x Changes since 3.0.0

        +

        1.xi Changes since 3.0.0

        • [Change] Validate birthdays (Bug #15004)
        • @@ -1587,7 +1713,7 @@
        • [Fix] Find and display colliding usernames correctly when converting from one database to another (Bug #23925)
        -

        1.xi. Changes since 3.0.RC8

        +

        1.xii. Changes since 3.0.RC8

        • [Fix] Cleaned usernames contain only single spaces, so "a_name" and "a__name" are treated as the same name (Bug #15634)
        • @@ -1596,7 +1722,7 @@
        • [Fix] Call garbage_collection() within database updater to correctly close connections (affects Oracle for example)
        -

        1.xii. Changes since 3.0.RC7

        +

        1.xiii. Changes since 3.0.RC7

        • [Fix] Fixed MSSQL related bug in the update system
        • @@ -1631,7 +1757,7 @@
        • [Fix] No duplication of active topics (Bug #15474)
        -

        1.xiii. Changes since 3.0.RC6

        +

        1.xiv. Changes since 3.0.RC6

        • [Fix] Submitting language changes using acp_language (Bug #14736)
        • @@ -1641,7 +1767,7 @@
        • [Fix] Able to request new password (Bug #14743)
        -

        1.xiv. Changes since 3.0.RC5

        +

        1.xv. Changes since 3.0.RC5

        • [Feature] Removing constant PHPBB_EMBEDDED in favor of using an exit_handler(); the constant was meant to achive this more or less.
        • @@ -1704,7 +1830,7 @@
        • [Sec] New password hashing mechanism for storing passwords (#i42)
        -

        1.xv. Changes since 3.0.RC4

        +

        1.xvi. Changes since 3.0.RC4

        • [Fix] MySQL, PostgreSQL and SQLite related database fixes (Bug #13862)
        • @@ -1755,7 +1881,7 @@
        • [Fix] odbc_autocommit causing existing result sets to be dropped (Bug #14182)
        -

        1.xvi. Changes since 3.0.RC3

        +

        1.xvii. Changes since 3.0.RC3

        • [Fix] Fixing some subsilver2 and prosilver style issues
        • @@ -1864,7 +1990,7 @@
        -

        1.xvii. Changes since 3.0.RC2

        +

        1.xviii. Changes since 3.0.RC2

        • [Fix] Re-allow searching within the memberlist
        • @@ -1910,7 +2036,7 @@
        -

        1.xviii. Changes since 3.0.RC1

        +

        1.xix. Changes since 3.0.RC1

        • [Fix] (X)HTML issues within the templates (Bug #11255, #11255)
        • -- cgit v1.2.1 From c4d3c5320e03f3adbbae90b4c04ff1a8783d51b6 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 21 Nov 2011 00:12:44 +0100 Subject: [ticket/10479] Remove PostgreSQL version numbers from driver's language string The versions should be removed like for all other DBMS so we don't have to add each new version. PHPBB3-10479 --- phpBB/language/en/install.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index f038177df4..c4b100187f 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -151,7 +151,7 @@ $lang = array_merge($lang, array( 'DLL_MYSQL' => 'MySQL', 'DLL_MYSQLI' => 'MySQL with MySQLi Extension', 'DLL_ORACLE' => 'Oracle', - 'DLL_POSTGRES' => 'PostgreSQL 7.x/8.x', + 'DLL_POSTGRES' => 'PostgreSQL', 'DLL_SQLITE' => 'SQLite', 'DLL_XML' => 'XML support [ Jabber ]', 'DLL_ZLIB' => 'zlib compression support [ gz, .tar.gz, .zip ]', -- cgit v1.2.1 From a9d7b1f9a144a6354638e6ef30e42cec2463f1b8 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 21 Nov 2011 00:57:53 +0100 Subject: [develop-olympus] Increment version number to 3.0.11-dev in develop-olympus. --- phpBB/includes/constants.php | 2 +- phpBB/install/database_update.php | 2 +- phpBB/install/schemas/schema_data.sql | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php index ec7b8c7123..a0444ea594 100644 --- a/phpBB/includes/constants.php +++ b/phpBB/includes/constants.php @@ -25,7 +25,7 @@ if (!defined('IN_PHPBB')) */ // phpBB Version -define('PHPBB_VERSION', '3.0.10-RC1'); +define('PHPBB_VERSION', '3.0.11-dev'); // QA-related // define('PHPBB_QA', 1); diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 9ca011c8aa..1d96f40fdf 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -8,7 +8,7 @@ * */ -define('UPDATES_TO_VERSION', '3.0.10-RC1'); +define('UPDATES_TO_VERSION', '3.0.11-dev'); // Enter any version to update from to test updates. The version within the db will not be updated. define('DEBUG_FROM_VERSION', false); diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index 4f5bf23c58..fcc372ae93 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -246,7 +246,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_page', INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.10-RC1'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.11-dev'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400'); -- cgit v1.2.1 From 4c77903129749008cd08c346006d2a57cf6ff544 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 21 Nov 2011 16:22:07 +0100 Subject: [ticket/10484] Use variables for sql_build_query() calls It's easier for mods/extensions to extend the arrays. PHPBB3-10484 --- phpBB/includes/functions_admin.php | 20 +++++++++++--------- phpBB/includes/functions_display.php | 5 +++-- phpBB/includes/functions_posting.php | 11 ++++++----- phpBB/includes/mcp/mcp_front.php | 22 ++++++++++++---------- phpBB/ucp.php | 11 ++++++----- phpBB/viewforum.php | 5 +++-- phpBB/viewtopic.php | 11 ++++++----- 7 files changed, 47 insertions(+), 38 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 3f9e517fdf..419460c79e 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -2366,7 +2366,7 @@ function cache_moderators() $ug_id_ary = array_keys($hold_ary); // Remove users who have group memberships with DENY moderator permissions - $sql = $db->sql_build_query('SELECT', array( + $sql_ary = array( 'SELECT' => 'a.forum_id, ug.user_id, g.group_id', 'FROM' => array( @@ -2379,8 +2379,8 @@ function cache_moderators() 'LEFT_JOIN' => array( array( 'FROM' => array(ACL_ROLES_DATA_TABLE => 'r'), - 'ON' => 'a.auth_role_id = r.role_id' - ) + 'ON' => 'a.auth_role_id = r.role_id', + ), ), 'WHERE' => '(o.auth_option_id = a.auth_option_id OR o.auth_option_id = r.auth_option_id) @@ -2392,7 +2392,8 @@ function cache_moderators() AND ' . $db->sql_in_set('ug.user_id', $ug_id_ary) . " AND ug.user_pending = 0 AND o.auth_option " . $db->sql_like_expression('m_' . $db->any_char), - )); + ); + $sql = $db->sql_build_query('SELECT', $sql_ary); $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) @@ -2792,18 +2793,18 @@ function update_foes($group_id = false, $user_id = false) if (is_array($group_id) && sizeof($group_id)) { // Grab group settings... - $sql = $db->sql_build_query('SELECT', array( + $sql_ary = array( 'SELECT' => 'a.group_id', 'FROM' => array( ACL_OPTIONS_TABLE => 'ao', - ACL_GROUPS_TABLE => 'a' + ACL_GROUPS_TABLE => 'a', ), 'LEFT_JOIN' => array( array( 'FROM' => array(ACL_ROLES_DATA_TABLE => 'r'), - 'ON' => 'a.auth_role_id = r.role_id' + 'ON' => 'a.auth_role_id = r.role_id', ), ), @@ -2811,8 +2812,9 @@ function update_foes($group_id = false, $user_id = false) AND ' . $db->sql_in_set('a.group_id', $group_id) . " AND ao.auth_option IN ('a_', 'm_')", - 'GROUP_BY' => 'a.group_id' - )); + 'GROUP_BY' => 'a.group_id', + ); + $sql = $db->sql_build_query('SELECT', $sql_ary); $result = $db->sql_query($sql); $groups = array(); diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 39d0793030..2b871a21ec 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -110,7 +110,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod $sql_array['SELECT'] .= ', fa.user_id'; } - $sql = $db->sql_build_query('SELECT', array( + $sql_ary = array( 'SELECT' => $sql_array['SELECT'], 'FROM' => $sql_array['FROM'], 'LEFT_JOIN' => $sql_array['LEFT_JOIN'], @@ -118,8 +118,9 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod 'WHERE' => $sql_where, 'ORDER_BY' => 'f.left_id', - )); + ); + $sql = $db->sql_build_query('SELECT', $sql_ary); $result = $db->sql_query($sql); $forum_tracking_info = array(); diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 4ca76344de..cb4fc86f21 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -1005,7 +1005,7 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id $mode = 'post_review'; } - $sql = $db->sql_build_query('SELECT', array( + $sql_ary = array( 'SELECT' => 'u.username, u.user_id, u.user_colour, p.*, z.friend, z.foe', 'FROM' => array( @@ -1016,14 +1016,15 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id 'LEFT_JOIN' => array( array( 'FROM' => array(ZEBRA_TABLE => 'z'), - 'ON' => 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id' - ) + 'ON' => 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id', + ), ), 'WHERE' => $db->sql_in_set('p.post_id', $post_list) . ' - AND u.user_id = p.poster_id' - )); + AND u.user_id = p.poster_id', + ); + $sql = $db->sql_build_query('SELECT', $sql_ary); $result = $db->sql_query($sql); $bbcode_bitfield = ''; diff --git a/phpBB/includes/mcp/mcp_front.php b/phpBB/includes/mcp/mcp_front.php index eca67c5ac1..3942ff7910 100644 --- a/phpBB/includes/mcp/mcp_front.php +++ b/phpBB/includes/mcp/mcp_front.php @@ -158,7 +158,7 @@ function mcp_front_view($id, $mode, $action) if ($total) { - $sql = $db->sql_build_query('SELECT', array( + $sql_ary = array( 'SELECT' => 'r.report_time, p.post_id, p.post_subject, p.post_time, u.username, u.username_clean, u.user_colour, u.user_id, u2.username as author_name, u2.username_clean as author_name_clean, u2.user_colour as author_colour, u2.user_id as author_id, t.topic_id, t.topic_title, f.forum_id, f.forum_name', 'FROM' => array( @@ -166,14 +166,14 @@ function mcp_front_view($id, $mode, $action) REPORTS_REASONS_TABLE => 'rr', TOPICS_TABLE => 't', USERS_TABLE => array('u', 'u2'), - POSTS_TABLE => 'p' + POSTS_TABLE => 'p', ), 'LEFT_JOIN' => array( array( 'FROM' => array(FORUMS_TABLE => 'f'), - 'ON' => 'f.forum_id = p.forum_id' - ) + 'ON' => 'f.forum_id = p.forum_id', + ), ), 'WHERE' => 'r.post_id = p.post_id @@ -185,8 +185,9 @@ function mcp_front_view($id, $mode, $action) AND p.poster_id = u2.user_id AND ' . $db->sql_in_set('p.forum_id', $forum_list), - 'ORDER_BY' => 'p.post_time DESC' - )); + 'ORDER_BY' => 'p.post_time DESC', + ); + $sql = $db->sql_build_query('SELECT', $sql_ary); $result = $db->sql_query_limit($sql, 5); while ($row = $db->sql_fetchrow($result)) @@ -253,14 +254,14 @@ function mcp_front_view($id, $mode, $action) { include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx); - $sql = $db->sql_build_query('SELECT', array( + $sql_ary = array( 'SELECT' => 'r.report_id, r.report_time, p.msg_id, p.message_subject, p.message_time, p.to_address, p.bcc_address, u.username, u.username_clean, u.user_colour, u.user_id, u2.username as author_name, u2.username_clean as author_name_clean, u2.user_colour as author_colour, u2.user_id as author_id', 'FROM' => array( REPORTS_TABLE => 'r', REPORTS_REASONS_TABLE => 'rr', USERS_TABLE => array('u', 'u2'), - PRIVMSGS_TABLE => 'p' + PRIVMSGS_TABLE => 'p', ), 'WHERE' => 'r.pm_id = p.msg_id @@ -270,8 +271,9 @@ function mcp_front_view($id, $mode, $action) AND r.user_id = u.user_id AND p.author_id = u2.user_id', - 'ORDER_BY' => 'p.message_time DESC' - )); + 'ORDER_BY' => 'p.message_time DESC', + ); + $sql_ary = $db->sql_build_query('SELECT', $sql_ary); $result = $db->sql_query_limit($sql, 5); $pm_by_id = $pm_list = array(); diff --git a/phpBB/ucp.php b/phpBB/ucp.php index 505dbb998b..c8a0795bcb 100644 --- a/phpBB/ucp.php +++ b/phpBB/ucp.php @@ -274,19 +274,19 @@ if ($module->is_active('zebra', 'friends')) // Output listing of friends online $update_time = $config['load_online_time'] * 60; - $sql = $db->sql_build_query('SELECT_DISTINCT', array( + $sql_ary = array( 'SELECT' => 'u.user_id, u.username, u.username_clean, u.user_colour, MAX(s.session_time) as online_time, MIN(s.session_viewonline) AS viewonline', 'FROM' => array( USERS_TABLE => 'u', - ZEBRA_TABLE => 'z' + ZEBRA_TABLE => 'z', ), 'LEFT_JOIN' => array( array( 'FROM' => array(SESSIONS_TABLE => 's'), - 'ON' => 's.session_user_id = z.zebra_id' - ) + 'ON' => 's.session_user_id = z.zebra_id', + ), ), 'WHERE' => 'z.user_id = ' . $user->data['user_id'] . ' @@ -296,8 +296,9 @@ if ($module->is_active('zebra', 'friends')) 'GROUP_BY' => 'z.zebra_id, u.user_id, u.username_clean, u.user_colour, u.username', 'ORDER_BY' => 'u.username_clean ASC', - )); + ); + $sql = $db->sql_build_query('SELECT_DISTINCT', $sql_ary); $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php index caed794671..3b10d828d3 100644 --- a/phpBB/viewforum.php +++ b/phpBB/viewforum.php @@ -375,7 +375,7 @@ if ($forum_data['forum_type'] == FORUM_POST) $sql_anounce_array['SELECT'] = $sql_array['SELECT'] . ', f.forum_name'; // Obtain announcements ... removed sort ordering, sort by time in all cases - $sql = $db->sql_build_query('SELECT', array( + $sql_ary = array( 'SELECT' => $sql_anounce_array['SELECT'], 'FROM' => $sql_array['FROM'], 'LEFT_JOIN' => $sql_anounce_array['LEFT_JOIN'], @@ -386,7 +386,8 @@ if ($forum_data['forum_type'] == FORUM_POST) AND t.topic_type = ' . POST_GLOBAL . ')', 'ORDER_BY' => 't.topic_time DESC', - )); + ); + $sql = $db->sql_build_query('SELECT', $sql_ary); $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index ceb9f3ea1c..e78ba73cd7 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -943,7 +943,7 @@ if (!sizeof($post_list)) // We need to grab it because we do reverse ordering sometimes $max_post_time = 0; -$sql = $db->sql_build_query('SELECT', array( +$sql_ary = array( 'SELECT' => 'u.*, z.friend, z.foe, p.*', 'FROM' => array( @@ -954,14 +954,15 @@ $sql = $db->sql_build_query('SELECT', array( 'LEFT_JOIN' => array( array( 'FROM' => array(ZEBRA_TABLE => 'z'), - 'ON' => 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id' - ) + 'ON' => 'z.user_id = ' . $user->data['user_id'] . ' AND z.zebra_id = p.poster_id', + ), ), 'WHERE' => $db->sql_in_set('p.post_id', $post_list) . ' - AND u.user_id = p.poster_id' -)); + AND u.user_id = p.poster_id', +); +$sql = $db->sql_build_query('SELECT', $sql_ary); $result = $db->sql_query($sql); $now = phpbb_gmgetdate(time() + $user->timezone + $user->dst); -- cgit v1.2.1 From c67633577f276727e1d15106a87517b97c8a4d1a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 21 Nov 2011 23:23:02 +0100 Subject: [ticket/10485] Fix invalid HTML5 markup introduced in PHPBB3-6632 Remove the previous fix and fix it the way we did it in PHPBB3-10360 for 3.1 PHPBB3-6632 PHPBB3-10485 --- phpBB/styles/prosilver/template/forumlist_body.html | 10 +++++----- phpBB/styles/prosilver/template/search_results.html | 10 +++++----- phpBB/styles/prosilver/template/viewforum_body.html | 10 +++++----- phpBB/styles/prosilver/theme/content.css | 12 ++++++++++-- 4 files changed, 25 insertions(+), 17 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/forumlist_body.html b/phpBB/styles/prosilver/template/forumlist_body.html index 2c2a242a9f..bf672e16fc 100644 --- a/phpBB/styles/prosilver/template/forumlist_body.html +++ b/phpBB/styles/prosilver/template/forumlist_body.html @@ -11,9 +11,9 @@
            -
          • +
          • -
            +
            {forumrow.FORUM_NAME}{L_FORUM}
            {L_TOPICS}
            {L_POSTS}
            {L_LAST_POST}
            @@ -25,8 +25,8 @@
          • -
            -
            +
            +
            {forumrow.FORUM_IMAGE} @@ -36,7 +36,7 @@
            {forumrow.L_MODERATOR_STR}: {forumrow.MODERATORS}
            {forumrow.L_SUBFORUM_STR} {forumrow.SUBFORUMS} -
            +
            {L_REDIRECTS}: {forumrow.CLICKS}
            diff --git a/phpBB/styles/prosilver/template/search_results.html b/phpBB/styles/prosilver/template/search_results.html index f2a4435103..014b39de87 100644 --- a/phpBB/styles/prosilver/template/search_results.html +++ b/phpBB/styles/prosilver/template/search_results.html @@ -39,8 +39,8 @@
            • -
              -
              {L_TOPICS}
              +
              +
              {L_TOPICS}
              {L_REPLIES}
              {L_VIEWS}
              {L_LAST_POST}
              @@ -51,8 +51,8 @@
            • -
              -
              style="background-image: url({T_ICONS_PATH}{searchresults.TOPIC_ICON_IMG}); background-repeat: no-repeat;"> +
              +
              style="background-image: url({T_ICONS_PATH}{searchresults.TOPIC_ICON_IMG}); background-repeat: no-repeat;"> {NEWEST_POST_IMG} {searchresults.TOPIC_TITLE} {searchresults.ATTACH_ICON_IMG} {searchresults.UNAPPROVED_IMG} @@ -60,7 +60,7 @@ {searchresults.PAGINATION} {L_POST_BY_AUTHOR} {searchresults.TOPIC_AUTHOR_FULL} » {searchresults.FIRST_POST_TIME} {L_IN} {searchresults.FORUM_TITLE} ({L_GLOBAL}) -
              +
              {searchresults.TOPIC_REPLIES}
              {searchresults.TOPIC_VIEWS}
              diff --git a/phpBB/styles/prosilver/template/viewforum_body.html b/phpBB/styles/prosilver/template/viewforum_body.html index 4ad0990d98..d2952bff2a 100644 --- a/phpBB/styles/prosilver/template/viewforum_body.html +++ b/phpBB/styles/prosilver/template/viewforum_body.html @@ -126,8 +126,8 @@
              • -
                -
                {L_ACTIVE_TOPICS}{L_ANNOUNCEMENTS}{L_TOPICS}
                +
                +
                {L_ACTIVE_TOPICS}{L_ANNOUNCEMENTS}{L_TOPICS}
                {L_REPLIES}
                {L_VIEWS}
                {L_LAST_POST}
                @@ -138,13 +138,13 @@
              • -
                - style="background-image: url({T_ICONS_PATH}{topicrow.TOPIC_ICON_IMG}); background-repeat: no-repeat;" title="{topicrow.TOPIC_FOLDER_IMG_ALT}">
                {NEWEST_POST_IMG} {topicrow.TOPIC_TITLE} +
                + style="background-image: url({T_ICONS_PATH}{topicrow.TOPIC_ICON_IMG}); background-repeat: no-repeat;" title="{topicrow.TOPIC_FOLDER_IMG_ALT}">{NEWEST_POST_IMG} {topicrow.TOPIC_TITLE} {topicrow.UNAPPROVED_IMG} {REPORTED_IMG}
                {topicrow.PAGINATION} {topicrow.ATTACH_ICON_IMG} {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME} -
                +
                {topicrow.REPLIES} {L_REPLIES}
                {topicrow.VIEWS} {L_VIEWS}
                {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} diff --git a/phpBB/styles/prosilver/theme/content.css b/phpBB/styles/prosilver/theme/content.css index c278a16dc5..696d5e1cc0 100644 --- a/phpBB/styles/prosilver/theme/content.css +++ b/phpBB/styles/prosilver/theme/content.css @@ -29,14 +29,19 @@ ul.topiclist li.row dl { ul.topiclist dt { display: block; float: left; - width: 100%; + width: 50%; font-size: 1.1em; padding-left: 5px; padding-right: 5px; +} + +ul.topiclist .widescreen-optimised dt { + width: 100%; margin-right: -465px; } -ul.topiclist dt .wrap-content { +ul.topiclist .widescreen-optimised dt .wrap-content { + display: block; padding-right: 465px; } @@ -101,6 +106,9 @@ li.header dt, li.header dd { li.header dt { font-weight: bold; +} + +li.header .widescreen-optimised dt { margin-right: -465px; } -- cgit v1.2.1 From 43818289fe91906bb5d095ea944f142fef8488b4 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 23 Nov 2011 22:28:55 +0100 Subject: [ticket/10488] Only set $config['email_max_chunk_size'] when not already set. PHPBB3-10488 --- phpBB/install/database_update.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 9ca011c8aa..57e2ef73b8 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -1999,7 +1999,12 @@ function change_database_data(&$no_updates, $version) // Changes from 3.0.9 to 3.0.10-RC1 case '3.0.9': - set_config('email_max_chunk_size', '50'); + if (!isset($config['email_max_chunk_size'])) + { + set_config('email_max_chunk_size', '50'); + } + + $no_updates = false; break; } } -- cgit v1.2.1 From 6f40960071129aafc2218ec23264c90af75fbad4 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 23 Nov 2011 22:56:24 +0100 Subject: [ticket/10461] Correct $log_count check in view_log() so we show logs again. We pass $log_count as false now when we do not need to know how many log entries there are. However when $log_count is false, $log_count == 0 will be true as well and thus we will return early with 0. PHPBB3-9874 PHPBB3-10461 --- phpBB/includes/functions_admin.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 513b7a68b2..3916e769ac 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -2609,7 +2609,7 @@ function view_log($mode, &$log, &$log_count, $limit = 0, $offset = 0, $forum_id $db->sql_freeresult($result); } - if ($log_count == 0) + if ($log_count === 0) { // Save the queries, because there are no logs to display return 0; -- cgit v1.2.1 From a72ea2bc98bd75bf02414e6e5c7723c9ec47a97d Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 23 Nov 2011 18:09:33 -0500 Subject: [ticket/10461] Add a comment explaining the logic here. PHPBB3-10461 --- phpBB/includes/functions_admin.php | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 3916e769ac..526bc16ff0 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -2609,6 +2609,10 @@ function view_log($mode, &$log, &$log_count, $limit = 0, $offset = 0, $forum_id $db->sql_freeresult($result); } + // $log_count may be false here if false was passed in for it, + // because in this case we did not run the COUNT() query above. + // If we ran the COUNT() query and it returned zero rows, return; + // otherwise query for logs below. if ($log_count === 0) { // Save the queries, because there are no logs to display -- cgit v1.2.1 From 3ce5b1d3867b4276985dde78d5a3d021f26ca2a7 Mon Sep 17 00:00:00 2001 From: RMcGirr83 Date: Sat, 16 Jul 2011 08:22:29 -0400 Subject: [ticket/10280] Change the display of user activation settings in the ACP. Use a select box to be consistent with other settings. PHPBB3-10280 --- phpBB/includes/acp/acp_board.php | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php index 3ed5f40368..8c761e51fe 100644 --- a/phpBB/includes/acp/acp_board.php +++ b/phpBB/includes/acp/acp_board.php @@ -234,7 +234,7 @@ class acp_board 'max_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:8:180', 'type' => false, 'method' => false, 'explain' => false,), 'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,), - 'require_activation' => array('lang' => 'ACC_ACTIVATION', 'validate' => 'int', 'type' => 'custom', 'method' => 'select_acc_activation', 'explain' => true), + 'require_activation' => array('lang' => 'ACC_ACTIVATION', 'validate' => 'int', 'type' => 'select', 'method' => 'select_acc_activation', 'explain' => true), 'new_member_post_limit' => array('lang' => 'NEW_MEMBER_POST_LIMIT', 'validate' => 'int:0:255', 'type' => 'text:4:4', 'explain' => true, 'append' => ' ' . $user->lang['POSTS']), 'new_member_group_default'=> array('lang' => 'NEW_MEMBER_GROUP_DEFAULT', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'min_name_chars' => array('lang' => 'USERNAME_LENGTH', 'validate' => 'int:1', 'type' => 'custom:5:180', 'method' => 'username_length', 'explain' => true), @@ -768,24 +768,28 @@ class acp_board /** * Select account activation method */ - function select_acc_activation($value, $key = '') + function select_acc_activation($selected_value, $value) { global $user, $config; - $radio_ary = array( - USER_ACTIVATION_DISABLE => 'ACC_DISABLE', - USER_ACTIVATION_NONE => 'ACC_NONE', + $act_ary = array( + 'ACC_DISABLE' => USER_ACTIVATION_DISABLE, + 'ACC_NONE' => USER_ACTIVATION_NONE, ); - if ($config['email_enable']) { - $radio_ary[USER_ACTIVATION_SELF] = 'ACC_USER'; - $radio_ary[USER_ACTIVATION_ADMIN] = 'ACC_ADMIN'; - } + $act_ary['ACC_USER'] = USER_ACTIVATION_SELF; + $act_ary['ACC_ADMIN'] = USER_ACTIVATION_ADMIN; + } + $act_options = ''; - $radio_text = h_radio('config[require_activation]', $radio_ary, $value, 'require_activation', $key, '
                '); + foreach ($act_ary as $key => $value) + { + $selected = ($selected_value == $value) ? ' selected="selected"' : ''; + $act_options .= ''; + } - return $radio_text; + return $act_options; } /** -- cgit v1.2.1 From 757fcd3e63535f9fda68cf359f849a44059c7b27 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 10 Sep 2011 03:38:01 +0200 Subject: [ticket/10345] Add a system to allow multiple plural forms See http://wiki.phpbb.com/Plural_Rules for explanation and examples. PHPBB3-10345 --- phpBB/includes/session.php | 170 ++++++++++++++++++++++++++++++++++++++++++- phpBB/language/en/common.php | 5 ++ 2 files changed, 174 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 497aaf1141..cd1975b9d3 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1868,12 +1868,15 @@ class user extends session { if (is_int($args[$i])) { + $use_plural_form = $this->get_plural_form($args[$i]); $numbers = array_keys($lang); foreach ($numbers as $num) { - if ($num > $args[$i]) + if ($num > $use_plural_form) { + // This is basically just some lazy backwards compatible stuff. + // If the key we need to use does not exist, it takes the previous one. break; } @@ -1895,6 +1898,171 @@ class user extends session return call_user_func_array('sprintf', $args); } + /** + * Determine which plural form we should use. + * For some languages this is not as simple as for English. + */ + function get_plural_form($number, $force_rule = false) + { + if ($number == 0) + { + // We use special language strings for 0, so it's "no users" instead of "0 users" + return 0; + } + + // Default to english system + $plural_rule = ($force_rule !== false) ? $force_rule : ((isset($this->lang['PLURAL_RULE'])) ? $this->lang['PLURAL_RULE'] : 1); + $plural_rule = max(0, min($plural_rule, 15)); + + switch ($plural_rule) + { + case 0: + /** + * Families: Asian (Chinese, Japanese, Korean, Vietnamese), Persian, Turkic/Altaic (Turkish), Thai, Lao + * 1 - everything: 1, 2, ... + */ + return 1; + + case 1: + /** + * Families: Germanic (Danish, Dutch, English, Faroese, Frisian, German, Norwegian, Swedish), Finno-Ugric (Estonian, Finnish, Hungarian), Language isolate (Basque), Latin/Greek (Greek), Semitic (Hebrew), Romanic (Italian, Portuguese, Spanish, Catalan) + * 1 - 1 + * 2 - everything else: 2, 3, ... + */ + return ($number == 1) ? 1 : 2; + + case 2: + /** + * Families: Romanic (French, Brazilian Portuguese) + * 1 - 1 normaly this would also apply to 0 + * 2 - everything else: 2, 3, ... + */ + return ($number == 1) ? 1 : 2; + + case 3: + /** + * Families: Baltic (Latvian) + * 1 - ends in 1, not 11: 1, 21, ... 101, 121, ... + * 2 - everything else: 2, 3, ... 10, 11, 12, ... 20, 22, ... + */ + return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : 2; + + case 4: + /** + * Families: Celtic (Scottish Gaelic) + * 1 - is 1 or 11: 1, 11 + * 2 - is 2 or 12: 2, 12 + * 3 - others between 3 and 19: 3, 4, ... 10, 13, ... 18, 19 + * 4 - everything else: 20, 21, ... + */ + return ($number == 1 || $number == 11) ? 1 : (($number == 2 || $number == 12) ? 2 : (($number >= 3 && $number <= 19) ? 3 : 4)); + + case 5: + /** + * Families: Romanic (Romanian) + * 1 - 1 + * 2 - ends in 01-19: 2, 3, ... 19, 101, 102, ... 119, 201, ... + * 3 - everything else: 20, 21, ... + */ + return ($number == 1) ? 1 : ((($number == 0) || (($number % 100 > 0) && ($number % 100 < 20))) ? 2 : 3); + + case 6: + /** + * Families: Baltic (Lithuanian) + * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ... + * 2 - ends in 0 or ends in 10-20: 10, 11, 12, ... 19, 20, 30, 40, ... + * 3 - everything else: 2, 3, ... 8, 9, 22, 23, ... 29, 32, 33, ... + */ + return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 < 2) || (($number % 100 >= 10) && ($number % 100 < 20))) ? 2 : 3); + + case 7: + /** + * Families: Slavic (Croatian, Serbian, Russian, Ukrainian) + * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ... + * 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ... + * 3 - everything else: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, ... + */ + return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 2 : 3); + + case 8: + /** + * Families: Slavic (Slovak, Czech) + * 1 - 1 + * 2 - 2, 3, 4 + * 3 - everything else: 5, 6, 7, ... + */ + return ($number == 1) ? 1 : ((($number >= 2) && ($number <= 4)) ? 2 : 3); + + case 9: + /** + * Families: Slavic (Polish) + * 1 - 1 + * 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ... 104, 122, ... + * 3 - everything else: 5, 6, ... 11, 12, 13, 14, 15, ... 20, 21, 25, ... + */ + return ($number == 1) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 2 : 3); + + case 10: + /** + * Families: Slavic (Slovenian, Sorbian) + * 1 - ends in 01: 1, 101, 201, ... + * 2 - ends in 02: 2, 102, 202, ... + * 3 - ends in 03-04: 3, 4, 103, 104, 203, 204, ... + * 4 - everything else: 5, 6, 7, 8, 9, 10, 11, ... + */ + return ($number % 100 == 1) ? 1 : (($number % 100 == 2) ? 2 : ((($number % 100 == 3) || ($number % 100 == 4)) ? 3 : 4)); + + case 11: + /** + * Families: Celtic (Irish Gaeilge) + * 1 - 1 + * 2 - 2 + * 3 - is 3-6: 3, 4, 5, 6 + * 4 - is 7-10: 7, 8, 9, 10 + * 5 - everything else: 0, 11, 12, ... + */ + return ($number == 1) ? 1 : (($number == 2) ? 2 : (($number >= 3 && $number <= 6) ? 3 : (($number >= 7 && $number <= 10) ? 4 : 5))); + + case 12: + /** + * Families: Semitic (Arabic) + * 1 - 1 + * 2 - 2 + * 3 - ends in 03-10: 3, 4, ... 10, 103, 104, ... 110, 203, 204, ... + * 4 - ends in 11-99: 11, ... 99, 111, 112, ... + * 5 - everything else: 100, 101, 102, 200, 201, 202, ... + */ + return ($number == 1) ? 1 : (($number == 2) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : 5))); + + case 13: + /** + * Families: Semitic (Maltese) + * 1 - 1 + * 2 - ends in 01-10: 2, 3, ... 9, 10, 101, 102, ... + * 3 - ends in 11-19: 11, 12, ... 18, 19, 111, 112, ... + * 4 - everything else: 20, 21, ... + */ + return ($number == 1) ? 1 : ((($number == 0) || (($number % 100 > 1) && ($number % 100 < 11))) ? 2 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 3 : 4)); + + case 14: + /** + * Families: Slavic (Macedonian) + * 1 - ends in 1: 1, 11, 21, ... + * 2 - ends in 2: 2, 12, 22, ... + * 3 - everything else: 3, 4, ... 10, 13, 14, ... 20, 23, ... + */ + return ($number % 10 == 1) ? 1 : (($number % 10 == 2) ? 2 : 3); + + case 15: + /** + * Families: Icelandic + * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, 131, ... + * 2 - everything else: 2, 3, ... 10, 11, 12, ... 20, 22, ... + */ + return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : 2; + } + } + /** * Add Language Items - use_db and use_help are assigned where needed (only use them to force inclusion) * diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 44a63a6acb..57c9d916a2 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -45,6 +45,11 @@ $lang = array_merge($lang, array( 'DATE_FORMAT' => '|d M Y|', // 01 Jan 2007 (with Relative days enabled) 'USER_LANG' => 'en-gb', + // You can define different rules for the determination of plural forms here. + // See http://wiki.phpbb.com/Plural_Rules for more information + // or ask the translation manager for help. + 'PLURAL_RULE' => 1, + '1_DAY' => '1 day', '1_MONTH' => '1 month', '1_YEAR' => '1 year', -- cgit v1.2.1 From f16d72fcfb9a7621bf64b82cc2c710c6e484d965 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 13 Sep 2011 01:46:00 +0200 Subject: [ticket/10345] Fix documentation on the new function and the switch Also do not min/max the value, but throw an error on an invalid Plural rule. PHPBB3-10345 --- phpBB/includes/session.php | 15 +++++++++++++-- phpBB/language/en/common.php | 1 + 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index cd1975b9d3..4e5257506c 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1901,6 +1901,10 @@ class user extends session /** * Determine which plural form we should use. * For some languages this is not as simple as for English. + * + * @param $number int The number we want to get the plural case for + * @param $force_rule mixed False to use the plural rule of the language package + * or an integer to force a certain plural rule */ function get_plural_form($number, $force_rule = false) { @@ -1910,10 +1914,17 @@ class user extends session return 0; } - // Default to english system + // Default to English system $plural_rule = ($force_rule !== false) ? $force_rule : ((isset($this->lang['PLURAL_RULE'])) ? $this->lang['PLURAL_RULE'] : 1); - $plural_rule = max(0, min($plural_rule, 15)); + if ($plural_rule > 15 || $plural_rule < 0) + { + trigger_error('INVALID_PLURAL_RULE'); + } + /** + * The following plural rules are based on a list published by the Mozilla Developer Network + * https://developer.mozilla.org/en/Localization_and_Plurals + */ switch ($plural_rule) { case 0: diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 57c9d916a2..cf01c6f32e 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -285,6 +285,7 @@ $lang = array_merge($lang, array( 'INTERESTS' => 'Interests', 'INVALID_DIGEST_CHALLENGE' => 'Invalid digest challenge.', 'INVALID_EMAIL_LOG' => '%s possibly an invalid e-mail address?', + 'INVALID_PLURAL_RULE' => 'The chosen plural rule is invalid. Valid values are integers between 0 and 15.', 'IP' => 'IP', 'IP_BLACKLISTED' => 'Your IP %1$s has been blocked because it is blacklisted. For details please see %2$s.', -- cgit v1.2.1 From 0734dd3c42f573d819c058cd6c6b55d035d1836d Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 13 Sep 2011 15:34:40 +0200 Subject: [ticket/10345] Remove '1 hour ago' string which conflicted with plural rules This message was only viewed for 1 second anyway, as floor($delta / 60) is only 60 for 3600 to 3660, but the code was limited to $delta <= 3600 PHPBB3-10345 --- phpBB/includes/session.php | 4 ++-- phpBB/language/en/common.php | 1 - 2 files changed, 2 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 4e5257506c..4261a64169 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -2278,9 +2278,9 @@ class user extends session // Zone offset $zone_offset = $this->timezone + $this->dst; - // Show date <= 1 hour ago as 'xx min ago' but not greater than 60 seconds in the future + // Show date < 1 hour ago as 'xx min ago' but not greater than 60 seconds in the future // A small tolerence is given for times in the future but in the same minute are displayed as '< than a minute ago' - if ($delta <= 3600 && $delta > -60 && ($delta >= -5 || (($now / 60) % 60) == (($gmepoch / 60) % 60)) && $date_cache[$format]['is_short'] !== false && !$forcedate && isset($this->lang['datetime']['AGO'])) + if ($delta < 3600 && $delta > -60 && ($delta >= -5 || (($now / 60) % 60) == (($gmepoch / 60) % 60)) && $date_cache[$format]['is_short'] !== false && !$forcedate && isset($this->lang['datetime']['AGO'])) { return $this->lang(array('datetime', 'AGO'), max(0, (int) floor($delta / 60))); } diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index cf01c6f32e..b57c2d9747 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -746,7 +746,6 @@ $lang = array_merge($lang, array( 0 => 'less than a minute ago', 1 => '%d minute ago', 2 => '%d minutes ago', - 60 => '1 hour ago', ), 'Sunday' => 'Sunday', -- cgit v1.2.1 From 88ae40a4b19360645d5e5a614cc378e7cce4afe3 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 14 Sep 2011 00:28:52 +0200 Subject: [ticket/10345] Make use of the plural function in some basic places PHPBB3-10345 --- phpBB/feed.php | 2 +- phpBB/includes/acp/acp_icons.php | 4 +- phpBB/includes/functions.php | 62 +++--------- phpBB/includes/functions_content.php | 16 ++-- phpBB/includes/functions_display.php | 4 +- phpBB/includes/functions_privmsgs.php | 2 +- phpBB/includes/mcp/mcp_forum.php | 2 +- phpBB/includes/mcp/mcp_front.php | 53 ++--------- phpBB/includes/mcp/mcp_logs.php | 2 +- phpBB/includes/mcp/mcp_notes.php | 2 +- phpBB/includes/mcp/mcp_pm_reports.php | 2 +- phpBB/includes/mcp/mcp_queue.php | 2 +- phpBB/includes/mcp/mcp_reports.php | 2 +- phpBB/includes/mcp/mcp_topic.php | 2 +- phpBB/includes/mcp/mcp_warn.php | 2 +- phpBB/includes/message_parser.php | 2 +- phpBB/includes/session.php | 3 + phpBB/includes/ucp/ucp_main.php | 4 +- phpBB/includes/ucp/ucp_pm.php | 4 +- phpBB/includes/ucp/ucp_pm_options.php | 4 +- phpBB/includes/ucp/ucp_pm_viewfolder.php | 2 +- phpBB/index.php | 15 +-- phpBB/language/en/acp/posting.php | 6 +- phpBB/language/en/common.php | 159 ++++++++++++++++++++----------- phpBB/language/en/mcp.php | 31 +++--- phpBB/language/en/memberlist.php | 8 +- phpBB/language/en/posting.php | 18 +++- phpBB/language/en/search.php | 19 +++- phpBB/language/en/ucp.php | 33 +++++-- phpBB/language/en/viewforum.php | 7 +- phpBB/language/en/viewtopic.php | 21 ++-- phpBB/memberlist.php | 2 +- phpBB/posting.php | 6 +- phpBB/search.php | 6 +- phpBB/viewforum.php | 4 +- phpBB/viewonline.php | 30 +----- phpBB/viewtopic.php | 10 +- 37 files changed, 282 insertions(+), 271 deletions(-) (limited to 'phpBB') diff --git a/phpBB/feed.php b/phpBB/feed.php index b8c0c370f9..8d33a358a5 100644 --- a/phpBB/feed.php +++ b/phpBB/feed.php @@ -1106,7 +1106,7 @@ class phpbb_feed_forums extends phpbb_feed_base { global $user; - $item_row['statistics'] = sprintf($user->lang['TOTAL_TOPICS_OTHER'], $row['forum_topics']) + $item_row['statistics'] = $user->lang('TOTAL_TOPICS', (int) $row['forum_topics']) . ' ' . $this->separator_stats . ' ' . sprintf($user->lang['TOTAL_POSTS_OTHER'], $row['forum_posts']); } } diff --git a/phpBB/includes/acp/acp_icons.php b/phpBB/includes/acp/acp_icons.php index c848039c66..98aef45892 100644 --- a/phpBB/includes/acp/acp_icons.php +++ b/phpBB/includes/acp/acp_icons.php @@ -379,7 +379,7 @@ class acp_icons if ($smiley_count + $addable_smileys_count > SMILEY_LIMIT) { - trigger_error(sprintf($user->lang['TOO_MANY_SMILIES'], SMILEY_LIMIT) . adm_back_link($this->u_action), E_USER_WARNING); + trigger_error($user->lang('TOO_MANY_SMILIES', SMILEY_LIMIT) . adm_back_link($this->u_action), E_USER_WARNING); } } @@ -599,7 +599,7 @@ class acp_icons $smiley_count = $this->item_count($table); if ($smiley_count + sizeof($pak_ary) > SMILEY_LIMIT) { - trigger_error(sprintf($user->lang['TOO_MANY_SMILIES'], SMILEY_LIMIT) . adm_back_link($this->u_action), E_USER_WARNING); + trigger_error($user->lang('TOO_MANY_SMILIES', SMILEY_LIMIT) . adm_back_link($this->u_action), E_USER_WARNING); } } diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 92273bf08c..a663286f5f 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4120,59 +4120,26 @@ function obtain_users_online_string($online_users, $item_id = 0, $item = 'forum' } else if ($config['load_online_guests']) { - $l_online = ($online_users['guests_online'] === 1) ? $user->lang['BROWSING_' . $item_caps . '_GUEST'] : $user->lang['BROWSING_' . $item_caps . '_GUESTS']; - $online_userlist = sprintf($l_online, $online_userlist, $online_users['guests_online']); + $online_userlist = $user->lang('BROWSING_' . $item_caps . '_GUESTS', $online_users['guests_online'], $online_userlist); } else { $online_userlist = sprintf($user->lang['BROWSING_' . $item_caps], $online_userlist); } // Build online listing - $vars_online = array( - 'ONLINE' => array('total_online', 'l_t_user_s', 0), - 'REG' => array('visible_online', 'l_r_user_s', !$config['load_online_guests']), - 'HIDDEN' => array('hidden_online', 'l_h_user_s', $config['load_online_guests']), - 'GUEST' => array('guests_online', 'l_g_user_s', 0) - ); + $visible_online = $user->lang('REG_USERS_TOTAL', (int) $online_users['visible_online']); + $hidden_online = $user->lang('HIDDEN_USERS_TOTAL', (int) $online_users['hidden_online']); - foreach ($vars_online as $l_prefix => $var_ary) + if ($config['load_online_guests']) { - if ($var_ary[2]) - { - $l_suffix = '_AND'; - } - else - { - $l_suffix = ''; - } - switch ($online_users[$var_ary[0]]) - { - case 0: - ${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_ZERO_TOTAL' . $l_suffix]; - break; - - case 1: - ${$var_ary[1]} = $user->lang[$l_prefix . '_USER_TOTAL' . $l_suffix]; - break; - - default: - ${$var_ary[1]} = $user->lang[$l_prefix . '_USERS_TOTAL' . $l_suffix]; - break; - } + $guests_online = $user->lang('GUEST_USERS_TOTAL', (int) $online_users['guests_online']); + $l_online_users = $user->lang('ONLINE_USERS_TOTAL_GUESTS', (int) $online_users['total_online'], $visible_online, $hidden_online, $guests_online); } - unset($vars_online); - - $l_online_users = sprintf($l_t_user_s, $online_users['total_online']); - $l_online_users .= sprintf($l_r_user_s, $online_users['visible_online']); - $l_online_users .= sprintf($l_h_user_s, $online_users['hidden_online']); - - if ($config['load_online_guests']) + else { - $l_online_users .= sprintf($l_g_user_s, $online_users['guests_online']); + $l_online_users = $user->lang('ONLINE_USERS_TOTAL', (int) $online_users['total_online'], $visible_online, $hidden_online); } - - return array( 'online_userlist' => $online_userlist, 'l_online_users' => $l_online_users, @@ -4393,10 +4360,9 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 set_config('record_online_date', time(), true); } - $l_online_record = sprintf($user->lang['RECORD_ONLINE_USERS'], $config['record_online_users'], $user->format_date($config['record_online_date'], false, true)); + $l_online_record = $user->lang('RECORD_ONLINE_USERS', (int) $config['record_online_users'], $user->format_date($config['record_online_date'], false, true)); - $l_online_time = ($config['load_online_time'] == 1) ? 'VIEW_ONLINE_TIME' : 'VIEW_ONLINE_TIMES'; - $l_online_time = sprintf($user->lang[$l_online_time], $config['load_online_time']); + $l_online_time = $user->lang('VIEW_ONLINE_TIMES', (int) $config['load_online_time']); } $l_privmsgs_text = $l_privmsgs_text_unread = ''; @@ -4407,8 +4373,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 { if ($user->data['user_new_privmsg']) { - $l_message_new = ($user->data['user_new_privmsg'] == 1) ? $user->lang['NEW_PM'] : $user->lang['NEW_PMS']; - $l_privmsgs_text = sprintf($l_message_new, $user->data['user_new_privmsg']); + $l_privmsgs_text = $user->lang('NEW_PMS', (int) $user->data['user_new_privmsg']); if (!$user->data['user_last_privmsg'] || $user->data['user_last_privmsg'] > $user->data['session_last_visit']) { @@ -4426,7 +4391,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 } else { - $l_privmsgs_text = $user->lang['NO_NEW_PM']; + $l_privmsgs_text = $user->lang('NEW_PMS', 0); $s_privmsg_new = false; } @@ -4434,8 +4399,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 if ($user->data['user_unread_privmsg'] && $user->data['user_unread_privmsg'] != $user->data['user_new_privmsg']) { - $l_message_unread = ($user->data['user_unread_privmsg'] == 1) ? $user->lang['UNREAD_PM'] : $user->lang['UNREAD_PMS']; - $l_privmsgs_text_unread = sprintf($l_message_unread, $user->data['user_unread_privmsg']); + $l_privmsgs_text_unread = $user->lang('UNREAD_PMS', (int) $user->data['user_unread_privmsg']); } } diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php index b1294a2f14..894e261c12 100644 --- a/phpBB/includes/functions_content.php +++ b/phpBB/includes/functions_content.php @@ -938,12 +938,12 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count, } $download_link = append_sid("{$phpbb_root_path}download/file.$phpEx", 'id=' . $attachment['attach_id']); + $l_downloaded_viewed = 'VIEWED_COUNTS'; switch ($display_cat) { // Images case ATTACHMENT_CATEGORY_IMAGE: - $l_downloaded_viewed = 'VIEWED_COUNT'; $inline_link = append_sid("{$phpbb_root_path}download/file.$phpEx", 'id=' . $attachment['attach_id']); $download_link .= '&mode=view'; @@ -957,7 +957,6 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count, // Images, but display Thumbnail case ATTACHMENT_CATEGORY_THUMB: - $l_downloaded_viewed = 'VIEWED_COUNT'; $thumbnail_link = append_sid("{$phpbb_root_path}download/file.$phpEx", 'id=' . $attachment['attach_id'] . '&t=1'); $download_link .= '&mode=view'; @@ -971,7 +970,6 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count, // Windows Media Streams case ATTACHMENT_CATEGORY_WM: - $l_downloaded_viewed = 'VIEWED_COUNT'; // Giving the filename directly because within the wm object all variables are in local context making it impossible // to validate against a valid session (all params can differ) @@ -990,7 +988,6 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count, // Real Media Streams case ATTACHMENT_CATEGORY_RM: case ATTACHMENT_CATEGORY_QUICKTIME: - $l_downloaded_viewed = 'VIEWED_COUNT'; $block_array += array( 'S_RM_FILE' => ($display_cat == ATTACHMENT_CATEGORY_RM) ? true : false, @@ -1007,8 +1004,6 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count, case ATTACHMENT_CATEGORY_FLASH: list($width, $height) = @getimagesize($filename); - $l_downloaded_viewed = 'VIEWED_COUNT'; - $block_array += array( 'S_FLASH_FILE' => true, 'WIDTH' => $width, @@ -1021,7 +1016,7 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count, break; default: - $l_downloaded_viewed = 'DOWNLOAD_COUNT'; + $l_downloaded_viewed = 'DOWNLOAD_COUNTS'; $block_array += array( 'S_FILE' => true, @@ -1029,11 +1024,14 @@ function parse_attachments($forum_id, &$message, &$attachments, &$update_count, break; } - $l_download_count = (!isset($attachment['download_count']) || $attachment['download_count'] == 0) ? $user->lang[$l_downloaded_viewed . '_NONE'] : (($attachment['download_count'] == 1) ? sprintf($user->lang[$l_downloaded_viewed], $attachment['download_count']) : sprintf($user->lang[$l_downloaded_viewed . 'S'], $attachment['download_count'])); + if (!isset($attachment['download_count'])) + { + $attachment['download_count'] = 0; + } $block_array += array( 'U_DOWNLOAD_LINK' => $download_link, - 'L_DOWNLOAD_COUNT' => $l_download_count + 'L_DOWNLOAD_COUNT' => $user->lang($l_downloaded_viewed, (int) $attachment['download_count']), ); } diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 2b871a21ec..2ec34e1084 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -1043,10 +1043,10 @@ function display_user_activity(&$userdata) $template->assign_vars(array( 'ACTIVE_FORUM' => $active_f_name, - 'ACTIVE_FORUM_POSTS' => ($active_f_count == 1) ? sprintf($user->lang['USER_POST'], 1) : sprintf($user->lang['USER_POSTS'], $active_f_count), + 'ACTIVE_FORUM_POSTS' => $user->lang('USER_POSTS', (int) $active_f_count), 'ACTIVE_FORUM_PCT' => sprintf($l_active_pct, $active_f_pct), 'ACTIVE_TOPIC' => censor_text($active_t_name), - 'ACTIVE_TOPIC_POSTS' => ($active_t_count == 1) ? sprintf($user->lang['USER_POST'], 1) : sprintf($user->lang['USER_POSTS'], $active_t_count), + 'ACTIVE_TOPIC_POSTS' => $user->lang('USER_POSTS', (int) $active_t_count), 'ACTIVE_TOPIC_PCT' => sprintf($l_active_pct, $active_t_pct), 'U_ACTIVE_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $active_f_id), 'U_ACTIVE_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 't=' . $active_t_id), diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php index d90e321285..76f25da977 100644 --- a/phpBB/includes/functions_privmsgs.php +++ b/phpBB/includes/functions_privmsgs.php @@ -1330,7 +1330,7 @@ function get_folder_status($folder_id, $folder) 'percent' => ($user->data['message_limit']) ? (($user->data['message_limit'] > 0) ? round(($folder['num_messages'] / $user->data['message_limit']) * 100) : 100) : 0, ); - $return['message'] = sprintf($user->lang['FOLDER_STATUS_MSG'], $return['percent'], $return['cur'], $return['max']); + $return['message'] = $user->lang('FOLDER_STATUS_MSG', (int) $return['max'], $return['cur'], $return['percent']); return $return; } diff --git a/phpBB/includes/mcp/mcp_forum.php b/phpBB/includes/mcp/mcp_forum.php index 8206a183f3..c823e0a0ee 100644 --- a/phpBB/includes/mcp/mcp_forum.php +++ b/phpBB/includes/mcp/mcp_forum.php @@ -132,7 +132,7 @@ function mcp_forum_view($id, $mode, $action, $forum_info) 'PAGINATION' => generate_pagination($url . "&i=$id&action=$action&mode=$mode&sd=$sort_dir&sk=$sort_key&st=$sort_days" . (($merge_select) ? $selected_ids : ''), $forum_topics, $topics_per_page, $start), 'PAGE_NUMBER' => on_page($forum_topics, $topics_per_page, $start), - 'TOTAL_TOPICS' => ($forum_topics == 1) ? $user->lang['VIEW_FORUM_TOPIC'] : sprintf($user->lang['VIEW_FORUM_TOPICS'], $forum_topics), + 'TOTAL_TOPICS' => $user->lang('VIEW_FORUM_TOPICS', (int) $forum_topics), )); // Grab icons diff --git a/phpBB/includes/mcp/mcp_front.php b/phpBB/includes/mcp/mcp_front.php index ee74a04c91..4ae46f98a2 100644 --- a/phpBB/includes/mcp/mcp_front.php +++ b/phpBB/includes/mcp/mcp_front.php @@ -119,22 +119,9 @@ function mcp_front_view($id, $mode, $action) $template->assign_vars(array( 'S_HIDDEN_FIELDS' => $s_hidden_fields, 'S_MCP_QUEUE_ACTION' => append_sid("{$phpbb_root_path}mcp.$phpEx", "i=queue"), + 'L_UNAPPROVED_TOTAL' => $user->lang('UNAPPROVED_POSTS_TOTAL', (int) $total), + 'S_HAS_UNAPPROVED_POSTS'=> ($total != 0), )); - - if ($total == 0) - { - $template->assign_vars(array( - 'L_UNAPPROVED_TOTAL' => $user->lang['UNAPPROVED_POSTS_ZERO_TOTAL'], - 'S_HAS_UNAPPROVED_POSTS' => false) - ); - } - else - { - $template->assign_vars(array( - 'L_UNAPPROVED_TOTAL' => ($total == 1) ? $user->lang['UNAPPROVED_POST_TOTAL'] : sprintf($user->lang['UNAPPROVED_POSTS_TOTAL'], $total), - 'S_HAS_UNAPPROVED_POSTS' => true) - ); - } } } @@ -220,20 +207,10 @@ function mcp_front_view($id, $mode, $action) } } - if ($total == 0) - { - $template->assign_vars(array( - 'L_REPORTS_TOTAL' => $user->lang['REPORTS_ZERO_TOTAL'], - 'S_HAS_REPORTS' => false) - ); - } - else - { - $template->assign_vars(array( - 'L_REPORTS_TOTAL' => ($total == 1) ? $user->lang['REPORT_TOTAL'] : sprintf($user->lang['REPORTS_TOTAL'], $total), - 'S_HAS_REPORTS' => true) - ); - } + $template->assign_vars(array( + 'L_REPORTS_TOTAL' => $user->lang('REPORTS_TOTAL', (int) $total), + 'S_HAS_REPORTS' => ($total != 0), + )); } } @@ -313,20 +290,10 @@ function mcp_front_view($id, $mode, $action) } } - if ($total == 0) - { - $template->assign_vars(array( - 'L_PM_REPORTS_TOTAL' => $user->lang['PM_REPORTS_ZERO_TOTAL'], - 'S_HAS_PM_REPORTS' => false) - ); - } - else - { - $template->assign_vars(array( - 'L_PM_REPORTS_TOTAL' => ($total == 1) ? $user->lang['PM_REPORT_TOTAL'] : sprintf($user->lang['PM_REPORTS_TOTAL'], $total), - 'S_HAS_PM_REPORTS' => true) - ); - } + $template->assign_vars(array( + 'L_PM_REPORTS_TOTAL' => $user->lang('PM_REPORTS_TOTAL', (int) $total), + 'S_HAS_PM_REPORTS' => ($total != 0), + )); } // Latest 5 logs diff --git a/phpBB/includes/mcp/mcp_logs.php b/phpBB/includes/mcp/mcp_logs.php index dc05ba4110..52f8259acf 100644 --- a/phpBB/includes/mcp/mcp_logs.php +++ b/phpBB/includes/mcp/mcp_logs.php @@ -174,7 +174,7 @@ class mcp_logs $template->assign_vars(array( 'PAGE_NUMBER' => on_page($log_count, $config['topics_per_page'], $start), - 'TOTAL' => ($log_count == 1) ? $user->lang['TOTAL_LOG'] : sprintf($user->lang['TOTAL_LOGS'], $log_count), + 'TOTAL' => $user->lang('TOTAL_LOGS', (int) $log_count), 'PAGINATION' => generate_pagination($this->u_action . "&$u_sort_param$keywords_param", $log_count, $config['topics_per_page'], $start), 'L_TITLE' => $user->lang['MCP_LOGS'], diff --git a/phpBB/includes/mcp/mcp_notes.php b/phpBB/includes/mcp/mcp_notes.php index dfb6ed3b68..1432e96a48 100644 --- a/phpBB/includes/mcp/mcp_notes.php +++ b/phpBB/includes/mcp/mcp_notes.php @@ -228,7 +228,7 @@ class mcp_notes 'PAGE_NUMBER' => on_page($log_count, $config['topics_per_page'], $start), 'PAGINATION' => generate_pagination($this->u_action . "&$u_sort_param$keywords_param", $log_count, $config['topics_per_page'], $start), - 'TOTAL_REPORTS' => ($log_count == 1) ? $user->lang['LIST_REPORT'] : sprintf($user->lang['LIST_REPORTS'], $log_count), + 'TOTAL_REPORTS' => $user->lang('LIST_REPORTS', (int) $log_count), 'RANK_TITLE' => $rank_title, 'JOINED' => $user->format_date($userrow['user_regdate']), diff --git a/phpBB/includes/mcp/mcp_pm_reports.php b/phpBB/includes/mcp/mcp_pm_reports.php index a8136b34df..6bba71f0d9 100644 --- a/phpBB/includes/mcp/mcp_pm_reports.php +++ b/phpBB/includes/mcp/mcp_pm_reports.php @@ -311,7 +311,7 @@ class mcp_pm_reports 'PAGINATION' => generate_pagination($this->u_action . "&st=$sort_days&sk=$sort_key&sd=$sort_dir", $total, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($total, $config['topics_per_page'], $start), 'TOTAL' => $total, - 'TOTAL_REPORTS' => ($total == 1) ? $user->lang['LIST_REPORT'] : sprintf($user->lang['LIST_REPORTS'], $total), + 'TOTAL_REPORTS' => $user->lang('LIST_REPORTS', (int) $total), ) ); diff --git a/phpBB/includes/mcp/mcp_queue.php b/phpBB/includes/mcp/mcp_queue.php index bd132c9ce8..692d29dabb 100644 --- a/phpBB/includes/mcp/mcp_queue.php +++ b/phpBB/includes/mcp/mcp_queue.php @@ -436,7 +436,7 @@ class mcp_queue 'PAGINATION' => generate_pagination($this->u_action . "&f=$forum_id&st=$sort_days&sk=$sort_key&sd=$sort_dir", $total, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($total, $config['topics_per_page'], $start), 'TOPIC_ID' => $topic_id, - 'TOTAL' => ($total == 1) ? (($mode == 'unapproved_posts') ? $user->lang['VIEW_TOPIC_POST'] : $user->lang['VIEW_FORUM_TOPIC']) : sprintf((($mode == 'unapproved_posts') ? $user->lang['VIEW_TOPIC_POSTS'] : $user->lang['VIEW_FORUM_TOPICS']), $total), + 'TOTAL' => $user->lang((($mode == 'unapproved_posts') ? 'VIEW_TOPIC_POSTS' : 'VIEW_FORUM_TOPICS'), (int) $total), )); $this->tpl_name = 'mcp_queue'; diff --git a/phpBB/includes/mcp/mcp_reports.php b/phpBB/includes/mcp/mcp_reports.php index dac73b900f..eb2b655dd3 100644 --- a/phpBB/includes/mcp/mcp_reports.php +++ b/phpBB/includes/mcp/mcp_reports.php @@ -425,7 +425,7 @@ class mcp_reports 'PAGE_NUMBER' => on_page($total, $config['topics_per_page'], $start), 'TOPIC_ID' => $topic_id, 'TOTAL' => $total, - 'TOTAL_REPORTS' => ($total == 1) ? $user->lang['LIST_REPORT'] : sprintf($user->lang['LIST_REPORTS'], $total), + 'TOTAL_REPORTS' => $user->lang('LIST_REPORTS', (int) $total), ) ); diff --git a/phpBB/includes/mcp/mcp_topic.php b/phpBB/includes/mcp/mcp_topic.php index f080d78b1e..463dd5868d 100644 --- a/phpBB/includes/mcp/mcp_topic.php +++ b/phpBB/includes/mcp/mcp_topic.php @@ -336,7 +336,7 @@ function mcp_topic_view($id, $mode, $action) 'PAGE_NUMBER' => on_page($total, $posts_per_page, $start), 'PAGINATION' => (!$posts_per_page) ? '' : generate_pagination(append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&t={$topic_info['topic_id']}&mode=$mode&action=$action&to_topic_id=$to_topic_id&posts_per_page=$posts_per_page&st=$sort_days&sk=$sort_key&sd=$sort_dir"), $total, $posts_per_page, $start), - 'TOTAL_POSTS' => ($total == 1) ? $user->lang['VIEW_TOPIC_POST'] : sprintf($user->lang['VIEW_TOPIC_POSTS'], $total), + 'TOTAL_POSTS' => $user->lang('VIEW_TOPIC_POSTS', (int) $total), )); } diff --git a/phpBB/includes/mcp/mcp_warn.php b/phpBB/includes/mcp/mcp_warn.php index 9339389ea4..8cf435c293 100644 --- a/phpBB/includes/mcp/mcp_warn.php +++ b/phpBB/includes/mcp/mcp_warn.php @@ -185,7 +185,7 @@ class mcp_warn 'PAGE_NUMBER' => on_page($user_count, $config['topics_per_page'], $start), 'PAGINATION' => generate_pagination(append_sid("{$phpbb_root_path}mcp.$phpEx", "i=warn&mode=list&st=$st&sk=$sk&sd=$sd"), $user_count, $config['topics_per_page'], $start), - 'TOTAL_USERS' => ($user_count == 1) ? $user->lang['LIST_USER'] : sprintf($user->lang['LIST_USERS'], $user_count), + 'TOTAL_USERS' => $user->lang('LIST_USERS', (int) $user_count), )); } diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php index b3a48112ea..cb9a9d7d28 100644 --- a/phpBB/includes/message_parser.php +++ b/phpBB/includes/message_parser.php @@ -772,7 +772,7 @@ class bbcode_firstpass extends bbcode if ($config['max_quote_depth'] && sizeof($close_tags) >= $config['max_quote_depth']) { // there are too many nested quotes - $error_ary['quote_depth'] = sprintf($user->lang['QUOTE_DEPTH_EXCEEDED'], $config['max_quote_depth']); + $error_ary['quote_depth'] = $user->lang('QUOTE_DEPTH_EXCEEDED', (int) $config['max_quote_depth']); $out .= $buffer . $tok; $tok = '[]'; diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 4261a64169..0733e4f7fb 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1821,6 +1821,9 @@ class user extends session * This function/functionality is inspired by SHS` and Ashe. * * Example call: $user->lang('NUM_POSTS_IN_QUEUE', 1); + * + * If the first parameter is an array, the parts are used as keys and subkeys to get the lang: + * Example: $user->lang(array('datetime', 'AGO'), 1) uses $user->lang['datetime']['AGO'] as lang. */ function lang() { diff --git a/phpBB/includes/ucp/ucp_main.php b/phpBB/includes/ucp/ucp_main.php index 738da62158..3538b641f7 100644 --- a/phpBB/includes/ucp/ucp_main.php +++ b/phpBB/includes/ucp/ucp_main.php @@ -674,8 +674,8 @@ class ucp_main $template->assign_vars(array( 'PAGINATION' => generate_pagination($this->u_action, $topics_count, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($topics_count, $config['topics_per_page'], $start), - 'TOTAL_TOPICS' => ($topics_count == 1) ? $user->lang['VIEW_FORUM_TOPIC'] : sprintf($user->lang['VIEW_FORUM_TOPICS'], $topics_count)) - ); + 'TOTAL_TOPICS' => $user->lang('VIEW_FORUM_TOPICS', (int) $topics_count), + )); } if ($mode == 'subscribed') diff --git a/phpBB/includes/ucp/ucp_pm.php b/phpBB/includes/ucp/ucp_pm.php index 0691f3158c..6dbf092604 100644 --- a/phpBB/includes/ucp/ucp_pm.php +++ b/phpBB/includes/ucp/ucp_pm.php @@ -345,8 +345,8 @@ class ucp_pm 'NUM_NOT_MOVED' => $num_not_moved, 'NUM_REMOVED' => $num_removed, 'RELEASE_MESSAGE_INFO' => sprintf($user->lang['RELEASE_MESSAGES'], '', ''), - 'NOT_MOVED_MESSAGES' => ($num_not_moved == 1) ? $user->lang['NOT_MOVED_MESSAGE'] : sprintf($user->lang['NOT_MOVED_MESSAGES'], $num_not_moved), - 'RULE_REMOVED_MESSAGES' => ($num_removed == 1) ? $user->lang['RULE_REMOVED_MESSAGE'] : sprintf($user->lang['RULE_REMOVED_MESSAGES'], $num_removed), + 'NOT_MOVED_MESSAGES' => $user->lang('NOT_MOVED_MESSAGES', (int) $num_not_moved), + 'RULE_REMOVED_MESSAGES' => $user->lang('RULE_REMOVED_MESSAGES', (int) $num_removed), 'S_FOLDER_OPTIONS' => $s_folder_options, 'S_TO_FOLDER_OPTIONS' => $s_to_folder_options, diff --git a/phpBB/includes/ucp/ucp_pm_options.php b/phpBB/includes/ucp/ucp_pm_options.php index 49c727847a..bd55e2c6c5 100644 --- a/phpBB/includes/ucp/ucp_pm_options.php +++ b/phpBB/includes/ucp/ucp_pm_options.php @@ -409,7 +409,7 @@ function message_options($id, $mode, $global_privmsgs_rules, $global_rule_condit $folder[PRIVMSGS_INBOX] = array( 'folder_name' => $user->lang['PM_INBOX'], - 'message_status' => sprintf($user->lang['FOLDER_MESSAGE_STATUS'], $num_messages, $user->data['message_limit']) + 'message_status' => $user->lang('FOLDER_MESSAGE_STATUS', (int) $user->data['message_limit'], $num_messages), ); $sql = 'SELECT folder_id, folder_name, pm_count @@ -423,7 +423,7 @@ function message_options($id, $mode, $global_privmsgs_rules, $global_rule_condit $num_user_folder++; $folder[$row['folder_id']] = array( 'folder_name' => $row['folder_name'], - 'message_status' => sprintf($user->lang['FOLDER_MESSAGE_STATUS'], $row['pm_count'], $user->data['message_limit']) + 'message_status' => $user->lang('FOLDER_MESSAGE_STATUS', (int) $user->data['message_limit'], $row['pm_count']), ); } $db->sql_freeresult($result); diff --git a/phpBB/includes/ucp/ucp_pm_viewfolder.php b/phpBB/includes/ucp/ucp_pm_viewfolder.php index c74574f361..7b850cb436 100644 --- a/phpBB/includes/ucp/ucp_pm_viewfolder.php +++ b/phpBB/includes/ucp/ucp_pm_viewfolder.php @@ -455,7 +455,7 @@ function get_pm_from($folder_id, $folder, $user_id) $template->assign_vars(array( 'PAGINATION' => generate_pagination(append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=view&action=view_folder&f=$folder_id&$u_sort_param"), $pm_count, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($pm_count, $config['topics_per_page'], $start), - 'TOTAL_MESSAGES' => (($pm_count == 1) ? $user->lang['VIEW_PM_MESSAGE'] : sprintf($user->lang['VIEW_PM_MESSAGES'], $pm_count)), + 'TOTAL_MESSAGES' => $user->lang('VIEW_PM_MESSAGES', (int) $pm_count), 'POST_IMG' => (!$auth->acl_get('u_sendpm')) ? $user->img('button_topic_locked', 'POST_PM_LOCKED') : $user->img('button_pm_new', 'POST_NEW_PM'), diff --git a/phpBB/index.php b/phpBB/index.php index 182efbc7e0..bf59d4d840 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -27,15 +27,6 @@ $user->setup('viewforum'); display_forums('', $config['load_moderators']); -// Set some stats, get posts count from forums data if we... hum... retrieve all forums data -$total_posts = $config['num_posts']; -$total_topics = $config['num_topics']; -$total_users = $config['num_users']; - -$l_total_user_s = ($total_users == 0) ? 'TOTAL_USERS_ZERO' : 'TOTAL_USERS_OTHER'; -$l_total_post_s = ($total_posts == 0) ? 'TOTAL_POSTS_ZERO' : 'TOTAL_POSTS_OTHER'; -$l_total_topic_s = ($total_topics == 0) ? 'TOTAL_TOPICS_ZERO' : 'TOTAL_TOPICS_OTHER'; - $order_legend = ($config['legend_sort_groupname']) ? 'group_name' : 'group_legend'; // Grab group details for legend display if ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) @@ -124,9 +115,9 @@ if ($config['load_birthdays'] && $config['allow_birthdays'] && $auth->acl_gets(' // Assign index specific vars $template->assign_vars(array( - 'TOTAL_POSTS' => sprintf($user->lang[$l_total_post_s], $total_posts), - 'TOTAL_TOPICS' => sprintf($user->lang[$l_total_topic_s], $total_topics), - 'TOTAL_USERS' => sprintf($user->lang[$l_total_user_s], $total_users), + 'TOTAL_POSTS' => $user->lang('TOTAL_POSTS', (int) $config['num_posts']), + 'TOTAL_TOPICS' => $user->lang('TOTAL_TOPICS', (int) $config['num_topics']), + 'TOTAL_USERS' => $user->lang('TOTAL_USERS', (int) $config['num_users']), 'NEWEST_USER' => sprintf($user->lang['NEWEST_USER'], get_username_string('full', $config['newest_user_id'], $config['newest_username'], $config['newest_user_colour'])), 'LEGEND' => $legend, diff --git a/phpBB/language/en/acp/posting.php b/phpBB/language/en/acp/posting.php index 16e1aaca66..7aa01469b7 100644 --- a/phpBB/language/en/acp/posting.php +++ b/phpBB/language/en/acp/posting.php @@ -185,7 +185,11 @@ $lang = array_merge($lang, array( 'SMILIES_URL' => 'Smiley image file', 'SMILIES_WIDTH' => 'Smiley width', - 'TOO_MANY_SMILIES' => 'Limit of %d smilies reached.', + 'TOO_MANY_SMILIES' => array( + 0 => 'Limit of %d smilies reached.', + 1 => 'Limit of %d smiley reached.', + 2 => 'Limit of %d smilies reached.', + ), 'WRONG_PAK_TYPE' => 'The specified package does not contain the appropriate data.', )); diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index b57c2d9747..6fcef11852 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -113,8 +113,11 @@ $lang = array_merge($lang, array( 'BOARD_DISABLED' => 'This board is currently disabled.', 'BOARD_UNAVAILABLE' => 'Sorry but the board is temporarily unavailable, please try again in a few minutes.', 'BROWSING_FORUM' => 'Users browsing this forum: %1$s', - 'BROWSING_FORUM_GUEST' => 'Users browsing this forum: %1$s and %2$d guest', - 'BROWSING_FORUM_GUESTS' => 'Users browsing this forum: %1$s and %2$d guests', + 'BROWSING_FORUM_GUESTS' => array( + 0 => 'Users browsing this forum: %2$s and 0 guests', + 1 => 'Users browsing this forum: %2$s and %1$d guest', + 2 => 'Users browsing this forum: %2$s and %1$d guests', + ), 'BYTES' => 'Bytes', 'CANCEL' => 'Cancel', @@ -155,12 +158,11 @@ $lang = array_merge($lang, array( 'DISPLAY_TOPICS' => 'Display topics from previous', 'DOWNLOADED' => 'Downloaded', 'DOWNLOADING_FILE' => 'Downloading file', - 'DOWNLOAD_COUNT' => 'Downloaded %d time', - 'DOWNLOAD_COUNTS' => 'Downloaded %d times', - 'DOWNLOAD_COUNT_NONE' => 'Not downloaded yet', - 'VIEWED_COUNT' => 'Viewed %d time', - 'VIEWED_COUNTS' => 'Viewed %d times', - 'VIEWED_COUNT_NONE' => 'Not viewed yet', + 'DOWNLOAD_COUNTS' => array( + 0 => 'Not downloaded yet', + 1 => 'Downloaded %d time', + 2 => 'Downloaded %d times', + ), 'EDIT_POST' => 'Edit post', 'EMAIL' => 'E-mail', // Short form for EMAIL_ADDRESS @@ -245,12 +247,16 @@ $lang = array_merge($lang, array( 'GROUP_ERR_USERNAME' => 'No group name specified.', 'GROUP_ERR_USER_LONG' => 'Group names cannot exceed 60 characters. The specified group name is too long.', 'GUEST' => 'Guest', - 'GUEST_USERS_ONLINE' => 'There are %d guest users online', - 'GUEST_USERS_TOTAL' => '%d guests', - 'GUEST_USERS_ZERO_ONLINE' => 'There are 0 guest users online', - 'GUEST_USERS_ZERO_TOTAL' => '0 guests', - 'GUEST_USER_ONLINE' => 'There is %d guest user online', - 'GUEST_USER_TOTAL' => '%d guest', + 'GUEST_USERS_ONLINE' => array( + 0 => 'There are 0 guest users online', + 1 => 'There is %d guest user online', + 2 => 'There are %d guest users online', + ), + 'GUEST_USERS_TOTAL' => array( + 0 => '0 guests', + 1 => '%d guest', + 2 => '%d guests', + ), 'G_ADMINISTRATORS' => 'Administrators', 'G_BOTS' => 'Bots', 'G_GUESTS' => 'Guests', @@ -259,15 +265,16 @@ $lang = array_merge($lang, array( 'G_GLOBAL_MODERATORS' => 'Global moderators', 'G_NEWLY_REGISTERED' => 'Newly registered users', - 'HIDDEN_USERS_ONLINE' => '%d hidden users online', - 'HIDDEN_USERS_TOTAL' => '%d hidden', - 'HIDDEN_USERS_TOTAL_AND' => '%d hidden and ', - 'HIDDEN_USERS_ZERO_ONLINE' => '0 hidden users online', - 'HIDDEN_USERS_ZERO_TOTAL' => '0 hidden', - 'HIDDEN_USERS_ZERO_TOTAL_AND' => '0 hidden and ', - 'HIDDEN_USER_ONLINE' => '%d hidden user online', - 'HIDDEN_USER_TOTAL' => '%d hidden', - 'HIDDEN_USER_TOTAL_AND' => '%d hidden and ', + 'HIDDEN_USERS_ONLINE' => array( + 0 => '0 hidden users', + 1 => '%d hidden user', + 2 => '%d hidden users', + ), + 'HIDDEN_USERS_TOTAL' => array( + 0 => '0 hidden', + 1 => '%d hidden', + 2 => '%d hidden', + ), 'HIDE_GUESTS' => 'Hide guests', 'HIDE_ME' => 'Hide my online status this session', 'HOURS' => 'Hours', @@ -354,8 +361,11 @@ $lang = array_merge($lang, array( 'NEWEST_USER' => 'Our newest member %s', 'NEW_MESSAGE' => 'New message', 'NEW_MESSAGES' => 'New messages', - 'NEW_PM' => '%d new message', - 'NEW_PMS' => '%d new messages', + 'NEW_PMS' => array( + 0 => '0 new messages', + 1 => '%d new message', + 2 => '%d new messages', + ), 'NEW_POST' => 'New post', // Not used anymore 'NEW_POSTS' => 'New posts', // Not used anymore 'NEXT' => 'Next', // Used in pagination @@ -389,7 +399,6 @@ $lang = array_merge($lang, array( 'NO_MODE' => 'No mode specified.', 'NO_MODERATORS' => 'There are no moderators.', 'NO_NEW_MESSAGES' => 'No new messages', - 'NO_NEW_PM' => '0 new messages', 'NO_NEW_POSTS' => 'No new posts', // Not used anymore 'NO_ONLINE_USERS' => 'No registered users', 'NO_POSTS' => 'No posts', @@ -403,7 +412,6 @@ $lang = array_merge($lang, array( 'NO_TOPIC_FORUM' => 'The topic or forum no longer exists.', 'NO_TOPICS' => 'There are no topics or posts in this forum.', 'NO_TOPICS_TIME_FRAME' => 'No topics exist inside this forum for the selected time frame.', - 'NO_UNREAD_PM' => '0 unread messages', 'NO_UNREAD_POSTS' => 'No unread posts', 'NO_UPLOAD_FORM_FOUND' => 'Upload initiated but no valid file upload form found.', 'NO_USER' => 'The requested user does not exist.', @@ -421,9 +429,18 @@ $lang = array_merge($lang, array( 'OFFLINE' => 'Offline', 'ONLINE' => 'Online', 'ONLINE_BUDDIES' => 'Online friends', - 'ONLINE_USERS_TOTAL' => 'In total there are %d users online :: ', - 'ONLINE_USERS_ZERO_TOTAL' => 'In total there are 0 users online :: ', - 'ONLINE_USER_TOTAL' => 'In total there is %d user online :: ', + // "... :: x registered and y hidden" + 'ONLINE_USERS_TOTAL' => array( + 0 => 'In total there are 0 users online :: %2$s and %3$s', + 1 => 'In total there is %1$d user online :: %2$s and %3$s', + 2 => 'In total there are %1$d users online :: %2$s and %3$s', + ), + // "... :: x registered, y hidden and z guests" + 'ONLINE_USERS_TOTAL_GUESTS' => array( + 0 => 'In total there are 0 users online :: %2$s, %3$s and %4$s', + 1 => 'In total there is %1$d user online :: %2$s, %3$s and %4$s', + 2 => 'In total there are %1$d users online :: %2$s, %3$s and %4$s', + ), 'OPTIONS' => 'Options', 'PAGE_OF' => 'Page %1$d of %2$d', @@ -477,15 +494,17 @@ $lang = array_merge($lang, array( 'REDIRECTS' => 'Total redirects', 'REGISTER' => 'Register', 'REGISTERED_USERS' => 'Registered users:', - 'REG_USERS_ONLINE' => 'There are %d registered users and ', - 'REG_USERS_TOTAL' => '%d registered, ', - 'REG_USERS_TOTAL_AND' => '%d registered and ', - 'REG_USERS_ZERO_ONLINE' => 'There are 0 registered users and ', - 'REG_USERS_ZERO_TOTAL' => '0 registered, ', - 'REG_USERS_ZERO_TOTAL_AND' => '0 registered and ', - 'REG_USER_ONLINE' => 'There is %d registered user and ', - 'REG_USER_TOTAL' => '%d registered, ', - 'REG_USER_TOTAL_AND' => '%d registered and ', + // "... and 2 hidden users online" + 'REG_USERS_ONLINE' => array( + 0 => 'There are 0 registered users and %2$s online', + 1 => 'There is %1$d registered user and %2$s online', + 2 => 'There are %1$d registered users and %2$s online', + ), + 'REG_USERS_TOTAL' => array( + 0 => '0 registered', + 1 => '%d registered', + 2 => '%d registered', + ), 'REMOVE' => 'Remove', 'REMOVE_INSTALL' => 'Please delete, move or rename the install directory before you use your board. If this directory is still present, only the Administration Control Panel (ACP) will be accessible.', 'REPLIES' => 'Replies', @@ -637,19 +656,33 @@ $lang = array_merge($lang, array( 'TOPIC_TITLE' => 'Topic title', 'TOPIC_UNAPPROVED' => 'This topic has not been approved', 'TOTAL_ATTACHMENTS' => 'Attachment(s)', - 'TOTAL_LOG' => '1 log', - 'TOTAL_LOGS' => '%d logs', - 'TOTAL_NO_PM' => '0 private messages in total', - 'TOTAL_PM' => '1 private message in total', - 'TOTAL_PMS' => '%d private messages in total', + 'TOTAL_LOGS' => array( + 0 => '0 logs', + 1 => '%d log', + 2 => '%d logs', + ), + 'TOTAL_PMS' => array( + 0 => '0 private messages in total', + 1 => '%d private message in total', + 2 => '%d private messages in total', + ), 'TOTAL_POSTS' => 'Total posts', - 'TOTAL_POSTS_OTHER' => 'Total posts %d', - 'TOTAL_POSTS_ZERO' => 'Total posts 0', + 'TOTAL_POSTS_COUNT' => array( + 0 => 'Total posts 0', + 1 => 'Total posts %d', + 2 => 'Total posts %d', + ), 'TOPIC_REPORTED' => 'This topic has been reported', - 'TOTAL_TOPICS_OTHER'=> 'Total topics %d', - 'TOTAL_TOPICS_ZERO' => 'Total topics 0', - 'TOTAL_USERS_OTHER' => 'Total members %d', - 'TOTAL_USERS_ZERO' => 'Total members 0', + 'TOTAL_TOPICS' => array( + 0 => 'Total topics 0', + 1 => 'Total topics %d', + 2 => 'Total topics %d', + ), + 'TOTAL_USERS' => array( + 0 => 'Total members 0', + 1 => 'Total members %d', + 2 => 'Total members %d', + ), 'TRACKED_PHP_ERROR' => 'Tracked PHP errors: %s', 'UNABLE_GET_IMAGE_SIZE' => 'It was not possible to determine the dimensions of the image.', @@ -657,8 +690,11 @@ $lang = array_merge($lang, array( 'UNKNOWN_BROWSER' => 'Unknown browser', 'UNMARK_ALL' => 'Unmark all', 'UNREAD_MESSAGES' => 'Unread messages', - 'UNREAD_PM' => '%d unread message', - 'UNREAD_PMS' => '%d unread messages', + 'UNREAD_PMS' => array( + 0 => '0 unread messages', + 1 => '%d unread message', + 2 => '%d unread messages', + ), 'UNREAD_POST' => 'Unread post', 'UNREAD_POSTS' => 'Unread posts', 'UNWATCH_FORUM_CONFIRM' => 'Are you sure you wish to unsubscribe from this forum?', @@ -676,8 +712,11 @@ $lang = array_merge($lang, array( 'USERNAMES' => 'Usernames', 'USER_AVATAR' => 'User avatar', 'USER_CANNOT_READ' => 'You cannot read posts in this forum.', - 'USER_POST' => '%d Post', - 'USER_POSTS' => '%d Posts', + 'USER_POSTS' => array( + 0 => '0 Posts', + 1 => '%d Post', + 2 => '%d Posts', + ), 'USERS' => 'Users', 'USE_PERMISSIONS' => 'Test out user’s permissions', @@ -685,6 +724,11 @@ $lang = array_merge($lang, array( 'VARIANT_DATE_SEPARATOR' => ' / ', // Used in date format dropdown, eg: "Today, 13:37 / 01 Jan 2007, 13:37" ... to join a relative date with calendar date 'VIEWED' => 'Viewed', + 'VIEWED_COUNTS' => array( + 0 => 'Not viewed yet', + 1 => 'Viewed %d time', + 2 => 'Viewed %d times', + ), 'VIEWING_FAQ' => 'Viewing FAQ', 'VIEWING_MEMBERS' => 'Viewing member details', 'VIEWING_ONLINE' => 'Viewing who is online', @@ -699,8 +743,11 @@ $lang = array_merge($lang, array( 'VIEW_LATEST_POST' => 'View the latest post', 'VIEW_NEWEST_POST' => 'View first unread post', 'VIEW_NOTES' => 'View user notes', - 'VIEW_ONLINE_TIME' => 'based on users active over the past %d minute', - 'VIEW_ONLINE_TIMES' => 'based on users active over the past %d minutes', + 'VIEW_ONLINE_TIMES' => array( + 0 => 'based on users active over the past %d minutes', + 1 => 'based on users active over the past %d minute', + 2 => 'based on users active over the past %d minutes', + ), 'VIEW_TOPIC' => 'View topic', 'VIEW_TOPIC_ANNOUNCEMENT' => 'Announcement: ', 'VIEW_TOPIC_GLOBAL' => 'Global Announcement: ', diff --git a/phpBB/language/en/mcp.php b/phpBB/language/en/mcp.php index 16d6db061e..2d351eb9e0 100644 --- a/phpBB/language/en/mcp.php +++ b/phpBB/language/en/mcp.php @@ -120,8 +120,11 @@ $lang = array_merge($lang, array( 'LATEST_WARNING_TIME' => 'Latest warning issued', 'LATEST_WARNINGS' => 'Latest 5 warnings', 'LEAVE_SHADOW' => 'Leave shadow topic in place', - 'LIST_REPORT' => '1 report', - 'LIST_REPORTS' => '%d reports', + 'LIST_REPORTS' => array( + 0 => '%d reports', + 1 => '%d report', + 2 => '%d reports', + ), 'LOCK' => 'Lock', 'LOCK_POST_POST' => 'Lock post', 'LOCK_POST_POST_CONFIRM' => 'Are you sure you want to prevent editing this post?', @@ -251,11 +254,13 @@ $lang = array_merge($lang, array( 'PM_REPORT_CLOSED_SUCCESS' => 'The selected PM report has been closed successfully.', 'PM_REPORT_DELETED_SUCCESS' => 'The selected PM report has been deleted successfully.', 'PM_REPORTED_SUCCESS' => 'This private message has been successfully reported.', - 'PM_REPORT_TOTAL' => 'In total there is 1 PM report to review.', 'PM_REPORTS_CLOSED_SUCCESS' => 'The selected PM reports have been closed successfully.', 'PM_REPORTS_DELETED_SUCCESS'=> 'The selected PM reports have been deleted successfully.', - 'PM_REPORTS_TOTAL' => 'In total there are %d PM reports to review.', - 'PM_REPORTS_ZERO_TOTAL' => 'There are no PM reports to review.', + 'PM_REPORTS_TOTAL' => array( + 0 => 'There are no PM reports to review.', + 1 => 'In total there is 1 PM report to review.', + 2 => 'In total there are %d PM reports to review.', + ), 'PM_REPORT_DETAILS' => 'Private message report details', 'POSTER' => 'Poster', 'POSTS_APPROVED_SUCCESS' => 'The selected posts have been approved.', @@ -282,8 +287,11 @@ $lang = array_merge($lang, array( 'REPORTED_ON_DATE' => 'on', 'REPORTS_CLOSED_SUCCESS' => 'The selected reports have been closed successfully.', 'REPORTS_DELETED_SUCCESS' => 'The selected reports have been deleted successfully.', - 'REPORTS_TOTAL' => 'In total there are %d reports to review.', - 'REPORTS_ZERO_TOTAL' => 'There are no reports to review.', + 'REPORTS_TOTAL' => array( + 0 => 'There are no reports to review.', + 1 => 'In total there is 1 report to review.', + 2 => 'In total there are %d reports to review.', + ), 'REPORT_CLOSED' => 'This report has already been closed.', 'REPORT_CLOSED_SUCCESS' => 'The selected report has been closed successfully.', 'REPORT_DELETED_SUCCESS' => 'The selected report has been deleted successfully.', @@ -295,7 +303,6 @@ $lang = array_merge($lang, array( 'REPORT_POST_EXPLAIN' => 'Use this form to report the selected post to the forum moderators and board administrators. Reporting should generally be used only if the post breaks forum rules.', 'REPORT_REASON' => 'Report reason', 'REPORT_TIME' => 'Report time', - 'REPORT_TOTAL' => 'In total there is 1 report to review.', 'RESYNC' => 'Resync', 'RETURN_MESSAGE' => '%sReturn to the message%s', 'RETURN_NEW_FORUM' => '%sGo to the new forum%s', @@ -353,9 +360,11 @@ $lang = array_merge($lang, array( 'TOPIC_UNLOCKED_SUCCESS' => 'The selected topic has been unlocked.', 'TOTAL_WARNINGS' => 'Total Warnings', - 'UNAPPROVED_POSTS_TOTAL' => 'In total there are %d posts waiting for approval.', - 'UNAPPROVED_POSTS_ZERO_TOTAL' => 'There are no posts waiting for approval.', - 'UNAPPROVED_POST_TOTAL' => 'In total there is 1 post waiting for approval.', + 'UNAPPROVED_POSTS_TOTAL' => array( + 0 => 'There are no posts waiting for approval.', + 1 => 'In total there is 1 post waiting for approval.', + 2 => 'In total there are %d posts waiting for approval.', + ), 'UNLOCK' => 'Unlock', 'UNLOCK_POST' => 'Unlock post', 'UNLOCK_POST_EXPLAIN' => 'Allow editing', diff --git a/phpBB/language/en/memberlist.php b/phpBB/language/en/memberlist.php index 75c375d9eb..8138b61ae2 100644 --- a/phpBB/language/en/memberlist.php +++ b/phpBB/language/en/memberlist.php @@ -93,8 +93,11 @@ $lang = array_merge($lang, array( 'LAST_ACTIVE' => 'Last active', 'LESS_THAN' => 'Less than', - 'LIST_USER' => '1 user', - 'LIST_USERS' => '%d users', + 'LIST_USERS' => array( + 0 => '0 users', + 1 => '%d user', + 2 => '%d users', + ), 'LOGIN_EXPLAIN_LEADERS' => 'The board requires you to be registered and logged in to view the team listing.', 'LOGIN_EXPLAIN_MEMBERLIST' => 'The board requires you to be registered and logged in to access the memberlist.', 'LOGIN_EXPLAIN_SEARCHUSER' => 'The board requires you to be registered and logged in to search users.', @@ -136,6 +139,7 @@ $lang = array_merge($lang, array( 'USER_LAST_REMINDED' => array( 0 => 'No reminder sent at this time', 1 => '%1$d reminder sent
                » %2$s', + 2 => '%1$d reminder sent
                » %2$s', ), 'USER_ONLINE' => 'Online', 'USER_PRESENCE' => 'Board presence', diff --git a/phpBB/language/en/posting.php b/phpBB/language/en/posting.php index 887b9c57dc..01b1b3a9e1 100644 --- a/phpBB/language/en/posting.php +++ b/phpBB/language/en/posting.php @@ -149,8 +149,16 @@ $lang = array_merge($lang, array( 'POLL_MAX_OPTIONS' => 'Options per user', 'POLL_MAX_OPTIONS_EXPLAIN' => 'This is the number of options each user may select when voting.', 'POLL_OPTIONS' => 'Poll options', - 'POLL_OPTIONS_EXPLAIN' => 'Place each option on a new line. You may enter up to %d options.', - 'POLL_OPTIONS_EDIT_EXPLAIN' => 'Place each option on a new line. You may enter up to %d options. If you remove or add options all previous votes will be reset.', + 'POLL_OPTIONS_EXPLAIN' => array( + 0 => 'Place each option on a new line. You may enter up to %d options.', + 1 => 'Place each option on a new line. You may enter %d option.', + 2 => 'Place each option on a new line. You may enter up to %d options.', + ), + 'POLL_OPTIONS_EDIT_EXPLAIN' => array( + 0 => 'Place each option on a new line. You may enter up to %d options. If you remove or add options all previous votes will be reset.', + 1 => 'Place each option on a new line. You may enter %d option. If you remove or add options all previous votes will be reset.', + 2 => 'Place each option on a new line. You may enter up to %d options. If you remove or add options all previous votes will be reset.', + ), 'POLL_QUESTION' => 'Poll question', 'POLL_TITLE_TOO_LONG' => 'The poll title must contain fewer than 100 characters.', 'POLL_TITLE_COMP_TOO_LONG' => 'The parsed size of your poll title is too large, consider removing BBCodes or smilies.', @@ -175,7 +183,11 @@ $lang = array_merge($lang, array( 'POST_TOPIC_AS' => 'Post topic as', 'PROGRESS_BAR' => 'Progress bar', - 'QUOTE_DEPTH_EXCEEDED' => 'You may embed only %1$d quotes within each other.', + 'QUOTE_DEPTH_EXCEEDED' => array( + 0 => 'You may embed only %d quotes within each other.', + 1 => 'You may embed only %d quote within each other.', + 2 => 'You may embed only %d quotes within each other.', + ), 'SAVE' => 'Save', 'SAVE_DATE' => 'Saved at', diff --git a/phpBB/language/en/search.php b/phpBB/language/en/search.php index 6d3a94667a..734b65e575 100644 --- a/phpBB/language/en/search.php +++ b/phpBB/language/en/search.php @@ -41,9 +41,16 @@ $lang = array_merge($lang, array( 'DISPLAY_RESULTS' => 'Display results as', - 'FOUND_SEARCH_MATCH' => 'Search found %d match', - 'FOUND_SEARCH_MATCHES' => 'Search found %d matches', - 'FOUND_MORE_SEARCH_MATCHES' => 'Search found more than %d matches', + 'FOUND_SEARCH_MATCHES' => array( + 0 => 'Search found %d matches', + 1 => 'Search found %d match', + 2 => 'Search found %d matches', + ), + 'FOUND_MORE_SEARCH_MATCHES' => array( + 0 => 'Search found more than %d matches', + 1 => 'Search found more than %d match', + 2 => 'Search found more than %d matches', + ), 'GLOBAL' => 'Global announcement', @@ -100,5 +107,9 @@ $lang = array_merge($lang, array( 'SORT_POST_SUBJECT' => 'Post subject', 'SORT_TIME' => 'Post time', - 'TOO_FEW_AUTHOR_CHARS' => 'You must specify at least %d characters of the authors name.', + 'TOO_FEW_AUTHOR_CHARS' => array( + 0 => 'You must specify at least %d characters of the authors name.', + 1 => 'You must specify at least %d character of the authors name.', + 2 => 'You must specify at least %d characters of the authors name.', + ), )); diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index c8ffbf31c0..fb26c2f8e1 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -202,13 +202,21 @@ $lang = array_merge($lang, array( 'FOES_EXPLAIN' => 'Foes are users which will be ignored by default. Posts by these users will not be fully visible. Personal messages from foes are still permitted. Please note that you cannot ignore moderators or administrators.', 'FOES_UPDATED' => 'Your foes list has been updated successfully.', 'FOLDER_ADDED' => 'Folder successfully added.', - 'FOLDER_MESSAGE_STATUS' => '%1$d from %2$d messages stored', + 'FOLDER_MESSAGE_STATUS' => array( + 0 => '%2$d from %1$d messages stored', + 1 => '%2$d from %1$d message stored', + 2 => '%2$d from %1$d messages stored', + ), 'FOLDER_NAME_EMPTY' => 'You must enter a name for this folder.', 'FOLDER_NAME_EXIST' => 'Folder %s already exists.', 'FOLDER_OPTIONS' => 'Folder options', 'FOLDER_RENAMED' => 'Folder successfully renamed.', 'FOLDER_REMOVED' => 'Folder successfully removed.', - 'FOLDER_STATUS_MSG' => 'Folder is %1$d%% full (%2$d from %3$d messages stored)', + 'FOLDER_STATUS_MSG' => array( + 0 => 'Folder is %3$d%% full (%2$d from %1$d messages stored)', + 1 => 'Folder is %3$d%% full (%2$d from %1$d message stored)', + 2 => 'Folder is %3$d%% full (%2$d from %1$d messages stored)', + ), 'FORWARD_PM' => 'Forward PM', 'FORCE_PASSWORD_EXPLAIN' => 'Before you may continue browsing the board you are required to change your password.', 'FRIEND_MESSAGE' => 'Message from friend', @@ -292,8 +300,11 @@ $lang = array_merge($lang, array( 'NOT_ADDED_FOES_SELF' => 'You cannot add yourself to the foes list.', 'NOT_AGREE' => 'I do not agree to these terms', 'NOT_ENOUGH_SPACE_FOLDER' => 'The destination folder “%s†seems to be full. The requested action has not been taken.', - 'NOT_MOVED_MESSAGE' => 'You have 1 private message currently on hold because of full folder.', - 'NOT_MOVED_MESSAGES' => 'You have %d private messages currently on hold because of full folder.', + 'NOT_MOVED_MESSAGES' => array( + 0 => 'You have %d private messages currently on hold because of full folder.', + 1 => 'You have %d private message currently on hold because of full folder.', + 2 => 'You have %d private messages currently on hold because of full folder.', + ), 'NO_ACTION_MODE' => 'No message action specified.', 'NO_AUTHOR' => 'No author defined for this message', 'NO_AVATAR_CATEGORY' => 'None', @@ -388,8 +399,11 @@ $lang = array_merge($lang, array( 'RULE_ALREADY_DEFINED' => 'This rule was defined previously.', 'RULE_DELETED' => 'Rule successfully removed.', 'RULE_NOT_DEFINED' => 'Rule not correctly specified.', - 'RULE_REMOVED_MESSAGE' => 'One private message had been removed due to private message filters.', - 'RULE_REMOVED_MESSAGES' => '%d private messages were removed due to private message filters.', + 'RULE_REMOVED_MESSAGES' => array( + 0 => '%d private messages were removed due to private message filters.', + 1 => '%d private message was removed due to private message filters.', + 2 => '%d private messages were removed due to private message filters.', + ), 'SAME_PASSWORD_ERROR' => 'The new password you entered is the same as your current password.', 'SEARCH_YOUR_POSTS' => 'Show your posts', @@ -489,8 +503,11 @@ $lang = array_merge($lang, array( 'VIEW_NEXT_PM' => 'Next PM', 'VIEW_PM' => 'View message', 'VIEW_PM_INFO' => 'Message details', - 'VIEW_PM_MESSAGE' => '1 message', - 'VIEW_PM_MESSAGES' => '%d messages', + 'VIEW_PM_MESSAGES' => array( + 0 => '%d messages', + 1 => '%d message', + 2 => '%d messages', + ), 'VIEW_PREVIOUS_HISTORY' => 'Previous PM in history', 'VIEW_PREVIOUS_PM' => 'Previous PM', 'VIEW_SIGS' => 'Display signatures', diff --git a/phpBB/language/en/viewforum.php b/phpBB/language/en/viewforum.php index 6905a7a629..d5eea0f4e3 100644 --- a/phpBB/language/en/viewforum.php +++ b/phpBB/language/en/viewforum.php @@ -64,6 +64,9 @@ $lang = array_merge($lang, array( 'UNREAD_POSTS_LOCKED' => 'Unread posts [ Locked ]', 'VIEW_FORUM' => 'View forum', - 'VIEW_FORUM_TOPIC' => '1 topic', - 'VIEW_FORUM_TOPICS' => '%d topics', + 'VIEW_FORUM_TOPICS' => array( + 0 => '%d topics', + 1 => '%d topic', + 2 => '%d topics', + ), )); diff --git a/phpBB/language/en/viewtopic.php b/phpBB/language/en/viewtopic.php index 9e69d657b7..1e686b69ab 100644 --- a/phpBB/language/en/viewtopic.php +++ b/phpBB/language/en/viewtopic.php @@ -53,8 +53,11 @@ $lang = array_merge($lang, array( 'DELETE_TOPIC' => 'Delete topic', 'DOWNLOAD_NOTICE' => 'You do not have the required permissions to view the files attached to this post.', - 'EDITED_TIMES_TOTAL' => 'Last edited by %1$s on %2$s, edited %3$d times in total.', - 'EDITED_TIME_TOTAL' => 'Last edited by %1$s on %2$s, edited %3$d time in total.', + 'EDITED_TIMES_TOTAL' => array( + 0 => 'Last edited by %2$s on %3$s, edited %1$d times in total.', + 1 => 'Last edited by %2$s on %3$s, edited %1$d time in total.', + 2 => 'Last edited by %2$s on %3$s, edited %1$d times in total.', + ) 'EMAIL_TOPIC' => 'E-mail friend', 'ERROR_NO_ATTACHMENT' => 'The selected attachment does not exist anymore.', @@ -70,8 +73,11 @@ $lang = array_merge($lang, array( 'MAKE_GLOBAL' => 'Change to “Globalâ€', 'MAKE_NORMAL' => 'Change to “Standard Topicâ€', 'MAKE_STICKY' => 'Change to “Stickyâ€', - 'MAX_OPTIONS_SELECT' => 'You may select up to %d options', - 'MAX_OPTION_SELECT' => 'You may select 1 option', + 'MAX_OPTIONS_SELECT' => array( + 0 => 'You may select up to %d options', + 1 => 'You may select %d option', + 2 => 'You may select up to %d options', + ), 'MISSING_INLINE_ATTACHMENT' => 'The attachment %s is no longer available', 'MOVE_TOPIC' => 'Move topic', @@ -105,8 +111,11 @@ $lang = array_merge($lang, array( 'VIEW_NEXT_TOPIC' => 'Next topic', 'VIEW_PREVIOUS_TOPIC' => 'Previous topic', 'VIEW_RESULTS' => 'View results', - 'VIEW_TOPIC_POST' => '1 post', - 'VIEW_TOPIC_POSTS' => '%d posts', + 'VIEW_TOPIC_POSTS' => array( + 0 => '%d posts', + 1 => '%d post', + 2 => '%d posts', + ), 'VIEW_UNREAD_POST' => 'First unread post', 'VISIT_WEBSITE' => 'WWW', 'VOTE_SUBMITTED' => 'Your vote has been cast.', diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index 556db2fa5d..ff22b860ff 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -1586,7 +1586,7 @@ switch ($mode) $template->assign_vars(array( 'PAGINATION' => generate_pagination($pagination_url, $total_users, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($total_users, $config['topics_per_page'], $start), - 'TOTAL_USERS' => ($total_users == 1) ? $user->lang['LIST_USER'] : sprintf($user->lang['LIST_USERS'], $total_users), + 'TOTAL_USERS' => $user->lang('LIST_USERS', (int) $total_users), 'PROFILE_IMG' => $user->img('icon_user_profile', $user->lang['PROFILE']), 'PM_IMG' => $user->img('icon_contact_pm', $user->lang['SEND_PRIVATE_MESSAGE']), diff --git a/phpBB/posting.php b/phpBB/posting.php index 207ac32a3d..4423737b55 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -1154,8 +1154,8 @@ if (!sizeof($error) && $preview) 'POLL_QUESTION' => $parse_poll->message, 'L_POLL_LENGTH' => ($post_data['poll_length']) ? sprintf($user->lang['POLL_RUN_TILL'], $user->format_date($poll_end)) : '', - 'L_MAX_VOTES' => ($post_data['poll_max_options'] == 1) ? $user->lang['MAX_OPTION_SELECT'] : sprintf($user->lang['MAX_OPTIONS_SELECT'], $post_data['poll_max_options'])) - ); + 'L_MAX_VOTES' => $user->lang('MAX_OPTIONS_SELECT', (int) $post_data['poll_max_options']), + )); $parse_poll->message = implode("\n", $post_data['poll_options']); $parse_poll->format_display($post_data['enable_bbcode'], $post_data['enable_urls'], $post_data['enable_smilies']); @@ -1430,7 +1430,7 @@ if (($mode == 'post' || ($mode == 'edit' && $post_id == $post_data['topic_first_ 'S_POLL_DELETE' => ($mode == 'edit' && sizeof($post_data['poll_options']) && ((!$post_data['poll_last_vote'] && $post_data['poster_id'] == $user->data['user_id'] && $auth->acl_get('f_delete', $forum_id)) || $auth->acl_get('m_delete', $forum_id))), 'S_POLL_DELETE_CHECKED' => (!empty($poll_delete)) ? true : false, - 'L_POLL_OPTIONS_EXPLAIN' => sprintf($user->lang['POLL_OPTIONS_' . (($mode == 'edit') ? 'EDIT_' : '') . 'EXPLAIN'], $config['max_poll_options']), + 'L_POLL_OPTIONS_EXPLAIN' => $user->lang('POLL_OPTIONS_' . (($mode == 'edit') ? 'EDIT_' : '') . 'EXPLAIN', (int) $config['max_poll_options']), 'VOTE_CHANGE_CHECKED' => (!empty($post_data['poll_vote_change'])) ? ' checked="checked"' : '', 'POLL_TITLE' => (isset($post_data['poll_title'])) ? $post_data['poll_title'] : '', diff --git a/phpBB/search.php b/phpBB/search.php index c6189051a3..6626cd5672 100644 --- a/phpBB/search.php +++ b/phpBB/search.php @@ -136,7 +136,7 @@ if ($keywords || $author || $author_id || $search_id || $submit) { if ((strpos($author, '*') !== false) && (utf8_strlen(str_replace(array('*', '%'), '', $author)) < $config['min_search_author_chars'])) { - trigger_error(sprintf($user->lang['TOO_FEW_AUTHOR_CHARS'], $config['min_search_author_chars'])); + trigger_error($user->lang('TOO_FEW_AUTHOR_CHARS', (int) $config['min_search_author_chars'])); } $sql_where = (strpos($author, '*') !== false) ? ' username_clean ' . $db->sql_like_expression(str_replace('*', $db->any_char, utf8_clean_string($author))) : " username_clean = '" . $db->sql_escape(utf8_clean_string($author)) . "'"; @@ -544,11 +544,11 @@ if ($keywords || $author || $author_id || $search_id || $submit) { // limit the number to 1000 for pre-made searches $total_match_count--; - $l_search_matches = sprintf($user->lang['FOUND_MORE_SEARCH_MATCHES'], $total_match_count); + $l_search_matches = $user->lang('FOUND_MORE_SEARCH_MATCHES', (int) $total_match_count); } else { - $l_search_matches = ($total_match_count == 1) ? sprintf($user->lang['FOUND_SEARCH_MATCH'], $total_match_count) : sprintf($user->lang['FOUND_SEARCH_MATCHES'], $total_match_count); + $l_search_matches = $user->lang('FOUND_SEARCH_MATCHES', (int) $total_match_count); } // define some vars for urls diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php index 3b10d828d3..7d3b9f56ed 100644 --- a/phpBB/viewforum.php +++ b/phpBB/viewforum.php @@ -581,8 +581,8 @@ $total_topic_count = $topics_count - sizeof($global_announce_forums); $template->assign_vars(array( 'PAGINATION' => generate_pagination(append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id" . ((strlen($u_sort_param)) ? "&$u_sort_param" : '')), $topics_count, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($topics_count, $config['topics_per_page'], $start), - 'TOTAL_TOPICS' => ($s_display_active) ? false : (($total_topic_count == 1) ? $user->lang['VIEW_FORUM_TOPIC'] : sprintf($user->lang['VIEW_FORUM_TOPICS'], $total_topic_count))) -); + 'TOTAL_TOPICS' => ($s_display_active) ? false : $user->lang('VIEW_FORUM_TOPICS', (int) $total_topic_count), +)); $topic_list = ($store_reverse) ? array_merge($announcement_list, array_reverse($topic_list)) : array_merge($announcement_list, $topic_list); $topic_tracking_info = $tracking_topics = array(); diff --git a/phpBB/viewonline.php b/phpBB/viewonline.php index 27038a975e..6b0da3ef97 100644 --- a/phpBB/viewonline.php +++ b/phpBB/viewonline.php @@ -343,32 +343,6 @@ while ($row = $db->sql_fetchrow($result)) $db->sql_freeresult($result); unset($prev_id, $prev_ip); -// Generate reg/hidden/guest online text -$vars_online = array( - 'REG' => array('logged_visible_online', 'l_r_user_s'), - 'HIDDEN'=> array('logged_hidden_online', 'l_h_user_s'), - 'GUEST' => array('guest_counter', 'l_g_user_s') -); - -foreach ($vars_online as $l_prefix => $var_ary) -{ - switch ($$var_ary[0]) - { - case 0: - $$var_ary[1] = $user->lang[$l_prefix . '_USERS_ZERO_ONLINE']; - break; - - case 1: - $$var_ary[1] = $user->lang[$l_prefix . '_USER_ONLINE']; - break; - - default: - $$var_ary[1] = $user->lang[$l_prefix . '_USERS_ONLINE']; - break; - } -} -unset($vars_online); - $pagination = generate_pagination(append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&sk=$sort_key&sd=$sort_dir"), $counter, $config['topics_per_page'], $start); $order_legend = ($config['legend_sort_groupname']) ? 'group_name' : 'group_legend'; @@ -415,8 +389,8 @@ meta_refresh(60, append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_gue // Send data to template $template->assign_vars(array( - 'TOTAL_REGISTERED_USERS_ONLINE' => sprintf($l_r_user_s, $logged_visible_online) . sprintf($l_h_user_s, $logged_hidden_online), - 'TOTAL_GUEST_USERS_ONLINE' => sprintf($l_g_user_s, $guest_counter), + 'TOTAL_REGISTERED_USERS_ONLINE' => $user->lang('REG_USERS_ONLINE', (int) $logged_visible_online, $user->lang('HIDDEN_USERS_ONLINE', (int) $logged_hidden_online)), + 'TOTAL_GUEST_USERS_ONLINE' => $user->lang('GUEST_USERS_ONLINE', (int) $guest_counter), 'LEGEND' => $legend, 'PAGINATION' => $pagination, 'PAGE_NUMBER' => on_page($counter, $config['topics_per_page'], $start), diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index e78ba73cd7..a56012bcf2 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -578,7 +578,7 @@ $template->assign_vars(array( 'PAGINATION' => $pagination, 'PAGE_NUMBER' => on_page($total_posts, $config['posts_per_page'], $start), - 'TOTAL_POSTS' => ($total_posts == 1) ? $user->lang['VIEW_TOPIC_POST'] : sprintf($user->lang['VIEW_TOPIC_POSTS'], $total_posts), + 'TOTAL_POSTS' => $user->lang('VIEW_TOPIC_POSTS', (int) $total_posts), 'U_MCP' => ($auth->acl_get('m_', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=main&mode=topic_view&f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start") . ((strlen($u_sort_param)) ? "&$u_sort_param" : ''), true, $user->session_id) : '', 'MODERATORS' => (isset($forum_moderators[$forum_id]) && sizeof($forum_moderators[$forum_id])) ? implode(', ', $forum_moderators[$forum_id]) : '', @@ -854,7 +854,7 @@ if (!empty($topic_data['poll_start'])) 'POLL_LEFT_CAP_IMG' => $user->img('poll_left'), 'POLL_RIGHT_CAP_IMG'=> $user->img('poll_right'), - 'L_MAX_VOTES' => ($topic_data['poll_max_options'] == 1) ? $user->lang['MAX_OPTION_SELECT'] : sprintf($user->lang['MAX_OPTIONS_SELECT'], $topic_data['poll_max_options']), + 'L_MAX_VOTES' => $user->lang('MAX_OPTIONS_SELECT', (int) $topic_data['poll_max_options']), 'L_POLL_LENGTH' => ($topic_data['poll_length']) ? sprintf($user->lang[($poll_end > time()) ? 'POLL_RUN_TILL' : 'POLL_ENDED_AT'], $user->format_date($poll_end)) : '', 'S_HAS_POLL' => true, @@ -1382,8 +1382,6 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i) unset($post_storage_list); } - $l_edit_time_total = ($row['post_edit_count'] == 1) ? $user->lang['EDITED_TIME_TOTAL'] : $user->lang['EDITED_TIMES_TOTAL']; - if ($row['post_edit_reason']) { // User having edited the post also being the post author? @@ -1396,7 +1394,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i) $display_username = get_username_string('full', $row['post_edit_user'], $post_edit_list[$row['post_edit_user']]['username'], $post_edit_list[$row['post_edit_user']]['user_colour']); } - $l_edited_by = sprintf($l_edit_time_total, $display_username, $user->format_date($row['post_edit_time'], false, true), $row['post_edit_count']); + $l_edited_by = $user->lang('EDITED_TIMES_TOTAL', (int) $row['post_edit_count'], $display_username, $user->format_date($row['post_edit_time'], false, true)); } else { @@ -1415,7 +1413,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i) $display_username = get_username_string('full', $row['post_edit_user'], $user_cache[$row['post_edit_user']]['username'], $user_cache[$row['post_edit_user']]['user_colour']); } - $l_edited_by = sprintf($l_edit_time_total, $display_username, $user->format_date($row['post_edit_time'], false, true), $row['post_edit_count']); + $l_edited_by = $user->lang('EDITED_TIMES_TOTAL', (int) $row['post_edit_count'], $display_username, $user->format_date($row['post_edit_time'], false, true)); } } else -- cgit v1.2.1 From 179662e949967090724c5e14ea4d4d399886a38a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 20 Sep 2011 01:33:33 +0200 Subject: [ticket/10345] Use the plural function in some more places. I added two function avatar_explanation_string() and avatar_error_wrong_size() for easier handling of the "pixels"-languages, as they are used quite often. PHPBB3-10345 --- phpBB/feed.php | 2 +- phpBB/includes/acp/acp_attachments.php | 7 +++--- phpBB/includes/acp/acp_groups.php | 6 ++--- phpBB/includes/acp/acp_icons.php | 20 +++------------ phpBB/includes/acp/acp_search.php | 4 +-- phpBB/includes/acp/acp_users.php | 6 ++--- phpBB/includes/functions_profile_fields.php | 12 ++++----- phpBB/includes/functions_upload.php | 8 +++++- phpBB/includes/functions_user.php | 31 ++++++++++++++++++++--- phpBB/includes/message_parser.php | 18 ++++++------- phpBB/includes/ucp/ucp_groups.php | 8 +++--- phpBB/includes/ucp/ucp_main.php | 4 +-- phpBB/includes/ucp/ucp_pm_compose.php | 2 +- phpBB/includes/ucp/ucp_pm_options.php | 2 +- phpBB/includes/ucp/ucp_profile.php | 4 +-- phpBB/index.php | 2 +- phpBB/language/en/acp/groups.php | 6 +++-- phpBB/language/en/acp/posting.php | 32 ++++++++++++++--------- phpBB/language/en/acp/search.php | 11 ++++++-- phpBB/language/en/common.php | 12 ++++++++- phpBB/language/en/posting.php | 39 +++++++++++++++++++++-------- phpBB/language/en/search.php | 2 +- phpBB/language/en/ucp.php | 20 ++++++++++----- phpBB/memberlist.php | 4 +-- phpBB/posting.php | 6 ++--- phpBB/search.php | 2 +- 26 files changed, 169 insertions(+), 101 deletions(-) (limited to 'phpBB') diff --git a/phpBB/feed.php b/phpBB/feed.php index 8d33a358a5..e490363594 100644 --- a/phpBB/feed.php +++ b/phpBB/feed.php @@ -1107,7 +1107,7 @@ class phpbb_feed_forums extends phpbb_feed_base global $user; $item_row['statistics'] = $user->lang('TOTAL_TOPICS', (int) $row['forum_topics']) - . ' ' . $this->separator_stats . ' ' . sprintf($user->lang['TOTAL_POSTS_OTHER'], $row['forum_posts']); + . ' ' . $this->separator_stats . ' ' . $user->lang('TOTAL_POSTS_OTHER', (int) $row['forum_posts']); } } } diff --git a/phpBB/includes/acp/acp_attachments.php b/phpBB/includes/acp/acp_attachments.php index c62fefae46..4295aa9d9f 100644 --- a/phpBB/includes/acp/acp_attachments.php +++ b/phpBB/includes/acp/acp_attachments.php @@ -1159,7 +1159,7 @@ class acp_attachments // Issue warning message if files stats are inaccurate if (($num_files != $num_files_real) || ($total_size != $total_size_real)) { - $error[] = sprintf($user->lang['FILES_STATS_WRONG'], $num_files_real, get_formatted_filesize($total_size_real)); + $error[] = $user->lang('FILES_STATS_WRONG', (int) $num_files_real, get_formatted_filesize($total_size_real)); $template->assign_vars(array( 'S_ACTION_OPTIONS' => ($auth->acl_get('a_board')) ? true : false, @@ -1244,8 +1244,7 @@ class acp_attachments $row['extension'] = strtolower(trim((string) $row['extension'])); $comment = ($row['attach_comment'] && !$row['in_message']) ? str_replace(array("\n", "\r"), array('
                ', "\n"), $row['attach_comment']) : ''; $display_cat = $extensions[$row['extension']]['display_cat']; - $l_downloaded_viewed = ($display_cat == ATTACHMENT_CATEGORY_NONE) ? 'DOWNLOAD_COUNT' : 'VIEWED_COUNT'; - $l_download_count = (!isset($row['download_count']) || (int) $row['download_count'] == 0) ? $user->lang[$l_downloaded_viewed . '_NONE'] : (((int) $row['download_count'] == 1) ? sprintf($user->lang[$l_downloaded_viewed], $row['download_count']) : sprintf($user->lang[$l_downloaded_viewed . 'S'], $row['download_count'])); + $l_downloaded_viewed = ($display_cat == ATTACHMENT_CATEGORY_NONE) ? 'DOWNLOAD_COUNTS' : 'VIEWED_COUNTS'; $template->assign_block_vars('attachments', array( 'ATTACHMENT_POSTER' => get_username_string('full', (int) $row['poster_id'], (string) $row['username'], (string) $row['user_colour'], (string) $row['username']), @@ -1261,7 +1260,7 @@ class acp_attachments 'TOPIC_ID' => (int) $row['topic_id'], 'POST_IDS' => (!empty($post_ids[$row['attach_id']])) ? (int) $post_ids[$row['attach_id']] : '', - 'L_DOWNLOAD_COUNT' => $l_download_count, + 'L_DOWNLOAD_COUNT' => $user->lang($l_downloaded_viewed, (int) $row['download_count']), 'S_IN_MESSAGE' => (bool) $row['in_message'], diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php index 9aa54bed89..ea4d5f35cb 100644 --- a/phpBB/includes/acp/acp_groups.php +++ b/phpBB/includes/acp/acp_groups.php @@ -371,7 +371,7 @@ class acp_groups { if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height']) { - $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']); + $error[] = avatar_error_wrong_size($data['width'], $data['height']); } } @@ -381,7 +381,7 @@ class acp_groups { if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height']) { - $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']); + $error[] = avatar_error_wrong_size($data['width'], $data['height']); } } } @@ -627,7 +627,7 @@ class acp_groups 'U_BACK' => $u_back, 'U_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&name=group_colour'), 'U_ACTION' => "{$this->u_action}&action=$action&g=$group_id", - 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024)), + 'L_AVATAR_EXPLAIN' => avatar_explanation_string(), )); return; diff --git a/phpBB/includes/acp/acp_icons.php b/phpBB/includes/acp/acp_icons.php index 98aef45892..e02124fb42 100644 --- a/phpBB/includes/acp/acp_icons.php +++ b/phpBB/includes/acp/acp_icons.php @@ -487,21 +487,7 @@ class acp_icons $cache->destroy('_icons'); $cache->destroy('sql', $table); - $level = E_USER_NOTICE; - switch ($icons_updated) - { - case 0: - $suc_lang = "{$lang}_NONE"; - $level = E_USER_WARNING; - break; - - case 1: - $suc_lang = "{$lang}_ONE"; - break; - - default: - $suc_lang = $lang; - } + $level = ($icons_updated) ? E_USER_NOTICE : E_USER_WARNING; $errormsgs = ''; foreach ($errors as $img => $error) { @@ -509,11 +495,11 @@ class acp_icons } if ($action == 'modify') { - trigger_error($user->lang[$suc_lang . '_EDITED'] . $errormsgs . adm_back_link($this->u_action), $level); + trigger_error($user->lang($lang . '_EDITED', $icons_updated) . $errormsgs . adm_back_link($this->u_action), $level); } else { - trigger_error($user->lang[$suc_lang . '_ADDED'] . $errormsgs . adm_back_link($this->u_action), $level); + trigger_error($user->lang($lang . '_ADDED', $icons_updated) . $errormsgs . adm_back_link($this->u_action), $level); } break; diff --git a/phpBB/includes/acp/acp_search.php b/phpBB/includes/acp/acp_search.php index ab604cd7cd..2de76187d5 100644 --- a/phpBB/includes/acp/acp_search.php +++ b/phpBB/includes/acp/acp_search.php @@ -338,7 +338,7 @@ class acp_search $totaltime = $mtime[0] + $mtime[1] - $starttime; $rows_per_second = $row_count / $totaltime; meta_refresh(1, append_sid($this->u_action . '&action=delete&skip_rows=' . $post_counter)); - trigger_error(sprintf($user->lang['SEARCH_INDEX_DELETE_REDIRECT'], $post_counter, $row_count, $rows_per_second)); + trigger_error($user->lang('SEARCH_INDEX_DELETE_REDIRECT', (int) $row_count, $post_counter, $rows_per_second)); } } @@ -428,7 +428,7 @@ class acp_search $totaltime = $mtime[0] + $mtime[1] - $starttime; $rows_per_second = $row_count / $totaltime; meta_refresh(1, append_sid($this->u_action . '&action=create&skip_rows=' . $post_counter)); - trigger_error(sprintf($user->lang['SEARCH_INDEX_CREATE_REDIRECT'], $post_counter, $row_count, $rows_per_second)); + trigger_error($user->lang('SEARCH_INDEX_CREATE_REDIRECT', (int) $row_count, $post_counter) . $user->lang('SEARCH_INDEX_CREATE_REDIRECT_RATE', $rows_per_second)); } } diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 38bcbf5ee3..3ae1278396 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1748,8 +1748,8 @@ class acp_users 'USER_AVATAR_WIDTH' => $user_row['user_avatar_width'], 'USER_AVATAR_HEIGHT' => $user_row['user_avatar_height'], - 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], round($config['avatar_filesize'] / 1024))) - ); + 'L_AVATAR_EXPLAIN' => avatar_explanation_string() + )); break; @@ -1881,7 +1881,7 @@ class acp_users 'FLASH_STATUS' => ($config['allow_sig_flash']) ? $user->lang['FLASH_IS_ON'] : $user->lang['FLASH_IS_OFF'], 'URL_STATUS' => ($config['allow_sig_links']) ? $user->lang['URL_IS_ON'] : $user->lang['URL_IS_OFF'], - 'L_SIGNATURE_EXPLAIN' => sprintf($user->lang['SIGNATURE_EXPLAIN'], $config['max_sig_chars']), + 'L_SIGNATURE_EXPLAIN' => $user->lang('SIGNATURE_EXPLAIN', (int) $config['max_sig_chars']), 'S_BBCODE_ALLOWED' => $config['allow_sig_bbcode'], 'S_SMILIES_ALLOWED' => $config['allow_sig_smilies'], diff --git a/phpBB/includes/functions_profile_fields.php b/phpBB/includes/functions_profile_fields.php index ec29a1732d..130a4dcae8 100644 --- a/phpBB/includes/functions_profile_fields.php +++ b/phpBB/includes/functions_profile_fields.php @@ -315,32 +315,32 @@ class custom_profile case 'FIELD_INVALID_DATE': case 'FIELD_INVALID_VALUE': case 'FIELD_REQUIRED': - $error = sprintf($user->lang[$cp_result], $row['lang_name']); + $error = $user->lang($cp_result, $row['lang_name']); break; case 'FIELD_TOO_SHORT': case 'FIELD_TOO_SMALL': - $error = sprintf($user->lang[$cp_result], $row['lang_name'], $row['field_minlen']); + $error = $user->lang($cp_result, (int) $row['field_minlen'], $row['lang_name']); break; case 'FIELD_TOO_LONG': case 'FIELD_TOO_LARGE': - $error = sprintf($user->lang[$cp_result], $row['lang_name'], $row['field_maxlen']); + $error = $user->lang($cp_result, (int) $row['field_maxlen'], $row['lang_name']); break; case 'FIELD_INVALID_CHARS': switch ($row['field_validation']) { case '[0-9]+': - $error = sprintf($user->lang[$cp_result . '_NUMBERS_ONLY'], $row['lang_name']); + $error = $user->lang($cp_result . '_NUMBERS_ONLY', $row['lang_name']); break; case '[\w]+': - $error = sprintf($user->lang[$cp_result . '_ALPHA_ONLY'], $row['lang_name']); + $error = $user->lang($cp_result . '_ALPHA_ONLY', $row['lang_name']); break; case '[\w_\+\. \-\[\]]+': - $error = sprintf($user->lang[$cp_result . '_SPACERS_ONLY'], $row['lang_name']); + $error = $user->lang($cp_result . '_SPACERS_ONLY', $row['lang_name']); break; } break; diff --git a/phpBB/includes/functions_upload.php b/phpBB/includes/functions_upload.php index f648c585f6..2322aa77bf 100644 --- a/phpBB/includes/functions_upload.php +++ b/phpBB/includes/functions_upload.php @@ -427,7 +427,13 @@ class filespec if (!$this->upload->valid_dimensions($this)) { - $this->error[] = sprintf($user->lang[$this->upload->error_prefix . 'WRONG_SIZE'], $this->upload->min_width, $this->upload->min_height, $this->upload->max_width, $this->upload->max_height, $this->width, $this->height); + $this->error[] = $user->lang($this->upload->error_prefix . 'WRONG_SIZE', + $user->lang('PIXELS', (int) $this->upload->min_width), + $user->lang('PIXELS', (int) $this->upload->min_height), + $user->lang('PIXELS', (int) $this->upload->max_width), + $user->lang('PIXELS', (int) $this->upload->max_height), + $user->lang('PIXELS', (int) $this->width), + $user->lang('PIXELS', (int) $this->height)); return false; } diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 930cd4625f..e3537fe328 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -2039,7 +2039,7 @@ function avatar_remote($data, &$error) { if ($width > $config['avatar_max_width'] || $height > $config['avatar_max_height']) { - $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $width, $height); + $error[] = avatar_error_wrong_size($width, $height); return false; } } @@ -2048,7 +2048,7 @@ function avatar_remote($data, &$error) { if ($width < $config['avatar_min_width'] || $height < $config['avatar_min_height']) { - $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $width, $height); + $error[] = avatar_error_wrong_size($width, $height); return false; } } @@ -2388,7 +2388,7 @@ function avatar_process_user(&$error, $custom_userdata = false, $can_upload = nu { if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height']) { - $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']); + $error[] = avatar_error_wrong_size($data['width'], $data['height']); } } @@ -2398,7 +2398,7 @@ function avatar_process_user(&$error, $custom_userdata = false, $can_upload = nu { if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height']) { - $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']); + $error[] = avatar_error_wrong_size($data['width'], $data['height']); } } } @@ -2444,6 +2444,29 @@ function avatar_process_user(&$error, $custom_userdata = false, $can_upload = nu return (sizeof($error)) ? false : true; } +function avatar_error_wrong_size($width, $height) +{ + global $config, $user; + + return $user->lang('AVATAR_WRONG_SIZE', + $user->lang('PIXELS', (int) $config['avatar_min_width']), + $user->lang('PIXELS', (int) $config['avatar_min_height']), + $user->lang('PIXELS', (int) $config['avatar_max_width']), + $user->lang('PIXELS', (int) $config['avatar_max_height']), + $user->lang('PIXELS', (int) $width), + $user->lang('PIXELS', (int) $height)); +} + +function avatar_explanation_string() +{ + global $config, $user; + + return $user->lang('AVATAR_EXPLAIN', + $user->lang('PIXELS', (int) $config['avatar_max_width']), + $user->lang('PIXELS', (int) $config['avatar_max_height']), + round($config['avatar_filesize'] / 1024)); +} + // // Usergroup functions // diff --git a/phpBB/includes/message_parser.php b/phpBB/includes/message_parser.php index cb9a9d7d28..5e8732e94d 100644 --- a/phpBB/includes/message_parser.php +++ b/phpBB/includes/message_parser.php @@ -210,7 +210,7 @@ class bbcode_firstpass extends bbcode if ($config['max_' . $this->mode . '_font_size'] && $config['max_' . $this->mode . '_font_size'] < $stx) { - $this->warn_msg[] = sprintf($user->lang['MAX_FONT_SIZE_EXCEEDED'], $config['max_' . $this->mode . '_font_size']); + $this->warn_msg[] = $user->lang('MAX_FONT_SIZE_EXCEEDED', (int) $config['max_' . $this->mode . '_font_size']); return '[size=' . $stx . ']' . $in . '[/size]'; } @@ -319,13 +319,13 @@ class bbcode_firstpass extends bbcode if ($config['max_' . $this->mode . '_img_height'] && $config['max_' . $this->mode . '_img_height'] < $stats[1]) { $error = true; - $this->warn_msg[] = sprintf($user->lang['MAX_IMG_HEIGHT_EXCEEDED'], $config['max_' . $this->mode . '_img_height']); + $this->warn_msg[] = $user->lang('MAX_IMG_HEIGHT_EXCEEDED', (int) $config['max_' . $this->mode . '_img_height']); } if ($config['max_' . $this->mode . '_img_width'] && $config['max_' . $this->mode . '_img_width'] < $stats[0]) { $error = true; - $this->warn_msg[] = sprintf($user->lang['MAX_IMG_WIDTH_EXCEEDED'], $config['max_' . $this->mode . '_img_width']); + $this->warn_msg[] = $user->lang('MAX_IMG_WIDTH_EXCEEDED', (int) $config['max_' . $this->mode . '_img_width']); } } } @@ -374,13 +374,13 @@ class bbcode_firstpass extends bbcode if ($config['max_' . $this->mode . '_img_height'] && $config['max_' . $this->mode . '_img_height'] < $height) { $error = true; - $this->warn_msg[] = sprintf($user->lang['MAX_FLASH_HEIGHT_EXCEEDED'], $config['max_' . $this->mode . '_img_height']); + $this->warn_msg[] = $user->lang('MAX_FLASH_HEIGHT_EXCEEDED', (int) $config['max_' . $this->mode . '_img_height']); } if ($config['max_' . $this->mode . '_img_width'] && $config['max_' . $this->mode . '_img_width'] < $width) { $error = true; - $this->warn_msg[] = sprintf($user->lang['MAX_FLASH_WIDTH_EXCEEDED'], $config['max_' . $this->mode . '_img_width']); + $this->warn_msg[] = $user->lang('MAX_FLASH_WIDTH_EXCEEDED', (int) $config['max_' . $this->mode . '_img_width']); } } @@ -1117,7 +1117,7 @@ class parse_message extends bbcode_firstpass // Maximum message length check. 0 disables this check completely. if ((int) $config['max_' . $mode . '_chars'] > 0 && $message_length > (int) $config['max_' . $mode . '_chars']) { - $this->warn_msg[] = sprintf($user->lang['TOO_MANY_CHARS_' . strtoupper($mode)], $message_length, (int) $config['max_' . $mode . '_chars']); + $this->warn_msg[] = $user->lang('TOO_MANY_CHARS_' . strtoupper($mode), $message_length, (int) $config['max_' . $mode . '_chars']); return (!$update_this_message) ? $return_message : $this->warn_msg; } @@ -1126,7 +1126,7 @@ class parse_message extends bbcode_firstpass { if (!$message_length || $message_length < (int) $config['min_post_chars']) { - $this->warn_msg[] = (!$message_length) ? $user->lang['TOO_FEW_CHARS'] : sprintf($user->lang['TOO_FEW_CHARS_LIMIT'], $message_length, (int) $config['min_post_chars']); + $this->warn_msg[] = (!$message_length) ? $user->lang['TOO_FEW_CHARS'] : $user->lang('TOO_FEW_CHARS_LIMIT', $message_length, (int) $config['min_post_chars']); return (!$update_this_message) ? $return_message : $this->warn_msg; } } @@ -1445,7 +1445,7 @@ class parse_message extends bbcode_firstpass } else { - $error[] = sprintf($user->lang['TOO_MANY_ATTACHMENTS'], $cfg['max_attachments']); + $error[] = $user->lang('TOO_MANY_ATTACHMENTS', (int) $cfg['max_attachments']); } } @@ -1536,7 +1536,7 @@ class parse_message extends bbcode_firstpass } else { - $error[] = sprintf($user->lang['TOO_MANY_ATTACHMENTS'], $cfg['max_attachments']); + $error[] = $user->lang('TOO_MANY_ATTACHMENTS', (int) $cfg['max_attachments']); } } } diff --git a/phpBB/includes/ucp/ucp_groups.php b/phpBB/includes/ucp/ucp_groups.php index 5ac5cbf431..e3e4e8ce22 100644 --- a/phpBB/includes/ucp/ucp_groups.php +++ b/phpBB/includes/ucp/ucp_groups.php @@ -561,7 +561,7 @@ class ucp_groups { if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height']) { - $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']); + $error[] = avatar_error_wrong_size($data['width'], $data['height']); } } @@ -571,7 +571,7 @@ class ucp_groups { if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height']) { - $error[] = sprintf($user->lang['AVATAR_WRONG_SIZE'], $config['avatar_min_width'], $config['avatar_min_height'], $config['avatar_max_width'], $config['avatar_max_height'], $data['width'], $data['height']); + $error[] = avatar_error_wrong_size($data['width'], $data['height']); } } } @@ -732,7 +732,7 @@ class ucp_groups 'U_SWATCH' => append_sid("{$phpbb_root_path}adm/swatch.$phpEx", 'form=ucp&name=group_colour'), 'S_UCP_ACTION' => $this->u_action . "&action=$action&g=$group_id", - 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], $config['avatar_filesize'] / 1024), + 'L_AVATAR_EXPLAIN' => avatar_explanation_string(), )); break; @@ -1068,7 +1068,7 @@ class ucp_groups 'mode' => $mode, 'action' => $action ); - confirm_box(false, sprintf($user->lang['GROUP_CONFIRM_ADD_USER' . ((sizeof($name_ary) == 1) ? '' : 'S')], implode(', ', $name_ary)), build_hidden_fields($s_hidden_fields)); + confirm_box(false, $user->lang('GROUP_CONFIRM_ADD_USERS', sizeof($name_ary), implode(', ', $name_ary)), build_hidden_fields($s_hidden_fields)); } trigger_error($user->lang['NO_USERS_ADDED'] . '

                ' . sprintf($user->lang['RETURN_PAGE'], '', '')); diff --git a/phpBB/includes/ucp/ucp_main.php b/phpBB/includes/ucp/ucp_main.php index 3538b641f7..2b8f662bb4 100644 --- a/phpBB/includes/ucp/ucp_main.php +++ b/phpBB/includes/ucp/ucp_main.php @@ -194,8 +194,8 @@ class ucp_main 'VISITED' => (empty($last_visit)) ? ' - ' : $user->format_date($last_visit), 'WARNINGS' => ($user->data['user_warnings']) ? $user->data['user_warnings'] : 0, 'POSTS' => ($user->data['user_posts']) ? $user->data['user_posts'] : 0, - 'POSTS_DAY' => sprintf($user->lang['POST_DAY'], $posts_per_day), - 'POSTS_PCT' => sprintf($user->lang['POST_PCT'], $percentage), + 'POSTS_DAY' => $user->lang('POST_DAY', $posts_per_day), + 'POSTS_PCT' => $user->lang('POST_PCT', $percentage), 'OCCUPATION' => (!empty($row['user_occ'])) ? $row['user_occ'] : '', 'INTERESTS' => (!empty($row['user_interests'])) ? $row['user_interests'] : '', diff --git a/phpBB/includes/ucp/ucp_pm_compose.php b/phpBB/includes/ucp/ucp_pm_compose.php index 92297c1490..981c95a748 100644 --- a/phpBB/includes/ucp/ucp_pm_compose.php +++ b/phpBB/includes/ucp/ucp_pm_compose.php @@ -1053,7 +1053,7 @@ function compose_pm($id, $mode, $action, $user_folders = array()) $template->assign_vars(array( 'L_POST_A' => $page_title, 'L_ICON' => $user->lang['PM_ICON'], - 'L_MESSAGE_BODY_EXPLAIN' => (intval($config['max_post_chars'])) ? sprintf($user->lang['MESSAGE_BODY_EXPLAIN'], intval($config['max_post_chars'])) : '', + 'L_MESSAGE_BODY_EXPLAIN' => $user->lang('MESSAGE_BODY_EXPLAIN', (int) $config['max_post_chars']), 'SUBJECT' => (isset($message_subject)) ? $message_subject : '', 'MESSAGE' => $message_text, diff --git a/phpBB/includes/ucp/ucp_pm_options.php b/phpBB/includes/ucp/ucp_pm_options.php index bd55e2c6c5..7f854e422f 100644 --- a/phpBB/includes/ucp/ucp_pm_options.php +++ b/phpBB/includes/ucp/ucp_pm_options.php @@ -231,7 +231,7 @@ function message_options($id, $mode, $global_privmsgs_rules, $global_rule_condit // Something went wrong, only partially moved? if ($num_moved != $folder_row['pm_count']) { - trigger_error(sprintf($user->lang['MOVE_PM_ERROR'], $num_moved, $folder_row['pm_count'])); + trigger_error($user->lang('MOVE_PM_ERROR', (int) $folder_row['pm_count'], $num_moved)); } break; diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index d8d64722b3..4822d7a421 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -537,7 +537,7 @@ class ucp_profile 'URL_STATUS' => ($config['allow_sig_links']) ? $user->lang['URL_IS_ON'] : $user->lang['URL_IS_OFF'], 'MAX_FONT_SIZE' => (int) $config['max_sig_font_size'], - 'L_SIGNATURE_EXPLAIN' => sprintf($user->lang['SIGNATURE_EXPLAIN'], $config['max_sig_chars']), + 'L_SIGNATURE_EXPLAIN' => $user->lang('SIGNATURE_EXPLAIN', (int) $config['max_sig_chars']), 'S_BBCODE_ALLOWED' => $config['allow_sig_bbcode'], 'S_SMILIES_ALLOWED' => $config['allow_sig_smilies'], @@ -602,7 +602,7 @@ class ucp_profile 'S_FORM_ENCTYPE' => ($can_upload && ($config['allow_avatar_upload'] || $config['allow_avatar_remote_upload'])) ? ' enctype="multipart/form-data"' : '', - 'L_AVATAR_EXPLAIN' => sprintf($user->lang['AVATAR_EXPLAIN'], $config['avatar_max_width'], $config['avatar_max_height'], $config['avatar_filesize'] / 1024), + 'L_AVATAR_EXPLAIN' => avatar_explanation_string(), )); if ($config['allow_avatar'] && $display_gallery && $auth->acl_get('u_chgavatar') && $config['allow_avatar_local']) diff --git a/phpBB/index.php b/phpBB/index.php index bf59d4d840..b32d90bfd0 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -118,7 +118,7 @@ $template->assign_vars(array( 'TOTAL_POSTS' => $user->lang('TOTAL_POSTS', (int) $config['num_posts']), 'TOTAL_TOPICS' => $user->lang('TOTAL_TOPICS', (int) $config['num_topics']), 'TOTAL_USERS' => $user->lang('TOTAL_USERS', (int) $config['num_users']), - 'NEWEST_USER' => sprintf($user->lang['NEWEST_USER'], get_username_string('full', $config['newest_user_id'], $config['newest_username'], $config['newest_user_colour'])), + 'NEWEST_USER' => $user->lang('NEWEST_USER', get_username_string('full', $config['newest_user_id'], $config['newest_username'], $config['newest_user_colour'])), 'LEGEND' => $legend, 'BIRTHDAY_LIST' => (empty($birthday_list)) ? '' : implode(', ', $birthday_list), diff --git a/phpBB/language/en/acp/groups.php b/phpBB/language/en/acp/groups.php index 28e6fb80d9..8fc71f217d 100644 --- a/phpBB/language/en/acp/groups.php +++ b/phpBB/language/en/acp/groups.php @@ -54,8 +54,10 @@ $lang = array_merge($lang, array( 'GROUP_CLOSED' => 'Closed', 'GROUP_COLOR' => 'Group colour', 'GROUP_COLOR_EXPLAIN' => 'Defines the colour members’ usernames will appear in, leave blank for user default.', - 'GROUP_CONFIRM_ADD_USER' => 'Are you sure that you want to add the user %1$s to the group?', - 'GROUP_CONFIRM_ADD_USERS' => 'Are you sure that you want to add the users %1$s to the group?', + 'GROUP_CONFIRM_ADD_USERS' => array( + 1 => 'Are you sure that you want to add the user %2$s to the group?', + 2 => 'Are you sure that you want to add the users %2$s to the group?', + ), 'GROUP_CREATED' => 'Group has been created successfully.', 'GROUP_DEFAULT' => 'Make group default for member', 'GROUP_DEFS_UPDATED' => 'Default group set for all selected members.', diff --git a/phpBB/language/en/acp/posting.php b/phpBB/language/en/acp/posting.php index 7aa01469b7..3d920b5340 100644 --- a/phpBB/language/en/acp/posting.php +++ b/phpBB/language/en/acp/posting.php @@ -121,15 +121,19 @@ $lang = array_merge($lang, array( 'FIRST' => 'First', 'ICONS_ADD' => 'Add a new icon', - 'ICONS_NONE_ADDED' => 'No icons were added.', - 'ICONS_ONE_ADDED' => 'The icon has been added successfully.', - 'ICONS_ADDED' => 'The icons have been added successfully.', + 'ICONS_ADDED' => array( + 0 => 'No icons were added.', + 1 => 'The icon has been added successfully.', + 2 => 'The icons have been added successfully.', + ), 'ICONS_CONFIG' => 'Icon configuration', 'ICONS_DELETED' => 'The icon has been removed successfully.', 'ICONS_EDIT' => 'Edit icon', - 'ICONS_ONE_EDITED' => 'The icon has been updated successfully.', - 'ICONS_NONE_EDITED' => 'No icons were updated.', - 'ICONS_EDITED' => 'The icons have been updated successfully.', + 'ICONS_EDITED' => array( + 0 => 'No icons were updated.', + 1 => 'The icon has been updated successfully.', + 2 => 'The icons have been updated successfully.', + ), 'ICONS_HEIGHT' => 'Icon height', 'ICONS_IMAGE' => 'Icon image', 'ICONS_IMPORTED' => 'The icons pack has been installed successfully.', @@ -161,9 +165,11 @@ $lang = array_merge($lang, array( 'SELECT_PACKAGE' => 'Select a package file', 'SMILIES_ADD' => 'Add a new smiley', - 'SMILIES_NONE_ADDED' => 'No smilies were added.', - 'SMILIES_ONE_ADDED' => 'The smiley has been added successfully.', - 'SMILIES_ADDED' => 'The smilies have been added successfully.', + 'SMILIES_ADDED' => array( + 0 => 'No smilies were added.', + 1 => 'The smiley has been added successfully.', + 2 => 'The smilies have been added successfully.', + ), 'SMILIES_CODE' => 'Smiley code', 'SMILIES_CONFIG' => 'Smiley configuration', 'SMILIES_DELETED' => 'The smiley has been removed successfully.', @@ -171,9 +177,11 @@ $lang = array_merge($lang, array( 'SMILIE_NO_CODE' => 'The smiley “%s†was ignored, as there was no code entered.', 'SMILIE_NO_EMOTION' => 'The smiley “%s†was ignored, as there was no emotion entered.', 'SMILIE_NO_FILE' => 'The smiley “%s†was ignored, as the file is missing.', - 'SMILIES_NONE_EDITED' => 'No smilies were updated.', - 'SMILIES_ONE_EDITED' => 'The smiley has been updated successfully.', - 'SMILIES_EDITED' => 'The smilies have been updated successfully.', + 'SMILIES_EDITED' => array( + 0 => 'No smilies were updated.', + 1 => 'The smiley has been updated successfully.', + 2 => 'The smilies have been updated successfully.', + ), 'SMILIES_EMOTION' => 'Emotion', 'SMILIES_HEIGHT' => 'Smiley height', 'SMILIES_IMAGE' => 'Smiley image', diff --git a/phpBB/language/en/acp/search.php b/phpBB/language/en/acp/search.php index 9f0181a7e2..c7db788bb0 100644 --- a/phpBB/language/en/acp/search.php +++ b/phpBB/language/en/acp/search.php @@ -85,8 +85,15 @@ $lang = array_merge($lang, array( 'SEARCH_GUEST_INTERVAL' => 'Guest search flood interval', 'SEARCH_GUEST_INTERVAL_EXPLAIN' => 'Number of seconds guests must wait between searches. If one guest searches all others have to wait until the time interval passed.', - 'SEARCH_INDEX_CREATE_REDIRECT' => 'All posts up to post id %1$d have now been indexed, of which %2$d posts were within this step.
                The current rate of indexing is approximately %3$.1f posts per second.
                Indexing in progress…', - 'SEARCH_INDEX_DELETE_REDIRECT' => 'All posts up to post id %1$d have been removed from the search index.
                Deleting in progress…', + 'SEARCH_INDEX_CREATE_REDIRECT' => array( + 2 => 'All posts up to post id %2$d have now been indexed, of which %1$d posts were within this step.
                ', + ), + 'SEARCH_INDEX_CREATE_REDIRECT_RATE' => array( + 2 => 'The current rate of indexing is approximately %1$.1f posts per second.
                Indexing in progress…', + ), + 'SEARCH_INDEX_DELETE_REDIRECT' => array( + 2 => 'All posts up to post id %2$d have been removed from the search index.
                Deleting in progress…', + ), 'SEARCH_INDEX_CREATED' => 'Successfully indexed all posts in the board database.', 'SEARCH_INDEX_REMOVED' => 'Successfully deleted the search index for this backend.', 'SEARCH_INTERVAL' => 'User search flood interval', diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 6fcef11852..1cf371a887 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -96,7 +96,7 @@ $lang = array_merge($lang, array( 'AVATAR_URL_INVALID' => 'The URL you specified is invalid.', 'AVATAR_URL_NOT_FOUND' => 'The file specified could not be found.', 'AVATAR_WRONG_FILESIZE' => 'The avatar’s filesize must be between 0 and %1d %2s.', - 'AVATAR_WRONG_SIZE' => 'The submitted avatar is %5$d pixels wide and %6$d pixels high. Avatars must be at least %1$d pixels wide and %2$d pixels high, but no larger than %3$d pixels wide and %4$d pixels high.', + 'AVATAR_WRONG_SIZE' => 'The submitted avatar is %5$s wide and %6$s high. Avatars must be at least %1$s wide and %2$s high, but no larger than %3$s wide and %4$s high.', 'BACK_TO_TOP' => 'Top', 'BACK_TO_PREV' => 'Back to previous page', @@ -125,6 +125,11 @@ $lang = array_merge($lang, array( 'CHANGE_FONT_SIZE' => 'Change font size', 'CHANGING_PREFERENCES' => 'Changing board preferences', 'CHANGING_PROFILE' => 'Changing profile settings', + 'CHARACTERS' => array( + 0 => '%d characters', + 1 => '%d character', + 2 => '%d characters', + ), 'CLICK_VIEW_PRIVMSG' => '%sGo to your inbox%s', 'COLLAPSE_VIEW' => 'Collapse view', 'CLOSE_WINDOW' => 'Close window', @@ -447,6 +452,11 @@ $lang = array_merge($lang, array( 'PAGE_TITLE_NUMBER' => 'Page %s', 'PASSWORD' => 'Password', 'PIXEL' => 'px', + 'PIXELS' => array( + 0 => '%d pixels', + 1 => '%d pixel', + 2 => '%d pixels', + ), 'PLAY_QUICKTIME_FILE' => 'Play Quicktime file', 'PM' => 'PM', 'PM_REPORTED' => 'Click to view report', diff --git a/phpBB/language/en/posting.php b/phpBB/language/en/posting.php index 01b1b3a9e1..a7dbc1bc80 100644 --- a/phpBB/language/en/posting.php +++ b/phpBB/language/en/posting.php @@ -121,13 +121,25 @@ $lang = array_merge($lang, array( 'LOGIN_EXPLAIN_QUOTE' => 'You need to login in order to quote posts within this forum.', 'LOGIN_EXPLAIN_REPLY' => 'You need to login in order to reply to topics within this forum.', - 'MAX_FONT_SIZE_EXCEEDED' => 'You may only use fonts up to size %1$d.', - 'MAX_FLASH_HEIGHT_EXCEEDED' => 'Your flash files may only be up to %1$d pixels high.', - 'MAX_FLASH_WIDTH_EXCEEDED' => 'Your flash files may only be up to %1$d pixels wide.', - 'MAX_IMG_HEIGHT_EXCEEDED' => 'Your images may only be up to %1$d pixels high.', - 'MAX_IMG_WIDTH_EXCEEDED' => 'Your images may only be up to %1$d pixels wide.', + 'MAX_FONT_SIZE_EXCEEDED' => 'You may only use fonts up to size %d.', + 'MAX_FLASH_HEIGHT_EXCEEDED' => array( + 2 => 'Your flash files may only be up to %d pixels high.', + ), + 'MAX_FLASH_WIDTH_EXCEEDED' => array( + 2 => 'Your flash files may only be up to %d pixels wide.', + ), + 'MAX_IMG_HEIGHT_EXCEEDED' => array( + 2 => 'Your images may only be up to %1$d pixels high.', + ), + 'MAX_IMG_WIDTH_EXCEEDED' => array( + 2 => 'Your images may only be up to %d pixels wide.', + ), - 'MESSAGE_BODY_EXPLAIN' => 'Enter your message here, it may contain no more than %d characters.', + 'MESSAGE_BODY_EXPLAIN' => array( + 0 => '', // zero means no limit, so we don't view a message here. + 1 => 'Enter your message here, it may contain no more than %d character.', + 2 => 'Enter your message here, it may contain no more than %d characters.', + ), 'MESSAGE_DELETED' => 'This message has been deleted successfully.', 'MORE_SMILIES' => 'View more smilies', @@ -202,12 +214,19 @@ $lang = array_merge($lang, array( 'STYLES_TIP' => 'Tip: Styles can be applied quickly to selected text.', 'TOO_FEW_CHARS' => 'Your message contains too few characters.', - 'TOO_FEW_CHARS_LIMIT' => 'Your message contains %1$d characters. The minimum number of characters you need to enter is %2$d.', + 'TOO_FEW_CHARS_LIMIT' => array( + 1 => 'Your message contains %1$d character. The minimum number of characters you need to enter is %2$d.', + 2 => 'Your message contains %1$d characters. The minimum number of characters you need to enter is %2$d.', + ), 'TOO_FEW_POLL_OPTIONS' => 'You must enter at least two poll options.', 'TOO_MANY_ATTACHMENTS' => 'Cannot add another attachment, %d is the maximum.', 'TOO_MANY_CHARS' => 'Your message contains too many characters.', - 'TOO_MANY_CHARS_POST' => 'Your message contains %1$d characters. The maximum number of allowed characters is %2$d.', - 'TOO_MANY_CHARS_SIG' => 'Your signature contains %1$d characters. The maximum number of allowed characters is %2$d.', + 'TOO_MANY_CHARS_POST' => array( + 2 => 'Your message contains %1$d characters. The maximum number of allowed characters is %2$d.', + ), + 'TOO_MANY_CHARS_SIG' => array( + 2 => 'Your signature contains %1$d characters. The maximum number of allowed characters is %2$d.', + ), 'TOO_MANY_POLL_OPTIONS' => 'You have tried to enter too many poll options.', 'TOO_MANY_SMILIES' => 'Your message contains too many smilies. The maximum number of smilies allowed is %d.', 'TOO_MANY_URLS' => 'Your message contains too many URLs. The maximum number of URLs allowed is %d.', @@ -231,5 +250,5 @@ $lang = array_merge($lang, array( 'VIEW_PRIVATE_MESSAGE' => '%sView your submitted private message%s', 'WRONG_FILESIZE' => 'The file is too big, maximum allowed size is %1d %2s.', - 'WRONG_SIZE' => 'The image must be at least %1$d pixels wide, %2$d pixels high and at most %3$d pixels wide and %4$d pixels high. The submitted image is %5$d pixels wide and %6$d pixels high.', + 'WRONG_SIZE' => 'The image must be at least %1$s wide, %2$s high and at most %3$s wide and %4$s high. The submitted image is %5$s wide and %6$s high.', )); diff --git a/phpBB/language/en/search.php b/phpBB/language/en/search.php index 734b65e575..c5b37d897e 100644 --- a/phpBB/language/en/search.php +++ b/phpBB/language/en/search.php @@ -65,7 +65,7 @@ $lang = array_merge($lang, array( 'MAX_NUM_SEARCH_KEYWORDS_REFINE' => 'You specified too many words to search for. Please do not enter more than %1$d words.', - 'NO_KEYWORDS' => 'You must specify at least one word to search for. Each word must consist of at least %d characters and must not contain more than %d characters excluding wildcards.', + 'NO_KEYWORDS' => 'You must specify at least one word to search for. Each word must consist of at least %s and must not contain more than %s excluding wildcards.', 'NO_RECENT_SEARCHES' => 'No searches have been carried out recently.', 'NO_SEARCH' => 'Sorry but you are not permitted to use the search system.', 'NO_SEARCH_RESULTS' => 'No suitable matches were found.', diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index fb26c2f8e1..0aa97ee81e 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -89,7 +89,7 @@ $lang = array_merge($lang, array( 'ATTACHMENTS_DELETED' => 'Attachments successfully deleted.', 'ATTACHMENT_DELETED' => 'Attachment successfully deleted.', 'AVATAR_CATEGORY' => 'Category', - 'AVATAR_EXPLAIN' => 'Maximum dimensions; width: %1$d pixels, height: %2$d pixels, file size: %3$.2f KiB.', + 'AVATAR_EXPLAIN' => 'Maximum dimensions; width: %1$s, height: %2$s, file size: %3$.2f KiB.', 'AVATAR_FEATURES_DISABLED' => 'The avatar functionality is currently disabled.', 'AVATAR_GALLERY' => 'Local gallery', 'AVATAR_GENERAL_UPLOAD_ERROR' => 'Could not upload avatar to %s.', @@ -188,10 +188,16 @@ $lang = array_merge($lang, array( 'EXPORT_FOLDER' => 'Export this view', 'FIELD_REQUIRED' => 'The field “%s†must be completed.', - 'FIELD_TOO_SHORT' => 'The field “%1$s†is too short, a minimum of %2$d characters is required.', - 'FIELD_TOO_LONG' => 'The field “%1$s†is too long, a maximum of %2$d characters is allowed.', - 'FIELD_TOO_SMALL' => 'The value of “%1$s†is too small, a minimum value of %2$d is required.', - 'FIELD_TOO_LARGE' => 'The value of “%1$s†is too large, a maximum value of %2$d is allowed.', + 'FIELD_TOO_SHORT' => array( + 1 => 'The field “%2$s†is too short, a minimum of %1$d character is required.', + 2 => 'The field “%2$s†is too short, a minimum of %1$d characters is required.', + ), + 'FIELD_TOO_LONG' => array( + 1 => 'The field “%2$s†is too long, a maximum of %1$d character is allowed.', + 2 => 'The field “%2$s†is too long, a maximum of %1$d characters is allowed.', + ), + 'FIELD_TOO_SMALL' => 'The value of “%2$s†is too small, a minimum value of %1$d is required.', + 'FIELD_TOO_LARGE' => 'The value of “%2$s†is too large, a maximum value of %1$d is allowed.', 'FIELD_INVALID_CHARS_NUMBERS_ONLY' => 'The field “%s†has invalid characters, only numbers are allowed.', 'FIELD_INVALID_CHARS_ALPHA_ONLY' => 'The field “%s†has invalid characters, only alphanumeric characters are allowed.', 'FIELD_INVALID_CHARS_SPACERS_ONLY' => 'The field “%s†has invalid characters, only alphanumeric, space or -+_[] characters are allowed.', @@ -273,7 +279,9 @@ $lang = array_merge($lang, array( 'MOVE_DELETED_MESSAGES_TO' => 'Move messages from removed folder to', 'MOVE_DOWN' => 'Move down', 'MOVE_MARKED_TO_FOLDER' => 'Move marked to %s', - 'MOVE_PM_ERROR' => 'An error occurred while moving the messages to the new folder, only %1d from %2d messages were moved.', + 'MOVE_PM_ERROR' => array( + 2 => 'An error occurred while moving the messages to the new folder, only %2d from %1d messages were moved.', + ), 'MOVE_TO_FOLDER' => 'Move to folder', 'MOVE_UP' => 'Move up', diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index ff22b860ff..2ff56745ef 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -612,8 +612,8 @@ switch ($mode) $template->assign_vars(array( 'L_POSTS_IN_QUEUE' => $user->lang('NUM_POSTS_IN_QUEUE', $member['posts_in_queue']), - 'POSTS_DAY' => sprintf($user->lang['POST_DAY'], $posts_per_day), - 'POSTS_PCT' => sprintf($user->lang['POST_PCT'], $percentage), + 'POSTS_DAY' => $user->lang('POST_DAY', $posts_per_day), + 'POSTS_PCT' => $user->lang('POST_PCT', $percentage), 'OCCUPATION' => (!empty($member['user_occ'])) ? censor_text($member['user_occ']) : '', 'INTERESTS' => (!empty($member['user_interests'])) ? censor_text($member['user_interests']) : '', diff --git a/phpBB/posting.php b/phpBB/posting.php index 4423737b55..eef186c377 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -322,7 +322,7 @@ if ($mode == 'bump') $meta_url = phpbb_bump_topic($forum_id, $topic_id, $post_data, $current_time); meta_refresh(3, $meta_url); - $message = $user->lang['TOPIC_BUMPED'] . '

                ' . sprintf($user->lang['VIEW_MESSAGE'], '', ''); + $message = $user->lang['TOPIC_BUMPED'] . '

                ' . $user->lang('VIEW_MESSAGE', '', ''); $message .= '

                ' . sprintf($user->lang['RETURN_FORUM'], '', ''); trigger_error($message); @@ -841,7 +841,7 @@ if ($submit || $preview || $refresh) if (($result = validate_string($post_data['username'], false, $config['min_name_chars'], $config['max_name_chars'])) !== false) { $min_max_amount = ($result == 'TOO_SHORT') ? $config['min_name_chars'] : $config['max_name_chars']; - $error[] = sprintf($user->lang['FIELD_' . $result], $user->lang['USERNAME'], $min_max_amount); + $error[] = $user->lang('FIELD_' . $result, $min_max_amount, $user->lang['USERNAME']); } } @@ -1357,7 +1357,7 @@ add_form_key('posting'); $template->assign_vars(array( 'L_POST_A' => $page_title, 'L_ICON' => ($mode == 'reply' || $mode == 'quote' || ($mode == 'edit' && $post_id != $post_data['topic_first_post_id'])) ? $user->lang['POST_ICON'] : $user->lang['TOPIC_ICON'], - 'L_MESSAGE_BODY_EXPLAIN' => (intval($config['max_post_chars'])) ? sprintf($user->lang['MESSAGE_BODY_EXPLAIN'], intval($config['max_post_chars'])) : '', + 'L_MESSAGE_BODY_EXPLAIN' => $user->lang('MESSAGE_BODY_EXPLAIN', (int) $config['max_post_chars']), 'FORUM_NAME' => $post_data['forum_name'], 'FORUM_DESC' => ($post_data['forum_desc']) ? generate_text_for_display($post_data['forum_desc'], $post_data['forum_desc_uid'], $post_data['forum_desc_bitfield'], $post_data['forum_desc_options']) : '', diff --git a/phpBB/search.php b/phpBB/search.php index 6626cd5672..4089397b6e 100644 --- a/phpBB/search.php +++ b/phpBB/search.php @@ -295,7 +295,7 @@ if ($keywords || $author || $author_id || $search_id || $submit) if (!$correct_query || (empty($search->search_query) && !sizeof($author_id_ary) && !$search_id)) { $ignored = (sizeof($search->common_words)) ? sprintf($user->lang['IGNORED_TERMS_EXPLAIN'], implode(' ', $search->common_words)) . '
                ' : ''; - trigger_error($ignored . sprintf($user->lang['NO_KEYWORDS'], $search->word_length['min'], $search->word_length['max'])); + trigger_error($ignored . $user->lang('NO_KEYWORDS', $user->lang('CHARACTERS', (int) $search->word_length['min']), $user->lang('CHARACTERS', (int) $search->word_length['max']))); } } -- cgit v1.2.1 From 2de7153afd428f44d1c4c012ffe0bf072e449c64 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 20 Sep 2011 01:39:21 +0200 Subject: [ticket/10345] Allow float as array key and add some tests Added tests for the fallback when a key is missing and the float-feature. PHPBB3-10345 --- phpBB/includes/session.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 0733e4f7fb..3e3c9dc072 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1869,7 +1869,7 @@ class user extends session // We now get the first number passed and will select the key based upon this number for ($i = 1, $num_args = sizeof($args); $i < $num_args; $i++) { - if (is_int($args[$i])) + if (is_int($args[$i]) || is_float($args[$i])) { $use_plural_form = $this->get_plural_form($args[$i]); $numbers = array_keys($lang); @@ -1905,12 +1905,14 @@ class user extends session * Determine which plural form we should use. * For some languages this is not as simple as for English. * - * @param $number int The number we want to get the plural case for + * @param $number int|float The number we want to get the plural case for * @param $force_rule mixed False to use the plural rule of the language package * or an integer to force a certain plural rule */ function get_plural_form($number, $force_rule = false) { + $number = (int) $number; + if ($number == 0) { // We use special language strings for 0, so it's "no users" instead of "0 users" -- cgit v1.2.1 From 4c2c842a7dc2a4ce01eae23790af305c73de79fa Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 20 Sep 2011 18:21:49 +0200 Subject: [ticket/10345] Fix some documentation issues. PHPBB3-10345 --- phpBB/includes/session.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 3e3c9dc072..efb2059922 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1822,8 +1822,8 @@ class user extends session * * Example call: $user->lang('NUM_POSTS_IN_QUEUE', 1); * - * If the first parameter is an array, the parts are used as keys and subkeys to get the lang: - * Example: $user->lang(array('datetime', 'AGO'), 1) uses $user->lang['datetime']['AGO'] as lang. + * If the first parameter is an array, the elements are used as keys and subkeys to get the language entry: + * Example: $user->lang(array('datetime', 'AGO'), 1) uses $user->lang['datetime']['AGO'] as language entry. */ function lang() { @@ -1878,8 +1878,7 @@ class user extends session { if ($num > $use_plural_form) { - // This is basically just some lazy backwards compatible stuff. - // If the key we need to use does not exist, it takes the previous one. + // If the key we need to use does not exist, we fall back to the previous one. break; } @@ -1908,6 +1907,7 @@ class user extends session * @param $number int|float The number we want to get the plural case for * @param $force_rule mixed False to use the plural rule of the language package * or an integer to force a certain plural rule + * @return int The plural-case we need to use for the number plural-rule combination */ function get_plural_form($number, $force_rule = false) { @@ -1915,7 +1915,7 @@ class user extends session if ($number == 0) { - // We use special language strings for 0, so it's "no users" instead of "0 users" + // We allow each translation using plural forms to specify a version for the case of 0 things, so that "0 users" may be displayed as "No users". return 0; } -- cgit v1.2.1 From c4aa8d8401420f8f36a622dc279587ee07466925 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 20 Sep 2011 23:29:52 +0200 Subject: [ticket/10345] Fix some last use cases of sprintf() to use $user->lang() PHPBB3-10345 --- phpBB/includes/acp/acp_users.php | 4 ++-- phpBB/includes/ucp/ucp_profile.php | 4 ++-- phpBB/includes/ucp/ucp_register.php | 4 ++-- phpBB/language/en/ucp.php | 20 ++++++++++---------- 4 files changed, 16 insertions(+), 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 3ae1278396..a41fd3d17a 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1010,8 +1010,8 @@ class acp_users $db->sql_freeresult($result); $template->assign_vars(array( - 'L_NAME_CHARS_EXPLAIN' => sprintf($user->lang[$config['allow_name_chars'] . '_EXPLAIN'], $config['min_name_chars'], $config['max_name_chars']), - 'L_CHANGE_PASSWORD_EXPLAIN' => sprintf($user->lang[$config['pass_complex'] . '_EXPLAIN'], $config['min_pass_chars'], $config['max_pass_chars']), + 'L_NAME_CHARS_EXPLAIN' => $user->lang($config['allow_name_chars'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_name_chars']), $user->lang('CHARACTERS', (int) $config['max_name_chars'])), + 'L_CHANGE_PASSWORD_EXPLAIN' => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_pass_chars']), $user->lang('CHARACTERS', (int) $config['max_pass_chars'])), 'L_POSTS_IN_QUEUE' => $user->lang('NUM_POSTS_IN_QUEUE', $user_row['posts_in_queue']), 'S_FOUNDER' => ($user->data['user_type'] == USER_FOUNDER) ? true : false, diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index 4822d7a421..c2082c99f6 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -248,8 +248,8 @@ class ucp_profile 'NEW_PASSWORD' => $data['new_password'], 'CUR_PASSWORD' => '', - 'L_USERNAME_EXPLAIN' => sprintf($user->lang[$config['allow_name_chars'] . '_EXPLAIN'], $config['min_name_chars'], $config['max_name_chars']), - 'L_CHANGE_PASSWORD_EXPLAIN' => sprintf($user->lang[$config['pass_complex'] . '_EXPLAIN'], $config['min_pass_chars'], $config['max_pass_chars']), + 'L_USERNAME_EXPLAIN' => $user->lang($config['allow_name_chars'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_name_chars']), $user->lang('CHARACTERS', (int) $config['max_name_chars'])), + 'L_CHANGE_PASSWORD_EXPLAIN' => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_pass_chars']), $user->lang('CHARACTERS', (int) $config['max_pass_chars'])), 'S_FORCE_PASSWORD' => ($auth->acl_get('u_chgpasswd') && $config['chg_passforce'] && $user->data['user_passchg'] < time() - ($config['chg_passforce'] * 86400)) ? true : false, 'S_CHANGE_USERNAME' => ($config['allow_namechange'] && $auth->acl_get('u_chgname')) ? true : false, diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index 20a4626ffa..fe09d0a9fe 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -475,8 +475,8 @@ class ucp_register 'EMAIL_CONFIRM' => $data['email_confirm'], 'L_REG_COND' => $l_reg_cond, - 'L_USERNAME_EXPLAIN' => sprintf($user->lang[$config['allow_name_chars'] . '_EXPLAIN'], $config['min_name_chars'], $config['max_name_chars']), - 'L_PASSWORD_EXPLAIN' => sprintf($user->lang[$config['pass_complex'] . '_EXPLAIN'], $config['min_pass_chars'], $config['max_pass_chars']), + 'L_USERNAME_EXPLAIN' => $user->lang($config['allow_name_chars'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_name_chars']), $user->lang('CHARACTERS', (int) $config['max_name_chars'])), + 'L_PASSWORD_EXPLAIN' => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_pass_chars']), $user->lang('CHARACTERS', (int) $config['max_pass_chars'])), 'S_LANG_OPTIONS' => language_select($data['lang']), 'S_TZ_OPTIONS' => tz_select($data['tz']), diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 0aa97ee81e..e4aa41cbfd 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -352,10 +352,10 @@ $lang = array_merge($lang, array( 'NO_WATCHED_SELECTED' => 'You have not selected any subscribed topics or forums.', 'NO_WATCHED_TOPICS' => 'You are not subscribed to any topics.', - 'PASS_TYPE_ALPHA_EXPLAIN' => 'Password must be between %1$d and %2$d characters long, must contain letters in mixed case and must contain numbers.', - 'PASS_TYPE_ANY_EXPLAIN' => 'Must be between %1$d and %2$d characters.', - 'PASS_TYPE_CASE_EXPLAIN' => 'Password must be between %1$d and %2$d characters long and must contain letters in mixed case.', - 'PASS_TYPE_SYMBOL_EXPLAIN' => 'Password must be between %1$d and %2$d characters long, must contain letters in mixed case, must contain numbers and must contain symbols.', + 'PASS_TYPE_ALPHA_EXPLAIN' => 'Password must be between %1$s and %2$s long, must contain letters in mixed case and must contain numbers.', + 'PASS_TYPE_ANY_EXPLAIN' => 'Must be between %1$s and %2$s.', + 'PASS_TYPE_CASE_EXPLAIN' => 'Password must be between %1$s and %2$s long and must contain letters in mixed case.', + 'PASS_TYPE_SYMBOL_EXPLAIN' => 'Password must be between %1$s and %2$s long, must contain letters in mixed case, must contain numbers and must contain symbols.', 'PASSWORD' => 'Password', 'PASSWORD_ACTIVATED' => 'Your new password has been activated.', 'PASSWORD_UPDATED' => 'A new password was sent to your registered e-mail address.', @@ -493,12 +493,12 @@ $lang = array_merge($lang, array( 'UPLOAD_AVATAR_FILE' => 'Upload from your machine', 'UPLOAD_AVATAR_URL' => 'Upload from a URL', 'UPLOAD_AVATAR_URL_EXPLAIN' => 'Enter the URL of the location containing the image. The image will be copied to this site.', - 'USERNAME_ALPHA_ONLY_EXPLAIN' => 'Username must be between %1$d and %2$d chars long and use only alphanumeric characters.', - 'USERNAME_ALPHA_SPACERS_EXPLAIN'=> 'Username must be between %1$d and %2$d chars long and use alphanumeric, space or -+_[] characters.', - 'USERNAME_ASCII_EXPLAIN' => 'Username must be between %1$d and %2$d chars long and use only ASCII characters, so no special symbols.', - 'USERNAME_LETTER_NUM_EXPLAIN' => 'Username must be between %1$d and %2$d chars long and use only letter or number characters.', - 'USERNAME_LETTER_NUM_SPACERS_EXPLAIN'=> 'Username must be between %1$d and %2$d chars long and use letter, number, space or -+_[] characters.', - 'USERNAME_CHARS_ANY_EXPLAIN' => 'Length must be between %1$d and %2$d characters.', + 'USERNAME_ALPHA_ONLY_EXPLAIN' => 'Username must be between %1$s and %2$s long and use only alphanumeric characters.', + 'USERNAME_ALPHA_SPACERS_EXPLAIN'=> 'Username must be between %1$s and %2$s long and use alphanumeric, space or -+_[] characters.', + 'USERNAME_ASCII_EXPLAIN' => 'Username must be between %1$s and %2$s long and use only ASCII characters, so no special symbols.', + 'USERNAME_LETTER_NUM_EXPLAIN' => 'Username must be between %1$s and %2$s long and use only letter or number characters.', + 'USERNAME_LETTER_NUM_SPACERS_EXPLAIN'=> 'Username must be between %1$s and %2$s long and use letter, number, space or -+_[] characters.', + 'USERNAME_CHARS_ANY_EXPLAIN' => 'Length must be between %1$s and %2$s.', 'USERNAME_TAKEN_USERNAME' => 'The username you entered is already in use, please select an alternative.', 'USERNAME_DISALLOWED_USERNAME' => 'The username you entered has been disallowed or contains a disallowed word. Please choose a different name.', 'USER_NOT_FOUND_OR_INACTIVE' => 'The usernames you specified could either not be found or are not activated users.', -- cgit v1.2.1 From 7da6826a671cfce61f7d92c2f5b1deafa4865872 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 20 Sep 2011 23:40:41 +0200 Subject: [ticket/10345] Remove some unused 0 cases PHPBB3-10345 --- phpBB/language/en/common.php | 6 ------ phpBB/language/en/search.php | 3 --- phpBB/language/en/ucp.php | 3 --- phpBB/language/en/viewforum.php | 1 - phpBB/language/en/viewtopic.php | 3 --- 5 files changed, 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 1cf371a887..e01578a8ad 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -678,19 +678,13 @@ $lang = array_merge($lang, array( ), 'TOTAL_POSTS' => 'Total posts', 'TOTAL_POSTS_COUNT' => array( - 0 => 'Total posts 0', - 1 => 'Total posts %d', 2 => 'Total posts %d', ), 'TOPIC_REPORTED' => 'This topic has been reported', 'TOTAL_TOPICS' => array( - 0 => 'Total topics 0', - 1 => 'Total topics %d', 2 => 'Total topics %d', ), 'TOTAL_USERS' => array( - 0 => 'Total members 0', - 1 => 'Total members %d', 2 => 'Total members %d', ), 'TRACKED_PHP_ERROR' => 'Tracked PHP errors: %s', diff --git a/phpBB/language/en/search.php b/phpBB/language/en/search.php index c5b37d897e..d3801a58be 100644 --- a/phpBB/language/en/search.php +++ b/phpBB/language/en/search.php @@ -42,12 +42,10 @@ $lang = array_merge($lang, array( 'DISPLAY_RESULTS' => 'Display results as', 'FOUND_SEARCH_MATCHES' => array( - 0 => 'Search found %d matches', 1 => 'Search found %d match', 2 => 'Search found %d matches', ), 'FOUND_MORE_SEARCH_MATCHES' => array( - 0 => 'Search found more than %d matches', 1 => 'Search found more than %d match', 2 => 'Search found more than %d matches', ), @@ -108,7 +106,6 @@ $lang = array_merge($lang, array( 'SORT_TIME' => 'Post time', 'TOO_FEW_AUTHOR_CHARS' => array( - 0 => 'You must specify at least %d characters of the authors name.', 1 => 'You must specify at least %d character of the authors name.', 2 => 'You must specify at least %d characters of the authors name.', ), diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index e4aa41cbfd..3f09ccb826 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -309,7 +309,6 @@ $lang = array_merge($lang, array( 'NOT_AGREE' => 'I do not agree to these terms', 'NOT_ENOUGH_SPACE_FOLDER' => 'The destination folder “%s†seems to be full. The requested action has not been taken.', 'NOT_MOVED_MESSAGES' => array( - 0 => 'You have %d private messages currently on hold because of full folder.', 1 => 'You have %d private message currently on hold because of full folder.', 2 => 'You have %d private messages currently on hold because of full folder.', ), @@ -408,7 +407,6 @@ $lang = array_merge($lang, array( 'RULE_DELETED' => 'Rule successfully removed.', 'RULE_NOT_DEFINED' => 'Rule not correctly specified.', 'RULE_REMOVED_MESSAGES' => array( - 0 => '%d private messages were removed due to private message filters.', 1 => '%d private message was removed due to private message filters.', 2 => '%d private messages were removed due to private message filters.', ), @@ -512,7 +510,6 @@ $lang = array_merge($lang, array( 'VIEW_PM' => 'View message', 'VIEW_PM_INFO' => 'Message details', 'VIEW_PM_MESSAGES' => array( - 0 => '%d messages', 1 => '%d message', 2 => '%d messages', ), diff --git a/phpBB/language/en/viewforum.php b/phpBB/language/en/viewforum.php index d5eea0f4e3..90f40ecdfc 100644 --- a/phpBB/language/en/viewforum.php +++ b/phpBB/language/en/viewforum.php @@ -65,7 +65,6 @@ $lang = array_merge($lang, array( 'VIEW_FORUM' => 'View forum', 'VIEW_FORUM_TOPICS' => array( - 0 => '%d topics', 1 => '%d topic', 2 => '%d topics', ), diff --git a/phpBB/language/en/viewtopic.php b/phpBB/language/en/viewtopic.php index 1e686b69ab..5bfc4907ce 100644 --- a/phpBB/language/en/viewtopic.php +++ b/phpBB/language/en/viewtopic.php @@ -54,7 +54,6 @@ $lang = array_merge($lang, array( 'DOWNLOAD_NOTICE' => 'You do not have the required permissions to view the files attached to this post.', 'EDITED_TIMES_TOTAL' => array( - 0 => 'Last edited by %2$s on %3$s, edited %1$d times in total.', 1 => 'Last edited by %2$s on %3$s, edited %1$d time in total.', 2 => 'Last edited by %2$s on %3$s, edited %1$d times in total.', ) @@ -74,7 +73,6 @@ $lang = array_merge($lang, array( 'MAKE_NORMAL' => 'Change to “Standard Topicâ€', 'MAKE_STICKY' => 'Change to “Stickyâ€', 'MAX_OPTIONS_SELECT' => array( - 0 => 'You may select up to %d options', 1 => 'You may select %d option', 2 => 'You may select up to %d options', ), @@ -112,7 +110,6 @@ $lang = array_merge($lang, array( 'VIEW_PREVIOUS_TOPIC' => 'Previous topic', 'VIEW_RESULTS' => 'View results', 'VIEW_TOPIC_POSTS' => array( - 0 => '%d posts', 1 => '%d post', 2 => '%d posts', ), -- cgit v1.2.1 From 33e3bf4f64c3c2734bf97bcb204255cfdab37773 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 21 Sep 2011 00:36:18 +0200 Subject: [ticket/10345] Make the use of the 0-case optional And correctly determinate the rule otherwise PHPBB3-10345 --- phpBB/includes/session.php | 74 +++++++++++++++++++++++++--------------------- 1 file changed, 40 insertions(+), 34 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index efb2059922..c78d0f819a 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1871,20 +1871,30 @@ class user extends session { if (is_int($args[$i]) || is_float($args[$i])) { - $use_plural_form = $this->get_plural_form($args[$i]); - $numbers = array_keys($lang); - - foreach ($numbers as $num) + if ($args[$i] == 0 && isset($lang[0])) + { + // We allow each translation using plural forms to specify a version for the case of 0 things, + // so that "0 users" may be displayed as "No users". + $key_found = 0; + break; + } + else { - if ($num > $use_plural_form) + $use_plural_form = $this->get_plural_form($args[$i]); + $numbers = array_keys($lang); + + foreach ($numbers as $num) { - // If the key we need to use does not exist, we fall back to the previous one. - break; - } + if ($num > $use_plural_form) + { + // If the key we need to use does not exist, we fall back to the previous one. + break; + } - $key_found = $num; + $key_found = $num; + } + break; } - break; } } @@ -1913,12 +1923,6 @@ class user extends session { $number = (int) $number; - if ($number == 0) - { - // We allow each translation using plural forms to specify a version for the case of 0 things, so that "0 users" may be displayed as "No users". - return 0; - } - // Default to English system $plural_rule = ($force_rule !== false) ? $force_rule : ((isset($this->lang['PLURAL_RULE'])) ? $this->lang['PLURAL_RULE'] : 1); if ($plural_rule > 15 || $plural_rule < 0) @@ -1935,7 +1939,7 @@ class user extends session case 0: /** * Families: Asian (Chinese, Japanese, Korean, Vietnamese), Persian, Turkic/Altaic (Turkish), Thai, Lao - * 1 - everything: 1, 2, ... + * 1 - everything: 0, 1, 2, ... */ return 1; @@ -1943,25 +1947,26 @@ class user extends session /** * Families: Germanic (Danish, Dutch, English, Faroese, Frisian, German, Norwegian, Swedish), Finno-Ugric (Estonian, Finnish, Hungarian), Language isolate (Basque), Latin/Greek (Greek), Semitic (Hebrew), Romanic (Italian, Portuguese, Spanish, Catalan) * 1 - 1 - * 2 - everything else: 2, 3, ... + * 2 - everything else: 0, 2, 3, ... */ return ($number == 1) ? 1 : 2; case 2: /** * Families: Romanic (French, Brazilian Portuguese) - * 1 - 1 normaly this would also apply to 0 + * 1 - 0, 1 * 2 - everything else: 2, 3, ... */ - return ($number == 1) ? 1 : 2; + return (($number == 0) || ($number == 1)) ? 1 : 2; case 3: /** * Families: Baltic (Latvian) - * 1 - ends in 1, not 11: 1, 21, ... 101, 121, ... - * 2 - everything else: 2, 3, ... 10, 11, 12, ... 20, 22, ... + * 1 - 0 + * 2 - ends in 1, not 11: 1, 21, ... 101, 121, ... + * 3 - everything else: 2, 3, ... 10, 11, 12, ... 20, 22, ... */ - return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : 2; + return ($number == 0) ? 1 : ((($number % 10 == 1) && ($number % 100 != 11)) ? 2 : 3); case 4: /** @@ -1969,7 +1974,7 @@ class user extends session * 1 - is 1 or 11: 1, 11 * 2 - is 2 or 12: 2, 12 * 3 - others between 3 and 19: 3, 4, ... 10, 13, ... 18, 19 - * 4 - everything else: 20, 21, ... + * 4 - everything else: 0, 20, 21, ... */ return ($number == 1 || $number == 11) ? 1 : (($number == 2 || $number == 12) ? 2 : (($number >= 3 && $number <= 19) ? 3 : 4)); @@ -1977,7 +1982,7 @@ class user extends session /** * Families: Romanic (Romanian) * 1 - 1 - * 2 - ends in 01-19: 2, 3, ... 19, 101, 102, ... 119, 201, ... + * 2 - is 0 or ends in 01-19: 0, 2, 3, ... 19, 101, 102, ... 119, 201, ... * 3 - everything else: 20, 21, ... */ return ($number == 1) ? 1 : ((($number == 0) || (($number % 100 > 0) && ($number % 100 < 20))) ? 2 : 3); @@ -1986,7 +1991,7 @@ class user extends session /** * Families: Baltic (Lithuanian) * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ... - * 2 - ends in 0 or ends in 10-20: 10, 11, 12, ... 19, 20, 30, 40, ... + * 2 - ends in 0 or ends in 10-20: 0, 10, 11, 12, ... 19, 20, 30, 40, ... * 3 - everything else: 2, 3, ... 8, 9, 22, 23, ... 29, 32, 33, ... */ return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 < 2) || (($number % 100 >= 10) && ($number % 100 < 20))) ? 2 : 3); @@ -1996,7 +2001,7 @@ class user extends session * Families: Slavic (Croatian, Serbian, Russian, Ukrainian) * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ... * 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ... - * 3 - everything else: 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, ... + * 3 - everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, ... */ return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 2 : 3); @@ -2005,7 +2010,7 @@ class user extends session * Families: Slavic (Slovak, Czech) * 1 - 1 * 2 - 2, 3, 4 - * 3 - everything else: 5, 6, 7, ... + * 3 - everything else: 0, 5, 6, 7, ... */ return ($number == 1) ? 1 : ((($number >= 2) && ($number <= 4)) ? 2 : 3); @@ -2014,7 +2019,7 @@ class user extends session * Families: Slavic (Polish) * 1 - 1 * 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ... 104, 122, ... - * 3 - everything else: 5, 6, ... 11, 12, 13, 14, 15, ... 20, 21, 25, ... + * 3 - everything else: 0, 5, 6, ... 11, 12, 13, 14, 15, ... 20, 21, 25, ... */ return ($number == 1) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 2 : 3); @@ -2024,7 +2029,7 @@ class user extends session * 1 - ends in 01: 1, 101, 201, ... * 2 - ends in 02: 2, 102, 202, ... * 3 - ends in 03-04: 3, 4, 103, 104, 203, 204, ... - * 4 - everything else: 5, 6, 7, 8, 9, 10, 11, ... + * 4 - everything else: 0, 5, 6, 7, 8, 9, 10, 11, ... */ return ($number % 100 == 1) ? 1 : (($number % 100 == 2) ? 2 : ((($number % 100 == 3) || ($number % 100 == 4)) ? 3 : 4)); @@ -2047,14 +2052,15 @@ class user extends session * 3 - ends in 03-10: 3, 4, ... 10, 103, 104, ... 110, 203, 204, ... * 4 - ends in 11-99: 11, ... 99, 111, 112, ... * 5 - everything else: 100, 101, 102, 200, 201, 202, ... + * 6 - 0 */ - return ($number == 1) ? 1 : (($number == 2) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : 5))); + return ($number == 1) ? 1 : (($number == 2) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : (($number != 0) ? 5 : 6)))); case 13: /** * Families: Semitic (Maltese) * 1 - 1 - * 2 - ends in 01-10: 2, 3, ... 9, 10, 101, 102, ... + * 2 - is 0 or ends in 01-10: 0, 2, 3, ... 9, 10, 101, 102, ... * 3 - ends in 11-19: 11, 12, ... 18, 19, 111, 112, ... * 4 - everything else: 20, 21, ... */ @@ -2065,7 +2071,7 @@ class user extends session * Families: Slavic (Macedonian) * 1 - ends in 1: 1, 11, 21, ... * 2 - ends in 2: 2, 12, 22, ... - * 3 - everything else: 3, 4, ... 10, 13, 14, ... 20, 23, ... + * 3 - everything else: 0, 3, 4, ... 10, 13, 14, ... 20, 23, ... */ return ($number % 10 == 1) ? 1 : (($number % 10 == 2) ? 2 : 3); @@ -2073,7 +2079,7 @@ class user extends session /** * Families: Icelandic * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, 131, ... - * 2 - everything else: 2, 3, ... 10, 11, 12, ... 20, 22, ... + * 2 - everything else: 0, 2, 3, ... 10, 11, 12, ... 20, 22, ... */ return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : 2; } -- cgit v1.2.1 From 3788326d719ca49868cbb9682ceb3197ce7f6804 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 21 Sep 2011 00:43:25 +0200 Subject: [ticket/10345] Remove more useless 0-cases PHPBB3-10345 --- phpBB/language/en/acp/posting.php | 1 - phpBB/language/en/common.php | 17 ----------------- phpBB/language/en/mcp.php | 1 - phpBB/language/en/memberlist.php | 1 - phpBB/language/en/posting.php | 3 --- phpBB/language/en/ucp.php | 2 -- 6 files changed, 25 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/posting.php b/phpBB/language/en/acp/posting.php index 3d920b5340..ab8f57d08b 100644 --- a/phpBB/language/en/acp/posting.php +++ b/phpBB/language/en/acp/posting.php @@ -194,7 +194,6 @@ $lang = array_merge($lang, array( 'SMILIES_WIDTH' => 'Smiley width', 'TOO_MANY_SMILIES' => array( - 0 => 'Limit of %d smilies reached.', 1 => 'Limit of %d smiley reached.', 2 => 'Limit of %d smilies reached.', ), diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index e01578a8ad..b51d34335f 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -114,7 +114,6 @@ $lang = array_merge($lang, array( 'BOARD_UNAVAILABLE' => 'Sorry but the board is temporarily unavailable, please try again in a few minutes.', 'BROWSING_FORUM' => 'Users browsing this forum: %1$s', 'BROWSING_FORUM_GUESTS' => array( - 0 => 'Users browsing this forum: %2$s and 0 guests', 1 => 'Users browsing this forum: %2$s and %1$d guest', 2 => 'Users browsing this forum: %2$s and %1$d guests', ), @@ -126,7 +125,6 @@ $lang = array_merge($lang, array( 'CHANGING_PREFERENCES' => 'Changing board preferences', 'CHANGING_PROFILE' => 'Changing profile settings', 'CHARACTERS' => array( - 0 => '%d characters', 1 => '%d character', 2 => '%d characters', ), @@ -253,12 +251,10 @@ $lang = array_merge($lang, array( 'GROUP_ERR_USER_LONG' => 'Group names cannot exceed 60 characters. The specified group name is too long.', 'GUEST' => 'Guest', 'GUEST_USERS_ONLINE' => array( - 0 => 'There are 0 guest users online', 1 => 'There is %d guest user online', 2 => 'There are %d guest users online', ), 'GUEST_USERS_TOTAL' => array( - 0 => '0 guests', 1 => '%d guest', 2 => '%d guests', ), @@ -271,12 +267,10 @@ $lang = array_merge($lang, array( 'G_NEWLY_REGISTERED' => 'Newly registered users', 'HIDDEN_USERS_ONLINE' => array( - 0 => '0 hidden users', 1 => '%d hidden user', 2 => '%d hidden users', ), 'HIDDEN_USERS_TOTAL' => array( - 0 => '0 hidden', 1 => '%d hidden', 2 => '%d hidden', ), @@ -367,7 +361,6 @@ $lang = array_merge($lang, array( 'NEW_MESSAGE' => 'New message', 'NEW_MESSAGES' => 'New messages', 'NEW_PMS' => array( - 0 => '0 new messages', 1 => '%d new message', 2 => '%d new messages', ), @@ -436,13 +429,11 @@ $lang = array_merge($lang, array( 'ONLINE_BUDDIES' => 'Online friends', // "... :: x registered and y hidden" 'ONLINE_USERS_TOTAL' => array( - 0 => 'In total there are 0 users online :: %2$s and %3$s', 1 => 'In total there is %1$d user online :: %2$s and %3$s', 2 => 'In total there are %1$d users online :: %2$s and %3$s', ), // "... :: x registered, y hidden and z guests" 'ONLINE_USERS_TOTAL_GUESTS' => array( - 0 => 'In total there are 0 users online :: %2$s, %3$s and %4$s', 1 => 'In total there is %1$d user online :: %2$s, %3$s and %4$s', 2 => 'In total there are %1$d users online :: %2$s, %3$s and %4$s', ), @@ -453,7 +444,6 @@ $lang = array_merge($lang, array( 'PASSWORD' => 'Password', 'PIXEL' => 'px', 'PIXELS' => array( - 0 => '%d pixels', 1 => '%d pixel', 2 => '%d pixels', ), @@ -506,12 +496,10 @@ $lang = array_merge($lang, array( 'REGISTERED_USERS' => 'Registered users:', // "... and 2 hidden users online" 'REG_USERS_ONLINE' => array( - 0 => 'There are 0 registered users and %2$s online', 1 => 'There is %1$d registered user and %2$s online', 2 => 'There are %1$d registered users and %2$s online', ), 'REG_USERS_TOTAL' => array( - 0 => '0 registered', 1 => '%d registered', 2 => '%d registered', ), @@ -667,12 +655,10 @@ $lang = array_merge($lang, array( 'TOPIC_UNAPPROVED' => 'This topic has not been approved', 'TOTAL_ATTACHMENTS' => 'Attachment(s)', 'TOTAL_LOGS' => array( - 0 => '0 logs', 1 => '%d log', 2 => '%d logs', ), 'TOTAL_PMS' => array( - 0 => '0 private messages in total', 1 => '%d private message in total', 2 => '%d private messages in total', ), @@ -695,7 +681,6 @@ $lang = array_merge($lang, array( 'UNMARK_ALL' => 'Unmark all', 'UNREAD_MESSAGES' => 'Unread messages', 'UNREAD_PMS' => array( - 0 => '0 unread messages', 1 => '%d unread message', 2 => '%d unread messages', ), @@ -717,7 +702,6 @@ $lang = array_merge($lang, array( 'USER_AVATAR' => 'User avatar', 'USER_CANNOT_READ' => 'You cannot read posts in this forum.', 'USER_POSTS' => array( - 0 => '0 Posts', 1 => '%d Post', 2 => '%d Posts', ), @@ -748,7 +732,6 @@ $lang = array_merge($lang, array( 'VIEW_NEWEST_POST' => 'View first unread post', 'VIEW_NOTES' => 'View user notes', 'VIEW_ONLINE_TIMES' => array( - 0 => 'based on users active over the past %d minutes', 1 => 'based on users active over the past %d minute', 2 => 'based on users active over the past %d minutes', ), diff --git a/phpBB/language/en/mcp.php b/phpBB/language/en/mcp.php index 2d351eb9e0..9008f0327a 100644 --- a/phpBB/language/en/mcp.php +++ b/phpBB/language/en/mcp.php @@ -121,7 +121,6 @@ $lang = array_merge($lang, array( 'LATEST_WARNINGS' => 'Latest 5 warnings', 'LEAVE_SHADOW' => 'Leave shadow topic in place', 'LIST_REPORTS' => array( - 0 => '%d reports', 1 => '%d report', 2 => '%d reports', ), diff --git a/phpBB/language/en/memberlist.php b/phpBB/language/en/memberlist.php index 8138b61ae2..9c36fbe4d0 100644 --- a/phpBB/language/en/memberlist.php +++ b/phpBB/language/en/memberlist.php @@ -94,7 +94,6 @@ $lang = array_merge($lang, array( 'LAST_ACTIVE' => 'Last active', 'LESS_THAN' => 'Less than', 'LIST_USERS' => array( - 0 => '0 users', 1 => '%d user', 2 => '%d users', ), diff --git a/phpBB/language/en/posting.php b/phpBB/language/en/posting.php index a7dbc1bc80..0c8824aabf 100644 --- a/phpBB/language/en/posting.php +++ b/phpBB/language/en/posting.php @@ -162,12 +162,10 @@ $lang = array_merge($lang, array( 'POLL_MAX_OPTIONS_EXPLAIN' => 'This is the number of options each user may select when voting.', 'POLL_OPTIONS' => 'Poll options', 'POLL_OPTIONS_EXPLAIN' => array( - 0 => 'Place each option on a new line. You may enter up to %d options.', 1 => 'Place each option on a new line. You may enter %d option.', 2 => 'Place each option on a new line. You may enter up to %d options.', ), 'POLL_OPTIONS_EDIT_EXPLAIN' => array( - 0 => 'Place each option on a new line. You may enter up to %d options. If you remove or add options all previous votes will be reset.', 1 => 'Place each option on a new line. You may enter %d option. If you remove or add options all previous votes will be reset.', 2 => 'Place each option on a new line. You may enter up to %d options. If you remove or add options all previous votes will be reset.', ), @@ -196,7 +194,6 @@ $lang = array_merge($lang, array( 'PROGRESS_BAR' => 'Progress bar', 'QUOTE_DEPTH_EXCEEDED' => array( - 0 => 'You may embed only %d quotes within each other.', 1 => 'You may embed only %d quote within each other.', 2 => 'You may embed only %d quotes within each other.', ), diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 3f09ccb826..59e5cb1952 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -209,7 +209,6 @@ $lang = array_merge($lang, array( 'FOES_UPDATED' => 'Your foes list has been updated successfully.', 'FOLDER_ADDED' => 'Folder successfully added.', 'FOLDER_MESSAGE_STATUS' => array( - 0 => '%2$d from %1$d messages stored', 1 => '%2$d from %1$d message stored', 2 => '%2$d from %1$d messages stored', ), @@ -219,7 +218,6 @@ $lang = array_merge($lang, array( 'FOLDER_RENAMED' => 'Folder successfully renamed.', 'FOLDER_REMOVED' => 'Folder successfully removed.', 'FOLDER_STATUS_MSG' => array( - 0 => 'Folder is %3$d%% full (%2$d from %1$d messages stored)', 1 => 'Folder is %3$d%% full (%2$d from %1$d message stored)', 2 => 'Folder is %3$d%% full (%2$d from %1$d messages stored)', ), -- cgit v1.2.1 From 454280c6e83a3bf41dbeae2382bb8d36fc8e55e1 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 22 Nov 2011 14:10:16 +0100 Subject: [ticket/10345] Move rule determination code into a new function PHPBB3-10345 --- phpBB/includes/functions.php | 172 +++++++++++++++++++++++++++++++++++++++++++ phpBB/includes/session.php | 154 +------------------------------------- 2 files changed, 173 insertions(+), 153 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index a663286f5f..762676309c 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4181,6 +4181,178 @@ function phpbb_optionset($bit, $set, $data) return $data; } +/** +* Determine which plural form we should use. +* For some languages this is not as simple as for English. +* +* @param $rule int ID of the plural rule we want to use, see http://wiki.phpbb.com/Plural_Rules#Plural_Rules +* @param $number int|float The number we want to get the plural case for +* @return int The plural-case we need to use for the number plural-rule combination +*/ +function phpbb_get_plural_form($rule, $number) +{ + $number = (int) $number; + + if ($rule > 15 || $rule < 0) + { + trigger_error('INVALID_PLURAL_RULE'); + } + + /** + * The following plural rules are based on a list published by the Mozilla Developer Network + * https://developer.mozilla.org/en/Localization_and_Plurals + */ + switch ($rule) + { + case 0: + /** + * Families: Asian (Chinese, Japanese, Korean, Vietnamese), Persian, Turkic/Altaic (Turkish), Thai, Lao + * 1 - everything: 0, 1, 2, ... + */ + return 1; + + case 1: + /** + * Families: Germanic (Danish, Dutch, English, Faroese, Frisian, German, Norwegian, Swedish), Finno-Ugric (Estonian, Finnish, Hungarian), Language isolate (Basque), Latin/Greek (Greek), Semitic (Hebrew), Romanic (Italian, Portuguese, Spanish, Catalan) + * 1 - 1 + * 2 - everything else: 0, 2, 3, ... + */ + return ($number == 1) ? 1 : 2; + + case 2: + /** + * Families: Romanic (French, Brazilian Portuguese) + * 1 - 0, 1 + * 2 - everything else: 2, 3, ... + */ + return (($number == 0) || ($number == 1)) ? 1 : 2; + + case 3: + /** + * Families: Baltic (Latvian) + * 1 - 0 + * 2 - ends in 1, not 11: 1, 21, ... 101, 121, ... + * 3 - everything else: 2, 3, ... 10, 11, 12, ... 20, 22, ... + */ + return ($number == 0) ? 1 : ((($number % 10 == 1) && ($number % 100 != 11)) ? 2 : 3); + + case 4: + /** + * Families: Celtic (Scottish Gaelic) + * 1 - is 1 or 11: 1, 11 + * 2 - is 2 or 12: 2, 12 + * 3 - others between 3 and 19: 3, 4, ... 10, 13, ... 18, 19 + * 4 - everything else: 0, 20, 21, ... + */ + return ($number == 1 || $number == 11) ? 1 : (($number == 2 || $number == 12) ? 2 : (($number >= 3 && $number <= 19) ? 3 : 4)); + + case 5: + /** + * Families: Romanic (Romanian) + * 1 - 1 + * 2 - is 0 or ends in 01-19: 0, 2, 3, ... 19, 101, 102, ... 119, 201, ... + * 3 - everything else: 20, 21, ... + */ + return ($number == 1) ? 1 : ((($number == 0) || (($number % 100 > 0) && ($number % 100 < 20))) ? 2 : 3); + + case 6: + /** + * Families: Baltic (Lithuanian) + * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ... + * 2 - ends in 0 or ends in 10-20: 0, 10, 11, 12, ... 19, 20, 30, 40, ... + * 3 - everything else: 2, 3, ... 8, 9, 22, 23, ... 29, 32, 33, ... + */ + return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 < 2) || (($number % 100 >= 10) && ($number % 100 < 20))) ? 2 : 3); + + case 7: + /** + * Families: Slavic (Croatian, Serbian, Russian, Ukrainian) + * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ... + * 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ... + * 3 - everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, ... + */ + return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 2 : 3); + + case 8: + /** + * Families: Slavic (Slovak, Czech) + * 1 - 1 + * 2 - 2, 3, 4 + * 3 - everything else: 0, 5, 6, 7, ... + */ + return ($number == 1) ? 1 : ((($number >= 2) && ($number <= 4)) ? 2 : 3); + + case 9: + /** + * Families: Slavic (Polish) + * 1 - 1 + * 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ... 104, 122, ... + * 3 - everything else: 0, 5, 6, ... 11, 12, 13, 14, 15, ... 20, 21, 25, ... + */ + return ($number == 1) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 2 : 3); + + case 10: + /** + * Families: Slavic (Slovenian, Sorbian) + * 1 - ends in 01: 1, 101, 201, ... + * 2 - ends in 02: 2, 102, 202, ... + * 3 - ends in 03-04: 3, 4, 103, 104, 203, 204, ... + * 4 - everything else: 0, 5, 6, 7, 8, 9, 10, 11, ... + */ + return ($number % 100 == 1) ? 1 : (($number % 100 == 2) ? 2 : ((($number % 100 == 3) || ($number % 100 == 4)) ? 3 : 4)); + + case 11: + /** + * Families: Celtic (Irish Gaeilge) + * 1 - 1 + * 2 - 2 + * 3 - is 3-6: 3, 4, 5, 6 + * 4 - is 7-10: 7, 8, 9, 10 + * 5 - everything else: 0, 11, 12, ... + */ + return ($number == 1) ? 1 : (($number == 2) ? 2 : (($number >= 3 && $number <= 6) ? 3 : (($number >= 7 && $number <= 10) ? 4 : 5))); + + case 12: + /** + * Families: Semitic (Arabic) + * 1 - 1 + * 2 - 2 + * 3 - ends in 03-10: 3, 4, ... 10, 103, 104, ... 110, 203, 204, ... + * 4 - ends in 11-99: 11, ... 99, 111, 112, ... + * 5 - everything else: 100, 101, 102, 200, 201, 202, ... + * 6 - 0 + */ + return ($number == 1) ? 1 : (($number == 2) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : (($number != 0) ? 5 : 6)))); + + case 13: + /** + * Families: Semitic (Maltese) + * 1 - 1 + * 2 - is 0 or ends in 01-10: 0, 2, 3, ... 9, 10, 101, 102, ... + * 3 - ends in 11-19: 11, 12, ... 18, 19, 111, 112, ... + * 4 - everything else: 20, 21, ... + */ + return ($number == 1) ? 1 : ((($number == 0) || (($number % 100 > 1) && ($number % 100 < 11))) ? 2 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 3 : 4)); + + case 14: + /** + * Families: Slavic (Macedonian) + * 1 - ends in 1: 1, 11, 21, ... + * 2 - ends in 2: 2, 12, 22, ... + * 3 - everything else: 0, 3, 4, ... 10, 13, 14, ... 20, 23, ... + */ + return ($number % 10 == 1) ? 1 : (($number % 10 == 2) ? 2 : 3); + + case 15: + /** + * Families: Icelandic + * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, 131, ... + * 2 - everything else: 0, 2, 3, ... 10, 11, 12, ... 20, 22, ... + */ + return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : 2; + } +} + /** * Login using http authenticate. * diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index c78d0f819a..52eecd695e 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1930,159 +1930,7 @@ class user extends session trigger_error('INVALID_PLURAL_RULE'); } - /** - * The following plural rules are based on a list published by the Mozilla Developer Network - * https://developer.mozilla.org/en/Localization_and_Plurals - */ - switch ($plural_rule) - { - case 0: - /** - * Families: Asian (Chinese, Japanese, Korean, Vietnamese), Persian, Turkic/Altaic (Turkish), Thai, Lao - * 1 - everything: 0, 1, 2, ... - */ - return 1; - - case 1: - /** - * Families: Germanic (Danish, Dutch, English, Faroese, Frisian, German, Norwegian, Swedish), Finno-Ugric (Estonian, Finnish, Hungarian), Language isolate (Basque), Latin/Greek (Greek), Semitic (Hebrew), Romanic (Italian, Portuguese, Spanish, Catalan) - * 1 - 1 - * 2 - everything else: 0, 2, 3, ... - */ - return ($number == 1) ? 1 : 2; - - case 2: - /** - * Families: Romanic (French, Brazilian Portuguese) - * 1 - 0, 1 - * 2 - everything else: 2, 3, ... - */ - return (($number == 0) || ($number == 1)) ? 1 : 2; - - case 3: - /** - * Families: Baltic (Latvian) - * 1 - 0 - * 2 - ends in 1, not 11: 1, 21, ... 101, 121, ... - * 3 - everything else: 2, 3, ... 10, 11, 12, ... 20, 22, ... - */ - return ($number == 0) ? 1 : ((($number % 10 == 1) && ($number % 100 != 11)) ? 2 : 3); - - case 4: - /** - * Families: Celtic (Scottish Gaelic) - * 1 - is 1 or 11: 1, 11 - * 2 - is 2 or 12: 2, 12 - * 3 - others between 3 and 19: 3, 4, ... 10, 13, ... 18, 19 - * 4 - everything else: 0, 20, 21, ... - */ - return ($number == 1 || $number == 11) ? 1 : (($number == 2 || $number == 12) ? 2 : (($number >= 3 && $number <= 19) ? 3 : 4)); - - case 5: - /** - * Families: Romanic (Romanian) - * 1 - 1 - * 2 - is 0 or ends in 01-19: 0, 2, 3, ... 19, 101, 102, ... 119, 201, ... - * 3 - everything else: 20, 21, ... - */ - return ($number == 1) ? 1 : ((($number == 0) || (($number % 100 > 0) && ($number % 100 < 20))) ? 2 : 3); - - case 6: - /** - * Families: Baltic (Lithuanian) - * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ... - * 2 - ends in 0 or ends in 10-20: 0, 10, 11, 12, ... 19, 20, 30, 40, ... - * 3 - everything else: 2, 3, ... 8, 9, 22, 23, ... 29, 32, 33, ... - */ - return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 < 2) || (($number % 100 >= 10) && ($number % 100 < 20))) ? 2 : 3); - - case 7: - /** - * Families: Slavic (Croatian, Serbian, Russian, Ukrainian) - * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, ... - * 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ... - * 3 - everything else: 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 25, 26, ... - */ - return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 10) || ($number % 100 >= 20))) ? 2 : 3); - - case 8: - /** - * Families: Slavic (Slovak, Czech) - * 1 - 1 - * 2 - 2, 3, 4 - * 3 - everything else: 0, 5, 6, 7, ... - */ - return ($number == 1) ? 1 : ((($number >= 2) && ($number <= 4)) ? 2 : 3); - - case 9: - /** - * Families: Slavic (Polish) - * 1 - 1 - * 2 - ends in 2-4, not 12-14: 2, 3, 4, 22, 23, 24, 32, ... 104, 122, ... - * 3 - everything else: 0, 5, 6, ... 11, 12, 13, 14, 15, ... 20, 21, 25, ... - */ - return ($number == 1) ? 1 : ((($number % 10 >= 2) && ($number % 10 <= 4) && (($number % 100 < 12) || ($number % 100 > 14))) ? 2 : 3); - - case 10: - /** - * Families: Slavic (Slovenian, Sorbian) - * 1 - ends in 01: 1, 101, 201, ... - * 2 - ends in 02: 2, 102, 202, ... - * 3 - ends in 03-04: 3, 4, 103, 104, 203, 204, ... - * 4 - everything else: 0, 5, 6, 7, 8, 9, 10, 11, ... - */ - return ($number % 100 == 1) ? 1 : (($number % 100 == 2) ? 2 : ((($number % 100 == 3) || ($number % 100 == 4)) ? 3 : 4)); - - case 11: - /** - * Families: Celtic (Irish Gaeilge) - * 1 - 1 - * 2 - 2 - * 3 - is 3-6: 3, 4, 5, 6 - * 4 - is 7-10: 7, 8, 9, 10 - * 5 - everything else: 0, 11, 12, ... - */ - return ($number == 1) ? 1 : (($number == 2) ? 2 : (($number >= 3 && $number <= 6) ? 3 : (($number >= 7 && $number <= 10) ? 4 : 5))); - - case 12: - /** - * Families: Semitic (Arabic) - * 1 - 1 - * 2 - 2 - * 3 - ends in 03-10: 3, 4, ... 10, 103, 104, ... 110, 203, 204, ... - * 4 - ends in 11-99: 11, ... 99, 111, 112, ... - * 5 - everything else: 100, 101, 102, 200, 201, 202, ... - * 6 - 0 - */ - return ($number == 1) ? 1 : (($number == 2) ? 2 : ((($number % 100 >= 3) && ($number % 100 <= 10)) ? 3 : ((($number % 100 >= 11) && ($number % 100 <= 99)) ? 4 : (($number != 0) ? 5 : 6)))); - - case 13: - /** - * Families: Semitic (Maltese) - * 1 - 1 - * 2 - is 0 or ends in 01-10: 0, 2, 3, ... 9, 10, 101, 102, ... - * 3 - ends in 11-19: 11, 12, ... 18, 19, 111, 112, ... - * 4 - everything else: 20, 21, ... - */ - return ($number == 1) ? 1 : ((($number == 0) || (($number % 100 > 1) && ($number % 100 < 11))) ? 2 : ((($number % 100 > 10) && ($number % 100 < 20)) ? 3 : 4)); - - case 14: - /** - * Families: Slavic (Macedonian) - * 1 - ends in 1: 1, 11, 21, ... - * 2 - ends in 2: 2, 12, 22, ... - * 3 - everything else: 0, 3, 4, ... 10, 13, 14, ... 20, 23, ... - */ - return ($number % 10 == 1) ? 1 : (($number % 10 == 2) ? 2 : 3); - - case 15: - /** - * Families: Icelandic - * 1 - ends in 1, not 11: 1, 21, 31, ... 101, 121, 131, ... - * 2 - everything else: 0, 2, 3, ... 10, 11, 12, ... 20, 22, ... - */ - return (($number % 10 == 1) && ($number % 100 != 11)) ? 1 : 2; - } + return phpbb_get_plural_form($plural_rule, $number); } /** -- cgit v1.2.1 From 007457f18295cd4019684e1470110dd4b50de8cf Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 26 Nov 2011 22:17:43 +0100 Subject: [prep-release-3.0.10] Bumping version number for 3.0.10-RC2. --- phpBB/includes/constants.php | 2 +- phpBB/install/database_update.php | 9 ++++++++- phpBB/install/schemas/schema_data.sql | 2 +- 3 files changed, 10 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php index ec7b8c7123..2ade1ac95e 100644 --- a/phpBB/includes/constants.php +++ b/phpBB/includes/constants.php @@ -25,7 +25,7 @@ if (!defined('IN_PHPBB')) */ // phpBB Version -define('PHPBB_VERSION', '3.0.10-RC1'); +define('PHPBB_VERSION', '3.0.10-RC2'); // QA-related // define('PHPBB_QA', 1); diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 57e2ef73b8..bbc4261adc 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -8,7 +8,7 @@ * */ -define('UPDATES_TO_VERSION', '3.0.10-RC1'); +define('UPDATES_TO_VERSION', '3.0.10-RC2'); // Enter any version to update from to test updates. The version within the db will not be updated. define('DEBUG_FROM_VERSION', false); @@ -987,6 +987,9 @@ function database_update_info() '3.0.9-RC4' => array(), // No changes from 3.0.9 to 3.0.10-RC1 '3.0.9' => array(), + // No changes from 3.0.10-RC1 to 3.0.10-RC2 + '3.0.10-RC1' => array(), + /** @todo DROP LOGIN_ATTEMPT_TABLE.attempt_id in 3.0.11-RC1 */ ); @@ -2006,6 +2009,10 @@ function change_database_data(&$no_updates, $version) $no_updates = false; break; + + // No changes from 3.0.10-RC1 to 3.0.10-RC2 + case '3.0.10-RC1': + break; } } diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index 4f5bf23c58..5cbaba3d1f 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -246,7 +246,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_page', INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.10-RC1'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.10-RC2'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400'); -- cgit v1.2.1 From 77e00d14a196d14910bdf2275ab01380b7b7f18f Mon Sep 17 00:00:00 2001 From: rxu Date: Sat, 26 Nov 2011 01:30:03 +0800 Subject: [ticket/10497] Fix SQL error when guest visits forum with unread topic Regression from the ticket PHPBB3-9008 fix. When topic marking was enabled for guests, and a guest visited a forum with a new topic which is marked unread, the built SQL missed an alias for a TOPICS_TABLE which resulted in the following error: Unknown column 't.topic_approved' in 'where clause' [1054] The fix is to add an alias for the table. PHPBB3-10497 PHPBB3-9008 --- phpBB/includes/functions.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 944e53052b..7ce83b871a 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1943,11 +1943,11 @@ function update_forum_tracking_info($forum_id, $forum_last_post_time, $f_mark_ti } else { - $sql = 'SELECT topic_id - FROM ' . TOPICS_TABLE . ' - WHERE forum_id = ' . $forum_id . ' - AND topic_last_post_time > ' . $mark_time_forum . ' - AND topic_moved_id = 0 ' . + $sql = 'SELECT t.topic_id + FROM ' . TOPICS_TABLE . ' t + WHERE t.forum_id = ' . $forum_id . ' + AND t.topic_last_post_time > ' . $mark_time_forum . ' + AND t.topic_moved_id = 0 ' . $sql_update_unapproved; $result = $db->sql_query($sql); -- cgit v1.2.1 From 799be4469a99176bc14cf602c16995c260b10162 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 27 Nov 2011 16:23:15 +0100 Subject: [prep-release-3.0.10] Update Changelog for 3.0.10-RC2 release. --- phpBB/docs/CHANGELOG.html | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'phpBB') diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html index a4ed1b5c86..a58c384f04 100644 --- a/phpBB/docs/CHANGELOG.html +++ b/phpBB/docs/CHANGELOG.html @@ -169,6 +169,12 @@
              • [PHPBB3-10437] - Announcements on moderation queue are not hidden
              • [PHPBB3-10446] - Unencoded 8bit characters in email headers
              • [PHPBB3-10452] - XHTML error when printing a PM
              • +
              • [PHPBB3-10461] - MCP's recent actions list is empty
              • +
              • [PHPBB3-10479] - Remove PostgreSQL version numbers from driver's language string
              • +
              • [PHPBB3-10485] - XHTML error in Prosilver - index and viewforum
              • +
              • [PHPBB3-10488] - Database updater for 3.0.10-RC1 overwrites config variable email_max_chunk_size without checking for custom value
              • +
              • [PHPBB3-10490] - MCP Layout broken in ProSilver when screen is resized to less 1200 pixels
              • +
              • [PHPBB3-10497] - SQL error when guest visits forum with unread topic

              Improvement

                @@ -214,6 +220,8 @@
              • [PHPBB3-9689] - Scripts and utilities
              • [PHPBB3-10003] - Resolve db_tools proliferation
              • [PHPBB3-10313] - Include slow unit tests when running build script
              • +
              • [PHPBB3-10483] - Test suite does not run with MySQL strict mode
              • +
              • [PHPBB3-10486] - Create git shortlog and git diff --stat in build script

              1.ii. Changes since 3.0.8

              -- cgit v1.2.1 From 2fac1d4c2323797dc4ef977cea4dc3fb894f895a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sun, 27 Nov 2011 21:41:22 +0100 Subject: [ticket/10345] Fix parsing error in language/en/viewtopic.php PHPBB3-10345 --- phpBB/language/en/viewtopic.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/language/en/viewtopic.php b/phpBB/language/en/viewtopic.php index 5bfc4907ce..e59b33d0a8 100644 --- a/phpBB/language/en/viewtopic.php +++ b/phpBB/language/en/viewtopic.php @@ -56,7 +56,7 @@ $lang = array_merge($lang, array( 'EDITED_TIMES_TOTAL' => array( 1 => 'Last edited by %2$s on %3$s, edited %1$d time in total.', 2 => 'Last edited by %2$s on %3$s, edited %1$d times in total.', - ) + ), 'EMAIL_TOPIC' => 'E-mail friend', 'ERROR_NO_ATTACHMENT' => 'The selected attachment does not exist anymore.', -- cgit v1.2.1 From 6472a270e0faf39c7dd9b73a8948f19254e0a17e Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sun, 27 Nov 2011 21:43:07 +0100 Subject: [ticket/10345] Add cases for 1 pixel height on MAX_FLASH and MAX_IMG sizes PHPBB3-10345 --- phpBB/language/en/posting.php | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'phpBB') diff --git a/phpBB/language/en/posting.php b/phpBB/language/en/posting.php index 0c8824aabf..9119b97ebe 100644 --- a/phpBB/language/en/posting.php +++ b/phpBB/language/en/posting.php @@ -123,15 +123,19 @@ $lang = array_merge($lang, array( 'MAX_FONT_SIZE_EXCEEDED' => 'You may only use fonts up to size %d.', 'MAX_FLASH_HEIGHT_EXCEEDED' => array( + 1 => 'Your flash files may only be up to %d pixel high.', 2 => 'Your flash files may only be up to %d pixels high.', ), 'MAX_FLASH_WIDTH_EXCEEDED' => array( + 1 => 'Your flash files may only be up to %d pixel wide.', 2 => 'Your flash files may only be up to %d pixels wide.', ), 'MAX_IMG_HEIGHT_EXCEEDED' => array( + 1 => 'Your images may only be up to %1$d pixel high.', 2 => 'Your images may only be up to %1$d pixels high.', ), 'MAX_IMG_WIDTH_EXCEEDED' => array( + 1 => 'Your images may only be up to %d pixel wide.', 2 => 'Your images may only be up to %d pixels wide.', ), -- cgit v1.2.1 From f88e89900f34f6165a9002c3a2cb3307310584ee Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 28 Nov 2011 10:35:43 +0100 Subject: [ticket/10503] Debug error "Invalid arguments" when previewing edits Empty value of poll_options should be an empty array, so that sizeof() is 0. PHPBB3-9776 PHPBB3-10503 --- phpBB/posting.php | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/posting.php b/phpBB/posting.php index ea3b53e939..76c8100c78 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -895,7 +895,7 @@ if ($submit || $preview || $refresh) $message_parser->parse_poll($poll); - $post_data['poll_options'] = (isset($poll['poll_options'])) ? $poll['poll_options'] : ''; + $post_data['poll_options'] = (isset($poll['poll_options'])) ? $poll['poll_options'] : array(); $post_data['poll_title'] = (isset($poll['poll_title'])) ? $poll['poll_title'] : ''; /* We reset votes, therefore also allow removing options @@ -918,7 +918,8 @@ if ($submit || $preview || $refresh) 'poll_options' => array(), ); - $post_data['poll_options'] = $post_data['poll_title'] = ''; + $post_data['poll_options'] = array(); + $post_data['poll_title'] = ''; $post_data['poll_start'] = $post_data['poll_length'] = $post_data['poll_max_options'] = $post_data['poll_last_vote'] = $post_data['poll_vote_change'] = 0; } else if (!$auth->acl_get('f_poll', $forum_id) && ($mode == 'edit') && ($post_id == $post_data['topic_first_post_id']) && ($original_poll_data['poll_title'] != '')) @@ -934,7 +935,7 @@ if ($submit || $preview || $refresh) $message_parser->parse_poll($poll); - $post_data['poll_options'] = (isset($poll['poll_options'])) ? $poll['poll_options'] : ''; + $post_data['poll_options'] = (isset($poll['poll_options'])) ? $poll['poll_options'] : array(); $post_data['poll_title'] = (isset($poll['poll_title'])) ? $poll['poll_title'] : ''; } else -- cgit v1.2.1 From cb4e72298b58e6bbb8ced3cf05384239bf285773 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 28 Nov 2011 11:21:43 +0100 Subject: [ticket/10501] Fix description of table prefixes They must start with a letter, not an alphanumeric character PHPBB3-10501 --- phpBB/language/en/install.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index c4b100187f..f69ca40613 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -232,7 +232,7 @@ $lang = array_merge($lang, array( 'INST_ERR' => 'Installation error', 'INST_ERR_DB_CONNECT' => 'Could not connect to the database, see error message below.', 'INST_ERR_DB_FORUM_PATH' => 'The database file specified is within your board directory tree. You should put this file in a non web-accessible location.', - 'INST_ERR_DB_INVALID_PREFIX'=> 'The prefix you entered is invalid. It must start with an alphanumeric character and must only contain alphanumeric characters, numbers and underscores.', + 'INST_ERR_DB_INVALID_PREFIX'=> 'The prefix you entered is invalid. It must start with a letter and must only contain letters, numbers and underscores.', 'INST_ERR_DB_NO_ERROR' => 'No error message given.', 'INST_ERR_DB_NO_MYSQLI' => 'The version of MySQL installed on this machine is incompatible with the “MySQL with MySQLi Extension†option you have selected. Please try the “MySQL†option instead.', 'INST_ERR_DB_NO_SQLITE' => 'The version of the SQLite extension you have installed is too old, it must be upgraded to at least 2.8.2.', @@ -353,7 +353,7 @@ $lang = array_merge($lang, array( 'TABLES_MISSING' => 'Could not find these tables
              » %s.', 'TABLE_PREFIX' => 'Prefix for tables in database', - 'TABLE_PREFIX_EXPLAIN' => 'The prefix must start with an alphanumeric character and must only contain alphanumeric characters, numbers and underscores.', + 'TABLE_PREFIX_EXPLAIN' => 'The prefix must start with a letter and must only contain letters, numbers and underscores.', 'TABLE_PREFIX_SAME' => 'The table prefix needs to be the one used by the software you are converting from.
              » Specified table prefix was %s.', 'TESTS_PASSED' => 'Tests passed', 'TESTS_FAILED' => 'Tests failed', -- cgit v1.2.1 From 593ac9ed4318c68e56bb2bdfa42adb2126aae994 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 28 Nov 2011 23:10:01 +0100 Subject: [prep-release-3.0.10] Remove duplicate ticket PHPBB3-10490 from changelog. --- phpBB/docs/CHANGELOG.html | 1 - 1 file changed, 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html index a58c384f04..39d3e24b13 100644 --- a/phpBB/docs/CHANGELOG.html +++ b/phpBB/docs/CHANGELOG.html @@ -173,7 +173,6 @@
            • [PHPBB3-10479] - Remove PostgreSQL version numbers from driver's language string
            • [PHPBB3-10485] - XHTML error in Prosilver - index and viewforum
            • [PHPBB3-10488] - Database updater for 3.0.10-RC1 overwrites config variable email_max_chunk_size without checking for custom value
            • -
            • [PHPBB3-10490] - MCP Layout broken in ProSilver when screen is resized to less 1200 pixels
            • [PHPBB3-10497] - SQL error when guest visits forum with unread topic

            Improvement

            -- cgit v1.2.1 From 8f1f42cc6cfeca5bf0f9b4f5ff963227fc090fd2 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 29 Nov 2011 19:59:31 +0100 Subject: [ticket/10502] Fix typo in changelog. 'red' should have been 'read'. PHPBB3-10502 --- phpBB/docs/CHANGELOG.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html index 39d3e24b13..a4bbfb7d7f 100644 --- a/phpBB/docs/CHANGELOG.html +++ b/phpBB/docs/CHANGELOG.html @@ -178,7 +178,7 @@

            Improvement

            • [PHPBB3-8616] - Add direct link to PM to notification message
            • -
            • [PHPBB3-9036] - Forums that can be listed but not red expose forum information
            • +
            • [PHPBB3-9036] - Forums that can be listed but not read expose forum information
            • [PHPBB3-9297] - Add support for Extended Passive Mode (EPSV) in class ftp_fsock to better support IPv6 connections.
            • [PHPBB3-9307] - Mass email $max_chunk_size
            • [PHPBB3-9361] - Edit account settings - Improved clarification needed
            • -- cgit v1.2.1 From b790d2e2839850c053b6fecc4f5d767746c47f20 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 30 Nov 2011 21:03:29 +0100 Subject: [ticket/10345] Add documentation and phpbb_ prefix to the new avatar functions PHPBB3-10345 --- phpBB/includes/acp/acp_groups.php | 6 +++--- phpBB/includes/acp/acp_users.php | 2 +- phpBB/includes/functions_user.php | 24 ++++++++++++++++++------ phpBB/includes/ucp/ucp_groups.php | 6 +++--- phpBB/includes/ucp/ucp_profile.php | 2 +- 5 files changed, 26 insertions(+), 14 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php index ea4d5f35cb..98b0e4dc56 100644 --- a/phpBB/includes/acp/acp_groups.php +++ b/phpBB/includes/acp/acp_groups.php @@ -371,7 +371,7 @@ class acp_groups { if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height']) { - $error[] = avatar_error_wrong_size($data['width'], $data['height']); + $error[] = phpbb_avatar_error_wrong_size($data['width'], $data['height']); } } @@ -381,7 +381,7 @@ class acp_groups { if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height']) { - $error[] = avatar_error_wrong_size($data['width'], $data['height']); + $error[] = phpbb_avatar_error_wrong_size($data['width'], $data['height']); } } } @@ -627,7 +627,7 @@ class acp_groups 'U_BACK' => $u_back, 'U_SWATCH' => append_sid("{$phpbb_admin_path}swatch.$phpEx", 'form=settings&name=group_colour'), 'U_ACTION' => "{$this->u_action}&action=$action&g=$group_id", - 'L_AVATAR_EXPLAIN' => avatar_explanation_string(), + 'L_AVATAR_EXPLAIN' => phpbb_avatar_explanation_string(), )); return; diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index a41fd3d17a..c1ad28ca14 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1748,7 +1748,7 @@ class acp_users 'USER_AVATAR_WIDTH' => $user_row['user_avatar_width'], 'USER_AVATAR_HEIGHT' => $user_row['user_avatar_height'], - 'L_AVATAR_EXPLAIN' => avatar_explanation_string() + 'L_AVATAR_EXPLAIN' => phpbb_avatar_explanation_string(), )); break; diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index e3537fe328..5631928f96 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -2039,7 +2039,7 @@ function avatar_remote($data, &$error) { if ($width > $config['avatar_max_width'] || $height > $config['avatar_max_height']) { - $error[] = avatar_error_wrong_size($width, $height); + $error[] = phpbb_avatar_error_wrong_size($width, $height); return false; } } @@ -2048,7 +2048,7 @@ function avatar_remote($data, &$error) { if ($width < $config['avatar_min_width'] || $height < $config['avatar_min_height']) { - $error[] = avatar_error_wrong_size($width, $height); + $error[] = phpbb_avatar_error_wrong_size($width, $height); return false; } } @@ -2388,7 +2388,7 @@ function avatar_process_user(&$error, $custom_userdata = false, $can_upload = nu { if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height']) { - $error[] = avatar_error_wrong_size($data['width'], $data['height']); + $error[] = phpbb_avatar_error_wrong_size($data['width'], $data['height']); } } @@ -2398,7 +2398,7 @@ function avatar_process_user(&$error, $custom_userdata = false, $can_upload = nu { if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height']) { - $error[] = avatar_error_wrong_size($data['width'], $data['height']); + $error[] = phpbb_avatar_error_wrong_size($data['width'], $data['height']); } } } @@ -2444,7 +2444,14 @@ function avatar_process_user(&$error, $custom_userdata = false, $can_upload = nu return (sizeof($error)) ? false : true; } -function avatar_error_wrong_size($width, $height) +/** +* Returns a language string with the avatar size of the new avatar and the allowed maximum and minimum +* +* @param $width int The width of the new uploaded/selected avatar +* @param $height int The height of the new uploaded/selected avatar +* @return string +*/ +function phpbb_avatar_error_wrong_size($width, $height) { global $config, $user; @@ -2457,7 +2464,12 @@ function avatar_error_wrong_size($width, $height) $user->lang('PIXELS', (int) $height)); } -function avatar_explanation_string() +/** +* Returns an explanation string with maximum avatar settings +* +* @return string +*/ +function phpbb_avatar_explanation_string() { global $config, $user; diff --git a/phpBB/includes/ucp/ucp_groups.php b/phpBB/includes/ucp/ucp_groups.php index e3e4e8ce22..f2e2e616b7 100644 --- a/phpBB/includes/ucp/ucp_groups.php +++ b/phpBB/includes/ucp/ucp_groups.php @@ -561,7 +561,7 @@ class ucp_groups { if ($data['width'] > $config['avatar_max_width'] || $data['height'] > $config['avatar_max_height']) { - $error[] = avatar_error_wrong_size($data['width'], $data['height']); + $error[] = phpbb_avatar_error_wrong_size($data['width'], $data['height']); } } @@ -571,7 +571,7 @@ class ucp_groups { if ($data['width'] < $config['avatar_min_width'] || $data['height'] < $config['avatar_min_height']) { - $error[] = avatar_error_wrong_size($data['width'], $data['height']); + $error[] = phpbb_avatar_error_wrong_size($data['width'], $data['height']); } } } @@ -732,7 +732,7 @@ class ucp_groups 'U_SWATCH' => append_sid("{$phpbb_root_path}adm/swatch.$phpEx", 'form=ucp&name=group_colour'), 'S_UCP_ACTION' => $this->u_action . "&action=$action&g=$group_id", - 'L_AVATAR_EXPLAIN' => avatar_explanation_string(), + 'L_AVATAR_EXPLAIN' => phpbb_avatar_explanation_string(), )); break; diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index c2082c99f6..6eb11e6e59 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -602,7 +602,7 @@ class ucp_profile 'S_FORM_ENCTYPE' => ($can_upload && ($config['allow_avatar_upload'] || $config['allow_avatar_remote_upload'])) ? ' enctype="multipart/form-data"' : '', - 'L_AVATAR_EXPLAIN' => avatar_explanation_string(), + 'L_AVATAR_EXPLAIN' => phpbb_avatar_explanation_string(), )); if ($config['allow_avatar'] && $display_gallery && $auth->acl_get('u_chgavatar') && $config['allow_avatar_local']) -- cgit v1.2.1 From b195fce0a47932775dfd47159c6f40509318dbaf Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 30 Nov 2011 21:06:04 +0100 Subject: [ticket/10345] Remove doubled check for valid plural rule PHPBB3-10345 --- phpBB/includes/session.php | 4 ---- 1 file changed, 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 52eecd695e..eb84cd81fe 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1925,10 +1925,6 @@ class user extends session // Default to English system $plural_rule = ($force_rule !== false) ? $force_rule : ((isset($this->lang['PLURAL_RULE'])) ? $this->lang['PLURAL_RULE'] : 1); - if ($plural_rule > 15 || $plural_rule < 0) - { - trigger_error('INVALID_PLURAL_RULE'); - } return phpbb_get_plural_form($plural_rule, $number); } -- cgit v1.2.1 From dd99675f7223b0fb659e4146544969e2aa978fa9 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 30 Nov 2011 21:07:53 +0100 Subject: [ticket/10345] Document behaviour for floating numbers on phpbb_get_plural_form The numbers are floored by casting to int. PHPBB3-10345 --- phpBB/includes/functions.php | 2 +- phpBB/includes/session.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 762676309c..901caa6f09 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4186,7 +4186,7 @@ function phpbb_optionset($bit, $set, $data) * For some languages this is not as simple as for English. * * @param $rule int ID of the plural rule we want to use, see http://wiki.phpbb.com/Plural_Rules#Plural_Rules -* @param $number int|float The number we want to get the plural case for +* @param $number int|float The number we want to get the plural case for. Float numbers are floored. * @return int The plural-case we need to use for the number plural-rule combination */ function phpbb_get_plural_form($rule, $number) diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index eb84cd81fe..808d1a4a7f 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1914,7 +1914,7 @@ class user extends session * Determine which plural form we should use. * For some languages this is not as simple as for English. * - * @param $number int|float The number we want to get the plural case for + * @param $number int|float The number we want to get the plural case for. Float numbers are floored. * @param $force_rule mixed False to use the plural rule of the language package * or an integer to force a certain plural rule * @return int The plural-case we need to use for the number plural-rule combination -- cgit v1.2.1 From 65e6ab55302e5d0c30fa86e06a460fed8167b84a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 30 Nov 2011 21:23:00 +0100 Subject: [ticket/10345] Return the language key when the key has an empty array PHPBB3-10345 --- phpBB/includes/session.php | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 808d1a4a7f..401cb0d371 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1862,6 +1862,11 @@ class user extends session $args[0] = $lang; return call_user_func_array('sprintf', $args); } + else if (sizeof($lang) == 0) + { + // If the language entry is an empty array, we just return the language key + return $args[0]; + } // It is an array... now handle different nullar/singular/plural forms $key_found = false; -- cgit v1.2.1 From c1311faebf01db1cd0f27420af31c326b0270d37 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 30 Nov 2011 21:36:56 +0100 Subject: [ticket/10345] Check directly whether the key to use exists PHPBB3-10345 --- phpBB/includes/session.php | 24 ++++++++++++++++-------- 1 file changed, 16 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 401cb0d371..fcbe8aed2c 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1886,17 +1886,25 @@ class user extends session else { $use_plural_form = $this->get_plural_form($args[$i]); - $numbers = array_keys($lang); - - foreach ($numbers as $num) + if (isset($lang[$use_plural_form])) { - if ($num > $use_plural_form) + // The key we should use exists, so we use it. + $key_found = $use_plural_form; + } + else + { + // If the key we need to use does not exist, we fall back to the previous one. + $numbers = array_keys($lang); + + foreach ($numbers as $num) { - // If the key we need to use does not exist, we fall back to the previous one. - break; - } + if ($num > $use_plural_form) + { + break; + } - $key_found = $num; + $key_found = $num; + } } break; } -- cgit v1.2.1 From 74ae7d03391c4a836364a3e63881f6079837a8e4 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 1 Dec 2011 01:46:33 +0200 Subject: [ticket/10399] Correctly encoding template component urls (3.0) Correctly encoding template component urls PHPBB3-10399 --- phpBB/includes/functions.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index c2b099d48a..98a2b3028b 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4612,11 +4612,11 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'S_SEARCH_HIDDEN_FIELDS' => build_hidden_fields($s_search_hidden_fields), - 'T_THEME_PATH' => "{$web_path}styles/" . $user->theme['theme_path'] . '/theme', - 'T_TEMPLATE_PATH' => "{$web_path}styles/" . $user->theme['template_path'] . '/template', - 'T_SUPER_TEMPLATE_PATH' => (isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? "{$web_path}styles/" . $user->theme['template_inherit_path'] . '/template' : "{$web_path}styles/" . $user->theme['template_path'] . '/template', - 'T_IMAGESET_PATH' => "{$web_path}styles/" . $user->theme['imageset_path'] . '/imageset', - 'T_IMAGESET_LANG_PATH' => "{$web_path}styles/" . $user->theme['imageset_path'] . '/imageset/' . $user->lang_name, + 'T_THEME_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['theme_path']) . '/theme', + 'T_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['template_path']) . '/template', + 'T_SUPER_TEMPLATE_PATH' => (isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? "{$web_path}styles/" . rawurlencode($user->theme['template_inherit_path']) . '/template' : "{$web_path}styles/" . rawurlencode($user->theme['template_path']) . '/template', + 'T_IMAGESET_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['imageset_path']) . '/imageset', + 'T_IMAGESET_LANG_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['imageset_path']) . '/imageset/' . $user->lang_name, 'T_IMAGES_PATH' => "{$web_path}images/", 'T_SMILIES_PATH' => "{$web_path}{$config['smilies_path']}/", 'T_AVATAR_PATH' => "{$web_path}{$config['avatar_path']}/", @@ -4624,13 +4624,13 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'T_ICONS_PATH' => "{$web_path}{$config['icons_path']}/", 'T_RANKS_PATH' => "{$web_path}{$config['ranks_path']}/", 'T_UPLOAD_PATH' => "{$web_path}{$config['upload_path']}/", - 'T_STYLESHEET_LINK' => (!$user->theme['theme_storedb']) ? "{$web_path}styles/" . $user->theme['theme_path'] . '/theme/stylesheet.css' : append_sid("{$phpbb_root_path}style.$phpEx", 'id=' . $user->theme['style_id'] . '&lang=' . $user->lang_name), + 'T_STYLESHEET_LINK' => (!$user->theme['theme_storedb']) ? "{$web_path}styles/" . rawurlencode($user->theme['theme_path']) . '/theme/stylesheet.css' : append_sid("{$phpbb_root_path}style.$phpEx", 'id=' . $user->theme['style_id'] . '&lang=' . $user->lang_name), 'T_STYLESHEET_NAME' => $user->theme['theme_name'], - 'T_THEME_NAME' => $user->theme['theme_path'], - 'T_TEMPLATE_NAME' => $user->theme['template_path'], - 'T_SUPER_TEMPLATE_NAME' => (isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? $user->theme['template_inherit_path'] : $user->theme['template_path'], - 'T_IMAGESET_NAME' => $user->theme['imageset_path'], + 'T_THEME_NAME' => rawurlencode($user->theme['theme_path']), + 'T_TEMPLATE_NAME' => rawurlencode($user->theme['template_path']), + 'T_SUPER_TEMPLATE_NAME' => rawurlencode((isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? $user->theme['template_inherit_path'] : $user->theme['template_path']), + 'T_IMAGESET_NAME' => rawurlencode($user->theme['imageset_path']), 'T_IMAGESET_LANG_NAME' => $user->data['user_lang'], 'T_IMAGES' => 'images', 'T_SMILIES' => $config['smilies_path'], -- cgit v1.2.1 From 179543b2c755a22c708724b0a7f2916208ba3351 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 1 Dec 2011 01:50:54 +0200 Subject: [ticket/10399] Correctly encoding template component urls (3.1) Correctly encoding template component urls PHPBB3-10399 --- phpBB/includes/functions.php | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 822ac5b8d6..b50860c6c3 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4557,9 +4557,9 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'S_SEARCH_HIDDEN_FIELDS' => build_hidden_fields($s_search_hidden_fields), 'T_ASSETS_PATH' => "{$web_path}assets", - 'T_THEME_PATH' => "{$web_path}styles/" . $user->theme['theme_path'] . '/theme', - 'T_TEMPLATE_PATH' => "{$web_path}styles/" . $user->theme['template_path'] . '/template', - 'T_SUPER_TEMPLATE_PATH' => (isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? "{$web_path}styles/" . $user->theme['template_inherit_path'] . '/template' : "{$web_path}styles/" . $user->theme['template_path'] . '/template', + 'T_THEME_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['theme_path']) . '/theme', + 'T_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['template_path']) . '/template', + 'T_SUPER_TEMPLATE_PATH' => (isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? "{$web_path}styles/" . rawurlencode($user->theme['template_inherit_path']) . '/template' : "{$web_path}styles/" . rawurlencode($user->theme['template_path']) . '/template', 'T_IMAGES_PATH' => "{$web_path}images/", 'T_SMILIES_PATH' => "{$web_path}{$config['smilies_path']}/", 'T_AVATAR_PATH' => "{$web_path}{$config['avatar_path']}/", @@ -4567,14 +4567,14 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'T_ICONS_PATH' => "{$web_path}{$config['icons_path']}/", 'T_RANKS_PATH' => "{$web_path}{$config['ranks_path']}/", 'T_UPLOAD_PATH' => "{$web_path}{$config['upload_path']}/", - 'T_STYLESHEET_LINK' => "{$web_path}styles/" . $user->theme['theme_path'] . '/theme/stylesheet.css', - 'T_STYLESHEET_LANG_LINK' => "{$web_path}styles/" . $user->theme['theme_path'] . '/theme/' . $user->lang_name . '/stylesheet.css', + 'T_STYLESHEET_LINK' => "{$web_path}styles/" . rawurlencode($user->theme['theme_path']) . '/theme/stylesheet.css', + 'T_STYLESHEET_LANG_LINK' => "{$web_path}styles/" . rawurlencode($user->theme['theme_path']) . '/theme/' . $user->lang_name . '/stylesheet.css', 'T_STYLESHEET_NAME' => $user->theme['theme_name'], - 'T_THEME_NAME' => $user->theme['theme_path'], + 'T_THEME_NAME' => rawurlencode($user->theme['theme_path']), 'T_THEME_LANG_NAME' => $user->data['user_lang'], 'T_TEMPLATE_NAME' => $user->theme['template_path'], - 'T_SUPER_TEMPLATE_NAME' => (isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? $user->theme['template_inherit_path'] : $user->theme['template_path'], + 'T_SUPER_TEMPLATE_NAME' => rawurlencode((isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? $user->theme['template_inherit_path'] : $user->theme['template_path']), 'T_IMAGES' => 'images', 'T_SMILIES' => $config['smilies_path'], 'T_AVATAR' => $config['avatar_path'], -- cgit v1.2.1 From 0ad81a4cdcfc3611ec77417e1bc9b12aecd69def Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 3 Dec 2011 17:42:10 -0500 Subject: [ticket/10511] Fix a grammar defect in permissions language. PHPBB3-10511 --- phpBB/language/en/acp/permissions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/permissions.php b/phpBB/language/en/acp/permissions.php index cf248cffdb..00ba01d7d3 100644 --- a/phpBB/language/en/acp/permissions.php +++ b/phpBB/language/en/acp/permissions.php @@ -273,7 +273,7 @@ $lang = array_merge($lang, array( 'TRACE_WHO' => 'Who', 'TRACE_TOTAL' => 'Total', - 'USERS_NOT_ASSIGNED' => 'No user assigned to this role', + 'USERS_NOT_ASSIGNED' => 'No users are assigned to this role', 'USER_IS_MEMBER_OF_DEFAULT' => 'is a member of the following pre-defined groups', 'USER_IS_MEMBER_OF_CUSTOM' => 'is a member of the following user defined groups', -- cgit v1.2.1 From 5b9c83512765373fec3000dd39ba1154412281e3 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 3 Dec 2011 17:44:58 -0500 Subject: [ticket/9876] Distinctly name user and forum roles for newly registered users. PHPBB3-9876 --- phpBB/language/en/acp/permissions.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/permissions.php b/phpBB/language/en/acp/permissions.php index cf248cffdb..8ad1db5d93 100644 --- a/phpBB/language/en/acp/permissions.php +++ b/phpBB/language/en/acp/permissions.php @@ -171,7 +171,7 @@ $lang = array_merge($lang, array( 'ROLE_FORUM_POLLS' => 'Standard Access + Polls', 'ROLE_FORUM_READONLY' => 'Read Only Access', 'ROLE_FORUM_STANDARD' => 'Standard Access', - 'ROLE_FORUM_NEW_MEMBER' => 'Newly registered User', + 'ROLE_FORUM_NEW_MEMBER' => 'Newly Registered User Access', 'ROLE_MOD_FULL' => 'Full Moderator', 'ROLE_MOD_QUEUE' => 'Queue Moderator', 'ROLE_MOD_SIMPLE' => 'Simple Moderator', @@ -181,7 +181,7 @@ $lang = array_merge($lang, array( 'ROLE_USER_NOAVATAR' => 'No Avatar', 'ROLE_USER_NOPM' => 'No Private Messages', 'ROLE_USER_STANDARD' => 'Standard Features', - 'ROLE_USER_NEW_MEMBER' => 'Newly registered User', + 'ROLE_USER_NEW_MEMBER' => 'Newly Registered User Features', 'ROLE_DESCRIPTION_ADMIN_FORUM' => 'Can access the forum management and forum permission settings.', -- cgit v1.2.1 From 69cbb4ac1de7887af8fe16a771ac30c762a7b24a Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 4 Dec 2011 00:22:10 +0100 Subject: [prep-release-3.0.10] Bumping version number for 3.0.10-RC3. --- phpBB/includes/constants.php | 2 +- phpBB/install/database_update.php | 9 +++++++-- phpBB/install/schemas/schema_data.sql | 2 +- 3 files changed, 9 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php index 2ade1ac95e..3a798fc1ce 100644 --- a/phpBB/includes/constants.php +++ b/phpBB/includes/constants.php @@ -25,7 +25,7 @@ if (!defined('IN_PHPBB')) */ // phpBB Version -define('PHPBB_VERSION', '3.0.10-RC2'); +define('PHPBB_VERSION', '3.0.10-RC3'); // QA-related // define('PHPBB_QA', 1); diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index bbc4261adc..eeadc9f862 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -8,7 +8,7 @@ * */ -define('UPDATES_TO_VERSION', '3.0.10-RC2'); +define('UPDATES_TO_VERSION', '3.0.10-RC3'); // Enter any version to update from to test updates. The version within the db will not be updated. define('DEBUG_FROM_VERSION', false); @@ -989,7 +989,8 @@ function database_update_info() '3.0.9' => array(), // No changes from 3.0.10-RC1 to 3.0.10-RC2 '3.0.10-RC1' => array(), - + // No changes from 3.0.10-RC2 to 3.0.10-RC3 + '3.0.10-RC2' => array(), /** @todo DROP LOGIN_ATTEMPT_TABLE.attempt_id in 3.0.11-RC1 */ ); @@ -2013,6 +2014,10 @@ function change_database_data(&$no_updates, $version) // No changes from 3.0.10-RC1 to 3.0.10-RC2 case '3.0.10-RC1': break; + + // No changes from 3.0.10-RC2 to 3.0.10-RC3 + case '3.0.10-RC2': + break; } } diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index 5cbaba3d1f..eb90d3a06d 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -246,7 +246,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_page', INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.10-RC2'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.10-RC3'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400'); -- cgit v1.2.1 From c4a19a4e3eb4fe068146a33fa0cf958a14f7871b Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 27 Nov 2011 00:17:22 -0500 Subject: [ticket/10500] Fix phpbb_template_compile instantiation. The required $allow_php argument was missing. PHPBB3-10500 --- phpBB/develop/compile_template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/develop/compile_template.php b/phpBB/develop/compile_template.php index e741e909d8..32d1d321f1 100644 --- a/phpBB/develop/compile_template.php +++ b/phpBB/develop/compile_template.php @@ -20,5 +20,5 @@ include($phpbb_root_path . 'includes/template_compile.'.$phpEx); $file = $argv[1]; -$compile = new phpbb_template_compile(); +$compile = new phpbb_template_compile(false); echo $compile->compile_file($file); -- cgit v1.2.1 From 552df1f6eb79599bbf48743b0ce35cba35a956c6 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sun, 27 Nov 2011 00:38:29 -0500 Subject: [ticket/10500] Use correct class name in @uses. PHPBB3-10500 --- phpBB/includes/template/template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template/template.php b/phpBB/includes/template/template.php index 228ea93513..267d637150 100644 --- a/phpBB/includes/template/template.php +++ b/phpBB/includes/template/template.php @@ -306,7 +306,7 @@ class phpbb_template * * @param string $handle Handle of the template to load * @return phpbb_template_renderer Template renderer object, or null on failure - * @uses template_compile is used to compile template source + * @uses phpbb_template_compile is used to compile template source */ private function _tpl_load($handle) { -- cgit v1.2.1 From 1842323ca9a59b8cc34c1af43db6d703cf996d33 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 4 Dec 2011 11:43:55 +0200 Subject: [ticket/10399] Correctly encoding template component urls (3.0) Changes in style.php PHPBB3-10399 --- phpBB/style.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/style.php b/phpBB/style.php index 916aa8ce5c..f1b41c6a85 100644 --- a/phpBB/style.php +++ b/phpBB/style.php @@ -216,10 +216,10 @@ if ($id) // Parse Theme Data $replace = array( - '{T_THEME_PATH}' => "{$phpbb_root_path}styles/" . $theme['theme_path'] . '/theme', - '{T_TEMPLATE_PATH}' => "{$phpbb_root_path}styles/" . $theme['template_path'] . '/template', - '{T_IMAGESET_PATH}' => "{$phpbb_root_path}styles/" . $theme['imageset_path'] . '/imageset', - '{T_IMAGESET_LANG_PATH}' => "{$phpbb_root_path}styles/" . $theme['imageset_path'] . '/imageset/' . $user_image_lang, + '{T_THEME_PATH}' => "{$phpbb_root_path}styles/" . rawurlencode($theme['theme_path']) . '/theme', + '{T_TEMPLATE_PATH}' => "{$phpbb_root_path}styles/" . rawurlencode($theme['template_path']) . '/template', + '{T_IMAGESET_PATH}' => "{$phpbb_root_path}styles/" . rawurlencode($theme['imageset_path']) . '/imageset', + '{T_IMAGESET_LANG_PATH}' => "{$phpbb_root_path}styles/" . rawurlencode($theme['imageset_path']) . '/imageset/' . $user_image_lang, '{T_STYLESHEET_NAME}' => $theme['theme_name'], '{S_USER_LANG}' => $user['user_lang'] ); @@ -248,7 +248,7 @@ if ($id) $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/' . $theme['imageset_path'] . '/imageset/' . $imgsrc, + 'src' => $phpbb_root_path . 'styles/' . rawurlencode($theme['imageset_path']) . '/imageset/' . $imgsrc, 'width' => $img_data['image_width'], 'height' => $img_data['image_height'], ); -- cgit v1.2.1 From 1a09f9005c7784dfbee641a41935a7973e761f45 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 1 Dec 2011 11:14:06 +0100 Subject: [ticket/10504] Revert the changes for widescreen optimisation PHPBB3-10485 Revert "[ticket/10485] Fix invalid HTML5 markup introduced in PHPBB3-6632" This reverts commit c67633577f276727e1d15106a87517b97c8a4d1a. PHPBB3-6632 PHPBB3-10485 PHPBB3-10504 --- phpBB/styles/prosilver/template/forumlist_body.html | 10 +++++----- phpBB/styles/prosilver/template/search_results.html | 10 +++++----- phpBB/styles/prosilver/template/viewforum_body.html | 10 +++++----- phpBB/styles/prosilver/theme/content.css | 12 ++---------- 4 files changed, 17 insertions(+), 25 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/forumlist_body.html b/phpBB/styles/prosilver/template/forumlist_body.html index bf672e16fc..2c2a242a9f 100644 --- a/phpBB/styles/prosilver/template/forumlist_body.html +++ b/phpBB/styles/prosilver/template/forumlist_body.html @@ -11,9 +11,9 @@
                -
              • +
              • -
                {forumrow.FORUM_NAME}{L_FORUM}
                +
                {L_TOPICS}
                {L_POSTS}
                {L_LAST_POST}
                @@ -25,8 +25,8 @@
              • -
                -
                +
                +
                {forumrow.FORUM_IMAGE} @@ -36,7 +36,7 @@
                {forumrow.L_MODERATOR_STR}: {forumrow.MODERATORS}
                {forumrow.L_SUBFORUM_STR} {forumrow.SUBFORUMS} -
                +
              {L_REDIRECTS}: {forumrow.CLICKS}
              diff --git a/phpBB/styles/prosilver/template/search_results.html b/phpBB/styles/prosilver/template/search_results.html index 014b39de87..f2a4435103 100644 --- a/phpBB/styles/prosilver/template/search_results.html +++ b/phpBB/styles/prosilver/template/search_results.html @@ -39,8 +39,8 @@
              • -
                -
                {L_TOPICS}
                +
                +
                {L_TOPICS}
                {L_REPLIES}
                {L_VIEWS}
                {L_LAST_POST}
                @@ -51,8 +51,8 @@
              • -
                -
                style="background-image: url({T_ICONS_PATH}{searchresults.TOPIC_ICON_IMG}); background-repeat: no-repeat;"> +
                +
                style="background-image: url({T_ICONS_PATH}{searchresults.TOPIC_ICON_IMG}); background-repeat: no-repeat;"> {NEWEST_POST_IMG} {searchresults.TOPIC_TITLE} {searchresults.ATTACH_ICON_IMG} {searchresults.UNAPPROVED_IMG} @@ -60,7 +60,7 @@ {searchresults.PAGINATION} {L_POST_BY_AUTHOR} {searchresults.TOPIC_AUTHOR_FULL} » {searchresults.FIRST_POST_TIME} {L_IN} {searchresults.FORUM_TITLE} ({L_GLOBAL}) -
                +
                {searchresults.TOPIC_REPLIES}
                {searchresults.TOPIC_VIEWS}
                diff --git a/phpBB/styles/prosilver/template/viewforum_body.html b/phpBB/styles/prosilver/template/viewforum_body.html index d2952bff2a..4ad0990d98 100644 --- a/phpBB/styles/prosilver/template/viewforum_body.html +++ b/phpBB/styles/prosilver/template/viewforum_body.html @@ -126,8 +126,8 @@
                • -
                  -
                  {L_ACTIVE_TOPICS}{L_ANNOUNCEMENTS}{L_TOPICS}
                  +
                  +
                  {L_ACTIVE_TOPICS}{L_ANNOUNCEMENTS}{L_TOPICS}
                  {L_REPLIES}
                  {L_VIEWS}
                  {L_LAST_POST}
                  @@ -138,13 +138,13 @@
                • -
                  - style="background-image: url({T_ICONS_PATH}{topicrow.TOPIC_ICON_IMG}); background-repeat: no-repeat;" title="{topicrow.TOPIC_FOLDER_IMG_ALT}">{NEWEST_POST_IMG} {topicrow.TOPIC_TITLE} +
                  + style="background-image: url({T_ICONS_PATH}{topicrow.TOPIC_ICON_IMG}); background-repeat: no-repeat;" title="{topicrow.TOPIC_FOLDER_IMG_ALT}">
                  {NEWEST_POST_IMG} {topicrow.TOPIC_TITLE} {topicrow.UNAPPROVED_IMG} {REPORTED_IMG}
                  {topicrow.PAGINATION} {topicrow.ATTACH_ICON_IMG} {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME} - +
                  {topicrow.REPLIES} {L_REPLIES}
                  {topicrow.VIEWS} {L_VIEWS}
                  {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} diff --git a/phpBB/styles/prosilver/theme/content.css b/phpBB/styles/prosilver/theme/content.css index 696d5e1cc0..c278a16dc5 100644 --- a/phpBB/styles/prosilver/theme/content.css +++ b/phpBB/styles/prosilver/theme/content.css @@ -29,19 +29,14 @@ ul.topiclist li.row dl { ul.topiclist dt { display: block; float: left; - width: 50%; + width: 100%; font-size: 1.1em; padding-left: 5px; padding-right: 5px; -} - -ul.topiclist .widescreen-optimised dt { - width: 100%; margin-right: -465px; } -ul.topiclist .widescreen-optimised dt .wrap-content { - display: block; +ul.topiclist dt .wrap-content { padding-right: 465px; } @@ -106,9 +101,6 @@ li.header dt, li.header dd { li.header dt { font-weight: bold; -} - -li.header .widescreen-optimised dt { margin-right: -465px; } -- cgit v1.2.1 From e3d81812facb205bdad7a8b7fcdd08855c130c6c Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 1 Dec 2011 11:15:10 +0100 Subject: [ticket/10504] Revert the changes for widescreen optimisation PHPBB3-10408 Revert "[ticket/10408] Layout of topics/attachments list is broken in UCP and MCP" This reverts commit 88aacd0f2cffdf75af71d749c6ea602ed3912651. PHPBB3-6632 PHPBB3-10408 PHPBB3-10504 --- phpBB/styles/prosilver/template/ucp_attachments.html | 4 ++-- phpBB/styles/prosilver/theme/content.css | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/ucp_attachments.html b/phpBB/styles/prosilver/template/ucp_attachments.html index c76316d93e..8052fdc435 100644 --- a/phpBB/styles/prosilver/template/ucp_attachments.html +++ b/phpBB/styles/prosilver/template/ucp_attachments.html @@ -20,7 +20,7 @@
                  • -
                    {L_FILENAME}
                    +
                    {L_FILENAME}
                    {L_DOWNLOADS}
                    {L_POST_TIME}
                    {L_MARK}
                    @@ -32,7 +32,7 @@
                  • -
                    {attachrow.FILENAME} ({attachrow.SIZE})
                    +
                    {attachrow.FILENAME} ({attachrow.SIZE})
                    {L_PM}: {L_TOPIC}: {attachrow.TOPIC_TITLE}
                    {attachrow.DOWNLOAD_COUNT}
                    {attachrow.POST_TIME}
                    diff --git a/phpBB/styles/prosilver/theme/content.css b/phpBB/styles/prosilver/theme/content.css index c278a16dc5..529a065e97 100644 --- a/phpBB/styles/prosilver/theme/content.css +++ b/phpBB/styles/prosilver/theme/content.css @@ -184,7 +184,7 @@ dd.extra { dd.mark { float: right !important; - width: 90px; + width: 9%; text-align: center; line-height: 200%; font-size: 1.2em; -- cgit v1.2.1 From 8af9a0054ccf7df26c8b9057f1d2fb2f32fd5253 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 1 Dec 2011 11:15:44 +0100 Subject: [ticket/10504] Revert the changes for widescreen optimisation PHPBB3-6632 Revert "[ticket/6632] Better viewing of topics for wide screen displays" This reverts commit bb733b0204aef71c40290a9c8db8ad0a7e3e3d0a. PHPBB3-6632 PHPBB3-10504 --- phpBB/styles/prosilver/template/forumlist_body.html | 6 +++--- phpBB/styles/prosilver/template/viewforum_body.html | 6 +++--- phpBB/styles/prosilver/theme/content.css | 12 +++--------- 3 files changed, 9 insertions(+), 15 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/forumlist_body.html b/phpBB/styles/prosilver/template/forumlist_body.html index 2c2a242a9f..e9ed5d9daf 100644 --- a/phpBB/styles/prosilver/template/forumlist_body.html +++ b/phpBB/styles/prosilver/template/forumlist_body.html @@ -13,7 +13,7 @@
                    • -
                      +
                      {forumrow.FORUM_NAME}{L_FORUM}
                      {L_TOPICS}
                      {L_POSTS}
                      {L_LAST_POST}
                      @@ -26,7 +26,7 @@
                    • -
                      +
                      {forumrow.FORUM_IMAGE} @@ -36,7 +36,7 @@
                      {forumrow.L_MODERATOR_STR}: {forumrow.MODERATORS}
                      {forumrow.L_SUBFORUM_STR} {forumrow.SUBFORUMS} -
                +
                {L_REDIRECTS}: {forumrow.CLICKS}
                diff --git a/phpBB/styles/prosilver/template/viewforum_body.html b/phpBB/styles/prosilver/template/viewforum_body.html index 4ad0990d98..02f42fa097 100644 --- a/phpBB/styles/prosilver/template/viewforum_body.html +++ b/phpBB/styles/prosilver/template/viewforum_body.html @@ -127,7 +127,7 @@
                • -
                  {L_ACTIVE_TOPICS}{L_ANNOUNCEMENTS}{L_TOPICS}
                  +
                  {L_ACTIVE_TOPICS}{L_ANNOUNCEMENTS}{L_TOPICS}
                  {L_REPLIES}
                  {L_VIEWS}
                  {L_LAST_POST}
                  @@ -139,12 +139,12 @@
                • - style="background-image: url({T_ICONS_PATH}{topicrow.TOPIC_ICON_IMG}); background-repeat: no-repeat;" title="{topicrow.TOPIC_FOLDER_IMG_ALT}">
                  {NEWEST_POST_IMG} {topicrow.TOPIC_TITLE} + style="background-image: url({T_ICONS_PATH}{topicrow.TOPIC_ICON_IMG}); background-repeat: no-repeat;" title="{topicrow.TOPIC_FOLDER_IMG_ALT}">{NEWEST_POST_IMG} {topicrow.TOPIC_TITLE} {topicrow.UNAPPROVED_IMG} {REPORTED_IMG}
                  {topicrow.PAGINATION} {topicrow.ATTACH_ICON_IMG} {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME} -
                  +
                  {topicrow.REPLIES} {L_REPLIES}
                  {topicrow.VIEWS} {L_VIEWS}
                  {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} diff --git a/phpBB/styles/prosilver/theme/content.css b/phpBB/styles/prosilver/theme/content.css index 529a065e97..5f627c8f77 100644 --- a/phpBB/styles/prosilver/theme/content.css +++ b/phpBB/styles/prosilver/theme/content.css @@ -29,15 +29,10 @@ ul.topiclist li.row dl { ul.topiclist dt { display: block; float: left; - width: 100%; + width: 50%; font-size: 1.1em; padding-left: 5px; padding-right: 5px; - margin-right: -465px; -} - -ul.topiclist dt .wrap-content { - padding-right: 465px; } ul.topiclist dd { @@ -101,7 +96,6 @@ li.header dt, li.header dd { li.header dt { font-weight: bold; - margin-right: -465px; } li.header dd { @@ -132,7 +126,7 @@ dl.icon dt { } dd.posts, dd.topics, dd.views { - width: 90px; + width: 8%; text-align: center; line-height: 2.2em; font-size: 1.2em; @@ -151,7 +145,7 @@ dl.icon dt li { } dd.lastpost { - width: 230px; + width: 25%; font-size: 1.1em; } -- cgit v1.2.1 From dfb7cc625a37c6345fa647ee3a21f890ba5c9649 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 8 Dec 2011 23:35:26 +0200 Subject: [ticket/10319] Missing hidden fields in search form Missing hidden fields in search form (bug added in 3.0.9) PHPBB3-10319 --- phpBB/includes/functions.php | 11 ++++++++++- phpBB/viewforum.php | 9 +++++++++ phpBB/viewtopic.php | 9 +++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 7ce83b871a..01b3ca92a9 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4378,7 +4378,7 @@ function phpbb_http_login($param) */ function page_header($page_title = '', $display_online_list = true, $item_id = 0, $item = 'forum') { - global $db, $config, $template, $SID, $_SID, $user, $auth, $phpEx, $phpbb_root_path; + global $db, $config, $template, $SID, $_SID, $_EXTRA_URL, $user, $auth, $phpEx, $phpbb_root_path; if (defined('HEADER_INC')) { @@ -4531,6 +4531,15 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 $s_search_hidden_fields['sid'] = $_SID; } + if (!empty($_EXTRA_URL)) + { + foreach ($_EXTRA_URL as $url_param) + { + $url_param = explode('=', $url_param, 2); + $s_hidden_fields[$url_param[0]] = $url_param[1]; + } + } + // The following assigns all _common_ variables that may be used at any point in a template. $template->assign_vars(array( 'SITENAME' => $config['sitename'], diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php index 8a6b777bea..588f60b589 100644 --- a/phpBB/viewforum.php +++ b/phpBB/viewforum.php @@ -273,6 +273,15 @@ if ($_SID) $s_search_hidden_fields['sid'] = $_SID; } +if (!empty($_EXTRA_URL)) +{ + foreach ($_EXTRA_URL as $url_param) + { + $url_param = explode('=', $url_param, 2); + $s_hidden_fields[$url_param[0]] = $url_param[1]; + } +} + $template->assign_vars(array( 'MODERATORS' => (!empty($moderators[$forum_id])) ? implode(', ', $moderators[$forum_id]) : '', diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index df631a474c..01cd6a28a8 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -602,6 +602,15 @@ if ($_SID) $s_search_hidden_fields['sid'] = $_SID; } +if (!empty($_EXTRA_URL)) +{ + foreach ($_EXTRA_URL as $url_param) + { + $url_param = explode('=', $url_param, 2); + $s_hidden_fields[$url_param[0]] = $url_param[1]; + } +} + // Send vars to template $template->assign_vars(array( 'FORUM_ID' => $forum_id, -- cgit v1.2.1 From b05c325dd2d27b839a6bdce20d4e59a6fbc0c960 Mon Sep 17 00:00:00 2001 From: David King Date: Mon, 12 Dec 2011 20:23:20 +0000 Subject: [ticket/10524] Changed Olympus to Ascraeus in Coding Docs in 3 places PHPBB3-10524 --- phpBB/docs/coding-guidelines.html | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html index f835068be9..cf40173154 100644 --- a/phpBB/docs/coding-guidelines.html +++ b/phpBB/docs/coding-guidelines.html @@ -3,7 +3,7 @@ - + phpBB3 • Coding Guidelines @@ -21,7 +21,7 @@

                  Coding Guidelines

                  -

                  Olympus coding guidelines document

                  +

                  Ascraeus coding guidelines document

                  Skip

                  @@ -35,7 +35,7 @@ -

                  These are the phpBB Coding Guidelines for Olympus, all attempts should be made to follow them as closely as possible.

                  +

                  These are the phpBB Coding Guidelines for Ascraeus, all attempts should be made to follow them as closely as possible.

                  Coding Guidelines

                  -- cgit v1.2.1 From cd4958f72c249b9254f7038432cbe7a390dd93bf Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 15 Dec 2011 14:44:09 +0200 Subject: [ticket/10507] Sort styles in acp Sort styles by name in admin control panel PHPBB3-10507 --- phpBB/includes/acp/acp_styles.php | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php index 3bc8c86500..38f4c57bd8 100644 --- a/phpBB/includes/acp/acp_styles.php +++ b/phpBB/includes/acp/acp_styles.php @@ -540,6 +540,7 @@ parse_css_file = {PARSE_CSS_FILE} global $user, $template, $db, $config, $phpbb_root_path, $phpEx; $sql_from = ''; + $sql_sort = 'LOWER(' . $mode . '_name)'; $style_count = array(); switch ($mode) @@ -571,6 +572,9 @@ parse_css_file = {PARSE_CSS_FILE} case 'imageset': $sql_from = STYLES_IMAGESET_TABLE; break; + + default: + trigger_error($user->lang['NO_MODE'] . adm_back_link($this->u_action), E_USER_WARNING); } $l_prefix = strtoupper($mode); @@ -594,7 +598,8 @@ parse_css_file = {PARSE_CSS_FILE} ); $sql = "SELECT * - FROM $sql_from"; + FROM $sql_from + ORDER BY $sql_sort ASC"; $result = $db->sql_query($sql); $installed = array(); -- cgit v1.2.1 From a3e8d3b00b4f43be8dd0a4c109eacb51677e53e2 Mon Sep 17 00:00:00 2001 From: David King Date: Thu, 15 Dec 2011 13:22:04 +0000 Subject: [ticket/10463] removed extra comma in malformed query in acp_styles.php PHPBB3-10463 --- phpBB/includes/acp/acp_styles.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php index fc9acbbcb8..c480021507 100644 --- a/phpBB/includes/acp/acp_styles.php +++ b/phpBB/includes/acp/acp_styles.php @@ -2400,7 +2400,7 @@ version = {VERSION} $select_bf = ''; } - $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path, $select_bf + $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path $select_bf FROM $sql_from WHERE {$mode}_name = '" . $db->sql_escape($cfg_data['inherit_from']) . "' AND {$mode}_inherits_id = 0"; -- cgit v1.2.1 From 18aa4e4ecd55b846ead8e15853164bb5742099ef Mon Sep 17 00:00:00 2001 From: David King Date: Thu, 15 Dec 2011 15:13:11 +0000 Subject: [ticket/10535] Remove email confirm check on registration form PHPBB3-10535 --- phpBB/includes/ucp/ucp_register.php | 9 --------- phpBB/styles/prosilver/template/ucp_register.html | 4 ---- phpBB/styles/subsilver2/template/ucp_register.html | 4 ---- 3 files changed, 17 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index fe09d0a9fe..56efc4706f 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -100,7 +100,6 @@ class ucp_register $s_hidden_fields = array_merge($s_hidden_fields, array( 'username' => utf8_normalize_nfc(request_var('username', '', true)), 'email' => strtolower(request_var('email', '')), - 'email_confirm' => strtolower(request_var('email_confirm', '')), 'lang' => $user->lang_name, 'tz' => request_var('tz', (float) $config['board_timezone']), )); @@ -189,7 +188,6 @@ class ucp_register 'new_password' => request_var('new_password', '', true), 'password_confirm' => request_var('password_confirm', '', true), 'email' => strtolower(request_var('email', '')), - 'email_confirm' => strtolower(request_var('email_confirm', '')), 'lang' => basename(request_var('lang', $user->lang_name)), 'tz' => request_var('tz', (float) $timezone), ); @@ -208,7 +206,6 @@ class ucp_register 'email' => array( array('string', false, 6, 60), array('email')), - 'email_confirm' => array('string', false, 6, 60), 'tz' => array('num', false, -14, 14), 'lang' => array('language_iso_name'), )); @@ -253,11 +250,6 @@ class ucp_register { $error[] = $user->lang['NEW_PASSWORD_ERROR']; } - - if ($data['email'] != $data['email_confirm']) - { - $error[] = $user->lang['NEW_EMAIL_ERROR']; - } } if (!sizeof($error)) @@ -472,7 +464,6 @@ class ucp_register 'PASSWORD' => $data['new_password'], 'PASSWORD_CONFIRM' => $data['password_confirm'], 'EMAIL' => $data['email'], - 'EMAIL_CONFIRM' => $data['email_confirm'], 'L_REG_COND' => $l_reg_cond, 'L_USERNAME_EXPLAIN' => $user->lang($config['allow_name_chars'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_name_chars']), $user->lang('CHARACTERS', (int) $config['max_name_chars'])), diff --git a/phpBB/styles/prosilver/template/ucp_register.html b/phpBB/styles/prosilver/template/ucp_register.html index dd0e5ad02a..30ed37eecc 100644 --- a/phpBB/styles/prosilver/template/ucp_register.html +++ b/phpBB/styles/prosilver/template/ucp_register.html @@ -38,10 +38,6 @@
                  -
                  -
                  -
                  -

                  {L_PASSWORD_EXPLAIN}
                  diff --git a/phpBB/styles/subsilver2/template/ucp_register.html b/phpBB/styles/subsilver2/template/ucp_register.html index ad6fb8d056..0c3533292d 100644 --- a/phpBB/styles/subsilver2/template/ucp_register.html +++ b/phpBB/styles/subsilver2/template/ucp_register.html @@ -41,10 +41,6 @@
    - - - - -- cgit v1.2.1 From 730d2d5d19741508f243d61f47c28af2564be6b1 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 15 Dec 2011 22:14:59 +0100 Subject: [ticket/8996] Revert initial fix to keep old behaviour on empty selection Revert "[ticket/8996] Also fix the BBCode bug in subsilver2 and acp" This reverts commit eb1f15bc8b7b7a284b25b2c9b9942714b6848ebc. PHPBB3-8996 --- phpBB/adm/style/editor.js | 68 ++++++++++----------- phpBB/styles/prosilver/template/editor.js | 61 ++++++++++--------- phpBB/styles/subsilver2/template/editor.js | 96 +++++++++++++++--------------- 3 files changed, 108 insertions(+), 117 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/editor.js b/phpBB/adm/style/editor.js index 600fa254cf..217aa699e2 100644 --- a/phpBB/adm/style/editor.js +++ b/phpBB/adm/style/editor.js @@ -28,8 +28,8 @@ function helpline(help) /** * Fix a bug involving the TextRange object. From * http://www.frostjedi.com/terra/scripts/demo/caretBug.html -*/ -function initInsertions() +*/ +function initInsertions() { var doc; if(document.forms[form_name]) @@ -66,7 +66,7 @@ function bbstyle(bbnumber) else { insert_text('[*]'); - document.forms[form_name].elements[text_name].focus(); + document.forms[form_name].elements[text_name].focus(); } } @@ -76,7 +76,7 @@ function bbstyle(bbnumber) function bbfontstyle(bbopen, bbclose) { theSelection = false; - + var textarea = document.forms[form_name].elements[text_name]; textarea.focus(); @@ -84,10 +84,14 @@ function bbfontstyle(bbopen, bbclose) if ((clientVer >= 4) && is_ie && is_win) { // Get text selection - if (textarea.createTextRange && textarea.caretPos) + theSelection = document.selection.createRange().text; + + if (theSelection) { - textarea.caretPos.text = bbopen + textarea.caretPos.text + bbclose; - textarea.focus(); + // Add tags around selection + document.selection.createRange().text = bbopen + theSelection + bbclose; + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; return; } } @@ -98,10 +102,10 @@ function bbfontstyle(bbopen, bbclose) theSelection = ''; return; } - + //The new position for the cursor after adding the bbcode var caret_pos = getCaretPosition(textarea).start; - var new_pos = caret_pos + bbopen.length; + var new_pos = caret_pos + bbopen.length; // Open tag insert_text(bbopen + bbclose); @@ -112,12 +116,12 @@ function bbfontstyle(bbopen, bbclose) { textarea.selectionStart = new_pos; textarea.selectionEnd = new_pos; - } + } // IE else if (document.selection) { - var range = textarea.createTextRange(); - range.move("character", bbopen.length); + var range = textarea.createTextRange(); + range.move("character", new_pos); range.select(); storeCaret(textarea); } @@ -132,7 +136,7 @@ function bbfontstyle(bbopen, bbclose) function insert_text(text, spaces, popup) { var textarea; - + if (!popup) { textarea = document.forms[form_name].elements[text_name]; @@ -155,18 +159,18 @@ function insert_text(text, spaces, popup) mozWrap(textarea, text, ''); textarea.selectionStart = sel_start + text.length; textarea.selectionEnd = sel_end + text.length; - } - + } + else if (textarea.createTextRange && textarea.caretPos) { - if (baseHeight != textarea.caretPos.boundingHeight) + if (baseHeight != textarea.caretPos.boundingHeight) { textarea.focus(); storeCaret(textarea); } var caret_pos = textarea.caretPos; caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text; - + } else { @@ -229,7 +233,7 @@ function addquote(post_id, username) theSelection = theSelection.replace(//ig, '\n'); theSelection = theSelection.replace(/<\;/ig, '<'); theSelection = theSelection.replace(/>\;/ig, '>'); - theSelection = theSelection.replace(/&\;/ig, '&'); + theSelection = theSelection.replace(/&\;/ig, '&'); theSelection = theSelection.replace(/ \;/ig, ' '); } else if (document.all) @@ -264,7 +268,7 @@ function mozWrap(txtarea, open, close) var selEnd = txtarea.selectionEnd; var scrollTop = txtarea.scrollTop; - if (selEnd == 1 || selEnd == 2) + if (selEnd == 1 || selEnd == 2) { selEnd = selLength; } @@ -288,17 +292,7 @@ function mozWrap(txtarea, open, close) */ function storeCaret(textEl) { - var keyCode = false; - if (is_ie) - { - keyCode = (event.keyCode) ? event.keyCode : event.charCode; - } - - // Did the user press Shift (16), Ctrl (17) or Alt (18)? - // If so, we do not update the caretPos, so BBCodes can still be applied correctly. - var is_control_key = (keyCode == 16 || keyCode == 17 || keyCode == 18); - - if ((!is_ie || !is_control_key) && (textEl.createTextRange)) + if (textEl.createTextRange) { textEl.caretPos = document.selection.createRange().duplicate(); } @@ -334,7 +328,7 @@ function colorPalette(dir, width, height) { document.writeln(''); } - + for (b = 0; b < 5; b++) { color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); @@ -374,9 +368,9 @@ function caretPosition() function getCaretPosition(txtarea) { var caretPos = new caretPosition(); - + // simple Gecko/Opera way - if (!is_ie && (txtarea.selectionStart || txtarea.selectionStart == 0)) + if (txtarea.selectionStart || txtarea.selectionStart == 0) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; @@ -390,19 +384,19 @@ function getCaretPosition(txtarea) // a new selection of the whole textarea var range_all = document.body.createTextRange(); range_all.moveToElementText(txtarea); - + // calculate selection start point by moving beginning of range_all to beginning of range var sel_start; for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) { range_all.moveStart('character', 1); } - + txtarea.sel_start = sel_start; - + // we ignore the end value for IE, this is already dirty enough and we don't need it caretPos.start = txtarea.sel_start; - caretPos.end = txtarea.sel_start; + caretPos.end = txtarea.sel_start; } return caretPos; diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/styles/prosilver/template/editor.js index 5aa486d320..957c39b568 100644 --- a/phpBB/styles/prosilver/template/editor.js +++ b/phpBB/styles/prosilver/template/editor.js @@ -28,8 +28,8 @@ function helpline(help) /** * Fix a bug involving the TextRange object. From * http://www.frostjedi.com/terra/scripts/demo/caretBug.html -*/ -function initInsertions() +*/ +function initInsertions() { var doc; @@ -37,7 +37,7 @@ function initInsertions() { doc = document; } - else + else { doc = opener.document; } @@ -60,12 +60,12 @@ function initInsertions() * bbstyle */ function bbstyle(bbnumber) -{ +{ if (bbnumber != -1) { bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); - } - else + } + else { insert_text('[*]'); document.forms[form_name].elements[text_name].focus(); @@ -86,10 +86,10 @@ function bbfontstyle(bbopen, bbclose) if ((clientVer >= 4) && is_ie && is_win) { // Get text selection + textarea = document.forms[form_name].elements[text_name]; if (textarea.createTextRange && textarea.caretPos) { textarea.caretPos.text = bbopen + textarea.caretPos.text + bbclose; - textarea.focus(); return; } } @@ -100,7 +100,7 @@ function bbfontstyle(bbopen, bbclose) theSelection = ''; return; } - + //The new position for the cursor after adding the bbcode var caret_pos = getCaretPosition(textarea).start; var new_pos = caret_pos + bbopen.length; @@ -114,12 +114,12 @@ function bbfontstyle(bbopen, bbclose) { textarea.selectionStart = new_pos; textarea.selectionEnd = new_pos; - } + } // IE else if (document.selection) { - var range = textarea.createTextRange(); - range.move("character", new_pos); + var range = textarea.createTextRange(); + range.move("character", new_pos); range.select(); storeCaret(textarea); } @@ -134,16 +134,16 @@ function bbfontstyle(bbopen, bbclose) function insert_text(text, spaces, popup) { var textarea; - - if (!popup) + + if (!popup) { textarea = document.forms[form_name].elements[text_name]; - } - else + } + else { textarea = opener.document.forms[form_name].elements[text_name]; } - if (spaces) + if (spaces) { text = ' ' + text + ' '; } @@ -161,7 +161,7 @@ function insert_text(text, spaces, popup) } else if (textarea.createTextRange && textarea.caretPos) { - if (baseHeight != textarea.caretPos.boundingHeight) + if (baseHeight != textarea.caretPos.boundingHeight) { textarea.focus(); storeCaret(textarea); @@ -174,7 +174,7 @@ function insert_text(text, spaces, popup) { textarea.value = textarea.value + text; } - if (!popup) + if (!popup) { textarea.focus(); } @@ -291,7 +291,7 @@ function split_lines(text) do { var splitAt = line.indexOf(' ', 80); - + if (splitAt == -1) { splitLines[j] = line; @@ -319,7 +319,7 @@ function mozWrap(txtarea, open, close) var selEnd = txtarea.selectionEnd; var scrollTop = txtarea.scrollTop; - if (selEnd == 1 || selEnd == 2) + if (selEnd == 1 || selEnd == 2) { selEnd = selLength; } @@ -351,9 +351,7 @@ function storeCaret(textEl) // Did the user press Shift (16), Ctrl (17) or Alt (18)? // If so, we do not update the caretPos, so BBCodes can still be applied correctly. - var is_control_key = (keyCode == 16 || keyCode == 17 || keyCode == 18); - - if ((!is_ie || !is_control_key) && (textEl.createTextRange)) + if ((!is_ie || (keyCode != 16 && keyCode != 17 && keyCode != 18)) && (textEl.createTextRange)) { textEl.caretPos = document.selection.createRange().duplicate(); } @@ -389,7 +387,7 @@ function colorPalette(dir, width, height) { document.writeln(''); } - + for (b = 0; b < 5; b++) { color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); @@ -429,32 +427,33 @@ function caretPosition() function getCaretPosition(txtarea) { var caretPos = new caretPosition(); - + // simple Gecko/Opera way - if (!is_ie && (txtarea.selectionStart || txtarea.selectionStart == 0)) + if(!is_ie && (txtarea.selectionStart || txtarea.selectionStart == 0)) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; } // dirty and slow IE way - else if (document.selection) + else if(document.selection) { + // get current selection var range = document.selection.createRange(); // a new selection of the whole textarea var range_all = document.body.createTextRange(); range_all.moveToElementText(txtarea); - + // calculate selection start point by moving beginning of range_all to beginning of range var sel_start; for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) - { + { range_all.moveStart('character', 1); } - + txtarea.sel_start = sel_start; - + // we ignore the end value for IE, this is already dirty enough and we don't need it caretPos.start = txtarea.sel_start; caretPos.end = txtarea.sel_start; diff --git a/phpBB/styles/subsilver2/template/editor.js b/phpBB/styles/subsilver2/template/editor.js index 5aa486d320..7cc5de9034 100644 --- a/phpBB/styles/subsilver2/template/editor.js +++ b/phpBB/styles/subsilver2/template/editor.js @@ -6,8 +6,8 @@ // Startup variables var imageTag = false; var theSelection = false; - var bbcodeEnabled = true; + // Check for Browser & Platform for PC & IE specific bits // More details from: http://www.mozilla.org/docs/web-developer/sniffer/browser_type.html var clientPC = navigator.userAgent.toLowerCase(); // Get client info @@ -15,6 +15,7 @@ var clientVer = parseInt(navigator.appVersion); // Get browser version var is_ie = ((clientPC.indexOf('msie') != -1) && (clientPC.indexOf('opera') == -1)); var is_win = ((clientPC.indexOf('win') != -1) || (clientPC.indexOf('16bit') != -1)); + var baseHeight; /** @@ -28,8 +29,8 @@ function helpline(help) /** * Fix a bug involving the TextRange object. From * http://www.frostjedi.com/terra/scripts/demo/caretBug.html -*/ -function initInsertions() +*/ +function initInsertions() { var doc; @@ -37,15 +38,14 @@ function initInsertions() { doc = document; } - else + else { doc = opener.document; } var textarea = doc.forms[form_name].elements[text_name]; - if (is_ie && typeof(baseHeight) != 'number') - { + { textarea.focus(); baseHeight = doc.selection.createRange().duplicate().boundingHeight; @@ -60,12 +60,12 @@ function initInsertions() * bbstyle */ function bbstyle(bbnumber) -{ +{ if (bbnumber != -1) { bbfontstyle(bbtags[bbnumber], bbtags[bbnumber+1]); - } - else + } + else { insert_text('[*]'); document.forms[form_name].elements[text_name].focus(); @@ -78,7 +78,7 @@ function bbstyle(bbnumber) function bbfontstyle(bbopen, bbclose) { theSelection = false; - + var textarea = document.forms[form_name].elements[text_name]; textarea.focus(); @@ -86,10 +86,14 @@ function bbfontstyle(bbopen, bbclose) if ((clientVer >= 4) && is_ie && is_win) { // Get text selection - if (textarea.createTextRange && textarea.caretPos) + theSelection = document.selection.createRange().text; + + if (theSelection) { - textarea.caretPos.text = bbopen + textarea.caretPos.text + bbclose; - textarea.focus(); + // Add tags around selection + document.selection.createRange().text = bbopen + theSelection + bbclose; + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; return; } } @@ -100,7 +104,7 @@ function bbfontstyle(bbopen, bbclose) theSelection = ''; return; } - + //The new position for the cursor after adding the bbcode var caret_pos = getCaretPosition(textarea).start; var new_pos = caret_pos + bbopen.length; @@ -114,12 +118,12 @@ function bbfontstyle(bbopen, bbclose) { textarea.selectionStart = new_pos; textarea.selectionEnd = new_pos; - } + } // IE else if (document.selection) { - var range = textarea.createTextRange(); - range.move("character", new_pos); + var range = textarea.createTextRange(); + range.move("character", new_pos); range.select(); storeCaret(textarea); } @@ -134,16 +138,16 @@ function bbfontstyle(bbopen, bbclose) function insert_text(text, spaces, popup) { var textarea; - - if (!popup) + + if (!popup) { textarea = document.forms[form_name].elements[text_name]; - } - else + } + else { textarea = opener.document.forms[form_name].elements[text_name]; } - if (spaces) + if (spaces) { text = ' ' + text + ' '; } @@ -158,26 +162,28 @@ function insert_text(text, spaces, popup) mozWrap(textarea, text, ''); textarea.selectionStart = sel_start + text.length; textarea.selectionEnd = sel_end + text.length; - } + } + else if (textarea.createTextRange && textarea.caretPos) { - if (baseHeight != textarea.caretPos.boundingHeight) + if (baseHeight != textarea.caretPos.boundingHeight) { textarea.focus(); storeCaret(textarea); - } - + } var caret_pos = textarea.caretPos; caret_pos.text = caret_pos.text.charAt(caret_pos.text.length - 1) == ' ' ? caret_pos.text + text + ' ' : caret_pos.text + text; + } else { textarea.value = textarea.value + text; } - if (!popup) + if (!popup) { textarea.focus(); - } + } + } /** @@ -273,6 +279,7 @@ function addquote(post_id, username, l_wrote) return; } + function split_lines(text) { var lines = text.split('\n'); @@ -291,7 +298,7 @@ function split_lines(text) do { var splitAt = line.indexOf(' ', 80); - + if (splitAt == -1) { splitLines[j] = line; @@ -309,6 +316,7 @@ function split_lines(text) } return splitLines; } + /** * From http://www.massless.org/mozedit/ */ @@ -319,7 +327,7 @@ function mozWrap(txtarea, open, close) var selEnd = txtarea.selectionEnd; var scrollTop = txtarea.scrollTop; - if (selEnd == 1 || selEnd == 2) + if (selEnd == 1 || selEnd == 2) { selEnd = selLength; } @@ -343,17 +351,7 @@ function mozWrap(txtarea, open, close) */ function storeCaret(textEl) { - var keyCode = false; - if (is_ie) - { - keyCode = (event.keyCode) ? event.keyCode : event.charCode; - } - - // Did the user press Shift (16), Ctrl (17) or Alt (18)? - // If so, we do not update the caretPos, so BBCodes can still be applied correctly. - var is_control_key = (keyCode == 16 || keyCode == 17 || keyCode == 18); - - if ((!is_ie || !is_control_key) && (textEl.createTextRange)) + if (textEl.createTextRange) { textEl.caretPos = document.selection.createRange().duplicate(); } @@ -389,7 +387,7 @@ function colorPalette(dir, width, height) { document.writeln(''); } - + for (b = 0; b < 5; b++) { color = String(numberList[r]) + String(numberList[g]) + String(numberList[b]); @@ -429,15 +427,15 @@ function caretPosition() function getCaretPosition(txtarea) { var caretPos = new caretPosition(); - + // simple Gecko/Opera way - if (!is_ie && (txtarea.selectionStart || txtarea.selectionStart == 0)) + if(txtarea.selectionStart || txtarea.selectionStart == 0) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; } // dirty and slow IE way - else if (document.selection) + else if(document.selection) { // get current selection var range = document.selection.createRange(); @@ -445,16 +443,16 @@ function getCaretPosition(txtarea) // a new selection of the whole textarea var range_all = document.body.createTextRange(); range_all.moveToElementText(txtarea); - + // calculate selection start point by moving beginning of range_all to beginning of range var sel_start; for (sel_start = 0; range_all.compareEndPoints('StartToStart', range) < 0; sel_start++) - { + { range_all.moveStart('character', 1); } - + txtarea.sel_start = sel_start; - + // we ignore the end value for IE, this is already dirty enough and we don't need it caretPos.start = txtarea.sel_start; caretPos.end = txtarea.sel_start; -- cgit v1.2.1 From 2bf4e8d3d0ad86038fe5ff84d3b48517b8033fc8 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 15 Dec 2011 22:17:39 +0100 Subject: [ticket/8996] Revert initial fix to keep old behaviour on empty selection Part2 Revert "[ticket/8996] Correctly apply BBCodes in IE6-9 when applying with accesskey" This reverts commit 219bdbaf7044bd203755ed138d109cf39ccdb837. PHPBB3-8996 --- phpBB/styles/prosilver/template/editor.js | 26 +++++++++++--------------- 1 file changed, 11 insertions(+), 15 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/styles/prosilver/template/editor.js index 957c39b568..cfdb54f54b 100644 --- a/phpBB/styles/prosilver/template/editor.js +++ b/phpBB/styles/prosilver/template/editor.js @@ -86,10 +86,14 @@ function bbfontstyle(bbopen, bbclose) if ((clientVer >= 4) && is_ie && is_win) { // Get text selection - textarea = document.forms[form_name].elements[text_name]; - if (textarea.createTextRange && textarea.caretPos) + theSelection = document.selection.createRange().text; + + if (theSelection) { - textarea.caretPos.text = bbopen + textarea.caretPos.text + bbclose; + // Add tags around selection + document.selection.createRange().text = bbopen + theSelection + bbclose; + document.forms[form_name].elements[text_name].focus(); + theSelection = ''; return; } } @@ -103,7 +107,7 @@ function bbfontstyle(bbopen, bbclose) //The new position for the cursor after adding the bbcode var caret_pos = getCaretPosition(textarea).start; - var new_pos = caret_pos + bbopen.length; + var new_pos = caret_pos + bbopen.length; // Open tag insert_text(bbopen + bbclose); @@ -343,15 +347,7 @@ function mozWrap(txtarea, open, close) */ function storeCaret(textEl) { - var keyCode = false; - if (is_ie) - { - keyCode = (event.keyCode) ? event.keyCode : event.charCode; - } - - // Did the user press Shift (16), Ctrl (17) or Alt (18)? - // If so, we do not update the caretPos, so BBCodes can still be applied correctly. - if ((!is_ie || (keyCode != 16 && keyCode != 17 && keyCode != 18)) && (textEl.createTextRange)) + if (textEl.createTextRange) { textEl.caretPos = document.selection.createRange().duplicate(); } @@ -429,7 +425,7 @@ function getCaretPosition(txtarea) var caretPos = new caretPosition(); // simple Gecko/Opera way - if(!is_ie && (txtarea.selectionStart || txtarea.selectionStart == 0)) + if(txtarea.selectionStart || txtarea.selectionStart == 0) { caretPos.start = txtarea.selectionStart; caretPos.end = txtarea.selectionEnd; @@ -456,7 +452,7 @@ function getCaretPosition(txtarea) // we ignore the end value for IE, this is already dirty enough and we don't need it caretPos.start = txtarea.sel_start; - caretPos.end = txtarea.sel_start; + caretPos.end = txtarea.sel_start; } return caretPos; -- cgit v1.2.1 From 0cfa843677eaac952df910c19df345452680d2ce Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 15 Dec 2011 23:17:16 +0100 Subject: [ticket/10531] Disallow deleting of the last style Regression from PHPBB3-9675 commit 0e02f5cb0b7f615f1eadd6606a89bfd1b28f0d0d PHPBB3-9675 PHPBB3-10531 --- phpBB/includes/acp/acp_styles.php | 18 ++++++++++++++++-- 1 file changed, 16 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php index 3bc8c86500..5300265686 100644 --- a/phpBB/includes/acp/acp_styles.php +++ b/phpBB/includes/acp/acp_styles.php @@ -1634,6 +1634,13 @@ parse_css_file = {PARSE_CSS_FILE} trigger_error($user->lang['NO_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING); } + $s_only_component = $this->display_component_options($mode, $style_row[$mode . '_id'], $style_row); + + if ($s_only_component) + { + trigger_error($user->lang['ONLY_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING); + } + if ($update) { if ($mode == 'style') @@ -1678,8 +1685,6 @@ parse_css_file = {PARSE_CSS_FILE} trigger_error($user->lang[$message] . adm_back_link($this->u_action)); } - $this->display_component_options($mode, $style_row[$mode . '_id'], $style_row); - $this->page_title = 'DELETE_' . $l_prefix; $template->assign_vars(array( @@ -1765,11 +1770,14 @@ parse_css_file = {PARSE_CSS_FILE} /** * Display the options which can be used to replace a style/template/theme/imageset + * + * @return boolean Returns true if the component is the only component and can not be deleted. */ function display_component_options($component, $component_id, $style_row = false, $style_id = false) { global $db, $template, $user; + $is_only_component = true; $component_in_use = array(); if ($component != 'style') { @@ -1801,6 +1809,9 @@ parse_css_file = {PARSE_CSS_FILE} $s_options = ''; if (($component != 'style') && empty($component_in_use)) { + // If it is not in use, there must be another component + $is_only_component = false; + $sql = "SELECT {$component}_id, {$component}_name FROM $sql_from WHERE {$component}_id = {$component_id}"; @@ -1824,6 +1835,7 @@ parse_css_file = {PARSE_CSS_FILE} { if ($row[$component . '_id'] != $component_id) { + $is_only_component = false; $s_options .= ''; } else if ($component != 'style') @@ -1851,6 +1863,8 @@ parse_css_file = {PARSE_CSS_FILE} } } } + + return $is_only_component; } /** -- cgit v1.2.1 From d73c3a297e1f31320c054685d5e38cb72a6357f3 Mon Sep 17 00:00:00 2001 From: David King Date: Thu, 15 Dec 2011 23:15:24 +0000 Subject: [ticket/10535] Removed email confirm from UCP, removed unused language entries PHPBB3-10535 --- phpBB/includes/ucp/ucp_profile.php | 7 ------- phpBB/language/en/ucp.php | 4 ---- phpBB/styles/prosilver/template/ucp_profile_reg_details.html | 6 ------ 3 files changed, 17 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index 6eb11e6e59..2bc438e042 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -47,7 +47,6 @@ class ucp_profile $data = array( 'username' => utf8_normalize_nfc(request_var('username', $user->data['username'], true)), 'email' => strtolower(request_var('email', $user->data['user_email'])), - 'email_confirm' => strtolower(request_var('email_confirm', '')), 'new_password' => request_var('new_password', '', true), 'cur_password' => request_var('cur_password', '', true), 'password_confirm' => request_var('password_confirm', '', true), @@ -66,7 +65,6 @@ class ucp_profile 'email' => array( array('string', false, 6, 60), array('email')), - 'email_confirm' => array('string', true, 6, 60), ); if ($auth->acl_get('u_chgname') && $config['allow_namechange']) @@ -79,11 +77,6 @@ class ucp_profile $error = validate_data($data, $check_ary); - if ($auth->acl_get('u_chgemail') && $data['email'] != $user->data['user_email'] && $data['email_confirm'] != $data['email']) - { - $error[] = ($data['email_confirm']) ? 'NEW_EMAIL_ERROR' : 'NEW_EMAIL_CONFIRM_EMPTY'; - } - if ($auth->acl_get('u_chgpasswd') && $data['new_password'] && $data['password_confirm'] != $data['new_password']) { $error[] = ($data['password_confirm']) ? 'NEW_PASSWORD_ERROR' : 'NEW_PASSWORD_CONFIRM_EMPTY'; diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 59e5cb1952..227b1c92a3 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -123,8 +123,6 @@ $lang = array_merge($lang, array( 'CLICK_RETURN_FOLDER' => '%1$sReturn to your “%3$s†folder%2$s', 'CONFIRMATION' => 'Confirmation of registration', 'CONFIRM_CHANGES' => 'Confirm changes', - 'CONFIRM_EMAIL' => 'Confirm e-mail address', - 'CONFIRM_EMAIL_EXPLAIN' => 'You only need to specify this if you are changing your e-mail address.', 'CONFIRM_EXPLAIN' => 'To prevent automated registrations the board requires you to enter a confirmation code. The code is displayed in the image you should see below. If you are visually impaired or cannot otherwise read this code please contact the %sBoard Administrator%s.', 'VC_REFRESH' => 'Refresh confirmation code', 'VC_REFRESH_EXPLAIN' => 'If you cannot read the code you can request a new one by clicking the button.', @@ -283,8 +281,6 @@ $lang = array_merge($lang, array( 'MOVE_TO_FOLDER' => 'Move to folder', 'MOVE_UP' => 'Move up', - 'NEW_EMAIL_CONFIRM_EMPTY' => 'You did not enter a confirm e-mail address.', - 'NEW_EMAIL_ERROR' => 'The e-mail addresses you entered do not match.', 'NEW_FOLDER_NAME' => 'New folder name', 'NEW_PASSWORD' => 'New password', 'NEW_PASSWORD_CONFIRM_EMPTY' => 'You did not enter a confirm password.', diff --git a/phpBB/styles/prosilver/template/ucp_profile_reg_details.html b/phpBB/styles/prosilver/template/ucp_profile_reg_details.html index 9c3e98d053..9d4a9e3463 100644 --- a/phpBB/styles/prosilver/template/ucp_profile_reg_details.html +++ b/phpBB/styles/prosilver/template/ucp_profile_reg_details.html @@ -20,12 +20,6 @@
    {EMAIL}
    - -
    -

    {L_CONFIRM_EMAIL_EXPLAIN}
    -
    -
    -

    {L_CHANGE_PASSWORD_EXPLAIN}
    -- cgit v1.2.1 From fd58a0ad374cfd535b0aff2f4bf1564a479fcdd0 Mon Sep 17 00:00:00 2001 From: David King Date: Thu, 15 Dec 2011 23:17:21 +0000 Subject: [ticket/10535] Forgot a subsilver2 change. *doh* PHPBB3-10535 --- phpBB/styles/subsilver2/template/ucp_profile_reg_details.html | 6 ------ 1 file changed, 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/ucp_profile_reg_details.html b/phpBB/styles/subsilver2/template/ucp_profile_reg_details.html index 1b1c28fa3b..96e2e26683 100644 --- a/phpBB/styles/subsilver2/template/ucp_profile_reg_details.html +++ b/phpBB/styles/subsilver2/template/ucp_profile_reg_details.html @@ -22,12 +22,6 @@
    - - - - - - -- cgit v1.2.1 From ba576f823b612b441f221b12be525e9638016910 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 16 Dec 2011 18:03:46 +0100 Subject: [prep-release-3.0.10] Update Changelog for 3.0.10-RC3 release. --- phpBB/docs/CHANGELOG.html | 238 +++++++++++++++++++++++----------------------- 1 file changed, 121 insertions(+), 117 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html index a4bbfb7d7f..a0690819d2 100644 --- a/phpBB/docs/CHANGELOG.html +++ b/phpBB/docs/CHANGELOG.html @@ -95,132 +95,136 @@

    Bug

      -
    • [PHPBB3-5506] - Deleting all items from last page results in empty list display
    • -
    • [PHPBB3-6458] - Width of Topics and Posts columns in Board Index is causing problems with language packs
    • -
    • [PHPBB3-6632] - Better viewing of topics for wide screen displays
    • -
    • [PHPBB3-7138] - Cannot display simple header/footer with trigger_error()
    • -
    • [PHPBB3-7291] - Broken links of char selection in memberlist
    • -
    • [PHPBB3-7932] - Fix font size in select boxes
    • -
    • [PHPBB3-8094] - Text in the forums.php and install.php not matching
    • -
    • [PHPBB3-8173] - Redundant BBCode helpline in JS
    • -
    • [PHPBB3-8177] - February 29th birthdays not shown in non-leap year
    • -
    • [PHPBB3-8571] - Users can make their age a negative number on memberlist
    • -
    • [PHPBB3-8691] - Error creating log_time index
    • -
    • [PHPBB3-8937] - Code tags - single space indent
    • -
    • [PHPBB3-8996] - Wrong position when adding BBCodes with accesskey in IE
    • -
    • [PHPBB3-9008] - Incorrect unread topic tracking for unapproved topics
    • -
    • [PHPBB3-9066] - Invalid Prefix Names Allowed
    • -
    • [PHPBB3-9416] - HTML entities in poll titles and options incorrectly re-encoded
    • -
    • [PHPBB3-9525] - Minimum characters per post/message should never be '0'
    • -
    • [PHPBB3-9645] - XHTML error on phpinfo page in ACP
    • -
    • [PHPBB3-9776] - When deleting and recreating a poll, old options aren't deleted and reappear with the new ones
    • -
    • [PHPBB3-9956] - No error message displayed when disapprove reason is invalid or empty
    • -
    • [PHPBB3-9976] - Direct post links open the wrong page of viewtopic when multiple posts are posted in the same second
    • -
    • [PHPBB3-9978] - Missing semicolons in // <![CDATA[ part of overall_header.html
    • -
    • [PHPBB3-10087] - Limited browser support for ban exclusion emphasis
    • -
    • [PHPBB3-10157] - Missing error handling when a custom profile field is not defined for current language
    • -
    • [PHPBB3-10166] - Post-admin activation email confusingly refers to username
    • -
    • [PHPBB3-10187] - XHTML error in ucp_groups_manage.html
    • -
    • [PHPBB3-10190] - Misleading information about permissions displayed after editing forum settings
    • -
    • [PHPBB3-10212] - Captcha not displayed when username not exists
    • -
    • [PHPBB3-10216] - Updater's failed query language grammatically incorrect
    • -
    • [PHPBB3-10226] - Mysqli dbal extension does not allow connection via pipes
    • -
    • [PHPBB3-10227] - Mysqli dbal extension does not allow persistent connection for PHP >= 5.3.0
    • -
    • [PHPBB3-10237] - Unwatching a forum/topic does not check for correct hash parameter
    • -
    • [PHPBB3-10240] - Word filter evasion
    • -
    • [PHPBB3-10253] - IE9 Quote problem
    • -
    • [PHPBB3-10255] - gitignore ignores too much
    • -
    • [PHPBB3-10257] - AAAA record parsing fails on older versions of Windows
    • -
    • [PHPBB3-10259] - Incorrect email on joining Open group
    • -
    • [PHPBB3-10265] - Unit test tests/random/mt_rand.php is not run because of missing _test suffix.
    • -
    • [PHPBB3-10266] - Poor navigation links after reporting a post
    • -
    • [PHPBB3-10267] - Missing strlen() on $table_prefix in db tools index name length check
    • -
    • [PHPBB3-10274] - Hardcoded module ID in "Re-check version" link on ACP front page
    • -
    • [PHPBB3-10275] - Wrong information about sent passwords in FAQ
    • -
    • [PHPBB3-10292] - Whitespace inconsistency in acp_ranks
    • -
    • [PHPBB3-10293] - Jumpbox allows jumping to invalid forums in prosilver
    • -
    • [PHPBB3-10294] - sqlsrv_rows_affected non-functional in MSSQLNative.php
    • -
    • [PHPBB3-10296] - incorrect cross join in SQL Server
    • -
    • [PHPBB3-10298] - EMBED Tag Not Closed Properly In subSilver2 attachment.html
    • -
    • [PHPBB3-10299] - Typo in comment about $max_store_length in truncate_string() (in functions_content.php)
    • -
    • [PHPBB3-10303] - send_status_line() doesn't validate user input
    • -
    • [PHPBB3-10304] - Bad url in U_ICQ on /ucp_mp_viewmessage.php
    • -
    • [PHPBB3-10307] - Return value of $db->sql_fetchrow() on empty tables is not consistent
    • -
    • [PHPBB3-10309] - Utf tests download data into temporary locations deep in source tree
    • -
    • [PHPBB3-10320] - "Most active topic" can leak topic title of topics in password-protected forums
    • -
    • [PHPBB3-10321] - Link to page 1 of the Memberlist has a useless question mark at the end
    • -
    • [PHPBB3-10324] - XHTML error in Prosilver - MCP - User Notes
    • -
    • [PHPBB3-10339] - Typo in prosilver's mcp_front.html
    • -
    • [PHPBB3-10341] - Topic title of "0" does not show as "Most active topic"
    • -
    • [PHPBB3-10351] - Invalid syntax for Oracle's sql_column_remove()
    • -
    • [PHPBB3-10352] - Missing break for Oracle's sql_table_drop()
    • -
    • [PHPBB3-10365] - Moderators can view forbidden information
    • -
    • [PHPBB3-10377] - All moderators can change topic type
    • -
    • [PHPBB3-10394] - Tests use call-time pass by reference which results in Fatal error on PHP 5.4
    • -
    • [PHPBB3-10397] - Pagination code inconsistency
    • -
    • [PHPBB3-10400] - '0' (zero) not allowed as forum name
    • -
    • [PHPBB3-10408] - Layout of topics/attachments list is broken in UCP and MCP
    • -
    • [PHPBB3-10413] - Make create_schema_files usable
    • -
    • [PHPBB3-10416] - Use dbport in phpbb_database_test_connection_manager::connect()
    • -
    • [PHPBB3-10420] - Update startup to account for PHP 5.4
    • -
    • [PHPBB3-10421] - Interchanged parameters in includes/acp/acp_users.php
    • -
    • [PHPBB3-10422] - Unnecessary <!-- IF --> statement in viewtopic_body.html
    • -
    • [PHPBB3-10435] - Topic count mismatch on viewforum
    • -
    • [PHPBB3-10437] - Announcements on moderation queue are not hidden
    • -
    • [PHPBB3-10446] - Unencoded 8bit characters in email headers
    • -
    • [PHPBB3-10452] - XHTML error when printing a PM
    • -
    • [PHPBB3-10461] - MCP's recent actions list is empty
    • -
    • [PHPBB3-10479] - Remove PostgreSQL version numbers from driver's language string
    • -
    • [PHPBB3-10485] - XHTML error in Prosilver - index and viewforum
    • -
    • [PHPBB3-10488] - Database updater for 3.0.10-RC1 overwrites config variable email_max_chunk_size without checking for custom value
    • -
    • [PHPBB3-10497] - SQL error when guest visits forum with unread topic
    • +
    • [PHPBB3-5506] - Deleting all items from last page results in empty list display
    • +
    • [PHPBB3-6458] - Width of Topics and Posts columns in Board Index is causing problems with language packs
    • +
    • [PHPBB3-7138] - Cannot display simple header/footer with trigger_error()
    • +
    • [PHPBB3-7291] - Broken links of char selection in memberlist
    • +
    • [PHPBB3-7932] - Fix font size in select boxes
    • +
    • [PHPBB3-8094] - Text in the forums.php and install.php not matching
    • +
    • [PHPBB3-8173] - Redundant BBCode helpline in JS
    • +
    • [PHPBB3-8177] - February 29th birthdays not shown in non-leap year
    • +
    • [PHPBB3-8571] - Users can make their age a negative number on memberlist
    • +
    • [PHPBB3-8691] - Error creating log_time index
    • +
    • [PHPBB3-8937] - Code tags - single space indent
    • +
    • [PHPBB3-9008] - Incorrect unread topic tracking for unapproved topics
    • +
    • [PHPBB3-9066] - Invalid Prefix Names Allowed
    • +
    • [PHPBB3-9416] - HTML entities in poll titles and options incorrectly re-encoded
    • +
    • [PHPBB3-9525] - Minimum characters per post/message should never be '0'
    • +
    • [PHPBB3-9645] - XHTML error on phpinfo page in ACP
    • +
    • [PHPBB3-9776] - When deleting and recreating a poll, old options aren't deleted and reappear with the new ones
    • +
    • [PHPBB3-9956] - No error message displayed when disapprove reason is invalid or empty
    • +
    • [PHPBB3-9976] - Direct post links open the wrong page of viewtopic when multiple posts are posted in the same second
    • +
    • [PHPBB3-9978] - Missing semicolons in // <![CDATA[ part of overall_header.html
    • +
    • [PHPBB3-10087] - Limited browser support for ban exclusion emphasis
    • +
    • [PHPBB3-10157] - Missing error handling when a custom profile field is not defined for current language
    • +
    • [PHPBB3-10166] - Post-admin activation email confusingly refers to username
    • +
    • [PHPBB3-10187] - XHTML error in ucp_groups_manage.html
    • +
    • [PHPBB3-10190] - Misleading information about permissions displayed after editing forum settings
    • +
    • [PHPBB3-10212] - Captcha not displayed when username not exists
    • +
    • [PHPBB3-10216] - Updater's failed query language grammatically incorrect
    • +
    • [PHPBB3-10226] - Mysqli dbal extension does not allow connection via pipes
    • +
    • [PHPBB3-10227] - Mysqli dbal extension does not allow persistent connection for PHP >= 5.3.0
    • +
    • [PHPBB3-10237] - Unwatching a forum/topic does not check for correct hash parameter
    • +
    • [PHPBB3-10240] - Word filter evasion
    • +
    • [PHPBB3-10253] - IE9 Quote problem
    • +
    • [PHPBB3-10255] - gitignore ignores too much
    • +
    • [PHPBB3-10257] - AAAA record parsing fails on older versions of Windows
    • +
    • [PHPBB3-10259] - Incorrect email on joining Open group
    • +
    • [PHPBB3-10265] - Unit test tests/random/mt_rand.php is not run because of missing _test suffix.
    • +
    • [PHPBB3-10266] - Poor navigation links after reporting a post
    • +
    • [PHPBB3-10267] - Missing strlen() on $table_prefix in db tools index name length check
    • +
    • [PHPBB3-10274] - Hardcoded module ID in "Re-check version" link on ACP front page
    • +
    • [PHPBB3-10275] - Wrong information about sent passwords in FAQ
    • +
    • [PHPBB3-10292] - Whitespace inconsistency in acp_ranks
    • +
    • [PHPBB3-10293] - Jumpbox allows jumping to invalid forums in prosilver
    • +
    • [PHPBB3-10294] - sqlsrv_rows_affected non-functional in MSSQLNative.php
    • +
    • [PHPBB3-10296] - incorrect cross join in SQL Server
    • +
    • [PHPBB3-10298] - EMBED Tag Not Closed Properly In subSilver2 attachment.html
    • +
    • [PHPBB3-10299] - Typo in comment about $max_store_length in truncate_string() (in functions_content.php)
    • +
    • [PHPBB3-10303] - send_status_line() doesn't validate user input
    • +
    • [PHPBB3-10304] - Bad url in U_ICQ on /ucp_mp_viewmessage.php
    • +
    • [PHPBB3-10307] - Return value of $db->sql_fetchrow() on empty tables is not consistent
    • +
    • [PHPBB3-10309] - Utf tests download data into temporary locations deep in source tree
    • +
    • [PHPBB3-10320] - "Most active topic" can leak topic title of topics in password-protected forums
    • +
    • [PHPBB3-10321] - Link to page 1 of the Memberlist has a useless question mark at the end
    • +
    • [PHPBB3-10324] - XHTML error in Prosilver - MCP - User Notes
    • +
    • [PHPBB3-10339] - Typo in prosilver's mcp_front.html
    • +
    • [PHPBB3-10341] - Topic title of "0" does not show as "Most active topic"
    • +
    • [PHPBB3-10351] - Invalid syntax for Oracle's sql_column_remove()
    • +
    • [PHPBB3-10352] - Missing break for Oracle's sql_table_drop()
    • +
    • [PHPBB3-10365] - Moderators can view forbidden information
    • +
    • [PHPBB3-10377] - All moderators can change topic type
    • +
    • [PHPBB3-10394] - Tests use call-time pass by reference which results in Fatal error on PHP 5.4
    • +
    • [PHPBB3-10397] - Pagination code inconsistency
    • +
    • [PHPBB3-10400] - '0' (zero) not allowed as forum name
    • +
    • [PHPBB3-10413] - Make create_schema_files usable
    • +
    • [PHPBB3-10416] - Use dbport in phpbb_database_test_connection_manager::connect()
    • +
    • [PHPBB3-10420] - Update startup to account for PHP 5.4
    • +
    • [PHPBB3-10421] - Interchanged parameters in includes/acp/acp_users.php
    • +
    • [PHPBB3-10422] - Unnecessary <!-- IF --> statement in viewtopic_body.html
    • +
    • [PHPBB3-10435] - Topic count mismatch on viewforum
    • +
    • [PHPBB3-10437] - Announcements on moderation queue are not hidden
    • +
    • [PHPBB3-10446] - Unencoded 8bit characters in email headers
    • +
    • [PHPBB3-10452] - XHTML error when printing a PM
    • +
    • [PHPBB3-10461] - MCP's recent actions list is empty
    • +
    • [PHPBB3-10479] - Remove PostgreSQL version numbers from driver's language string
    • +
    • [PHPBB3-10485] - XHTML error in Prosilver - index and viewforum
    • +
    • [PHPBB3-10488] - Database updater for 3.0.10-RC1 overwrites config variable email_max_chunk_size without checking for custom value
    • +
    • [PHPBB3-10497] - SQL error when guest visits forum with unread topic
    • +
    • [PHPBB3-10319] - Missing hidden fields in search form
    • +
    • [PHPBB3-10501] - Description of table prefix is wrong
    • +
    • [PHPBB3-10502] - CHANGELOG.html has a typo: 'red' should be 'read'.
    • +
    • [PHPBB3-10503] - Debug error when previewing edits
    • +
    • [PHPBB3-10504] - MCP Layout STILL broken in ProSilver when screen is resized to less 1200 pixels
    • +
    • [PHPBB3-10531] - Last remaining style can be uninstalled

    Improvement

      -
    • [PHPBB3-8616] - Add direct link to PM to notification message
    • -
    • [PHPBB3-9036] - Forums that can be listed but not read expose forum information
    • -
    • [PHPBB3-9297] - Add support for Extended Passive Mode (EPSV) in class ftp_fsock to better support IPv6 connections.
    • -
    • [PHPBB3-9307] - Mass email $max_chunk_size
    • -
    • [PHPBB3-9361] - Edit account settings - Improved clarification needed
    • -
    • [PHPBB3-9778] - Member Search from the Admin Control Panel is not Intuitive
    • -
    • [PHPBB3-9898] - Readme needs updating to reflect more opening for patches
    • -
    • [PHPBB3-9995] - Unnecessary coding in display_forums() in functions_display.php
    • -
    • [PHPBB3-10032] - BBCode Add List Item Control Name Contains Typo
    • -
    • [PHPBB3-10074] - Change default value of 'Set as special rank' to No for Add new rank
    • -
    • [PHPBB3-10185] - Board startdate not being set
    • -
    • [PHPBB3-10189] - Add "automatically generated" comment into schema-files.
    • -
    • [PHPBB3-10199] - Performance: viewtopic has a useless join
    • -
    • [PHPBB3-10222] - Also build language and styles changes in diff/patch format
    • -
    • [PHPBB3-10239] - Add "Are you sure" confirmation to backup restore in ACP
    • -
    • [PHPBB3-10243] - Add gmgetdate() wrapper for getdate() which returns dates in UTC.
    • -
    • [PHPBB3-10245] - Messenger uses output buffering for error collection, should use error collector instead
    • -
    • [PHPBB3-10246] - Remove VCS section from docs/coding-guidelines.html
    • -
    • [PHPBB3-10254] - Remove style names from themes and fix some information on it
    • -
    • [PHPBB3-10263] - Add phpbb_version_compare() wrapper for version_compare()
    • -
    • [PHPBB3-10278] - Improve timeout handling in get_remote_file()
    • -
    • [PHPBB3-10315] - Radio Buttons in ACP are clipped in Safari - Fix suggested
    • -
    • [PHPBB3-10327] - Use "ALTER TABLE ... ADD INDEX" instead of "CREATE INDEX"
    • -
    • [PHPBB3-10334] - Birthday List display not dependent on user privileges
    • -
    • [PHPBB3-10335] - Responses to bots should have extra header to be used by reverse proxies
    • -
    • [PHPBB3-10346] - Add drop_tables key for database updater
    • -
    • [PHPBB3-10354] - When template tests are skipped because cache is not writable, print cache directory path
    • -
    • [PHPBB3-10369] - Change error collector to always report errfile and errline
    • -
    • [PHPBB3-10370] - Various improvements for get_backtrace()
    • -
    • [PHPBB3-10402] - Displaying report texts with linebreaks and clickable links
    • -
    • [PHPBB3-10419] - Add mbstring PHP ini parameters checks to ACP
    • -
    • [PHPBB3-10430] - Some typos and the like in docs/coding-guidelines.html
    • +
    • [PHPBB3-8616] - Add direct link to PM to notification message
    • +
    • [PHPBB3-9036] - Forums that can be listed but not read expose forum information
    • +
    • [PHPBB3-9297] - Add support for Extended Passive Mode (EPSV) in class ftp_fsock to better support IPv6 connections.
    • +
    • [PHPBB3-9307] - Mass email $max_chunk_size
    • +
    • [PHPBB3-9361] - Edit account settings - Improved clarification needed
    • +
    • [PHPBB3-9778] - Member Search from the Admin Control Panel is not Intuitive
    • +
    • [PHPBB3-9898] - Readme needs updating to reflect more opening for patches
    • +
    • [PHPBB3-9995] - Unnecessary coding in display_forums() in functions_display.php
    • +
    • [PHPBB3-10032] - BBCode Add List Item Control Name Contains Typo
    • +
    • [PHPBB3-10074] - Change default value of 'Set as special rank' to No for Add new rank
    • +
    • [PHPBB3-10185] - Board startdate not being set
    • +
    • [PHPBB3-10189] - Add "automatically generated" comment into schema-files.
    • +
    • [PHPBB3-10199] - Performance: viewtopic has a useless join
    • +
    • [PHPBB3-10222] - Also build language and styles changes in diff/patch format
    • +
    • [PHPBB3-10239] - Add "Are you sure" confirmation to backup restore in ACP
    • +
    • [PHPBB3-10243] - Add gmgetdate() wrapper for getdate() which returns dates in UTC.
    • +
    • [PHPBB3-10245] - Messenger uses output buffering for error collection, should use error collector instead
    • +
    • [PHPBB3-10246] - Remove VCS section from docs/coding-guidelines.html
    • +
    • [PHPBB3-10254] - Remove style names from themes and fix some information on it
    • +
    • [PHPBB3-10263] - Add phpbb_version_compare() wrapper for version_compare()
    • +
    • [PHPBB3-10278] - Improve timeout handling in get_remote_file()
    • +
    • [PHPBB3-10315] - Radio Buttons in ACP are clipped in Safari - Fix suggested
    • +
    • [PHPBB3-10327] - Use "ALTER TABLE ... ADD INDEX" instead of "CREATE INDEX"
    • +
    • [PHPBB3-10334] - Birthday List display not dependent on user privileges
    • +
    • [PHPBB3-10335] - Responses to bots should have extra header to be used by reverse proxies
    • +
    • [PHPBB3-10346] - Add drop_tables key for database updater
    • +
    • [PHPBB3-10354] - When template tests are skipped because cache is not writable, print cache directory path
    • +
    • [PHPBB3-10369] - Change error collector to always report errfile and errline
    • +
    • [PHPBB3-10370] - Various improvements for get_backtrace()
    • +
    • [PHPBB3-10402] - Displaying report texts with linebreaks and clickable links
    • +
    • [PHPBB3-10419] - Add mbstring PHP ini parameters checks to ACP
    • +
    • [PHPBB3-10430] - Some typos and the like in docs/coding-guidelines.html

    New Feature

      -
    • [PHPBB3-8240] - Request: db_tools to have two additional functions, table list and column list
    • +
    • [PHPBB3-8240] - Request: db_tools to have two additional functions, table list and column list

    Task

    1.ii. Changes since 3.0.8

    -- cgit v1.2.1 From 82fff947c641665b80941814813e07e898a7676c Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 19 Dec 2011 14:24:39 +0100 Subject: [ticket/10538] Call htmlspecialchars_decode() on Jabber and SMTP passwords. PHPBB3-10538 --- phpBB/includes/functions_messenger.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index 91b361183c..6549693333 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -568,7 +568,7 @@ class messenger if (!$use_queue) { include_once($phpbb_root_path . 'includes/functions_jabber.' . $phpEx); - $this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], $config['jab_password'], $config['jab_use_ssl']); + $this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl']); if (!$this->jabber->connect()) { @@ -769,7 +769,7 @@ class queue } include_once($phpbb_root_path . 'includes/functions_jabber.' . $phpEx); - $this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], $config['jab_password'], $config['jab_use_ssl']); + $this->jabber = new jabber($config['jab_host'], $config['jab_port'], $config['jab_username'], htmlspecialchars_decode($config['jab_password']), $config['jab_use_ssl']); if (!$this->jabber->connect()) { @@ -1022,7 +1022,7 @@ function smtpmail($addresses, $subject, $message, &$err_msg, $headers = false) } // Let me in. This function handles the complete authentication process - if ($err_msg = $smtp->log_into_server($config['smtp_host'], $config['smtp_username'], $config['smtp_password'], $config['smtp_auth_method'])) + if ($err_msg = $smtp->log_into_server($config['smtp_host'], $config['smtp_username'], htmlspecialchars_decode($config['smtp_password']), $config['smtp_auth_method'])) { $smtp->close_session($err_msg); return false; -- cgit v1.2.1 From 53617dfce57ba23caa163a871797cec26b88403b Mon Sep 17 00:00:00 2001 From: David King Date: Wed, 21 Dec 2011 03:28:00 +0000 Subject: [ticket/10541] Fixed empty drop-down menu bug PHPBB3-10541 --- phpBB/includes/acp/acp_users.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index c1ad28ca14..631d3bf272 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -120,7 +120,7 @@ class acp_users // Build modes dropdown list $sql = 'SELECT module_mode, module_auth FROM ' . MODULES_TABLE . " - WHERE module_basename = 'users' + WHERE module_basename = 'acp_users' AND module_enabled = 1 AND module_class = 'acp' ORDER BY left_id, module_mode"; -- cgit v1.2.1 From fa2edf518748e3ec812857cf913235793216a027 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 23 Dec 2011 00:26:26 -0500 Subject: [ticket/10546] Add missing argument to adm_back_link in acp_captcha. PHPBB3-10546 --- phpBB/includes/acp/acp_captcha.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_captcha.php b/phpBB/includes/acp/acp_captcha.php index 1893eed14f..469a367bba 100644 --- a/phpBB/includes/acp/acp_captcha.php +++ b/phpBB/includes/acp/acp_captcha.php @@ -96,7 +96,7 @@ class acp_captcha } else if ($submit) { - trigger_error($user->lang['FORM_INVALID'] . adm_back_link(), E_USER_WARNING); + trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING); } else { -- cgit v1.2.1 From 7779dae2cc256eafb6fa9dc1bc882b52c4b1d8ca Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Fri, 25 Jun 2010 15:19:10 +0200 Subject: [ticket/9681] Add password length to security settings PHPBB3-9681 --- phpBB/includes/acp/acp_board.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php index 8c761e51fe..f437dca8f9 100644 --- a/phpBB/includes/acp/acp_board.php +++ b/phpBB/includes/acp/acp_board.php @@ -383,6 +383,8 @@ class acp_board 'referer_validation' => array('lang' => 'REFERER_VALID', 'validate' => 'int:0:3','type' => 'custom', 'method' => 'select_ref_check', 'explain' => true), 'check_dnsbl' => array('lang' => 'CHECK_DNSBL', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), 'email_check_mx' => array('lang' => 'EMAIL_CHECK_MX', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), + 'max_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:8:255', 'type' => false, 'method' => false, 'explain' => false,), + 'min_pass_chars' => array('lang' => 'PASSWORD_LENGTH', 'validate' => 'int:1', 'type' => 'custom', 'method' => 'password_length', 'explain' => true), 'pass_complex' => array('lang' => 'PASSWORD_TYPE', 'validate' => 'string', 'type' => 'select', 'method' => 'select_password_chars', 'explain' => true), 'chg_passforce' => array('lang' => 'FORCE_PASS_CHANGE', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true, 'append' => ' ' . $user->lang['DAYS']), 'max_login_attempts' => array('lang' => 'MAX_LOGIN_ATTEMPTS', 'validate' => 'int:0', 'type' => 'text:3:3', 'explain' => true), -- cgit v1.2.1 From b8ddd329225894ecd181146be799f0f8a085fcc4 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 23 Dec 2011 01:45:41 -0500 Subject: [ticket/7432] Explain what users are inactive in more detail. PHPBB3-7432 --- phpBB/language/en/acp/common.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/common.php b/phpBB/language/en/acp/common.php index ef8d6f1cb3..79caa07d98 100644 --- a/phpBB/language/en/acp/common.php +++ b/phpBB/language/en/acp/common.php @@ -405,7 +405,7 @@ $lang = array_merge($lang, array( 'INACTIVE_REASON_UNKNOWN' => 'Unknown', 'INACTIVE_USERS' => 'Inactive users', 'INACTIVE_USERS_EXPLAIN' => 'This is a list of users who have registered but whose accounts are inactive. You can activate, delete or remind (by sending an e-mail) these users if you wish.', - 'INACTIVE_USERS_EXPLAIN_INDEX' => 'This is a list of the last 10 registered users who have inactive accounts. A full list is available from the appropriate menu item or by following the link below from where you can activate, delete or remind (by sending an e-mail) these users if you wish.', + 'INACTIVE_USERS_EXPLAIN_INDEX' => 'This is a list of the last 10 registered users who have inactive accounts. Accounts are inactive either because account activation was enabled in user registration settings and these users’ accounts have not yet been activated, or because these accounts have been deactivated. A full list is available from the appropriate menu item or by following the link below from where you can activate, delete or remind (by sending an e-mail) these users if you wish.', 'NO_INACTIVE_USERS' => 'No inactive users', -- cgit v1.2.1 From 4baa2bb52c47b0b0e316c3a25f34e7bc27075ffd Mon Sep 17 00:00:00 2001 From: David King Date: Fri, 23 Dec 2011 21:55:49 +0000 Subject: [ticket/10535] Removed email confirm field from acp_users module PHPBB3-10535 --- phpBB/adm/style/acp_users_overview.html | 4 ---- phpBB/includes/acp/acp_users.php | 7 ------- 2 files changed, 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index 9237e45daf..1f10e7f66e 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -45,10 +45,6 @@
    -
    -

    {L_CONFIRM_EMAIL_EXPLAIN}
    -
    -

    {L_CHANGE_PASSWORD_EXPLAIN}
    diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index c1ad28ca14..cf5650a901 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -757,7 +757,6 @@ class acp_users 'username' => utf8_normalize_nfc(request_var('user', $user_row['username'], true)), 'user_founder' => request_var('user_founder', ($user_row['user_type'] == USER_FOUNDER) ? 1 : 0), 'email' => strtolower(request_var('user_email', $user_row['user_email'])), - 'email_confirm' => strtolower(request_var('email_confirm', '')), 'new_password' => request_var('new_password', '', true), 'password_confirm' => request_var('password_confirm', '', true), ); @@ -789,7 +788,6 @@ class acp_users array('string', false, 6, 60), array('email', $user_row['user_email']) ), - 'email_confirm' => array('string', true, 6, 60) ); } @@ -800,11 +798,6 @@ class acp_users $error[] = 'NEW_PASSWORD_ERROR'; } - if ($data['email'] != $user_row['user_email'] && $data['email_confirm'] != $data['email']) - { - $error[] = 'NEW_EMAIL_ERROR'; - } - if (!check_form_key($form_name)) { $error[] = 'FORM_INVALID'; -- cgit v1.2.1 From d9fef488af150107b753b3c30e15ab5bf6d9da38 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 26 Jul 2011 17:48:17 +0200 Subject: [ticket/9079] Display backtrace on all E_USER_ERROR errors, not only SQL errors PHPBB3-9079 --- phpBB/includes/db/dbal.php | 5 ----- phpBB/includes/functions.php | 7 +++++++ 2 files changed, 7 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index b4c1a72e1c..230c9c8ed7 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -662,12 +662,7 @@ class dbal // The DEBUG_EXTRA constant is for development only! if ((isset($auth) && $auth->acl_get('a_')) || defined('IN_INSTALL') || defined('DEBUG_EXTRA')) { - // Print out a nice backtrace... - $backtrace = get_backtrace(); - $message .= ($sql) ? '

    SQL

    ' . htmlspecialchars($sql) : ''; - $message .= ($backtrace) ? '

    BACKTRACE
    ' . $backtrace : ''; - $message .= '
    '; } else { diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 852fc683f2..f625f70c0f 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3853,6 +3853,13 @@ function msg_handler($errno, $msg_text, $errfile, $errline) } } + if (defined('IN_INSTALL') || defined('DEBUG_EXTRA') || isset($auth) && $auth->acl_get('a_')) + { + $backtrace = get_backtrace(); + $msg_text .= ($backtrace) ? '

    BACKTRACE
    ' . $backtrace : ''; + $msg_text .= '
    '; + } + if ((defined('DEBUG') || defined('IN_CRON') || defined('IMAGE_OUTPUT')) && isset($db)) { // let's avoid loops -- cgit v1.2.1 From b6999237f456443b0b325f2ebee1f990ee7f5116 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 24 Dec 2011 01:24:09 -0500 Subject: [ticket/9079] Always log backtrace to error log when logging errors. PHPBB3-9079 --- phpBB/includes/functions.php | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index f625f70c0f..1eefaee651 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3853,18 +3853,23 @@ function msg_handler($errno, $msg_text, $errfile, $errline) } } + $log_text = $msg_text; + $backtrace = get_backtrace(); + if ($backtrace) + { + $log_text .= '

    BACKTRACE
    ' . $backtrace; + } + if (defined('IN_INSTALL') || defined('DEBUG_EXTRA') || isset($auth) && $auth->acl_get('a_')) { - $backtrace = get_backtrace(); - $msg_text .= ($backtrace) ? '

    BACKTRACE
    ' . $backtrace : ''; - $msg_text .= '
    '; + $msg_text = $log_text; } if ((defined('DEBUG') || defined('IN_CRON') || defined('IMAGE_OUTPUT')) && isset($db)) { // let's avoid loops $db->sql_return_on_error(true); - add_log('critical', 'LOG_GENERAL_ERROR', $msg_title, $msg_text); + add_log('critical', 'LOG_GENERAL_ERROR', $msg_title, $log_text); $db->sql_return_on_error(false); } -- cgit v1.2.1 From fa003bb5fd2fa87f5fec2b19d14fcd4a4eb9b052 Mon Sep 17 00:00:00 2001 From: Richard Foote Date: Thu, 22 Dec 2011 00:45:16 -0500 Subject: [ticket/10542] Remove class="postlink" in subsilver2 faq_body.html class="postlink" is not defined in stylesheet.css so remove it from styles/subsilver2/template/faq_body.html PHPBB3-10542 --- phpBB/styles/subsilver2/template/faq_body.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/faq_body.html b/phpBB/styles/subsilver2/template/faq_body.html index bbd9b82b19..6a4df3659c 100644 --- a/phpBB/styles/subsilver2/template/faq_body.html +++ b/phpBB/styles/subsilver2/template/faq_body.html @@ -13,7 +13,7 @@ {faq_block.BLOCK_TITLE}
    - {faq_block.faq_row.FAQ_QUESTION}
    + {faq_block.faq_row.FAQ_QUESTION}

    -- cgit v1.2.1 From 38c2d4da35b6c00e2ef2f6b271eda2c020974eee Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 23 Dec 2011 02:24:11 -0500 Subject: [ticket/10428] Compare $data to false strictly. Users may pass 0 or '' for $data, this should cause the user-specified $data code path to be taken. PHPBB3-10428 --- phpBB/includes/acp/acp_users.php | 8 ++++---- phpBB/includes/session.php | 8 ++++---- 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 4f58434a43..724d450c99 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -2345,7 +2345,7 @@ class acp_users { global $user; - $var = ($data) ? $data : $user_row['user_options']; + $var = ($data !== false) ? $data : $user_row['user_options']; if ($value && !($var & 1 << $user->keyoptions[$key])) { @@ -2357,10 +2357,10 @@ class acp_users } else { - return ($data) ? $var : false; + return ($data !== false) ? $var : false; } - if (!$data) + if ($data === false) { $user_row['user_options'] = $var; return true; @@ -2378,7 +2378,7 @@ class acp_users { global $user; - $var = ($data) ? $data : $user_row['user_options']; + $var = ($data !== false) ? $data : $user_row['user_options']; return ($var & 1 << $user->keyoptions[$key]) ? true : false; } } diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index caadcbafaa..50b6ac7406 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -2343,7 +2343,7 @@ class user extends session { if (!isset($this->keyvalues[$key])) { - $var = ($data) ? $data : $this->data['user_options']; + $var = ($data !== false) ? $data : $this->data['user_options']; $this->keyvalues[$key] = ($var & 1 << $this->keyoptions[$key]) ? true : false; } @@ -2355,7 +2355,7 @@ class user extends session */ function optionset($key, $value, $data = false) { - $var = ($data) ? $data : $this->data['user_options']; + $var = ($data !== false) ? $data : $this->data['user_options']; if ($value && !($var & 1 << $this->keyoptions[$key])) { @@ -2367,10 +2367,10 @@ class user extends session } else { - return ($data) ? $var : false; + return ($data !== false) ? $var : false; } - if (!$data) + if ($data === false) { $this->data['user_options'] = $var; return true; -- cgit v1.2.1 From 16ae99eec8e34ec6d542c1e4d82bd288bc0d0026 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 23 Dec 2011 02:29:48 -0500 Subject: [ticket/10428] Dispose of $this->keyvalues cache for optionget. It does not work properly when custom $data is provided, and making it work will make the code so complicated that any benefits from having this cache in the first place will be nullified. Just get rid of it. PHPBB3-10428 --- phpBB/includes/session.php | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 50b6ac7406..d988426a87 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1507,7 +1507,6 @@ class user extends session // Able to add new options (up to id 31) var $keyoptions = array('viewimg' => 0, 'viewflash' => 1, 'viewsmilies' => 2, 'viewsigs' => 3, 'viewavatars' => 4, 'viewcensors' => 5, 'attachsig' => 6, 'bbcode' => 8, 'smilies' => 9, 'popuppm' => 10, 'sig_bbcode' => 15, 'sig_smilies' => 16, 'sig_links' => 17); - var $keyvalues = array(); /** * Constructor to set the lang path @@ -2341,13 +2340,8 @@ class user extends session */ function optionget($key, $data = false) { - if (!isset($this->keyvalues[$key])) - { - $var = ($data !== false) ? $data : $this->data['user_options']; - $this->keyvalues[$key] = ($var & 1 << $this->keyoptions[$key]) ? true : false; - } - - return $this->keyvalues[$key]; + $var = ($data !== false) ? $data : $this->data['user_options']; + return ($var & 1 << $this->keyoptions[$key]) ? true : false; } /** -- cgit v1.2.1 From 99c102344ebe3b4a6c18e36c8bea8f3bdd997f2e Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 23 Dec 2011 12:52:51 -0500 Subject: [ticket/10428] Use phpbb_optionget/set in optionget/set for DRYness. PHPBB3-10428 --- phpBB/includes/acp/acp_users.php | 28 ++++++++++++---------------- phpBB/includes/session.php | 28 ++++++++++++---------------- 2 files changed, 24 insertions(+), 32 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 724d450c99..e433c46db3 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -2347,27 +2347,23 @@ class acp_users $var = ($data !== false) ? $data : $user_row['user_options']; - if ($value && !($var & 1 << $user->keyoptions[$key])) - { - $var += 1 << $user->keyoptions[$key]; - } - else if (!$value && ($var & 1 << $user->keyoptions[$key])) - { - $var -= 1 << $user->keyoptions[$key]; - } - else - { - return ($data !== false) ? $var : false; - } + $new_var = phpbb_optionset($user->keyoptions[$key], $value, $var); if ($data === false) { - $user_row['user_options'] = $var; - return true; + if ($new_var != $var) + { + $user_row['user_options'] = $new_var; + return true; + } + else + { + return false; + } } else { - return $var; + return $new_var; } } @@ -2379,7 +2375,7 @@ class acp_users global $user; $var = ($data !== false) ? $data : $user_row['user_options']; - return ($var & 1 << $user->keyoptions[$key]) ? true : false; + return phpbb_optionget($user->keyoptions[$key], $var); } } diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index d988426a87..457071e01e 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -2341,7 +2341,7 @@ class user extends session function optionget($key, $data = false) { $var = ($data !== false) ? $data : $this->data['user_options']; - return ($var & 1 << $this->keyoptions[$key]) ? true : false; + return phpbb_optionget($this->keyoptions[$key], $var); } /** @@ -2351,27 +2351,23 @@ class user extends session { $var = ($data !== false) ? $data : $this->data['user_options']; - if ($value && !($var & 1 << $this->keyoptions[$key])) - { - $var += 1 << $this->keyoptions[$key]; - } - else if (!$value && ($var & 1 << $this->keyoptions[$key])) - { - $var -= 1 << $this->keyoptions[$key]; - } - else - { - return ($data !== false) ? $var : false; - } + $new_var = phpbb_optionset($this->keyoptions[$key], $value, $var); if ($data === false) { - $this->data['user_options'] = $var; - return true; + if ($new_var != $var) + { + $this->data['user_options'] = $new_var; + return true; + } + else + { + return false; + } } else { - return $var; + return $new_var; } } -- cgit v1.2.1 From 10453b67525a0e26a3c859df4dab46907189af72 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 23 Dec 2011 22:59:55 -0500 Subject: [ticket/10428] Documentation for optionget/optionset functions. PHPBB3-10428 --- phpBB/includes/acp/acp_users.php | 23 +++++++++++++++++++++-- phpBB/includes/session.php | 17 +++++++++++++++-- 2 files changed, 36 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index e433c46db3..363c900edc 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -2339,7 +2339,19 @@ class acp_users } /** - * Optionset replacement for this module based on $user->optionset + * Set option bit field for user options in a user row array. + * + * Optionset replacement for this module based on $user->optionset. + * + * @param array $user_row Row from the users table. + * @param int $key Option key, as defined in $user->keyoptions property. + * @param bool $value True to set the option, false to clear the option. + * @param int $data Current bit field value, or false to use $user_row['user_options'] + * @return int|bool If $data is false, the bit field is modified and + * written back to $user_row['user_options'], and + * return value is true if the bit field changed and + * false otherwise. If $data is not false, the new + * bitfield value is returned. */ function optionset(&$user_row, $key, $value, $data = false) { @@ -2368,7 +2380,14 @@ class acp_users } /** - * Optionget replacement for this module based on $user->optionget + * Get option bit field from user options in a user row array. + * + * Optionget replacement for this module based on $user->optionget. + * + * @param array $user_row Row from the users table. + * @param int $key option key, as defined in $user->keyoptions property. + * @param int $data bit field value to use, or false to use $user_row['user_options'] + * @return bool true if the option is set in the bit field, false otherwise */ function optionget(&$user_row, $key, $data = false) { diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 457071e01e..a894242a39 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -2336,7 +2336,11 @@ class user extends session } /** - * Get option bit field from user options + * Get option bit field from user options. + * + * @param int $key option key, as defined in $keyoptions property. + * @param int $data bit field value to use, or false to use $this->data['user_options'] + * @return bool true if the option is set in the bit field, false otherwise */ function optionget($key, $data = false) { @@ -2345,7 +2349,16 @@ class user extends session } /** - * Set option bit field for user options + * Set option bit field for user options. + * + * @param int $key Option key, as defined in $keyoptions property. + * @param bool $value True to set the option, false to clear the option. + * @param int $data Current bit field value, or false to use $this->data['user_options'] + * @return int|bool If $data is false, the bit field is modified and + * written back to $this->data['user_options'], and + * return value is true if the bit field changed and + * false otherwise. If $data is not false, the new + * bitfield value is returned. */ function optionset($key, $value, $data = false) { -- cgit v1.2.1 From fc297a710e56d938afce83de401b103c72218a1b Mon Sep 17 00:00:00 2001 From: p Date: Fri, 23 Dec 2011 22:10:34 +0000 Subject: [ticket/10535] Delete email confirm from installer PHPBB3-10535 --- phpBB/install/install_install.php | 23 ++++++++--------------- phpBB/language/en/install.php | 1 - 2 files changed, 8 insertions(+), 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index 21fe355447..cfef1861cf 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -690,7 +690,7 @@ class install_install extends module $error = array(); // Check the entered email address and password - if ($data['admin_name'] == '' || $data['admin_pass1'] == '' || $data['admin_pass2'] == '' || $data['board_email1'] == '' || $data['board_email2'] == '') + if ($data['admin_name'] == '' || $data['admin_pass1'] == '' || $data['admin_pass2'] == '' || $data['board_email'] == '') { $error[] = $lang['INST_ERR_MISSING_DATA']; } @@ -722,12 +722,7 @@ class install_install extends module $error[] = $lang['INST_ERR_PASSWORD_TOO_LONG']; } - if ($data['board_email1'] != $data['board_email2'] && $data['board_email1'] != '') - { - $error[] = $lang['INST_ERR_EMAIL_MISMATCH']; - } - - if ($data['board_email1'] != '' && !preg_match('/^' . get_preg_expression('email') . '$/i', $data['board_email1'])) + if ($data['board_email'] != '' && !preg_match('/^' . get_preg_expression('email') . '$/i', $data['board_email'])) { $error[] = $lang['INST_ERR_EMAIL_INVALID']; } @@ -1251,11 +1246,11 @@ class install_install extends module WHERE config_name = 'server_port'", 'UPDATE ' . $data['table_prefix'] . "config - SET config_value = '" . $db->sql_escape($data['board_email1']) . "' + SET config_value = '" . $db->sql_escape($data['board_email']) . "' WHERE config_name = 'board_email'", 'UPDATE ' . $data['table_prefix'] . "config - SET config_value = '" . $db->sql_escape($data['board_email1']) . "' + SET config_value = '" . $db->sql_escape($data['board_email']) . "' WHERE config_name = 'board_contact'", 'UPDATE ' . $data['table_prefix'] . "config @@ -1315,7 +1310,7 @@ class install_install extends module WHERE config_name = 'avatar_salt'", 'UPDATE ' . $data['table_prefix'] . "users - SET username = '" . $db->sql_escape($data['admin_name']) . "', user_password='" . $db->sql_escape(md5($data['admin_pass1'])) . "', user_ip = '" . $db->sql_escape($user_ip) . "', user_lang = '" . $db->sql_escape($data['default_lang']) . "', user_email='" . $db->sql_escape($data['board_email1']) . "', user_dateformat='" . $db->sql_escape($lang['default_dateformat']) . "', user_email_hash = " . $db->sql_escape(phpbb_email_hash($data['board_email1'])) . ", username_clean = '" . $db->sql_escape(utf8_clean_string($data['admin_name'])) . "' + SET username = '" . $db->sql_escape($data['admin_name']) . "', user_password='" . $db->sql_escape(md5($data['admin_pass1'])) . "', user_ip = '" . $db->sql_escape($user_ip) . "', user_lang = '" . $db->sql_escape($data['default_lang']) . "', user_email='" . $db->sql_escape($data['board_email']) . "', user_dateformat='" . $db->sql_escape($lang['default_dateformat']) . "', user_email_hash = " . $db->sql_escape(phpbb_email_hash($data['board_email'])) . ", username_clean = '" . $db->sql_escape(utf8_clean_string($data['admin_name'])) . "' WHERE username = 'Admin'", 'UPDATE ' . $data['table_prefix'] . "moderator_cache @@ -1831,7 +1826,7 @@ class install_install extends module $messenger->template('installed', $data['language']); - $messenger->to($data['board_email1'], $data['admin_name']); + $messenger->to($data['board_email'], $data['admin_name']); $messenger->anti_abuse_headers($config, $user); @@ -1890,8 +1885,7 @@ class install_install extends module 'admin_name' => utf8_normalize_nfc(request_var('admin_name', '', true)), 'admin_pass1' => request_var('admin_pass1', '', true), 'admin_pass2' => request_var('admin_pass2', '', true), - 'board_email1' => strtolower(request_var('board_email1', '')), - 'board_email2' => strtolower(request_var('board_email2', '')), + 'board_email' => strtolower(request_var('board_email', '')), 'img_imagick' => request_var('img_imagick', ''), 'ftp_path' => request_var('ftp_path', ''), 'ftp_user' => request_var('ftp_user', ''), @@ -1930,8 +1924,7 @@ class install_install extends module 'admin_name' => array('lang' => 'ADMIN_USERNAME', 'type' => 'text:25:100', 'explain' => true), 'admin_pass1' => array('lang' => 'ADMIN_PASSWORD', 'type' => 'password:25:100', 'explain' => true), 'admin_pass2' => array('lang' => 'ADMIN_PASSWORD_CONFIRM', 'type' => 'password:25:100', 'explain' => false), - 'board_email1' => array('lang' => 'CONTACT_EMAIL', 'type' => 'text:25:100', 'explain' => false), - 'board_email2' => array('lang' => 'CONTACT_EMAIL_CONFIRM', 'type' => 'text:25:100', 'explain' => false), + 'board_email' => array('lang' => 'CONTACT_EMAIL', 'type' => 'text:25:100', 'explain' => false), ); var $advanced_config_options = array( 'legend1' => 'ACP_EMAIL_SETTINGS', diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index 57a5de07eb..2ceb14a3d8 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -72,7 +72,6 @@ $lang = array_merge($lang, array( 'CONFIG_FILE_WRITTEN' => 'The configuration file has been written. You may now proceed to the next step of the installation.', 'CONFIG_PHPBB_EMPTY' => 'The phpBB3 config variable for “%s†is empty.', 'CONFIG_RETRY' => 'Retry', - 'CONTACT_EMAIL_CONFIRM' => 'Confirm contact e-mail', 'CONTINUE_CONVERT' => 'Continue conversion', 'CONTINUE_CONVERT_BODY' => 'A previous conversion attempt has been determined. You are now able to choose between starting a new conversion or continuing the conversion.', 'CONTINUE_LAST' => 'Continue last statements', -- cgit v1.2.1 From 2b88114365470c545ccf4aa5a83eeae607d72d3d Mon Sep 17 00:00:00 2001 From: David King Date: Wed, 28 Dec 2011 18:52:33 +0000 Subject: [ticket/10557] Added IN_PHPBB check to functions_acp.php PHPBB3-10557 --- phpBB/includes/functions_acp.php | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/functions_acp.php b/phpBB/includes/functions_acp.php index 4702f9939d..b65d6e6b5f 100644 --- a/phpBB/includes/functions_acp.php +++ b/phpBB/includes/functions_acp.php @@ -8,6 +8,14 @@ * */ +/** +* @ignore +*/ +if (!defined('IN_PHPBB')) +{ + exit; +} + /** * Header for acp pages */ -- cgit v1.2.1 From d5dc70cbe3be0f18666a0dc7e972b9d6766291af Mon Sep 17 00:00:00 2001 From: Richard Foote Date: Thu, 29 Dec 2011 16:27:48 -0500 Subject: [ticket/10407] Fix check for empty image paths in convertor This applies to avatar_path,avatar_gallery_path,smilies_path and upload_path. Currently, the convertor gets each path from the config table and adds a trailing slash. If there is no entry in the config table for the path, the path can never be empty because of the added trailing slash. This patch will temporarily remove the trailing slash, then check if the path is empty. PHPBB3-10407 --- phpBB/includes/functions_convert.php | 20 ++++++++++++++++---- 1 file changed, 16 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_convert.php b/phpBB/includes/functions_convert.php index 4a359dcade..4663fe46cc 100644 --- a/phpBB/includes/functions_convert.php +++ b/phpBB/includes/functions_convert.php @@ -424,7 +424,10 @@ function import_avatar_gallery($gallery_name = '', $subdirs_as_galleries = false $relative_path = empty($convert->convertor['source_path_absolute']); - if (empty($convert->convertor['avatar_gallery_path'])) + // strip trailing slash + $trimmed_avatar_gallery_path = rtrim($convert->convertor['avatar_gallery_path'], '/'); + + if (empty($trimmed_avatar_gallery_path)) { $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_GALLERY_PATH'], 'import_avatar_gallery()'), __LINE__, __FILE__); } @@ -588,7 +591,10 @@ function import_attachment($source, $use_target = false) global $convert, $phpbb_root_path, $config, $user; - if (empty($convert->convertor['upload_path'])) + // strip trailing slash + $trimmed_upload_path = rtrim($convert->convertor['upload_path'], '/'); + + if (empty($trimmed_upload_path)) { $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_UPLOAD_DIR'], 'import_attachment()'), __LINE__, __FILE__); } @@ -647,7 +653,10 @@ function import_smiley($source, $use_target = false) global $convert, $phpbb_root_path, $config, $user; - if (!isset($convert->convertor['smilies_path'])) + // strip trailing slash + $trimmed_smilies_path = rtrim($convert->convertor['smilies_path'], '/'); + + if (empty($trimmed_smilies_path)) { $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_SMILIES_PATH'], 'import_smiley()'), __LINE__, __FILE__); } @@ -667,7 +676,10 @@ function import_avatar($source, $use_target = false, $user_id = false) global $convert, $phpbb_root_path, $config, $user; - if (!isset($convert->convertor['avatar_path'])) + // strip trailing slash + $trimmed_avatar_path = rtrim($convert->convertor['avatar_path'], '/'); + + if (empty($trimmed_avatar_path)) { $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_AVATAR_PATH'], 'import_avatar()'), __LINE__, __FILE__); } -- cgit v1.2.1 From 7a04c9048c110f0bd21ea3e9e869e17b408d640e Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 31 Dec 2011 13:32:52 +0000 Subject: [ticket/9916] Updating header license and removing Version $Id$ PHPBB3-9916 --- phpBB/adm/index.php | 3 +-- phpBB/adm/swatch.php | 3 +-- phpBB/common.php | 3 +-- phpBB/cron.php | 3 +-- phpBB/download/file.php | 3 +-- phpBB/faq.php | 3 +-- phpBB/feed.php | 3 +-- phpBB/includes/acp/acp_attachments.php | 3 +-- phpBB/includes/acp/acp_ban.php | 3 +-- phpBB/includes/acp/acp_bbcodes.php | 3 +-- phpBB/includes/acp/acp_board.php | 3 +-- phpBB/includes/acp/acp_bots.php | 3 +-- phpBB/includes/acp/acp_captcha.php | 3 +-- phpBB/includes/acp/acp_database.php | 3 +-- phpBB/includes/acp/acp_disallow.php | 3 +-- phpBB/includes/acp/acp_email.php | 3 +-- phpBB/includes/acp/acp_forums.php | 3 +-- phpBB/includes/acp/acp_groups.php | 3 +-- phpBB/includes/acp/acp_icons.php | 3 +-- phpBB/includes/acp/acp_inactive.php | 3 +-- phpBB/includes/acp/acp_jabber.php | 3 +-- phpBB/includes/acp/acp_language.php | 6 ++---- phpBB/includes/acp/acp_logs.php | 3 +-- phpBB/includes/acp/acp_main.php | 3 +-- phpBB/includes/acp/acp_modules.php | 3 +-- phpBB/includes/acp/acp_permission_roles.php | 3 +-- phpBB/includes/acp/acp_permissions.php | 3 +-- phpBB/includes/acp/acp_php_info.php | 3 +-- phpBB/includes/acp/acp_profile.php | 3 +-- phpBB/includes/acp/acp_prune.php | 3 +-- phpBB/includes/acp/acp_ranks.php | 3 +-- phpBB/includes/acp/acp_reasons.php | 3 +-- phpBB/includes/acp/acp_search.php | 3 +-- phpBB/includes/acp/acp_send_statistics.php | 3 +-- phpBB/includes/acp/acp_styles.php | 3 +-- phpBB/includes/acp/acp_update.php | 3 +-- phpBB/includes/acp/acp_users.php | 3 +-- phpBB/includes/acp/acp_words.php | 3 +-- phpBB/includes/acp/auth.php | 3 +-- phpBB/includes/acp/info/acp_attachments.php | 3 +-- phpBB/includes/acp/info/acp_ban.php | 3 +-- phpBB/includes/acp/info/acp_bbcodes.php | 3 +-- phpBB/includes/acp/info/acp_board.php | 3 +-- phpBB/includes/acp/info/acp_bots.php | 3 +-- phpBB/includes/acp/info/acp_captcha.php | 3 +-- phpBB/includes/acp/info/acp_database.php | 3 +-- phpBB/includes/acp/info/acp_disallow.php | 3 +-- phpBB/includes/acp/info/acp_email.php | 3 +-- phpBB/includes/acp/info/acp_forums.php | 3 +-- phpBB/includes/acp/info/acp_groups.php | 3 +-- phpBB/includes/acp/info/acp_icons.php | 3 +-- phpBB/includes/acp/info/acp_inactive.php | 3 +-- phpBB/includes/acp/info/acp_jabber.php | 3 +-- phpBB/includes/acp/info/acp_language.php | 3 +-- phpBB/includes/acp/info/acp_logs.php | 3 +-- phpBB/includes/acp/info/acp_main.php | 3 +-- phpBB/includes/acp/info/acp_modules.php | 3 +-- phpBB/includes/acp/info/acp_permission_roles.php | 3 +-- phpBB/includes/acp/info/acp_permissions.php | 3 +-- phpBB/includes/acp/info/acp_php_info.php | 3 +-- phpBB/includes/acp/info/acp_profile.php | 3 +-- phpBB/includes/acp/info/acp_prune.php | 3 +-- phpBB/includes/acp/info/acp_ranks.php | 3 +-- phpBB/includes/acp/info/acp_reasons.php | 3 +-- phpBB/includes/acp/info/acp_search.php | 3 +-- phpBB/includes/acp/info/acp_send_statistics.php | 3 +-- phpBB/includes/acp/info/acp_styles.php | 3 +-- phpBB/includes/acp/info/acp_update.php | 3 +-- phpBB/includes/acp/info/acp_users.php | 3 +-- phpBB/includes/acp/info/acp_words.php | 3 +-- phpBB/includes/auth.php | 3 +-- phpBB/includes/auth/auth_apache.php | 3 +-- phpBB/includes/auth/auth_db.php | 3 +-- phpBB/includes/auth/auth_ldap.php | 3 +-- phpBB/includes/bbcode.php | 3 +-- phpBB/includes/cache/driver/apc.php | 3 +-- phpBB/includes/cache/driver/base.php | 3 +-- phpBB/includes/cache/driver/eaccelerator.php | 3 +-- phpBB/includes/cache/driver/file.php | 3 +-- phpBB/includes/cache/driver/interface.php | 2 +- phpBB/includes/cache/driver/memcache.php | 3 +-- phpBB/includes/cache/driver/memory.php | 3 +-- phpBB/includes/cache/driver/null.php | 3 +-- phpBB/includes/cache/driver/redis.php | 2 +- phpBB/includes/cache/driver/wincache.php | 2 +- phpBB/includes/cache/driver/xcache.php | 3 +-- phpBB/includes/cache/factory.php | 3 +-- phpBB/includes/cache/service.php | 2 +- phpBB/includes/captcha/captcha_factory.php | 3 +-- phpBB/includes/captcha/captcha_gd.php | 3 +-- phpBB/includes/captcha/captcha_gd_wave.php | 3 +-- phpBB/includes/captcha/captcha_non_gd.php | 3 +-- phpBB/includes/captcha/plugins/captcha_abstract.php | 3 +-- phpBB/includes/captcha/plugins/phpbb_captcha_gd_plugin.php | 3 +-- phpBB/includes/captcha/plugins/phpbb_captcha_gd_wave_plugin.php | 3 +-- phpBB/includes/captcha/plugins/phpbb_captcha_nogd_plugin.php | 3 +-- phpBB/includes/captcha/plugins/phpbb_captcha_qa_plugin.php | 3 +-- phpBB/includes/captcha/plugins/phpbb_recaptcha_plugin.php | 3 +-- phpBB/includes/class_loader.php | 3 +-- phpBB/includes/config/config.php | 2 +- phpBB/includes/config/db.php | 2 +- phpBB/includes/constants.php | 3 +-- phpBB/includes/cron/manager.php | 2 +- phpBB/includes/cron/task/base.php | 2 +- phpBB/includes/cron/task/core/prune_all_forums.php | 2 +- phpBB/includes/cron/task/core/prune_forum.php | 2 +- phpBB/includes/cron/task/core/queue.php | 2 +- phpBB/includes/cron/task/core/tidy_cache.php | 2 +- phpBB/includes/cron/task/core/tidy_database.php | 2 +- phpBB/includes/cron/task/core/tidy_search.php | 2 +- phpBB/includes/cron/task/core/tidy_sessions.php | 2 +- phpBB/includes/cron/task/core/tidy_warnings.php | 2 +- phpBB/includes/cron/task/parametrized.php | 2 +- phpBB/includes/cron/task/provider.php | 2 +- phpBB/includes/cron/task/task.php | 2 +- phpBB/includes/cron/task/wrapper.php | 2 +- phpBB/includes/db/db_tools.php | 3 +-- phpBB/includes/db/dbal.php | 3 +-- phpBB/includes/db/firebird.php | 3 +-- phpBB/includes/db/mssql.php | 3 +-- phpBB/includes/db/mssql_odbc.php | 3 +-- phpBB/includes/db/mssqlnative.php | 3 +-- phpBB/includes/db/mysql.php | 3 +-- phpBB/includes/db/mysqli.php | 3 +-- phpBB/includes/db/oracle.php | 3 +-- phpBB/includes/db/postgres.php | 3 +-- phpBB/includes/db/sqlite.php | 3 +-- phpBB/includes/diff/diff.php | 3 +-- phpBB/includes/diff/engine.php | 3 +-- phpBB/includes/diff/renderer.php | 3 +-- phpBB/includes/error_collector.php | 3 +-- phpBB/includes/extension/base.php | 2 +- phpBB/includes/extension/finder.php | 2 +- phpBB/includes/extension/interface.php | 2 +- phpBB/includes/extension/manager.php | 2 +- phpBB/includes/extension/provider.php | 2 +- phpBB/includes/functions.php | 3 +-- phpBB/includes/functions_acp.php | 3 +-- phpBB/includes/functions_admin.php | 3 +-- phpBB/includes/functions_compress.php | 3 +-- phpBB/includes/functions_content.php | 3 +-- phpBB/includes/functions_convert.php | 3 +-- phpBB/includes/functions_display.php | 3 +-- phpBB/includes/functions_download.php | 2 +- phpBB/includes/functions_install.php | 3 +-- phpBB/includes/functions_jabber.php | 3 +-- phpBB/includes/functions_messenger.php | 3 +-- phpBB/includes/functions_module.php | 3 +-- phpBB/includes/functions_posting.php | 3 +-- phpBB/includes/functions_privmsgs.php | 3 +-- phpBB/includes/functions_profile_fields.php | 3 +-- phpBB/includes/functions_transfer.php | 3 +-- phpBB/includes/functions_upload.php | 3 +-- phpBB/includes/functions_user.php | 3 +-- phpBB/includes/group_positions.php | 2 +- phpBB/includes/hooks/index.php | 3 +-- phpBB/includes/lock/db.php | 2 +- phpBB/includes/mcp/info/mcp_ban.php | 3 +-- phpBB/includes/mcp/info/mcp_logs.php | 3 +-- phpBB/includes/mcp/info/mcp_main.php | 3 +-- phpBB/includes/mcp/info/mcp_notes.php | 3 +-- phpBB/includes/mcp/info/mcp_pm_reports.php | 3 +-- phpBB/includes/mcp/info/mcp_queue.php | 3 +-- phpBB/includes/mcp/info/mcp_reports.php | 3 +-- phpBB/includes/mcp/info/mcp_warn.php | 3 +-- phpBB/includes/mcp/mcp_ban.php | 3 +-- phpBB/includes/mcp/mcp_forum.php | 3 +-- phpBB/includes/mcp/mcp_front.php | 3 +-- phpBB/includes/mcp/mcp_logs.php | 3 +-- phpBB/includes/mcp/mcp_main.php | 3 +-- phpBB/includes/mcp/mcp_notes.php | 3 +-- phpBB/includes/mcp/mcp_pm_reports.php | 3 +-- phpBB/includes/mcp/mcp_post.php | 3 +-- phpBB/includes/mcp/mcp_queue.php | 3 +-- phpBB/includes/mcp/mcp_reports.php | 3 +-- phpBB/includes/mcp/mcp_topic.php | 3 +-- phpBB/includes/mcp/mcp_warn.php | 3 +-- phpBB/includes/message_parser.php | 3 +-- phpBB/includes/questionnaire/questionnaire.php | 3 +-- phpBB/includes/request/deactivated_super_global.php | 2 +- phpBB/includes/request/interface.php | 2 +- phpBB/includes/request/request.php | 2 +- phpBB/includes/request/type_cast_helper.php | 2 +- phpBB/includes/request/type_cast_helper_interface.php | 2 +- phpBB/includes/search/base.php | 3 +-- phpBB/includes/search/fulltext_mysql.php | 3 +-- phpBB/includes/search/fulltext_native.php | 3 +-- phpBB/includes/session.php | 3 +-- phpBB/includes/startup.php | 2 +- phpBB/includes/template/compile.php | 2 +- phpBB/includes/template/context.php | 2 +- phpBB/includes/template/extension_path_provider.php | 2 +- phpBB/includes/template/filter.php | 2 +- phpBB/includes/template/locator.php | 2 +- phpBB/includes/template/path_provider.php | 2 +- phpBB/includes/template/path_provider_interface.php | 2 +- phpBB/includes/template/renderer.php | 2 +- phpBB/includes/template/renderer_eval.php | 2 +- phpBB/includes/template/renderer_include.php | 2 +- phpBB/includes/template/template.php | 2 +- phpBB/includes/ucp/info/ucp_attachments.php | 3 +-- phpBB/includes/ucp/info/ucp_groups.php | 3 +-- phpBB/includes/ucp/info/ucp_main.php | 3 +-- phpBB/includes/ucp/info/ucp_pm.php | 3 +-- phpBB/includes/ucp/info/ucp_prefs.php | 3 +-- phpBB/includes/ucp/info/ucp_profile.php | 3 +-- phpBB/includes/ucp/info/ucp_zebra.php | 3 +-- phpBB/includes/ucp/ucp_activate.php | 3 +-- phpBB/includes/ucp/ucp_attachments.php | 3 +-- phpBB/includes/ucp/ucp_confirm.php | 3 +-- phpBB/includes/ucp/ucp_groups.php | 3 +-- phpBB/includes/ucp/ucp_main.php | 3 +-- phpBB/includes/ucp/ucp_pm.php | 3 +-- phpBB/includes/ucp/ucp_pm_compose.php | 3 +-- phpBB/includes/ucp/ucp_pm_options.php | 3 +-- phpBB/includes/ucp/ucp_pm_viewfolder.php | 3 +-- phpBB/includes/ucp/ucp_pm_viewmessage.php | 3 +-- phpBB/includes/ucp/ucp_prefs.php | 3 +-- phpBB/includes/ucp/ucp_profile.php | 3 +-- phpBB/includes/ucp/ucp_register.php | 3 +-- phpBB/includes/ucp/ucp_remind.php | 3 +-- phpBB/includes/ucp/ucp_resend.php | 3 +-- phpBB/includes/ucp/ucp_zebra.php | 3 +-- phpBB/includes/utf/utf_normalizer.php | 3 +-- phpBB/includes/utf/utf_tools.php | 3 +-- phpBB/index.php | 3 +-- phpBB/install/convertors/convert_phpbb20.php | 3 +-- phpBB/install/convertors/functions_phpbb20.php | 3 +-- phpBB/install/data/confusables.php | 3 +-- phpBB/install/data/new_normalizer.php | 3 +-- phpBB/install/database_update.php | 2 +- phpBB/install/index.php | 3 +-- phpBB/install/install_convert.php | 3 +-- phpBB/install/install_install.php | 3 +-- phpBB/install/install_main.php | 3 +-- phpBB/install/install_update.php | 3 +-- phpBB/language/en/acp/attachments.php | 3 +-- phpBB/language/en/acp/ban.php | 3 +-- phpBB/language/en/acp/board.php | 3 +-- phpBB/language/en/acp/bots.php | 3 +-- phpBB/language/en/acp/common.php | 3 +-- phpBB/language/en/acp/database.php | 3 +-- phpBB/language/en/acp/email.php | 3 +-- phpBB/language/en/acp/forums.php | 3 +-- phpBB/language/en/acp/groups.php | 3 +-- phpBB/language/en/acp/language.php | 3 +-- phpBB/language/en/acp/modules.php | 3 +-- phpBB/language/en/acp/permissions.php | 3 +-- phpBB/language/en/acp/permissions_phpbb.php | 3 +-- phpBB/language/en/acp/posting.php | 3 +-- phpBB/language/en/acp/profile.php | 3 +-- phpBB/language/en/acp/prune.php | 3 +-- phpBB/language/en/acp/search.php | 3 +-- phpBB/language/en/acp/styles.php | 3 +-- phpBB/language/en/acp/users.php | 3 +-- phpBB/language/en/captcha_qa.php | 3 +-- phpBB/language/en/captcha_recaptcha.php | 3 +-- phpBB/language/en/common.php | 3 +-- phpBB/language/en/groups.php | 3 +-- phpBB/language/en/help_bbcode.php | 3 +-- phpBB/language/en/help_faq.php | 3 +-- phpBB/language/en/install.php | 3 +-- phpBB/language/en/mcp.php | 3 +-- phpBB/language/en/memberlist.php | 3 +-- phpBB/language/en/posting.php | 3 +-- phpBB/language/en/search.php | 3 +-- phpBB/language/en/search_ignore_words.php | 3 +-- phpBB/language/en/search_synonyms.php | 3 +-- phpBB/language/en/ucp.php | 3 +-- phpBB/language/en/viewforum.php | 3 +-- phpBB/language/en/viewtopic.php | 3 +-- phpBB/mcp.php | 3 +-- phpBB/memberlist.php | 3 +-- phpBB/posting.php | 3 +-- phpBB/report.php | 3 +-- phpBB/search.php | 3 +-- phpBB/ucp.php | 3 +-- phpBB/viewforum.php | 3 +-- phpBB/viewonline.php | 3 +-- phpBB/viewtopic.php | 3 +-- 280 files changed, 281 insertions(+), 516 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/index.php b/phpBB/adm/index.php index cb9e07bd70..e7168b210b 100644 --- a/phpBB/adm/index.php +++ b/phpBB/adm/index.php @@ -2,9 +2,8 @@ /** * * @package acp -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/adm/swatch.php b/phpBB/adm/swatch.php index 3696740200..434b00e542 100644 --- a/phpBB/adm/swatch.php +++ b/phpBB/adm/swatch.php @@ -2,9 +2,8 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/common.php b/phpBB/common.php index a5e0de4510..b308037a0e 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -2,9 +2,8 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * * Minimum Requirement: PHP 5.2.0 */ diff --git a/phpBB/cron.php b/phpBB/cron.php index 4f246048da..36b771f1b7 100644 --- a/phpBB/cron.php +++ b/phpBB/cron.php @@ -2,9 +2,8 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/download/file.php b/phpBB/download/file.php index 2a9c472ca7..2baa9d6c8a 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -2,9 +2,8 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/faq.php b/phpBB/faq.php index 79c0de3123..052f78816e 100644 --- a/phpBB/faq.php +++ b/phpBB/faq.php @@ -2,9 +2,8 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/feed.php b/phpBB/feed.php index e490363594..00247c1958 100644 --- a/phpBB/feed.php +++ b/phpBB/feed.php @@ -1,9 +1,8 @@ Date: Sun, 1 Jan 2012 16:00:17 +0100 Subject: [prep-release-3.0.10] Bumping version number for 3.0.10 final. --- phpBB/includes/constants.php | 2 +- phpBB/install/database_update.php | 8 +++++++- phpBB/install/schemas/schema_data.sql | 2 +- 3 files changed, 9 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php index 3a798fc1ce..b70cf5bc59 100644 --- a/phpBB/includes/constants.php +++ b/phpBB/includes/constants.php @@ -25,7 +25,7 @@ if (!defined('IN_PHPBB')) */ // phpBB Version -define('PHPBB_VERSION', '3.0.10-RC3'); +define('PHPBB_VERSION', '3.0.10'); // QA-related // define('PHPBB_QA', 1); diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index eeadc9f862..5694c6e29f 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -8,7 +8,7 @@ * */ -define('UPDATES_TO_VERSION', '3.0.10-RC3'); +define('UPDATES_TO_VERSION', '3.0.10'); // Enter any version to update from to test updates. The version within the db will not be updated. define('DEBUG_FROM_VERSION', false); @@ -991,6 +991,8 @@ function database_update_info() '3.0.10-RC1' => array(), // No changes from 3.0.10-RC2 to 3.0.10-RC3 '3.0.10-RC2' => array(), + // No changes from 3.0.10-RC3 to 3.0.10 + '3.0.10-RC3' => array(), /** @todo DROP LOGIN_ATTEMPT_TABLE.attempt_id in 3.0.11-RC1 */ ); @@ -2018,6 +2020,10 @@ function change_database_data(&$no_updates, $version) // No changes from 3.0.10-RC2 to 3.0.10-RC3 case '3.0.10-RC2': break; + + // No changes from 3.0.10-RC3 to 3.0.10 + case '3.0.10-RC3': + break; } } diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index eb90d3a06d..d7433d52fd 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -246,7 +246,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_page', INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.10-RC3'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.10'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400'); -- cgit v1.2.1 From 0fc37fb3972845f76848c1e64d5edfe4b8cd0972 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sun, 1 Jan 2012 10:35:50 +0000 Subject: [ticket/9916] Changing coding guidelines license PHPBB3-9916 --- phpBB/docs/coding-guidelines.html | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html index 7d51b26dca..cd113a7226 100644 --- a/phpBB/docs/coding-guidelines.html +++ b/phpBB/docs/coding-guidelines.html @@ -129,9 +129,8 @@ /** * * @package {PACKAGENAME} -* @version $Id: $ * @copyright (c) 2007 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ @@ -2322,7 +2321,7 @@ if (utf8_case_fold_nfc($string1) == utf8_case_fold_nfc($string2))
    -

    This application is opensource software released under the GPL. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    +

    This application is opensource software released under the GNU General Public License v2. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    -- cgit v1.2.1 From 5e52734c240e5ecfb812202cd4cae305be9290c5 Mon Sep 17 00:00:00 2001 From: Unknown Date: Mon, 2 Jan 2012 15:09:38 +0000 Subject: [ticket/9916] Changing header in non-distributed files PHPBB3-9916 --- phpBB/develop/change_smiley_ref.php | 2 -- phpBB/develop/check_flash_bbcodes.php | 3 +-- phpBB/develop/create_schema_files.php | 3 +-- phpBB/develop/create_search_index.php | 2 +- phpBB/develop/create_variable_overview.php | 2 -- phpBB/develop/fill.php | 2 -- phpBB/develop/generate_utf_casefold.php | 3 +-- phpBB/develop/generate_utf_confusables.php | 3 +-- phpBB/develop/generate_utf_tables.php | 3 +-- phpBB/develop/merge_post_tables.php | 1 - phpBB/develop/mysql_upgrader.php | 3 +-- phpBB/develop/utf_normalizer_test.php | 3 +-- phpBB/docs/AUTHORS | 2 +- phpBB/docs/CHANGELOG.html | 2 +- phpBB/docs/FAQ.html | 4 ++-- phpBB/docs/INSTALL.html | 4 ++-- phpBB/docs/README.html | 2 +- phpBB/docs/auth_api.html | 2 +- phpBB/docs/hook_system.html | 2 +- 19 files changed, 17 insertions(+), 31 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/change_smiley_ref.php b/phpBB/develop/change_smiley_ref.php index db65dd52d4..3d6dd45d6f 100644 --- a/phpBB/develop/change_smiley_ref.php +++ b/phpBB/develop/change_smiley_ref.php @@ -5,8 +5,6 @@ * begin : Tuesday, February 25, 2003 * copyright : (C) 2003 The phpBB Group * email : support@phpbb.com - * - * $Id$ * ***************************************************************************/ diff --git a/phpBB/develop/check_flash_bbcodes.php b/phpBB/develop/check_flash_bbcodes.php index b0fa399209..2ce288ee3e 100644 --- a/phpBB/develop/check_flash_bbcodes.php +++ b/phpBB/develop/check_flash_bbcodes.php @@ -2,9 +2,8 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2009, 2010 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php index 7f37b94453..d44efb8870 100644 --- a/phpBB/develop/create_schema_files.php +++ b/phpBB/develop/create_schema_files.php @@ -2,9 +2,8 @@ /** * * @package phpBB3 -* @version $Id$ * @copyright (c) 2006 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * * This file creates new schema files for every database. * The filenames will be prefixed with an underscore to not overwrite the current schema files. diff --git a/phpBB/develop/create_search_index.php b/phpBB/develop/create_search_index.php index 374a4cf0a1..28001035f6 100644 --- a/phpBB/develop/create_search_index.php +++ b/phpBB/develop/create_search_index.php @@ -3,7 +3,7 @@ * * @package phpBB3 * @copyright (c) 2011 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/develop/create_variable_overview.php b/phpBB/develop/create_variable_overview.php index fe7cacf0d1..a786fc6866 100644 --- a/phpBB/develop/create_variable_overview.php +++ b/phpBB/develop/create_variable_overview.php @@ -1,8 +1,6 @@ . +* along with this program. If not, see * */ diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html index a0690819d2..2d3b6a6809 100644 --- a/phpBB/docs/CHANGELOG.html +++ b/phpBB/docs/CHANGELOG.html @@ -2182,7 +2182,7 @@
    -

    This application is opensource software released under the GPL. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    +

    This application is opensource software released under the GNU General Public License v2. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    diff --git a/phpBB/docs/FAQ.html b/phpBB/docs/FAQ.html index 83d7a342e0..dbcefc44c1 100644 --- a/phpBB/docs/FAQ.html +++ b/phpBB/docs/FAQ.html @@ -110,7 +110,7 @@ I want to sue you because i think you host an illegal board!
    -

    We provide the software, we have absolutely nothing to do with any board that runs it (beyond phpbb.com of course!) and we also do not host any site. The GPL grants the user an unlimited right of use subject to their adherence of that licence. Therefore we cannot prevent, dictate, control or otherwise limit the use of phpBB software. So please do not contact us for such matters.

    +

    We provide the software, we have absolutely nothing to do with any board that runs it (beyond phpbb.com of course!) and we also do not host any site. The GPL grants the user an unlimited right of use subject to their adherence of that license. Therefore we cannot prevent, dictate, control or otherwise limit the use of phpBB software. So please do not contact us for such matters.

    If you have a problem with a given board please take it up with them, not us. We are not and cannot be held legally responsible for any third party use of this software (much like Microsoft et al cannot be held responsible for the use of Windows in illegal activities, etc.). Additionally we do not track the use of phpBB software in any way. So please do not ask us for details on a "given" board we will not be able to help you. If any law firms or lawyers out there send us writs, cease and desist orders, etc. for third party website use of this software we reserve the right to charge for time wasted dealing with such issues...

    @@ -328,7 +328,7 @@ I want to sue you because i think you host an illegal board!
    -

    This application is opensource software released under the GPL. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    +

    This application is opensource software released under the GNU General Public License v2. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    diff --git a/phpBB/docs/INSTALL.html b/phpBB/docs/INSTALL.html index e5ba479d9e..c54e408be2 100644 --- a/phpBB/docs/INSTALL.html +++ b/phpBB/docs/INSTALL.html @@ -82,7 +82,7 @@
  • Webserver configuration
  • -
  • Disclaimer
  • +
  • Copyright and disclaimer
  • @@ -431,7 +431,7 @@
    -

    This application is opensource software released under the GPL. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    +

    This application is opensource software released under the GNU General Public License v2. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    diff --git a/phpBB/docs/README.html b/phpBB/docs/README.html index 7ceb698ac4..aa60d7dd25 100644 --- a/phpBB/docs/README.html +++ b/phpBB/docs/README.html @@ -339,7 +339,7 @@
    -

    This application is opensource software released under the GPL. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    +

    This application is opensource software released under the GNU General Public License v2. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    diff --git a/phpBB/docs/auth_api.html b/phpBB/docs/auth_api.html index 88618fa640..29469c21ac 100644 --- a/phpBB/docs/auth_api.html +++ b/phpBB/docs/auth_api.html @@ -275,7 +275,7 @@ $auth_admin = new auth_admin();
    -

    This application is opensource software released under the GPL. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    +

    This application is opensource software released under the GNU General Public License v2. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    diff --git a/phpBB/docs/hook_system.html b/phpBB/docs/hook_system.html index a5fad0d530..1b8131efaf 100644 --- a/phpBB/docs/hook_system.html +++ b/phpBB/docs/hook_system.html @@ -867,7 +867,7 @@ function phpbb_hook_register(&$hook)
    -

    This application is opensource software released under the GPL. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    +

    This application is opensource software released under the GNU General Public License v2. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

    -- cgit v1.2.1 From 24cf7f1d29bdfba636d9692a02188b9cddba4e1f Mon Sep 17 00:00:00 2001 From: Richard Foote Date: Mon, 2 Jan 2012 13:09:21 -0500 Subject: [ticket/10407] Fix check for empty image paths in convertor This applies to avatar_path,avatar_gallery_path,smilies_path and upload_path. Currently, the convertor gets each path from the config table and adds a trailing slash. If there is no entry in the config table for the path, the path can never be empty because of the added trailing slash. This patch will check the path without the trailing slash to see if the path is actually empty. PHPBB3-10407 --- phpBB/includes/functions_convert.php | 24 ++++++++---------------- 1 file changed, 8 insertions(+), 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_convert.php b/phpBB/includes/functions_convert.php index 4663fe46cc..3b26f417e9 100644 --- a/phpBB/includes/functions_convert.php +++ b/phpBB/includes/functions_convert.php @@ -424,10 +424,8 @@ function import_avatar_gallery($gallery_name = '', $subdirs_as_galleries = false $relative_path = empty($convert->convertor['source_path_absolute']); - // strip trailing slash - $trimmed_avatar_gallery_path = rtrim($convert->convertor['avatar_gallery_path'], '/'); - - if (empty($trimmed_avatar_gallery_path)) + // check for trailing slash + if (rtrim($convert->convertor['avatar_gallery_path'], '/') === '') { $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_GALLERY_PATH'], 'import_avatar_gallery()'), __LINE__, __FILE__); } @@ -591,10 +589,8 @@ function import_attachment($source, $use_target = false) global $convert, $phpbb_root_path, $config, $user; - // strip trailing slash - $trimmed_upload_path = rtrim($convert->convertor['upload_path'], '/'); - - if (empty($trimmed_upload_path)) + // check for trailing slash + if (rtrim($convert->convertor['upload_path'], '/') === '') { $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_UPLOAD_DIR'], 'import_attachment()'), __LINE__, __FILE__); } @@ -653,10 +649,8 @@ function import_smiley($source, $use_target = false) global $convert, $phpbb_root_path, $config, $user; - // strip trailing slash - $trimmed_smilies_path = rtrim($convert->convertor['smilies_path'], '/'); - - if (empty($trimmed_smilies_path)) + // check for trailing slash + if (rtrim($convert->convertor['smilies_path'], '/') === '') { $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_SMILIES_PATH'], 'import_smiley()'), __LINE__, __FILE__); } @@ -676,10 +670,8 @@ function import_avatar($source, $use_target = false, $user_id = false) global $convert, $phpbb_root_path, $config, $user; - // strip trailing slash - $trimmed_avatar_path = rtrim($convert->convertor['avatar_path'], '/'); - - if (empty($trimmed_avatar_path)) + // check for trailing slash + if (rtrim($convert->convertor['avatar_path'], '/') === '') { $convert->p_master->error(sprintf($user->lang['CONV_ERROR_NO_AVATAR_PATH'], 'import_avatar()'), __LINE__, __FILE__); } -- cgit v1.2.1 From 656a8ece6f2d52d35dfecb4a27c3709379583f48 Mon Sep 17 00:00:00 2001 From: Unknown Date: Sat, 31 Dec 2011 13:32:52 +0000 Subject: [ticket/9916] Updating header license and removing Version $Id$ PHPBB3-9916 --- phpBB/develop/lang_duplicates.php | 4 +--- phpBB/develop/remove-php-end-tags.py | 2 +- phpBB/includes/acp/acp_styles.php | 2 +- phpBB/language/en/ucp.php | 2 +- phpBB/styles/prosilver/style.cfg | 2 +- phpBB/styles/prosilver/template/template.cfg | 2 +- phpBB/styles/prosilver/theme/theme.cfg | 2 +- phpBB/styles/subsilver2/style.cfg | 2 +- phpBB/styles/subsilver2/template/template.cfg | 2 +- phpBB/styles/subsilver2/theme/theme.cfg | 2 +- 10 files changed, 10 insertions(+), 12 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/lang_duplicates.php b/phpBB/develop/lang_duplicates.php index 3ea841b6d6..02852798b6 100644 --- a/phpBB/develop/lang_duplicates.php +++ b/phpBB/develop/lang_duplicates.php @@ -15,10 +15,8 @@ die("Please read the first lines of this script for instructions on how to enabl // ------------------------------------------------------------- // -// $Id$ -// // @copyright (c) 2005 phpBB Group -// @license http://opensource.org/licenses/gpl-license.php GNU Public License +// @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 // // ------------------------------------------------------------- // Thanks to arod-1 diff --git a/phpBB/develop/remove-php-end-tags.py b/phpBB/develop/remove-php-end-tags.py index 1707c6d519..89b9ee5032 100755 --- a/phpBB/develop/remove-php-end-tags.py +++ b/phpBB/develop/remove-php-end-tags.py @@ -1,7 +1,7 @@ #!/usr/bin/env python # Remove ending PHP tags '?>' # @author Oleg Pudeyev -# @license http://opensource.org/licenses/gpl-license.php GNU Public License +# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 import sys, os, os.path, optparse diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php index 4f6b22fa14..f8a3b8e47e 100644 --- a/phpBB/includes/acp/acp_styles.php +++ b/phpBB/includes/acp/acp_styles.php @@ -61,7 +61,7 @@ class acp_styles # # @package phpBB3 # @copyright (c) 2005 phpBB Group -# @license http://opensource.org/licenses/gpl-license.php GNU Public License +# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 # # # At the left is the name, please do not change this diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 38f202b392..264b6ed4d8 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -38,7 +38,7 @@ if (empty($lang) || !is_array($lang)) $lang = array_merge($lang, array( 'TERMS_OF_USE_CONTENT' => 'By accessing “%1$s†(hereinafter “weâ€, “usâ€, “ourâ€, “%1$sâ€, “%2$sâ€), you agree to be legally bound by the following terms. If you do not agree to be legally bound by all of the following terms then please do not access and/or use “%1$sâ€. We may change these at any time and we’ll do our utmost in informing you, though it would be prudent to review this regularly yourself as your continued usage of “%1$s†after changes mean you agree to be legally bound by these terms as they are updated and/or amended.

    - Our forums are powered by phpBB (hereinafter “theyâ€, “themâ€, “theirâ€, “phpBB softwareâ€, “www.phpbb.comâ€, “phpBB Groupâ€, “phpBB Teamsâ€) which is a bulletin board solution released under the “General Public License†(hereinafter “GPLâ€) and can be downloaded from www.phpbb.com. The phpBB software only facilitates internet based discussions, the phpBB Group are not responsible for what we allow and/or disallow as permissible content and/or conduct. For further information about phpBB, please see: http://www.phpbb.com/.
    + Our forums are powered by phpBB (hereinafter “theyâ€, “themâ€, “theirâ€, “phpBB softwareâ€, “www.phpbb.comâ€, “phpBB Groupâ€, “phpBB Teamsâ€) which is a bulletin board solution released under the “GNU General Public License v2†(hereinafter “GPLâ€) and can be downloaded from www.phpbb.com. The phpBB software only facilitates internet based discussions, the phpBB Group are not responsible for what we allow and/or disallow as permissible content and/or conduct. For further information about phpBB, please see: http://www.phpbb.com/.

    You agree not to post any abusive, obscene, vulgar, slanderous, hateful, threatening, sexually-orientated or any other material that may violate any laws be it of your country, the country where “%1$s†is hosted or International Law. Doing so may lead to you being immediately and permanently banned, with notification of your Internet Service Provider if deemed required by us. The IP address of all posts are recorded to aid in enforcing these conditions. You agree that “%1$s†have the right to remove, edit, move or close any topic at any time should we see fit. As a user you agree to any information you have entered to being stored in a database. While this information will not be disclosed to any third party without your consent, neither “%1$s†nor phpBB shall be held responsible for any hacking attempt that may lead to the data being compromised. ', diff --git a/phpBB/styles/prosilver/style.cfg b/phpBB/styles/prosilver/style.cfg index 0c53211969..538e167df6 100644 --- a/phpBB/styles/prosilver/style.cfg +++ b/phpBB/styles/prosilver/style.cfg @@ -3,7 +3,7 @@ # # @package phpBB3 # @copyright (c) 2005 phpBB Group -# @license http://opensource.org/licenses/gpl-license.php GNU Public License +# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 # # # At the left is the name, please do not change this diff --git a/phpBB/styles/prosilver/template/template.cfg b/phpBB/styles/prosilver/template/template.cfg index eaaceea9e2..8d976247bc 100644 --- a/phpBB/styles/prosilver/template/template.cfg +++ b/phpBB/styles/prosilver/template/template.cfg @@ -3,7 +3,7 @@ # # @package phpBB3 # @copyright (c) 2006 phpBB Group -# @license http://opensource.org/licenses/gpl-license.php GNU Public License +# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 # # # At the left is the name, please do not change this diff --git a/phpBB/styles/prosilver/theme/theme.cfg b/phpBB/styles/prosilver/theme/theme.cfg index e27ba1c3a6..eced2a665e 100644 --- a/phpBB/styles/prosilver/theme/theme.cfg +++ b/phpBB/styles/prosilver/theme/theme.cfg @@ -3,7 +3,7 @@ # # @package phpBB3 # @copyright (c) 2006 phpBB Group -# @license http://opensource.org/licenses/gpl-license.php GNU Public License +# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 # # # At the left is the name, please do not change this diff --git a/phpBB/styles/subsilver2/style.cfg b/phpBB/styles/subsilver2/style.cfg index fc76c884e0..0804a27082 100644 --- a/phpBB/styles/subsilver2/style.cfg +++ b/phpBB/styles/subsilver2/style.cfg @@ -3,7 +3,7 @@ # # @package phpBB3 # @copyright (c) 2005 phpBB Group -# @license http://opensource.org/licenses/gpl-license.php GNU Public License +# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 # # # At the left is the name, please do not change this diff --git a/phpBB/styles/subsilver2/template/template.cfg b/phpBB/styles/subsilver2/template/template.cfg index 29361a59ff..82d3d2681b 100644 --- a/phpBB/styles/subsilver2/template/template.cfg +++ b/phpBB/styles/subsilver2/template/template.cfg @@ -3,7 +3,7 @@ # # @package phpBB3 # @copyright (c) 2005 phpBB Group -# @license http://opensource.org/licenses/gpl-license.php GNU Public License +# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 # # # At the left is the name, please do not change this diff --git a/phpBB/styles/subsilver2/theme/theme.cfg b/phpBB/styles/subsilver2/theme/theme.cfg index c560dabae2..16d66c844a 100644 --- a/phpBB/styles/subsilver2/theme/theme.cfg +++ b/phpBB/styles/subsilver2/theme/theme.cfg @@ -3,7 +3,7 @@ # # @package phpBB3 # @copyright (c) 2005 phpBB Group -# @license http://opensource.org/licenses/gpl-license.php GNU Public License +# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 # # # At the left is the name, please do not change this -- cgit v1.2.1 From 23363efaaacd2bec39a51c27db51a2777e7a4c21 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Mon, 2 Jan 2012 21:07:40 +0200 Subject: [ticket/10563] Show deactivated styles below active styles in acp Separates active and deactivated styles in styles list in acp PHPBB3-10563 --- phpBB/adm/style/acp_styles.html | 6 ++++++ phpBB/includes/acp/acp_styles.php | 3 +++ phpBB/language/en/acp/styles.php | 1 + 3 files changed, 10 insertions(+) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_styles.html b/phpBB/adm/style/acp_styles.html index 098cc723d9..6aa1c0ccc9 100644 --- a/phpBB/adm/style/acp_styles.html +++ b/phpBB/adm/style/acp_styles.html @@ -402,6 +402,12 @@
    + + + + + + diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php index e25061d6f0..5a7902755e 100644 --- a/phpBB/includes/acp/acp_styles.php +++ b/phpBB/includes/acp/acp_styles.php @@ -547,6 +547,7 @@ parse_css_file = {PARSE_CSS_FILE} { case 'style': $sql_from = STYLES_TABLE; + $sql_sort = 'style_active DESC, ' . $sql_sort; $sql = 'SELECT user_style, COUNT(user_style) AS style_count FROM ' . USERS_TABLE . ' @@ -635,6 +636,8 @@ parse_css_file = {PARSE_CSS_FILE} 'NAME' => $row[$mode . '_name'], 'STYLE_COUNT' => ($mode == 'style' && isset($style_count[$row['style_id']])) ? $style_count[$row['style_id']] : 0, + + 'S_INACTIVE' => ($mode == 'style' && !$row['style_active']) ? true : false, ) ); } diff --git a/phpBB/language/en/acp/styles.php b/phpBB/language/en/acp/styles.php index 3c8c4a328f..3194a2ebd6 100644 --- a/phpBB/language/en/acp/styles.php +++ b/phpBB/language/en/acp/styles.php @@ -267,6 +267,7 @@ $lang = array_merge($lang, array( 'IMG_USER_ICON9' => 'User defined image 9', 'IMG_USER_ICON10' => 'User defined image 10', + 'INACTIVE_STYLES' => 'Inactive styles', 'INCLUDE_DIMENSIONS' => 'Include dimensions', 'INCLUDE_IMAGESET' => 'Include imageset', 'INCLUDE_TEMPLATE' => 'Include template', -- cgit v1.2.1 From ffde8c8e06c4d37bef5cde280d520c0791ed2c67 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 6 Jan 2012 17:20:41 +0100 Subject: [ticket/10477] Normalize loaded module names to be class names or xcp_ prefixed PHPBB3-10477 --- phpBB/includes/functions_module.php | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php index d810285313..a6015b1eac 100644 --- a/phpBB/includes/functions_module.php +++ b/phpBB/includes/functions_module.php @@ -804,6 +804,13 @@ class p_master */ function load($class, $name, $mode = false) { + // new modules use the full class names, old ones are always called _, e.g. acp_board + // in the latter case this function may be called as load(acp, board) + if (!class_exists($name) && substr($name, 0, strlen($class) + 1) !== $class . '_') + { + $name = $class . '_' . $name; + } + $this->p_class = $class; $this->p_name = $name; -- cgit v1.2.1 From 80840a5f08c530d91f147c1bded1c316c2a73d0f Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 7 Jan 2012 20:51:03 +0100 Subject: [feature/event-dispatcher] Introduce a port of Symfony2 EventDispatcher PHPBB3-9550 --- phpBB/includes/event/dispatcher.php | 185 ++++++++++++++++++++++++++ phpBB/includes/event/dispatcher_interface.php | 96 +++++++++++++ phpBB/includes/event/event.php | 123 +++++++++++++++++ phpBB/includes/event/subscriber_interface.php | 50 +++++++ 4 files changed, 454 insertions(+) create mode 100644 phpBB/includes/event/dispatcher.php create mode 100644 phpBB/includes/event/dispatcher_interface.php create mode 100644 phpBB/includes/event/event.php create mode 100644 phpBB/includes/event/subscriber_interface.php (limited to 'phpBB') diff --git a/phpBB/includes/event/dispatcher.php b/phpBB/includes/event/dispatcher.php new file mode 100644 index 0000000000..c3b8dc5790 --- /dev/null +++ b/phpBB/includes/event/dispatcher.php @@ -0,0 +1,185 @@ + + * @author Jonathan Wage + * @author Roman Borschel + * @author Bernhard Schussek + * @author Fabien Potencier + * @author Jordi Boggiano + * @author Jordan Alliot + */ +class phpbb_event_dispatcher +{ + private $listeners = array(); + private $sorted = array(); + + /** + * @see EventDispatcherInterface::dispatch + * + * @api + */ + public function dispatch($event_name, phpbb_event $event = null) + { + if (!isset($this->listeners[$event_name])) { + return; + } + + if (null === $event) { + $event = new phpbb_event(); + } + + $event->set_dispatcher($this); + $event->set_name($event_name); + + $this->do_dispatch($this->get_listeners($event_name), $event_name, $event); + } + + /** + * @see EventDispatcherInterface::get_listeners + */ + public function get_listeners($event_name = null) + { + if (null !== $event_name) { + if (!isset($this->sorted[$event_name])) { + $this->sort_listeners($event_name); + } + + return $this->sorted[$event_name]; + } + + foreach (array_keys($this->listeners) as $event_name) { + if (!isset($this->sorted[$event_name])) { + $this->sort_listeners($event_name); + } + } + + return $this->sorted; + } + + /** + * @see EventDispatcherInterface::has_listeners + */ + public function has_listeners($event_name = null) + { + return (Boolean) count($this->get_listeners($event_name)); + } + + /** + * @see EventDispatcherInterface::add_listener + * + * @api + */ + public function add_listener($event_name, $listener, $priority = 0) + { + $this->listeners[$event_name][$priority][] = $listener; + unset($this->sorted[$event_name]); + } + + /** + * @see EventDispatcherInterface::remove_listener + */ + public function remove_listener($event_name, $listener) + { + if (!isset($this->listeners[$event_name])) { + return; + } + + foreach ($this->listeners[$event_name] as $priority => $listeners) { + if (false !== ($key = array_search($listener, $listeners))) { + unset($this->listeners[$event_name][$priority][$key], $this->sorted[$event_name]); + } + } + } + + /** + * @see EventDispatcherInterface::add_subscriber + * + * @api + */ + public function add_subscriber(phpbb_event_subscriber_interface $subscriber) + { + foreach ($subscriber->get_subscribed_events() as $event_name => $params) { + if (is_string($params)) { + $this->add_listener($event_name, array($subscriber, $params)); + } elseif (is_string($params[0])) { + $this->add_listener($event_name, array($subscriber, $params[0]), $params[1]); + } else { + foreach ($params as $listener) { + $this->add_listener($event_name, array($subscriber, $listener[0]), isset($listener[1]) ? $listener[1] : 0); + } + } + } + } + + /** + * @see EventDispatcherInterface::remove_subscriber + */ + public function remove_subscriber(phpbb_event_subscriber_interface $subscriber) + { + foreach ($subscriber->get_subscribed_events() as $event_name => $params) { + if (is_array($params) && is_array($params[0])) { + foreach ($params as $listener) { + $this->remove_listener($event_name, array($subscriber, $listener[0])); + } + } else { + $this->remove_listener($event_name, array($subscriber, is_string($params) ? $params : $params[0])); + } + } + } + + /** + * Triggers the listeners of an event. + * + * This method can be overridden to add functionality that is executed + * for each listener. + * + * @param array[callback] $listeners The event listeners. + * @param string $event_name The name of the event to dispatch. + * @param Event $event The event object to pass to the event handlers/listeners. + */ + protected function do_dispatch($listeners, $event_name, phpbb_event $event) + { + foreach ($listeners as $listener) { + call_user_func($listener, $event); + if ($event->is_propagation_stopped()) { + break; + } + } + } + + /** + * Sorts the internal list of listeners for the given event by priority. + * + * @param string $event_name The name of the event. + */ + private function sort_listeners($event_name) + { + $this->sorted[$event_name] = array(); + + if (isset($this->listeners[$event_name])) { + krsort($this->listeners[$event_name]); + $this->sorted[$event_name] = call_user_func_array('array_merge', $this->listeners[$event_name]); + } + } +} diff --git a/phpBB/includes/event/dispatcher_interface.php b/phpBB/includes/event/dispatcher_interface.php new file mode 100644 index 0000000000..2564591ed7 --- /dev/null +++ b/phpBB/includes/event/dispatcher_interface.php @@ -0,0 +1,96 @@ + + */ +interface phpbb_event_dispatcher_interface +{ + /** + * Dispatches an event to all registered listeners. + * + * @param string $event_name The name of the event to dispatch. The name of + * the event is the name of the method that is + * invoked on listeners. + * @param Event $event The event to pass to the event handlers/listeners. + * If not supplied, an empty Event instance is created. + * + * @api + */ + function dispatch($event_name, Event $event = null); + + /** + * Adds an event listener that listens on the specified events. + * + * @param string $event_name The event to listen on + * @param callable $listener The listener + * @param integer $priority The higher this value, the earlier an event + * listener will be triggered in the chain (defaults to 0) + * + * @api + */ + function add_listener($event_name, $listener, $priority = 0); + + /** + * Adds an event subscriber. The subscriber is asked for all the events he is + * interested in and added as a listener for these events. + * + * @param EventSubscriberInterface $subscriber The subscriber. + * + * @api + */ + function add_subscriber(phpbb_event_subscriber_interface $subscriber); + + /** + * Removes an event listener from the specified events. + * + * @param string|array $event_name The event(s) to remove a listener from. + * @param object $listener The listener object to remove. + */ + function remove_listener($event_name, $listener); + + /** + * Removes an event subscriber. + * + * @param EventSubscriberInterface $subscriber The subscriber. + */ + function remove_subscriber(phpbb_event_subscriber_interface $subscriber); + + /** + * Gets the listeners of a specific event or all listeners. + * + * @param string $event_name The name of the event. + * + * @return array The event listeners for the specified event, or all event + * listeners by event name. + */ + function get_listeners($event_name = null); + + /** + * Checks whether an event has any registered listeners. + * + * @param string $event_name The name of the event. + * + * @return Boolean TRUE if the specified event has any listeners, FALSE + * otherwise. + */ + function has_listeners($event_name = null); +} diff --git a/phpBB/includes/event/event.php b/phpBB/includes/event/event.php new file mode 100644 index 0000000000..f74370618b --- /dev/null +++ b/phpBB/includes/event/event.php @@ -0,0 +1,123 @@ + + * @author Jonathan Wage + * @author Roman Borschel + * @author Bernhard Schussek + */ +class phpbb_event +{ + /** + * @var Boolean Whether no further event listeners should be triggered + */ + private $propagation_stopped = false; + + /** + * @var EventDispatcher Dispatcher that dispatched this event + */ + private $dispatcher; + + /** + * @var string This event's name + */ + private $name; + + /** + * Returns whether further event listeners should be triggered. + * + * @see Event::stop_propagation + * @return Boolean Whether propagation was already stopped for this event. + * + * @api + */ + public function is_propagation_stopped() + { + return $this->propagation_stopped; + } + + /** + * Stops the propagation of the event to further event listeners. + * + * If multiple event listeners are connected to the same event, no + * further event listener will be triggered once any trigger calls + * stop_propagation(). + * + * @api + */ + public function stop_propagation() + { + $this->propagation_stopped = true; + } + + /** + * Stores the EventDispatcher that dispatches this Event + * + * @param EventDispatcher $dispatcher + * + * @api + */ + public function set_dispatcher(phpbb_event_dispatcher $dispatcher) + { + $this->dispatcher = $dispatcher; + } + + /** + * Returns the EventDispatcher that dispatches this Event + * + * @return EventDispatcher + * + * @api + */ + public function get_dispatcher() + { + return $this->dispatcher; + } + + /** + * Gets the event's name. + * + * @return string + * + * @api + */ + public function get_name() + { + return $this->name; + } + + /** + * Sets the event's name property. + * + * @param string $name The event name. + * + * @api + */ + public function set_name($name) + { + $this->name = $name; + } +} diff --git a/phpBB/includes/event/subscriber_interface.php b/phpBB/includes/event/subscriber_interface.php new file mode 100644 index 0000000000..4e7b23f596 --- /dev/null +++ b/phpBB/includes/event/subscriber_interface.php @@ -0,0 +1,50 @@ + + * @author Jonathan Wage + * @author Roman Borschel + * @author Bernhard Schussek + */ +interface phpbb_event_subscriber_interface +{ + /** + * Returns an array of event names this subscriber wants to listen to. + * + * The array keys are event names and the value can be: + * + * * The method name to call (priority defaults to 0) + * * An array composed of the method name to call and the priority + * * An array of arrays composed of the method names to call and respective + * priorities, or 0 if unset + * + * For instance: + * + * * array('event_name' => 'method_name') + * * array('event_name' => array('method_name', $priority)) + * * array('event_name' => array(array('method_name1', $priority), array('method_name2')) + * + * @return array The event names to listen to + */ + static function get_subscribed_events(); +} -- cgit v1.2.1 From 581b5624f7be3675a35fc61ca6b67b409ae6e8c6 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 7 Jan 2012 20:53:04 +0100 Subject: [feature/event-dispatcher] Allow subscribers to be loaded from extensions PHPBB3-9550 --- phpBB/common.php | 4 ++ .../includes/event/extension_subscriber_loader.php | 43 ++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 phpBB/includes/event/extension_subscriber_loader.php (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index b308037a0e..44a0e7cec3 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -98,6 +98,7 @@ $phpbb_class_loader_ext->set_cache($cache->get_driver()); $phpbb_class_loader->set_cache($cache->get_driver()); // Instantiate some basic classes +$phpbb_dispatcher = new phpbb_event_dispatcher(); $request = new phpbb_request(); $user = new user(); $auth = new auth(); @@ -124,6 +125,9 @@ $phpbb_template_locator = new phpbb_template_locator(); $phpbb_template_path_provider = new phpbb_template_extension_path_provider($phpbb_extension_manager, new phpbb_template_path_provider()); $template = new phpbb_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_template_locator, $phpbb_template_path_provider); +$phpbb_subscriber_loader = new phpbb_event_extension_subscriber_loader($phpbb_dispatcher, $phpbb_extension_manager); +$phpbb_subscriber_loader->load(); + // Add own hook handler require($phpbb_root_path . 'includes/hooks/index.' . $phpEx); $phpbb_hook = new phpbb_hook(array('exit_handler', 'phpbb_user_session_handler', 'append_sid', array('template', 'display'))); diff --git a/phpBB/includes/event/extension_subscriber_loader.php b/phpBB/includes/event/extension_subscriber_loader.php new file mode 100644 index 0000000000..2a53af1249 --- /dev/null +++ b/phpBB/includes/event/extension_subscriber_loader.php @@ -0,0 +1,43 @@ +dispatcher = $dispatcher; + $this->extension_manager = $extension_manager; + } + + public function load() + { + $finder = $this->extension_manager->get_finder(); + $subscriber_classes = $finder + ->extension_directory('/event') + ->suffix('subscriber') + ->core_path('event/') + ->get_classes(); + + foreach ($subscriber_classes as $class) { + $subscriber = new $class(); + $this->dispatcher->add_subscriber($subscriber); + } + } +} -- cgit v1.2.1 From 58a99c97cadd6a16b138e4de4f8fd1aa172e4eed Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 7 Jan 2012 20:54:01 +0100 Subject: [feature/event-dispatcher] Add a sample hook in page_header PHPBB3-9550 --- phpBB/includes/functions.php | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 753795b7cf..03376bf906 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4461,6 +4461,7 @@ function phpbb_http_login($param) function page_header($page_title = '', $display_online_list = true, $item_id = 0, $item = 'forum') { global $db, $config, $template, $SID, $_SID, $_EXTRA_URL, $user, $auth, $phpEx, $phpbb_root_path; + global $phpbb_dispatcher; if (defined('HEADER_INC')) { @@ -4744,6 +4745,9 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'A_COOKIE_SETTINGS' => addslashes('; path=' . $config['cookie_path'] . ((!$config['cookie_domain'] || $config['cookie_domain'] == 'localhost' || $config['cookie_domain'] == '127.0.0.1') ? '' : '; domain=' . $config['cookie_domain']) . ((!$config['cookie_secure']) ? '' : '; secure')), )); + $event = new phpbb_event(); + $phpbb_dispatcher->dispatch('page_header', $event); + // application/xhtml+xml not used because of IE header('Content-type: text/html; charset=UTF-8'); -- cgit v1.2.1 From 03be9761375a082c2a43aceaa1b34661f87d702b Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 7 Jan 2012 21:42:19 +0100 Subject: [feature/event-dispatcher] Support setting data on an event PHPBB3-9550 --- phpBB/includes/event/data.php | 56 +++++++++++++++++++++++++++++++++++++++++++ phpBB/includes/functions.php | 3 ++- 2 files changed, 58 insertions(+), 1 deletion(-) create mode 100644 phpBB/includes/event/data.php (limited to 'phpBB') diff --git a/phpBB/includes/event/data.php b/phpBB/includes/event/data.php new file mode 100644 index 0000000000..754876c119 --- /dev/null +++ b/phpBB/includes/event/data.php @@ -0,0 +1,56 @@ +set_data($data); + } + + public function set_data(array $data = array()) + { + $this->data = $data; + } + + public function get_data() + { + return $this->data; + } + + public function offsetExists($offset) + { + return isset($this->data[$offset]); + } + + public function offsetGet($offset) + { + return isset($this->data[$offset]) ? $this->data[$offset] : null; + } + + public function offsetSet($offset, $value) + { + $this->data[$offset] = $value; + } + + public function offsetUnset($offset) + { + unset($this->data[$offset]); + } +} diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 03376bf906..109f5b0366 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4745,7 +4745,8 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'A_COOKIE_SETTINGS' => addslashes('; path=' . $config['cookie_path'] . ((!$config['cookie_domain'] || $config['cookie_domain'] == 'localhost' || $config['cookie_domain'] == '127.0.0.1') ? '' : '; domain=' . $config['cookie_domain']) . ((!$config['cookie_secure']) ? '' : '; secure')), )); - $event = new phpbb_event(); + $event = new phpbb_event_data(); + $event->set_data(compact('page_title', 'display_online_list', 'item_id', 'item')); $phpbb_dispatcher->dispatch('page_header', $event); // application/xhtml+xml not used because of IE -- cgit v1.2.1 From 80f6f2b96f1ef0c3a3bf5637cac85a3c1fa229db Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 7 Jan 2012 21:50:16 +0100 Subject: [feature/event-dispatcher] Prefix event name with 'core.' PHPBB3-9550 --- phpBB/includes/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 109f5b0366..45958d1a0d 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4747,7 +4747,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 $event = new phpbb_event_data(); $event->set_data(compact('page_title', 'display_online_list', 'item_id', 'item')); - $phpbb_dispatcher->dispatch('page_header', $event); + $phpbb_dispatcher->dispatch('core.page_header', $event); // application/xhtml+xml not used because of IE header('Content-type: text/html; charset=UTF-8'); -- cgit v1.2.1 From 82422968796188d4284d7cba0f837ee8f333bf11 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sun, 8 Jan 2012 00:48:21 +0100 Subject: [feature/event-dispatcher] Fix event class name in dispatcher interface PHPBB3-9550 --- phpBB/includes/event/dispatcher_interface.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/event/dispatcher_interface.php b/phpBB/includes/event/dispatcher_interface.php index 2564591ed7..0a4881b3ba 100644 --- a/phpBB/includes/event/dispatcher_interface.php +++ b/phpBB/includes/event/dispatcher_interface.php @@ -35,7 +35,7 @@ interface phpbb_event_dispatcher_interface * * @api */ - function dispatch($event_name, Event $event = null); + function dispatch($event_name, phpbb_event $event = null); /** * Adds an event listener that listens on the specified events. -- cgit v1.2.1 From 71c5eddb7194f25711bc0733a54f09bf2f0c7c06 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sun, 8 Jan 2012 01:01:11 +0100 Subject: [feature/event-dispatcher] Add Symfony2 to AUTHORS PHPBB3-9550 --- phpBB/docs/AUTHORS | 3 +++ 1 file changed, 3 insertions(+) (limited to 'phpBB') diff --git a/phpBB/docs/AUTHORS b/phpBB/docs/AUTHORS index 4fe0af6e28..8be261706e 100644 --- a/phpBB/docs/AUTHORS +++ b/phpBB/docs/AUTHORS @@ -79,3 +79,6 @@ Pear (c) 2001-2004 PHP Group, http://pear.php.net Text_Diff-0.2.1 http://pear.php.net/package/Text_Diff +MIT licenced: +Symfony2 (c) 2004-2011 Fabien Potencier, http://symfony.com/ + -- cgit v1.2.1 From 4c62dcd0ffc36a1c4bea203d7dcabbdd1f6143a3 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sun, 8 Jan 2012 13:20:44 +0100 Subject: [feature/event-dispatcher] Correct copyright statement for Symfony2 files Also add a notice to the files that were taken from Symfony2. PHPBB3-9550 --- phpBB/includes/event/dispatcher.php | 7 ++++++- phpBB/includes/event/dispatcher_interface.php | 7 ++++++- phpBB/includes/event/event.php | 7 ++++++- phpBB/includes/event/subscriber_interface.php | 7 ++++++- 4 files changed, 24 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/event/dispatcher.php b/phpBB/includes/event/dispatcher.php index c3b8dc5790..6f7d61c83b 100644 --- a/phpBB/includes/event/dispatcher.php +++ b/phpBB/includes/event/dispatcher.php @@ -2,7 +2,7 @@ /** * * @package phpBB3 -* @copyright (c) 2011 phpBB Group +* @copyright (c) Fabien Potencier * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ @@ -15,6 +15,11 @@ if (!defined('IN_PHPBB')) exit; } +/** + * This file has been taken from Symfony2 and adjusted for + * phpBB's coding standards. + */ + /** * The EventDispatcherInterface is the central point of Symfony's event listener system. * diff --git a/phpBB/includes/event/dispatcher_interface.php b/phpBB/includes/event/dispatcher_interface.php index 0a4881b3ba..37e6bd4cf1 100644 --- a/phpBB/includes/event/dispatcher_interface.php +++ b/phpBB/includes/event/dispatcher_interface.php @@ -2,7 +2,7 @@ /** * * @package phpBB3 -* @copyright (c) 2011 phpBB Group +* @copyright (c) Fabien Potencier * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ @@ -15,6 +15,11 @@ if (!defined('IN_PHPBB')) exit; } +/** + * This file has been taken from Symfony2 and adjusted for + * phpBB's coding standards. + */ + /** * The EventDispatcherInterface is the central point of Symfony's event listener system. * Listeners are registered on the manager and events are dispatched through the diff --git a/phpBB/includes/event/event.php b/phpBB/includes/event/event.php index f74370618b..6ee144bc68 100644 --- a/phpBB/includes/event/event.php +++ b/phpBB/includes/event/event.php @@ -2,7 +2,7 @@ /** * * @package phpBB3 -* @copyright (c) 2011 phpBB Group +* @copyright (c) Fabien Potencier * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ @@ -15,6 +15,11 @@ if (!defined('IN_PHPBB')) exit; } +/** + * This file has been taken from Symfony2 and adjusted for + * phpBB's coding standards. + */ + /** * Event is the base class for classes containing event data. * diff --git a/phpBB/includes/event/subscriber_interface.php b/phpBB/includes/event/subscriber_interface.php index 4e7b23f596..081d4f0210 100644 --- a/phpBB/includes/event/subscriber_interface.php +++ b/phpBB/includes/event/subscriber_interface.php @@ -2,7 +2,7 @@ /** * * @package phpBB3 -* @copyright (c) 2011 phpBB Group +* @copyright (c) Fabien Potencier * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ @@ -15,6 +15,11 @@ if (!defined('IN_PHPBB')) exit; } +/** + * This file has been taken from Symfony2 and adjusted for + * phpBB's coding standards. + */ + /** * An EventSubscriber knows himself what events he is interested in. * If an EventSubscriber is added to an EventDispatcherInterface, the manager invokes -- cgit v1.2.1 From 3e36ac6678affa5f8578d29aee6bd2c27fb766b7 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 12 Jan 2012 22:25:14 -0500 Subject: [ticket/10579] Delete extra v2 from license block. PHPBB3-10579 --- phpBB/includes/search/fulltext_mysql.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_mysql.php b/phpBB/includes/search/fulltext_mysql.php index f1e45c57cc..5372cfac7b 100644 --- a/phpBB/includes/search/fulltext_mysql.php +++ b/phpBB/includes/search/fulltext_mysql.php @@ -3,7 +3,7 @@ * * @package search * @copyright (c) 2005 phpBB Group -* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 v2 +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ -- cgit v1.2.1 From 3f754d118d8fbd36dcefbeea470ecb267e87ace6 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 12 Jan 2012 22:13:28 -0500 Subject: [ticket/10477] Document parameters to p_master#load. PHPBB3-10477 --- phpBB/includes/functions_module.php | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php index a6015b1eac..653623a336 100644 --- a/phpBB/includes/functions_module.php +++ b/phpBB/includes/functions_module.php @@ -438,6 +438,8 @@ class p_master * Loads currently active module * * This method loads a given module, passing it the relevant id and mode. + * + * @param string $mode mode, as passed through to the module */ function load_active($mode = false, $module_url = false, $execute_module = true) { @@ -801,11 +803,16 @@ class p_master /** * Load module as the current active one without the need for registering it + * + * @param string $class module class (acp/mcp/ucp) + * @param string $name module name (e.g. zebra for the ucp_zebra module) + * @param string $mode mode, as passed through to the module + * */ function load($class, $name, $mode = false) { // new modules use the full class names, old ones are always called _, e.g. acp_board - // in the latter case this function may be called as load(acp, board) + // in the latter case this function may be called as load('acp', 'board') if (!class_exists($name) && substr($name, 0, strlen($class) + 1) !== $class . '_') { $name = $class . '_' . $name; -- cgit v1.2.1 From 82c05a7ed6cde2ce1a217b988382167aa94fcf03 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 13 Jan 2012 12:59:29 +0100 Subject: [ticket/10477] Correctly document module (base)name parameter PHPBB3-10477 --- phpBB/includes/functions_module.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php index 653623a336..b7bb770031 100644 --- a/phpBB/includes/functions_module.php +++ b/phpBB/includes/functions_module.php @@ -805,7 +805,8 @@ class p_master * Load module as the current active one without the need for registering it * * @param string $class module class (acp/mcp/ucp) - * @param string $name module name (e.g. zebra for the ucp_zebra module) + * @param string $name module name (class name of the module, or its basename + * phpbb_ext_foo_acp_bar_module, ucp_zebra or zebra) * @param string $mode mode, as passed through to the module * */ -- cgit v1.2.1 From c9733ad7195995a9f28ecbbc8aa3e94a05527114 Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 18 Dec 2011 16:28:35 +0800 Subject: [ticket/10532] Fix $start out of range for pre-made searches PHPBB3-10532 --- phpBB/search.php | 37 ++++++++++++++++++++++--------------- 1 file changed, 22 insertions(+), 15 deletions(-) (limited to 'phpBB') diff --git a/phpBB/search.php b/phpBB/search.php index 2aa61401cf..07be438ab4 100644 --- a/phpBB/search.php +++ b/phpBB/search.php @@ -471,26 +471,33 @@ if ($keywords || $author || $author_id || $search_id || $submit) if ($search_id) { - if ($sql) + if ($sql || $search_id == 'unreadposts') { - // only return up to 1000 ids (the last one will be removed later) - $result = $db->sql_query_limit($sql, 1001 - $start, $start); + if ($sql) + { + // only return up to 1000 ids (the last one will be removed later) + $result = $db->sql_query_limit($sql, 1001); - while ($row = $db->sql_fetchrow($result)) + while ($row = $db->sql_fetchrow($result)) + { + $id_ary[] = (int) $row[$field]; + } + $db->sql_freeresult($result); + } + else if ($search_id == 'unreadposts') { - $id_ary[] = (int) $row[$field]; + $id_ary = array_keys(get_unread_topics($user->data['user_id'], $sql_where, $sql_sort, 1001)); } - $db->sql_freeresult($result); - $total_match_count = sizeof($id_ary) + $start; - $id_ary = array_slice($id_ary, 0, $per_page); - } - else if ($search_id == 'unreadposts') - { - $id_ary = array_keys(get_unread_topics($user->data['user_id'], $sql_where, $sql_sort, 1001 - $start, $start)); - - $total_match_count = sizeof($id_ary) + $start; - $id_ary = array_slice($id_ary, 0, $per_page); + if ($total_match_count = sizeof($id_ary)) + { + // Make sure $start is set to the last page if it exceeds the amount + if ($start < 0 || $start >= $total_match_count) + { + $start = ($start < 0) ? 0 : floor(($total_match_count - 1) / $per_page) * $per_page; + } + $id_ary = array_slice($id_ary, $start, $per_page); + } } else { -- cgit v1.2.1 From cb7bb31129a38cbdbeb682e869e51b1199b43bfb Mon Sep 17 00:00:00 2001 From: rxu Date: Sat, 14 Jan 2012 15:50:47 +0800 Subject: [ticket/10532] Adjust total match count and limit Set a variable for the limit of total matches count. Adjust total match count to limit to provide proper $start value calculation. Adjust $start value if no matches were found. PHPBB3-10532 --- phpBB/search.php | 27 +++++++++++++++++++++------ 1 file changed, 21 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/search.php b/phpBB/search.php index 07be438ab4..3956478371 100644 --- a/phpBB/search.php +++ b/phpBB/search.php @@ -469,14 +469,18 @@ if ($keywords || $author || $author_id || $search_id || $submit) $per_page = ($show_results == 'posts') ? $config['posts_per_page'] : $config['topics_per_page']; $total_match_count = 0; + // Set limit for the $total_match_count to reduce server load + $total_matches_limit = 1000; + $found_more_search_matches = false; + if ($search_id) { if ($sql || $search_id == 'unreadposts') { if ($sql) { - // only return up to 1000 ids (the last one will be removed later) - $result = $db->sql_query_limit($sql, 1001); + // Only return up to $total_matches_limit+1 ids (the last one will be removed later) + $result = $db->sql_query_limit($sql, ($total_matches_limit + 1)); while ($row = $db->sql_fetchrow($result)) { @@ -486,11 +490,19 @@ if ($keywords || $author || $author_id || $search_id || $submit) } else if ($search_id == 'unreadposts') { - $id_ary = array_keys(get_unread_topics($user->data['user_id'], $sql_where, $sql_sort, 1001)); + // Only return up to $total_matches_limit+1 ids (the last one will be removed later) + $id_ary = array_keys(get_unread_topics($user->data['user_id'], $sql_where, $sql_sort, ($total_matches_limit + 1))); } if ($total_match_count = sizeof($id_ary)) { + // Limit the number to $total_matches_limit for pre-made searches + if ($total_match_count > $total_matches_limit) + { + $found_more_search_matches = true; + $total_match_count = $total_matches_limit; + } + // Make sure $start is set to the last page if it exceeds the amount if ($start < 0 || $start >= $total_match_count) { @@ -498,6 +510,11 @@ if ($keywords || $author || $author_id || $search_id || $submit) } $id_ary = array_slice($id_ary, $start, $per_page); } + else + { + // Set $start to 0 if no matches were found + $start = 0; + } } else { @@ -550,10 +567,8 @@ if ($keywords || $author || $author_id || $search_id || $submit) $icons = $cache->obtain_icons(); // Output header - if ($search_id && ($total_match_count > 1000)) + if ($found_more_search_matches) { - // limit the number to 1000 for pre-made searches - $total_match_count--; $l_search_matches = sprintf($user->lang['FOUND_MORE_SEARCH_MATCHES'], $total_match_count); } else -- cgit v1.2.1 From aa21bc2a733c1690ad7a371f962c244542135a43 Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 15 Jan 2012 18:18:04 +0800 Subject: [ticket/10589] Add alias to 'user_birthday' in $leap_year_birthdays definition PHPBB3-10589 --- phpBB/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/index.php b/phpBB/index.php index 0105a0a1bd..46694a6ec2 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -89,7 +89,7 @@ if ($config['load_birthdays'] && $config['allow_birthdays'] && $auth->acl_gets(' $leap_year_birthdays = ''; if ($now['mday'] == 28 && $now['mon'] == 2 && !$user->format_date(time(), 'L')) { - $leap_year_birthdays = " OR user_birthday LIKE '" . $db->sql_escape(sprintf('%2d-%2d-', 29, 2)) . "%'"; + $leap_year_birthdays = " OR u.user_birthday LIKE '" . $db->sql_escape(sprintf('%2d-%2d-', 29, 2)) . "%'"; } $sql = 'SELECT u.user_id, u.username, u.user_colour, u.user_birthday -- cgit v1.2.1 From 7295e5824aed6f5ec32cfab0ad17cfa2c24855ac Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Mon, 16 Jan 2012 14:35:29 +0200 Subject: [ticket/10380] BIDI support for imageset BIDI support for imageset conversion script, added RTL imageset entries to prosilver and subsilver2, fixed small bug in imageset.css, changed spacing in code to match phpbb coding guidelines PHPBB3-10380 --- phpBB/develop/imageset_to_css.php | 160 ++++++++++++++++++++++----- phpBB/styles/prosilver/theme/bidi.css | 30 +++++ phpBB/styles/prosilver/theme/imageset.css | 1 - phpBB/styles/subsilver2/theme/stylesheet.css | 38 +++++++ 4 files changed, 198 insertions(+), 31 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/imageset_to_css.php b/phpBB/develop/imageset_to_css.php index 3d55808319..3db005a054 100644 --- a/phpBB/develop/imageset_to_css.php +++ b/phpBB/develop/imageset_to_css.php @@ -17,14 +17,14 @@ ob_start(); // Get global and English images $images_global = get_imageset($imageset_path); -if($images_global === false) +if ($images_global === false) { echo 'imageset.cfg was not found.'; echo ob_get_clean(); return; } $images_en = get_imageset($imageset_path, 'en'); -if($images_en === false) +if ($images_en === false) { echo 'English imageset.cfg was not found.'; echo ob_get_clean(); @@ -32,7 +32,7 @@ if($images_en === false) } // Remove duplicate images -foreach($images_en as $key => $row) +foreach ($images_en as $key => $row) { unset($images_global[$key]); } @@ -52,13 +52,16 @@ $replace = array( // $replace = array_merge($replace, get_replacements($images_global)); $replace = array_merge($replace, get_replacements($images_global), get_replacements($images_en)); +// BIDI code +$bidi_code = css($images_global, './images/', true); + // Get all CSS files, parse them $files = list_files($theme_path, 'css'); -if($files === false || !count($files)) +if ($files === false || !count($files)) { echo 'No CSS files found in theme directory.
    '; } -else for($i=0; $i'; + continue; } } - if(md5($data) == $hash) + if (basename($file) == 'bidi.css' && strpos($data, '/* Former imageset */') === false && strlen($bidi_code)) + { + // Add bidi data + $data .= "\n/* Former imageset */\n" . $bidi_code; + $bidi_code = ''; + echo 'Note: RTL imageset entries were added at the end of file below:
    '; + } + if (md5($data) == $hash) { echo 'Nothing to replace in ', $file, '
    '; } @@ -84,9 +95,9 @@ else for($i=0; $i $row) +foreach ($list as $key => $row) { - if($row['skip']) + if ($row['skip']) { echo 'Unable to generate code to add to CSS files because some images are missing or invalid. See errors above.'; echo ob_get_clean(); @@ -112,14 +123,22 @@ span.imageset { /* English images for fallback */ ' . css($images_en, './en/'); +if (strlen($bidi_code)) +{ + $code .= "\n/* RTL imageset entries */\n" . $bidi_code; +} echo 'Code to add to CSS file:', dump_code($code, 'imageset.css'); + $list = list_languages($imageset_path); -for($i=0; $i'; $skip = true; @@ -162,7 +190,7 @@ function get_imageset($path, $lang = '') else { $size = @getimagesize($filename); - if($size === false) + if ($size === false) { echo 'Error: file ', $filename, ' is not a valid image
    '; $skip = true; @@ -188,7 +216,7 @@ function get_imageset($path, $lang = '') function get_replacements($list) { $result = array(); - foreach($list as $key => $row) + foreach ($list as $key => $row) { $key = '{' . strtoupper($key); $result[$key . '_SRC}'] = strlen($row['file']) ? ($row['lang'] ? './' . $row['lang'] : './images') . '/' . $row['file'] : ''; @@ -201,9 +229,12 @@ function get_replacements($list) function list_files($dir, $ext) { $res = @opendir($dir); - if($res === false) return false; + if ($res === false) + { + return false; + } $files = array(); - while(($file = readdir($res)) !== false) + while (($file = readdir($res)) !== false) { $list = explode('.', $file); if(count($list) > 1 && strtolower($list[count($list) - 1]) == $ext) @@ -218,13 +249,19 @@ function list_files($dir, $ext) function list_languages($dir) { $res = @opendir($dir); - if($res === false) return array(); + if ($res === false) + { + return array(); + } $files = array(); - while(($file = readdir($res)) !== false) + while (($file = readdir($res)) !== false) { - if(substr($file, 0, 1) == '.') continue; + if (substr($file, 0, 1) == '.') + { + continue; + } $filename = $dir . '/' . $file; - if(is_dir($filename) && file_exists($filename . '/imageset.cfg')) + if (is_dir($filename) && file_exists($filename . '/imageset.cfg')) { $files[] = $file; } @@ -236,7 +273,7 @@ function list_languages($dir) function dump_code($code, $filename = 'file.txt') { $hash = md5($code); - if(isset($_GET['download']) && $_GET['download'] === $hash) + if (isset($_GET['download']) && $_GET['download'] === $hash) { // Download file ob_end_clean(); @@ -256,18 +293,81 @@ function dump_code($code, $filename = 'file.txt') echo '
    '; } -function css($list, $path = './') +function css($list, $path = './', $bidi = false) { $code = ''; - foreach($list as $key => $row) + // Change value to true if you want images to be grouped up by size + $group = $bidi; + if ($group) { - if(!strlen($row['file'])) continue; - $code .= '.imageset.' . substr($key, 4) . ' { + // group up images by size + $groups = array(); + foreach ($list as $key => $row) + { + if (!strlen($row['file'])) + { + continue; + } + $groups[$row['width'] . '*' . $row['height']][] = $key; + } + foreach ($groups as $size => $keys) + { + $extra = ''; + for ($i=0; $i $row) + { + if (!strlen($row['file'])) + { + continue; + } + $code .= ($bidi ? '.rtl ' : '') . '.imageset.' . substr($key, 4) . ' {'; + if ($bidi) + { + $code .= ' + padding-right: ' . $row['width'] . 'px; + padding-left: 0; +} +'; + } + else + { + $code .= ' background-image: url("' . $path . $row['file'] . '"); padding-left: ' . $row['width'] . 'px; padding-top: ' . $row['height'] . 'px; } '; + } + } } return $code; } diff --git a/phpBB/styles/prosilver/theme/bidi.css b/phpBB/styles/prosilver/theme/bidi.css index 81b916d373..6d77cb43f0 100644 --- a/phpBB/styles/prosilver/theme/bidi.css +++ b/phpBB/styles/prosilver/theme/bidi.css @@ -755,3 +755,33 @@ .rtl #wrap, .rtl .headerbar, .rtl #site-description, .rtl .navbar { position: relative; } + +/* Former imageset */ +.rtl .imageset.site_logo { + padding-right: 139px; + padding-left: 0; +} +.rtl .imageset.forum_link, .rtl .imageset.forum_read, .rtl .imageset.forum_read_locked, .rtl .imageset.forum_read_subforum, .rtl .imageset.forum_unread, .rtl .imageset.forum_unread_locked, .rtl .imageset.forum_unread_subforum, .rtl .imageset.topic_moved, .rtl .imageset.topic_read, .rtl .imageset.topic_read_mine, .rtl .imageset.topic_read_hot, .rtl .imageset.topic_read_hot_mine, .rtl .imageset.topic_read_locked, .rtl .imageset.topic_read_locked_mine, .rtl .imageset.topic_unread, .rtl .imageset.topic_unread_mine, .rtl .imageset.topic_unread_hot, .rtl .imageset.topic_unread_hot_mine, .rtl .imageset.topic_unread_locked, .rtl .imageset.topic_unread_locked_mine, .rtl .imageset.sticky_read, .rtl .imageset.sticky_read_mine, .rtl .imageset.sticky_read_locked, .rtl .imageset.sticky_read_locked_mine, .rtl .imageset.sticky_unread, .rtl .imageset.sticky_unread_mine, .rtl .imageset.sticky_unread_locked, .rtl .imageset.sticky_unread_locked_mine, .rtl .imageset.announce_read, .rtl .imageset.announce_read_mine, .rtl .imageset.announce_read_locked, .rtl .imageset.announce_read_locked_mine, .rtl .imageset.announce_unread, .rtl .imageset.announce_unread_mine, .rtl .imageset.announce_unread_locked, .rtl .imageset.announce_unread_locked_mine, .rtl .imageset.global_read, .rtl .imageset.global_read_mine, .rtl .imageset.global_read_locked, .rtl .imageset.global_read_locked_mine, .rtl .imageset.global_unread, .rtl .imageset.global_unread_mine, .rtl .imageset.global_unread_locked, .rtl .imageset.global_unread_locked_mine, .rtl .imageset.pm_read, .rtl .imageset.pm_unread { + padding-right: 27px; + padding-left: 0; +} +.rtl .imageset.subforum_read, .rtl .imageset.subforum_unread, .rtl .imageset.icon_post_target, .rtl .imageset.icon_post_target_unread, .rtl .imageset.icon_topic_latest, .rtl .imageset.icon_topic_newest { + padding-right: 11px; + padding-left: 0; +} +.rtl .imageset.icon_back_top { + padding-right: 11px; + padding-left: 0; +} +.rtl .imageset.icon_contact_aim, .rtl .imageset.icon_contact_email, .rtl .imageset.icon_contact_icq, .rtl .imageset.icon_contact_jabber, .rtl .imageset.icon_contact_msnm, .rtl .imageset.icon_contact_www, .rtl .imageset.icon_contact_yahoo, .rtl .imageset.icon_post_delete, .rtl .imageset.icon_post_info, .rtl .imageset.icon_post_report, .rtl .imageset.icon_user_warn { + padding-right: 20px; + padding-left: 0; +} +.rtl .imageset.icon_topic_attach { + padding-right: 7px; + padding-left: 0; +} +.rtl .imageset.icon_topic_reported, .rtl .imageset.icon_topic_unapproved { + padding-right: 16px; + padding-left: 0; +} \ No newline at end of file diff --git a/phpBB/styles/prosilver/theme/imageset.css b/phpBB/styles/prosilver/theme/imageset.css index cebab7845d..cb99e9e715 100644 --- a/phpBB/styles/prosilver/theme/imageset.css +++ b/phpBB/styles/prosilver/theme/imageset.css @@ -4,7 +4,6 @@ span.imageset { background: transparent none 0 0 no-repeat; margin: 0; padding: 0; - padding-right: 0 !important; width: 0; height: 0; overflow: hidden; diff --git a/phpBB/styles/subsilver2/theme/stylesheet.css b/phpBB/styles/subsilver2/theme/stylesheet.css index a753c914ba..427fe85e37 100644 --- a/phpBB/styles/subsilver2/theme/stylesheet.css +++ b/phpBB/styles/subsilver2/theme/stylesheet.css @@ -1099,3 +1099,41 @@ a.imageset { padding-left: 97px; padding-top: 27px; } + +/* RTL imageset entries */ +.rtl .imageset.site_logo { + padding-right: 170px; + padding-left: 0; +} +.rtl .imageset.upload_bar { + padding-right: 280px; + padding-left: 0; +} +.rtl .imageset.poll_left, .rtl .imageset.poll_right { + padding-right: 4px; + padding-left: 0; +} +.rtl .imageset.poll_center { + padding-right: 1px; + padding-left: 0; +} +.rtl .imageset.forum_link, .rtl .imageset.forum_read, .rtl .imageset.forum_read_locked, .rtl .imageset.forum_read_subforum, .rtl .imageset.forum_unread, .rtl .imageset.forum_unread_locked, .rtl .imageset.forum_unread_subforum { + padding-right: 46px; + padding-left: 0; +} +.rtl .imageset.topic_moved, .rtl .imageset.topic_read, .rtl .imageset.topic_read_mine, .rtl .imageset.topic_read_hot, .rtl .imageset.topic_read_hot_mine, .rtl .imageset.topic_read_locked, .rtl .imageset.topic_read_locked_mine, .rtl .imageset.topic_unread, .rtl .imageset.topic_unread_mine, .rtl .imageset.topic_unread_hot, .rtl .imageset.topic_unread_hot_mine, .rtl .imageset.topic_unread_locked, .rtl .imageset.topic_unread_locked_mine, .rtl .imageset.sticky_read, .rtl .imageset.sticky_read_mine, .rtl .imageset.sticky_read_locked, .rtl .imageset.sticky_read_locked_mine, .rtl .imageset.sticky_unread, .rtl .imageset.sticky_unread_mine, .rtl .imageset.sticky_unread_locked, .rtl .imageset.sticky_unread_locked_mine, .rtl .imageset.announce_read, .rtl .imageset.announce_read_mine, .rtl .imageset.announce_read_locked, .rtl .imageset.announce_read_locked_mine, .rtl .imageset.announce_unread, .rtl .imageset.announce_unread_mine, .rtl .imageset.announce_unread_locked, .rtl .imageset.announce_unread_locked_mine, .rtl .imageset.global_read, .rtl .imageset.global_read_mine, .rtl .imageset.global_read_locked, .rtl .imageset.global_read_locked_mine, .rtl .imageset.global_unread, .rtl .imageset.global_unread_mine, .rtl .imageset.global_unread_locked, .rtl .imageset.global_unread_locked_mine, .rtl .imageset.pm_read, .rtl .imageset.pm_unread, .rtl .imageset.icon_topic_reported, .rtl .imageset.icon_topic_unapproved { + padding-right: 19px; + padding-left: 0; +} +.rtl .imageset.icon_post_target, .rtl .imageset.icon_post_target_unread { + padding-right: 12px; + padding-left: 0; +} +.rtl .imageset.icon_topic_attach { + padding-right: 14px; + padding-left: 0; +} +.rtl .imageset.icon_topic_latest, .rtl .imageset.icon_topic_newest { + padding-right: 18px; + padding-left: 0; +} -- cgit v1.2.1 From 99164cd20b9d8ca77b1e9a54e0958cdb580945d0 Mon Sep 17 00:00:00 2001 From: rxu Date: Mon, 17 Jan 2011 00:01:04 +0700 Subject: [ticket/9831] Correctly store checkbox default value for boolean CPF. PHPBB3-9831 --- phpBB/includes/acp/acp_profile.php | 27 +++++++++++++++++++++++---- phpBB/includes/functions_profile_fields.php | 4 ++-- 2 files changed, 25 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_profile.php b/phpBB/includes/acp/acp_profile.php index 2e43b0545a..09a7a2f9ed 100644 --- a/phpBB/includes/acp/acp_profile.php +++ b/phpBB/includes/acp/acp_profile.php @@ -504,11 +504,26 @@ class acp_profile } } } - /* else if ($field_type == FIELD_BOOL && $key == 'field_default_value') + else if ($field_type == FIELD_BOOL && $key == 'field_default_value') { - // Get the number of options if this key is 'field_maxlen' - $var = request_var('field_default_value', 0); - }*/ + // 'field_length' == 1 defines radio buttons. Possible values are 1 or 2 only. + // 'field_length' == 2 defines checkbox. Possible values are 0 or 1 only. + // If we switch the type on step 2, we have to adjust field value. + // 1 is a common value for the checkbox and radio buttons. + + // If we switch to the checkbox type but former radio buttons value was 2, + // which is not the case for the checkbox, set it to 0 (unchecked). + if ($cp->vars['field_length'] == 2 && $var == 2) + { + $var = 0; + } + // If we switch to the radio buttons but the former checkbox value was 0, + // which is not the case for the radio buttons, set it to 0. + else if ($cp->vars['field_length'] == 1 && $var == 0) + { + $var = 2; + } + } else if ($field_type == FIELD_INT && $key == 'field_default_value') { // Permit an empty string @@ -676,6 +691,10 @@ class acp_profile { $_new_key_ary[$key] = utf8_normalize_nfc(request_var($key, array(array('')), true)); } + else if ($field_type == FIELD_BOOL && $key == 'field_default_value') + { + $_new_key_ary[$key] = request_var($key, $cp->vars[$key]); + } else { if (!isset($_REQUEST[$key])) diff --git a/phpBB/includes/functions_profile_fields.php b/phpBB/includes/functions_profile_fields.php index 1eae2a9ad6..7874608009 100644 --- a/phpBB/includes/functions_profile_fields.php +++ b/phpBB/includes/functions_profile_fields.php @@ -625,10 +625,10 @@ class custom_profile $profile_row['field_ident'] = (isset($profile_row['var_name'])) ? $profile_row['var_name'] : 'pf_' . $profile_row['field_ident']; $user_ident = $profile_row['field_ident']; - // checkbox - only testing for isset + // checkbox - set the value to "true" if it has been set to 1 if ($profile_row['field_type'] == FIELD_BOOL && $profile_row['field_length'] == 2) { - $value = (isset($_REQUEST[$profile_row['field_ident']])) ? true : ((!isset($user->profile_fields[$user_ident]) || $preview) ? $default_value : $user->profile_fields[$user_ident]); + $value = (isset($_REQUEST[$profile_row['field_ident']]) && request_var($profile_row['field_ident'], $default_value) == 1) ? true : ((!isset($user->profile_fields[$user_ident]) || $preview) ? $default_value : $user->profile_fields[$user_ident]); } else if ($profile_row['field_type'] == FIELD_INT) { -- cgit v1.2.1 From d4c3d4b21d4951b6cd3d4038988278a3667f2827 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Fri, 20 Jan 2012 12:41:00 +0200 Subject: [ticket/10378] Imageset to css convertor typo Imageset to css convertor typo PHPBB3-10378 --- phpBB/develop/imageset_to_css.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/develop/imageset_to_css.php b/phpBB/develop/imageset_to_css.php index 3d55808319..9983a85202 100644 --- a/phpBB/develop/imageset_to_css.php +++ b/phpBB/develop/imageset_to_css.php @@ -10,7 +10,7 @@ $phpbb_root_path = '../'; $style = 'subsilver2'; $imageset_path = $phpbb_root_path . 'styles/' . $style . '/imageset'; -$theme_path = $phpbb_root_path . 'styles/' . $style . '/theme2'; +$theme_path = $phpbb_root_path . 'styles/' . $style . '/theme'; // Start output buffering ob_start(); -- cgit v1.2.1 From c54c06e98cc39568c8259e74091ddddb36d2921c Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Fri, 20 Jan 2012 12:41:36 +0200 Subject: [ticket/10378] Missing entries from imageset to css conversion Adding missing entries from imageset to css conversion to prosilver/theme/en/stylesheet.css PHPBB3-10378 --- phpBB/styles/prosilver/theme/en/stylesheet.css | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/en/stylesheet.css b/phpBB/styles/prosilver/theme/en/stylesheet.css index 62d6b86726..d17f9a5be4 100644 --- a/phpBB/styles/prosilver/theme/en/stylesheet.css +++ b/phpBB/styles/prosilver/theme/en/stylesheet.css @@ -11,6 +11,22 @@ ul.profile-icons li.pm-icon { width: 28px; height: 20px; } ul.profile-icons li.quote-icon { width: 54px; height: 20px; } ul.profile-icons li.edit-icon { width: 42px; height: 20px; } +/* Online image */ +.online { background-image: url("./icon_user_online.gif"); } + +/* Big button images */ +.reply-icon span { background-image: url("./button_topic_reply.gif"); } +.post-icon span { background-image: url("./button_topic_new.gif"); } +.locked-icon span { background-image: url("./button_topic_locked.gif"); } +.pmreply-icon span { background-image: url("./button_pm_reply.gif") ;} +.newpm-icon span { background-image: url("./button_pm_new.gif") ;} +.forwardpm-icon span { background-image: url("./button_pm_forward.gif") ;} + +/* Icon images */ +.pm-icon, .pm-icon a { background-image: url("./icon_contact_pm.gif"); } +.quote-icon, .quote-icon a { background-image: url("./icon_post_quote.gif"); } +.edit-icon, .edit-icon a { background-image: url("./icon_post_edit.gif"); } + /* EN Language Pack */ .imageset.icon_contact_pm { background-image: url("./icon_contact_pm.gif"); -- cgit v1.2.1 From 2cf586a37206df3528237a2c91e255539c95a513 Mon Sep 17 00:00:00 2001 From: Richard Foote Date: Tue, 17 Jan 2012 12:31:27 -0500 Subject: [ticket/10580] Remove checking of server timezone and DST when registering Remove checking of server timezone and DST. It causes a problem by selecting the wrong timezone when registering when the board_timezone is 1 hour less than the server timezone. PHPBB3-10580 --- phpBB/includes/ucp/ucp_register.php | 20 ++------------------ 1 file changed, 2 insertions(+), 18 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index 4e8729db56..6ad3a55589 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -165,24 +165,8 @@ class ucp_register $captcha->init(CONFIRM_REG); } - // Try to manually determine the timezone and adjust the dst if the server date/time complies with the default setting +/- 1 - $timezone = date('Z') / 3600; - $is_dst = date('I'); - - if ($config['board_timezone'] == $timezone || $config['board_timezone'] == ($timezone - 1)) - { - $timezone = ($is_dst) ? $timezone - 1 : $timezone; - - if (!isset($user->lang['tz_zones'][(string) $timezone])) - { - $timezone = $config['board_timezone']; - } - } - else - { - $is_dst = $config['board_dst']; - $timezone = $config['board_timezone']; - } + $is_dst = $config['board_dst']; + $timezone = $config['board_timezone']; $data = array( 'username' => utf8_normalize_nfc(request_var('username', '', true)), -- cgit v1.2.1 From ac492d8f1e7ef3420ebaee35131e342a39dfda10 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 22 Aug 2011 23:33:34 +0200 Subject: [ticket/10076] Move EHLO/HELO code into its own method. PHPBB3-10076 --- phpBB/includes/functions_messenger.php | 62 +++++++++++++++++++++------------- 1 file changed, 39 insertions(+), 23 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index 13d9b6a5cb..ccc17865f6 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -1286,30 +1286,10 @@ class smtp_class } } - // Try EHLO first - $this->server_send("EHLO {$local_host}"); - if ($err_msg = $this->server_parse('250', __LINE__)) + $hello_result = $this->hello($local_host); + if (!is_null($hello_result)) { - // a 503 response code means that we're already authenticated - if ($this->numeric_response_code == 503) - { - return false; - } - - // If EHLO fails, we try HELO - $this->server_send("HELO {$local_host}"); - if ($err_msg = $this->server_parse('250', __LINE__)) - { - return ($this->numeric_response_code == 503) ? false : $err_msg; - } - } - - foreach ($this->responses as $response) - { - $response = explode(' ', $response); - $response_code = $response[0]; - unset($response[0]); - $this->commands[$response_code] = implode(' ', $response); + return $hello_result; } // If we are not authenticated yet, something might be wrong if no username and passwd passed @@ -1355,6 +1335,42 @@ class smtp_class return $this->$method($username, $password); } + /** + * SMTP EHLO/HELO + * + * @return mixed Null if the authentication process is supposed to continue + * False if already authenticated + * Error message (string) otherwise + */ + protected function hello($hostname) + { + // Try EHLO first + $this->server_send("EHLO $hostname"); + if ($err_msg = $this->server_parse('250', __LINE__)) + { + // a 503 response code means that we're already authenticated + if ($this->numeric_response_code == 503) + { + return false; + } + + // If EHLO fails, we try HELO + $this->server_send("HELO $hostname"); + if ($err_msg = $this->server_parse('250', __LINE__)) + { + return ($this->numeric_response_code == 503) ? false : $err_msg; + } + } + + foreach ($this->responses as $response) + { + $response = explode(' ', $response); + $response_code = $response[0]; + unset($response[0]); + $this->commands[$response_code] = implode(' ', $response); + } + } + /** * Pop before smtp authentication */ -- cgit v1.2.1 From 237ddf9d22e0aeccad5e1db022de3a890871849f Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 22 Aug 2011 23:50:02 +0200 Subject: [ticket/10076] STARTTLS support for SMTP via smtp_class. PHPBB3-10076 --- phpBB/includes/functions_messenger.php | 57 ++++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index ccc17865f6..f4e49b1b18 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -1136,6 +1136,7 @@ class smtp_class { var $server_response = ''; var $socket = 0; + protected $socket_tls = false; var $responses = array(); var $commands = array(); var $numeric_response_code = 0; @@ -1292,6 +1293,25 @@ class smtp_class return $hello_result; } + // SMTP STARTTLS (RFC 3207) + if (!$this->socket_tls) + { + $this->socket_tls = $this->starttls(); + + if ($this->socket_tls) + { + // Switched to TLS + // RFC 3207: "The client MUST discard any knowledge obtained from the server, [...]" + // So say hello again + $hello_result = $this->hello($local_host); + + if (!is_null($hello_result)) + { + return $hello_result; + } + } + } + // If we are not authenticated yet, something might be wrong if no username and passwd passed if (!$username || !$password) { @@ -1371,6 +1391,43 @@ class smtp_class } } + /** + * SMTP STARTTLS (RFC 3207) + * + * @return bool Returns true if TLS was started + * Otherwise false + */ + protected function starttls() + { + if (!function_exists('stream_socket_enable_crypto')) + { + return false; + } + + if (!isset($this->commands['STARTTLS'])) + { + return false; + } + + $this->server_send('STARTTLS'); + + if ($err_msg = $this->server_parse('220', __LINE__)) + { + return false; + } + + $result = false; + $stream_meta = stream_get_meta_data($this->socket); + + if (socket_set_blocking($this->socket, 1)); + { + $result = stream_socket_enable_crypto($this->socket, true, STREAM_CRYPTO_METHOD_TLS_CLIENT); + socket_set_blocking($this->socket, (int) $stream_meta['blocked']); + } + + return $result; + } + /** * Pop before smtp authentication */ -- cgit v1.2.1 From be74b5286cbf625109524c2e1a73c51e0dbccb30 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 3 Feb 2012 03:42:53 -0500 Subject: [ticket/10614] Add a script to enable, disable and view status of extensions. PHPBB3-10614 --- phpBB/develop/extensions.php | 135 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 135 insertions(+) create mode 100644 phpBB/develop/extensions.php (limited to 'phpBB') diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php new file mode 100644 index 0000000000..87bdd21d1a --- /dev/null +++ b/phpBB/develop/extensions.php @@ -0,0 +1,135 @@ + +// +// Enables the specified extension. +// +// extensions.php disable +// +// Disables the specified extension. + +define('IN_PHPBB', 1); +define('ANONYMOUS', 1); +$phpEx = substr(strrchr(__FILE__, '.'), 1); +$phpbb_root_path = './../'; + +include($phpbb_root_path . 'common.'.$phpEx); + +function usage() +{ + echo "Please see comments in extensions.php for usage\n"; + exit(2); +} + +function list_extensions() +{ + global $db, $phpbb_root_path; + + $sql = "SELECT ext_name, ext_active from " . EXT_TABLE; + + $result = $db->sql_query($sql); + $extensions = array(); + while ($row = $db->sql_fetchrow($result)) + { + $extensions[$row['ext_name']]['active'] = (bool) $row['ext_active']; + if (file_exists($phpbb_root_path . 'ext/' . $row['ext_name'])) + { + $extensions[$row['ext_name']]['present'] = true; + } + else + { + $extensions[$row['ext_name']]['present'] = false; + } + } + + $iterator = new DirectoryIterator($phpbb_root_path . 'ext'); + foreach ($iterator as $file) + { + // ignore hidden files + // php refuses to subscript iterator objects + $file = "$file"; + if ($file[0] != '.') + { + if (!array_key_exists($file, $extensions)) + { + $extensions[$file] = array('active' => false, 'present' => true); + } + } + } + + ksort($extensions); + foreach ($extensions as $name => $ext) + { + $present = $ext['active'] ? 'P' : 'M'; + $active = $ext['active'] ? 'A' : 'I'; + printf("%-20s %s %s\n", $name, $present, $active); + } +} + +function enable_extension($name) +{ + global $phpbb_extension_manager; + + $phpbb_extension_manager->enable($name); +} + +function disable_extension($name) +{ + global $phpbb_extension_manager; + + $phpbb_extension_manager->disable($name); +} + +function validate_argument_count($count) +{ + global $argv; + + if (count($argv) <= $count) + { + usage(); + } +} + +validate_argument_count(1); + +$action = $argv[1]; + +switch ($action) +{ + case 'list': + list_extensions(); + break; + + case 'enable': + validate_argument_count(2); + enable_extension($argv[2]); + break; + + case 'disable': + validate_argument_count(2); + disable_extension($argv[2]); + break; + + default: + usage(); +} -- cgit v1.2.1 From 879c92e8a2b27586d6531de705ded49c6f662ffa Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Fri, 3 Feb 2012 15:38:52 +0200 Subject: [ticket/10569] Invalid string comparison in subsilver2 Fixing invalid string comparison in ucp_main_front.html in subsilver2 PHPBB3-10569 --- phpBB/styles/subsilver2/template/ucp_main_front.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/ucp_main_front.html b/phpBB/styles/subsilver2/template/ucp_main_front.html index fdef0bd949..dc945c83d6 100644 --- a/phpBB/styles/subsilver2/template/ucp_main_front.html +++ b/phpBB/styles/subsilver2/template/ucp_main_front.html @@ -48,11 +48,11 @@
    - + - + -- cgit v1.2.1 From d2a34961498a03b77885af6a20497e87d36ad7ef Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Fri, 3 Feb 2012 16:00:14 +0200 Subject: [ticket/10616] Add template inheritance to default styles Adding template inheritance field to prosilver and subsilver2 PHPBB3-10616 --- phpBB/styles/prosilver/template/template.cfg | 5 +++++ phpBB/styles/subsilver2/template/template.cfg | 4 ++++ 2 files changed, 9 insertions(+) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/template.cfg b/phpBB/styles/prosilver/template/template.cfg index d31dcb7356..0b0533573a 100644 --- a/phpBB/styles/prosilver/template/template.cfg +++ b/phpBB/styles/prosilver/template/template.cfg @@ -23,3 +23,8 @@ version = 3.0.10 # Defining a different template bitfield template_bitfield = lNg= + +# Template inheritance +# See http://blog.phpbb.com/2008/07/31/templating-just-got-easier/ +# Set value to empty to ignore template inheritance +inherit_from = prosilver diff --git a/phpBB/styles/subsilver2/template/template.cfg b/phpBB/styles/subsilver2/template/template.cfg index 4e5c36af99..d557edba87 100644 --- a/phpBB/styles/subsilver2/template/template.cfg +++ b/phpBB/styles/subsilver2/template/template.cfg @@ -21,3 +21,7 @@ name = subsilver2 copyright = © phpBB Group, 2003 version = 3.0.10 +# Template inheritance +# See http://blog.phpbb.com/2008/07/31/templating-just-got-easier/ +# Set value to empty to ignore template inheritance +inherit_from = subsilver2 -- cgit v1.2.1 From 4aef6ea979befe9c40b3253ed10678a4eeb74160 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Fri, 3 Feb 2012 16:09:48 +0200 Subject: [ticket/10616] Ignore template inheritance that points to self Ignore template inheritance if it points to self PHPBB3-10616 --- phpBB/includes/functions.php | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 1eefaee651..4d2a00f2db 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3322,6 +3322,11 @@ function parse_cfg_file($filename, $lines = false) $parsed_items[$key] = $value; } + + if (isset($parsed_items['inherit_from']) && isset($parsed_items['name']) && $parsed_items['inherit_from'] == $parsed_items['name']) + { + unset($parsed_items['inherit_from']); + } return $parsed_items; } -- cgit v1.2.1 From 326ff46ef7812f9f725e680e5202364c6b25bb4b Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Fri, 3 Feb 2012 16:19:42 +0200 Subject: [ticket/10616] Add template inheritance to exported template Add template inheritance when exporting template.cfg PHPBB3-10616 --- phpBB/includes/acp/acp_styles.php | 17 ++++++++--------- 1 file changed, 8 insertions(+), 9 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php index 5a7902755e..d7b0484af8 100644 --- a/phpBB/includes/acp/acp_styles.php +++ b/phpBB/includes/acp/acp_styles.php @@ -99,11 +99,11 @@ parse_css_file = {PARSE_CSS_FILE} $this->template_cfg .= ' # Some configuration options -# -# You can use this function to inherit templates from another template. -# The template of the given name has to be installed. -# Templates cannot inherit from inheriting templates. -#'; +# Template inheritance +# See http://blog.phpbb.com/2008/07/31/templating-just-got-easier/ +# Set value to empty or this template name to ignore template inheritance. +inherit_from = {INHERIT_FROM} +'; $this->imageset_keys = array( 'logos' => array( @@ -2047,9 +2047,7 @@ parse_css_file = {PARSE_CSS_FILE} // Export template core code if ($mode == 'template' || $inc_template) { - $template_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['template_name'], $style_row['template_copyright'], $config['version']), $this->template_cfg); - - $use_template_name = ''; + $use_template_name = $style_row['template_name']; // Add the inherit from variable, depending on it's use... if ($style_row['template_inherits_id']) @@ -2063,7 +2061,8 @@ parse_css_file = {PARSE_CSS_FILE} $db->sql_freeresult($result); } - $template_cfg .= ($use_template_name) ? "\ninherit_from = $use_template_name" : "\n#inherit_from = "; + $template_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}', '{INHERIT_FROM}'), array($mode, $style_row['template_name'], $style_row['template_copyright'], $config['version'], $use_template_name), $this->template_cfg); + $template_cfg .= "\n\nbbcode_bitfield = {$style_row['bbcode_bitfield']}"; $data[] = array( -- cgit v1.2.1 From 225892f506e0a109e710534fee64a11614921d88 Mon Sep 17 00:00:00 2001 From: Michael Cullum Date: Fri, 3 Feb 2012 16:14:48 +0000 Subject: [ticket/9914] Add backup warning to updater. PHPBB3-9914 --- phpBB/adm/style/install_update.html | 5 +++++ phpBB/language/en/install.php | 1 + 2 files changed, 6 insertions(+) (limited to 'phpBB') diff --git a/phpBB/adm/style/install_update.html b/phpBB/adm/style/install_update.html index 22d21d8314..818889c89b 100644 --- a/phpBB/adm/style/install_update.html +++ b/phpBB/adm/style/install_update.html @@ -43,6 +43,11 @@

    {WARNING_MSG}

    + +
    +

    {L_NOTICE}

    +

    {L_BACKUP_NOTICE}

    +
    diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index f69ca40613..bbf407f1dc 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -52,6 +52,7 @@ $lang = array_merge($lang, array( 'BLANK_PREFIX_FOUND' => 'A scan of your tables has shown a valid installation using no table prefix.', 'BOARD_NOT_INSTALLED' => 'No installation found', 'BOARD_NOT_INSTALLED_EXPLAIN' => 'The phpBB Unified Convertor Framework requires a default installation of phpBB3 to function, please proceed by first installing phpBB3.', + 'BACKUP_NOTICE' => 'Please backup your board before updating in case any problems arise during the update process.', 'CATEGORY' => 'Category', 'CACHE_STORE' => 'Cache type', -- cgit v1.2.1 From d035dc3eef617adbd9dc7ba09e088f5dcc3cb905 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 3 Feb 2012 16:00:03 -0500 Subject: [ticket/10618] Replace phpBB 3.0 with phpBB 3 for 3.1. PHPBB3-10618 --- phpBB/language/en/install.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index 858065b643..c8cf257f37 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -78,7 +78,7 @@ $lang = array_merge($lang, array( 'CONTINUE_OLD_CONVERSION' => 'Continue previously started conversion', 'CONVERT' => 'Convert', 'CONVERT_COMPLETE' => 'Conversion completed', - 'CONVERT_COMPLETE_EXPLAIN' => 'You have now successfully converted your board to phpBB 3.0. You can now login and access your board. Please ensure that the settings were transferred correctly before enabling your board by deleting the install directory. Remember that help on using phpBB is available online via the Documentation and the support forums.', + 'CONVERT_COMPLETE_EXPLAIN' => 'You have now successfully converted your board to phpBB 3. You can now login and access your board. Please ensure that the settings were transferred correctly before enabling your board by deleting the install directory. Remember that help on using phpBB is available online via the Documentation and the support forums.', 'CONVERT_INTRO' => 'Welcome to the phpBB Unified Convertor Framework', 'CONVERT_INTRO_BODY' => 'From here, you are able to import data from other (installed) board systems. The list below shows all the conversion modules currently available. If there is no convertor shown in this list for the board software you wish to convert from, please check our website where further conversion modules may be available for download.', 'CONVERT_NEW_CONVERSION' => 'New conversion', @@ -155,7 +155,7 @@ $lang = array_merge($lang, array( 'DLL_XML' => 'XML support [ Jabber ]', 'DLL_ZLIB' => 'zlib compression support [ gz, .tar.gz, .zip ]', 'DL_CONFIG' => 'Download config', - 'DL_CONFIG_EXPLAIN' => 'You may download the complete config.php to your own PC. You will then need to upload the file manually, replacing any existing config.php in your phpBB 3.0 root directory. Please remember to upload the file in ASCII format (see your FTP application documentation if you are unsure how to achieve this). When you have uploaded the config.php please click “Done†to move to the next stage.', + 'DL_CONFIG_EXPLAIN' => 'You may download the complete config.php to your own PC. You will then need to upload the file manually, replacing any existing config.php in your phpBB 3 root directory. Please remember to upload the file in ASCII format (see your FTP application documentation if you are unsure how to achieve this). When you have uploaded the config.php please click “Done†to move to the next stage.', 'DL_DOWNLOAD' => 'Download', 'DONE' => 'Done', @@ -331,7 +331,7 @@ $lang = array_merge($lang, array( 'STAGE_ADVANCED_EXPLAIN' => 'The settings on this page are only necessary to set if you know that you require something different from the default. If you are unsure, just proceed to the next page, as these settings can be altered from the Administration Control Panel later.', 'STAGE_CONFIG_FILE' => 'Configuration file', 'STAGE_CREATE_TABLE' => 'Create database tables', - 'STAGE_CREATE_TABLE_EXPLAIN' => 'The database tables used by phpBB 3.0 have been created and populated with some initial data. Proceed to the next screen to finish installing phpBB.', + 'STAGE_CREATE_TABLE_EXPLAIN' => 'The database tables used by phpBB 3 have been created and populated with some initial data. Proceed to the next screen to finish installing phpBB.', 'STAGE_DATABASE' => 'Database settings', 'STAGE_FINAL' => 'Final stage', 'STAGE_INTRO' => 'Introduction', -- cgit v1.2.1 From ccf0cf649daabc600e8a79680e29c7bfbba32cac Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 3 Feb 2012 15:55:44 -0500 Subject: [ticket/10535] Delete no longer needed email confirm language entries. PHPBB3-10535 --- phpBB/language/en/common.php | 2 -- 1 file changed, 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index b51d34335f..bec4bd9ef7 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -614,7 +614,6 @@ $lang = array_merge($lang, array( 'TOO_LONG_USER_PASSWORD' => 'The password you entered is too long.', 'TOO_LONG_USERNAME' => 'The username you entered is too long.', 'TOO_LONG_EMAIL' => 'The e-mail address you entered is too long.', - 'TOO_LONG_EMAIL_CONFIRM' => 'The e-mail address confirmation you entered is too long.', 'TOO_LONG_WEBSITE' => 'The website address you entered is too long.', 'TOO_LONG_YIM' => 'The Yahoo! Messenger name you entered is too long.', @@ -636,7 +635,6 @@ $lang = array_merge($lang, array( 'TOO_SHORT_USER_PASSWORD' => 'The password you entered is too short.', 'TOO_SHORT_USERNAME' => 'The username you entered is too short.', 'TOO_SHORT_EMAIL' => 'The e-mail address you entered is too short.', - 'TOO_SHORT_EMAIL_CONFIRM' => 'The e-mail address confirmation you entered is too short.', 'TOO_SHORT_WEBSITE' => 'The website address you entered is too short.', 'TOO_SHORT_YIM' => 'The Yahoo! Messenger name you entered is too short.', -- cgit v1.2.1 From 42d9edc4f268d4f0894bc140c2aefffbd87e3361 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 4 Feb 2012 00:57:39 +0100 Subject: [ticket/10495] Update request/type_cast_helper for PHP 5.4 magic_quotes_gpc drop PHPBB3-10495 --- phpBB/includes/request/type_cast_helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/request/type_cast_helper.php b/phpBB/includes/request/type_cast_helper.php index 5aa0372328..561e8fc251 100644 --- a/phpBB/includes/request/type_cast_helper.php +++ b/phpBB/includes/request/type_cast_helper.php @@ -34,7 +34,7 @@ class phpbb_request_type_cast_helper implements phpbb_request_type_cast_helper_i */ public function __construct() { - if (version_compare(PHP_VERSION, '6.0.0-dev', '>=')) + if (version_compare(PHP_VERSION, '5.4.0-dev', '>=')) { $this->strip = false; } -- cgit v1.2.1 From 246be1cb08dff57899fdafaf0ccfb3cd1913d1f5 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 5 Feb 2012 14:09:28 +0200 Subject: [feature/prosilver-cleanup/css-reset-v2] CSS reset Adding proper CSS reset to prosilver PHPBB3-10617 --- phpBB/styles/prosilver/theme/common.css | 81 +++++++++++++++++++++++++++++++-- 1 file changed, 77 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 8b5e09297e..9dce127d66 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -1,12 +1,51 @@ -/* General Markup Styles +/* CSS Reset http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 ---------------------------------------- */ - -* { - /* Reset browsers default margin, padding and font sizes */ +html, body, div, span, applet, object, iframe, +h1, h2, h3, h4, h5, h6, p, blockquote, pre, +a, abbr, acronym, address, big, cite, code, +del, dfn, em, img, ins, kbd, q, s, samp, +small, strike, strong, sub, sup, tt, var, +b, u, i, center, +dl, dt, dd, ol, ul, li, +fieldset, form, label, legend, +table, caption, tbody, tfoot, thead, tr, th, td, +article, aside, canvas, details, embed, +figure, figcaption, footer, header, hgroup, +menu, nav, output, ruby, section, summary, +time, mark, audio, video { margin: 0; padding: 0; + border: 0; + font-size: 100%; + font: inherit; + vertical-align: baseline; +} +/* HTML5 display-role reset for older browsers */ +article, aside, details, figcaption, figure, +footer, header, hgroup, menu, nav, section { + display: block; +} +body { + line-height: 1; +} +ol, ul { + list-style: none; +} +blockquote, q { + quotes: none; +} +blockquote:before, blockquote:after, +q:before, q:after { + content: ''; + content: none; +} +table { + border-collapse: collapse; + border-spacing: 0; } +/* General Markup Styles +---------------------------------------- */ html { font-size: 100%; /* Always show a scrollbar for short pages - stops the jump when the scrollbar appears. non-IE browsers */ @@ -20,6 +59,7 @@ body { background-color: #FFFFFF; /*font-size: 62.5%; This sets the default font size to be equivalent to 10px */ font-size: 10px; + line-height: normal; margin: 0; padding: 12px 0; } @@ -99,6 +139,39 @@ p.right { text-align: right; } +b, strong { + font-weight: bold; +} + +i, em { + font-style: italic; +} + +u { + text-decoration: underline; +} + +ul { + list-style-type: disc; +} + +ol { + list-style-type: decimal; +} + +li { + display: list-item; +} + +ul ul, ol ul { + list-style-type: circle; +} + +ol ol ul, ol ul ul, ul ol ul, ul ul ul { + list-style-type: square; +} + + /* Main blocks ---------------------------------------- */ #wrap { -- cgit v1.2.1 From f832f5a4ee88459dae6fda7e1b303b15f84768dc Mon Sep 17 00:00:00 2001 From: rxu Date: Sun, 5 Feb 2012 22:03:02 +0800 Subject: [ticket/9831] Fix saving unchecked checkbox field value PHPBB3-9831 --- phpBB/includes/acp/acp_profile.php | 8 ++++++++ 1 file changed, 8 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_profile.php b/phpBB/includes/acp/acp_profile.php index 09a7a2f9ed..a591474fce 100644 --- a/phpBB/includes/acp/acp_profile.php +++ b/phpBB/includes/acp/acp_profile.php @@ -511,6 +511,14 @@ class acp_profile // If we switch the type on step 2, we have to adjust field value. // 1 is a common value for the checkbox and radio buttons. + // Adjust unchecked checkbox value. + // If we return or save settings from 2nd/3rd page + // and the checkbox is unchecked, set the value to 0. + if (isset($_REQUEST['step']) && !isset($_REQUEST[$key])) + { + $var = 0; + } + // If we switch to the checkbox type but former radio buttons value was 2, // which is not the case for the checkbox, set it to 0 (unchecked). if ($cp->vars['field_length'] == 2 && $var == 2) -- cgit v1.2.1 From 9e15d83022ef3d02b2f17a064578b73e304bb26f Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Mon, 6 Feb 2012 16:49:50 +0100 Subject: [ticket/10614] Better usage output PHPBB3-10614 --- phpBB/develop/extensions.php | 50 +++++++++++++++++++------------------------- 1 file changed, 21 insertions(+), 29 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php index 87bdd21d1a..8f466caf0c 100644 --- a/phpBB/develop/extensions.php +++ b/phpBB/develop/extensions.php @@ -1,32 +1,10 @@ -// -// Enables the specified extension. -// -// extensions.php disable -// -// Disables the specified extension. +/** +* +* @copyright (c) 2012 phpBB Group +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 +* +*/ define('IN_PHPBB', 1); define('ANONYMOUS', 1); @@ -37,7 +15,21 @@ include($phpbb_root_path . 'common.'.$phpEx); function usage() { - echo "Please see comments in extensions.php for usage\n"; + echo "Usage: extensions.php COMMAND [OPTION]...\n"; + echo "Console extension manager.\n"; + echo "\n"; + echo "list:\n"; + echo " Lists all extensions in the database and the filesystem.\n"; + echo " Next to each extension name are two flags:\n"; + echo "\n"; + echo " * P|M - present|missing: whether the extension exists in the filesystem\n"; + echo " * A|I - active|inactive: whether the extension is activated in the database\n"; + echo "\n"; + echo "enable NAME:\n"; + echo " Enables the specified extension.\n"; + echo "\n"; + echo "disable NAME:\n"; + echo " Disables the specified extension.\n"; exit(2); } -- cgit v1.2.1 From 62288b3c05049cb02732204af062e0baa1191992 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Tue, 7 Feb 2012 22:03:24 +0200 Subject: [ticket/10569] Invalid string comparison in prosilver Fixing invalid string comparison in ucp_main_front.html in prosilver PHPBB3-10569 --- phpBB/styles/prosilver/template/ucp_main_front.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/ucp_main_front.html b/phpBB/styles/prosilver/template/ucp_main_front.html index 39c5d4f396..4a6fa3bf86 100644 --- a/phpBB/styles/prosilver/template/ucp_main_front.html +++ b/phpBB/styles/prosilver/template/ucp_main_front.html @@ -34,8 +34,8 @@
    {L_JOINED}:
    {JOINED}
    {L_VISITED}:
    {LAST_VISIT_YOU}
    {L_TOTAL_POSTS}:
    {POSTS} | {L_SEARCH_YOUR_POSTS}
    ({POSTS_DAY} / {POSTS_PCT}){POSTS}
    -
    {L_ACTIVE_IN_FORUM}:
    {ACTIVE_FORUM}
    ({ACTIVE_FORUM_POSTS} / {ACTIVE_FORUM_PCT})
    -
    {L_ACTIVE_IN_TOPIC}:
    {ACTIVE_TOPIC}
    ({ACTIVE_TOPIC_POSTS} / {ACTIVE_TOPIC_PCT})
    +
    {L_ACTIVE_IN_FORUM}:
    {ACTIVE_FORUM}
    ({ACTIVE_FORUM_POSTS} / {ACTIVE_FORUM_PCT})
    +
    {L_ACTIVE_IN_TOPIC}:
    {ACTIVE_TOPIC}
    ({ACTIVE_TOPIC_POSTS} / {ACTIVE_TOPIC_PCT})
    {L_YOUR_WARNINGS}:
    {WARNING_IMG} [{WARNINGS}]
    -- cgit v1.2.1 From 6cf7f205903767bf44d1ee1de796d5f3a00774cd Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 9 Feb 2012 01:34:37 +0200 Subject: [ticket/10634] Changing p_master::is_full_class Changing p_master::is_full_class to check allow all module types, not only current type PHPBB3-10634 --- phpBB/includes/functions_module.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php index b7bb770031..db7defdc48 100644 --- a/phpBB/includes/functions_module.php +++ b/phpBB/includes/functions_module.php @@ -923,6 +923,6 @@ class p_master */ protected function is_full_class($basename) { - return (substr($basename, 0, 6) === 'phpbb_' || substr($basename, 0, strlen($this->p_class) + 1) === $this->p_class . '_'); + return (preg_match('/^(phpbb|ucp|mcp|acp)_/', $basename)); } } -- cgit v1.2.1 From ad8ab099301c283b3606459dc9a84f08793f42e5 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 9 Feb 2012 01:34:50 +0200 Subject: [ticket/10634] Specify module type when viewing profile Specify module type when checking for enabled modules when viewing user's profile PHPBB3-10634 --- phpBB/memberlist.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index 1201aceff9..cf2cb5b06d 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -571,11 +571,11 @@ switch ($mode) $module->list_modules('ucp'); $module->list_modules('mcp'); - $user_notes_enabled = ($module->loaded('notes', 'user_notes')) ? true : false; - $warn_user_enabled = ($module->loaded('warn', 'warn_user')) ? true : false; - $zebra_enabled = ($module->loaded('zebra')) ? true : false; - $friends_enabled = ($module->loaded('zebra', 'friends')) ? true : false; - $foes_enabled = ($module->loaded('zebra', 'foes')) ? true : false; + $user_notes_enabled = ($module->loaded('mcp_notes', 'user_notes')) ? true : false; + $warn_user_enabled = ($module->loaded('mcp_warn', 'warn_user')) ? true : false; + $zebra_enabled = ($module->loaded('ucp_zebra')) ? true : false; + $friends_enabled = ($module->loaded('ucp_zebra', 'friends')) ? true : false; + $foes_enabled = ($module->loaded('ucp_zebra', 'foes')) ? true : false; unset($module); } -- cgit v1.2.1 From b222030ca78f8eb980baffeec793723978e75c3a Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Thu, 9 Feb 2012 01:02:00 +0100 Subject: [ticket/10614] Make script accessible from anywhere PHPBB3-10614 --- phpBB/develop/extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php index 8f466caf0c..4e673459d2 100644 --- a/phpBB/develop/extensions.php +++ b/phpBB/develop/extensions.php @@ -9,7 +9,7 @@ define('IN_PHPBB', 1); define('ANONYMOUS', 1); $phpEx = substr(strrchr(__FILE__, '.'), 1); -$phpbb_root_path = './../'; +$phpbb_root_path = __DIR__.'/../'; include($phpbb_root_path . 'common.'.$phpEx); -- cgit v1.2.1 From 5ccd6b0c7a2952f01b636e7319ed8ae4be8faa77 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Thu, 9 Feb 2012 01:03:17 +0100 Subject: [ticket/10614] Tweak list output, show state, purge cache, handle missing exts PHPBB3-10614 --- phpBB/develop/extensions.php | 29 +++++++++++++++++++---------- phpBB/includes/extension/manager.php | 20 +++++++++++++++++++- 2 files changed, 38 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php index 4e673459d2..287957f52a 100644 --- a/phpBB/develop/extensions.php +++ b/phpBB/develop/extensions.php @@ -22,8 +22,9 @@ function usage() echo " Lists all extensions in the database and the filesystem.\n"; echo " Next to each extension name are two flags:\n"; echo "\n"; - echo " * P|M - present|missing: whether the extension exists in the filesystem\n"; - echo " * A|I - active|inactive: whether the extension is activated in the database\n"; + echo " * present|missing: whether the extension exists in the filesystem\n"; + echo " * active|inactive: whether the extension is activated in the database\n"; + echo " * state: the current persisted installation state\n"; echo "\n"; echo "enable NAME:\n"; echo " Enables the specified extension.\n"; @@ -35,15 +36,18 @@ function usage() function list_extensions() { - global $db, $phpbb_root_path; + global $db, $cache, $phpbb_root_path; - $sql = "SELECT ext_name, ext_active from " . EXT_TABLE; + $cache->destroy('_ext'); + + $sql = "SELECT ext_name, ext_active, ext_state from " . EXT_TABLE; $result = $db->sql_query($sql); $extensions = array(); while ($row = $db->sql_fetchrow($result)) { $extensions[$row['ext_name']]['active'] = (bool) $row['ext_active']; + $extensions[$row['ext_name']]['state'] = (bool) $row['ext_state']; if (file_exists($phpbb_root_path . 'ext/' . $row['ext_name'])) { $extensions[$row['ext_name']]['present'] = true; @@ -64,7 +68,7 @@ function list_extensions() { if (!array_key_exists($file, $extensions)) { - $extensions[$file] = array('active' => false, 'present' => true); + $extensions[$file] = array('active' => false, 'present' => true, 'state' => false); } } } @@ -72,22 +76,27 @@ function list_extensions() ksort($extensions); foreach ($extensions as $name => $ext) { - $present = $ext['active'] ? 'P' : 'M'; - $active = $ext['active'] ? 'A' : 'I'; - printf("%-20s %s %s\n", $name, $present, $active); + $present = $ext['present'] ? 'present' : 'missing'; + $active = $ext['active'] ? 'active' : 'inactive'; + $state = json_encode(unserialize($ext['state'])); + printf("%-20s %-7s %-7s %-20s\n", $name, $present, $active, $state); } } function enable_extension($name) { - global $phpbb_extension_manager; + global $phpbb_extension_manager, $cache; + + $cache->destroy('_ext'); $phpbb_extension_manager->enable($name); } function disable_extension($name) { - global $phpbb_extension_manager; + global $phpbb_extension_manager, $cache; + + $cache->destroy('_ext'); $phpbb_extension_manager->disable($name); } diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index 438578e7e7..b7f76d0400 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -132,6 +132,12 @@ class phpbb_extension_manager */ public function enable_step($name) { + $ext_path = $this->get_extension_path($name); + if (!file_exists($ext_path)) + { + throw new InvalidArgumentException('The provided extension does not exist.'); + } + // ignore extensions that are already enabled if (isset($this->extensions[$name]) && $this->extensions[$name]['ext_active']) { @@ -152,7 +158,7 @@ class phpbb_extension_manager ); $this->extensions[$name] = $extension_data; - $this->extensions[$name]['ext_path'] = $this->get_extension_path($extension_data['ext_name']); + $this->extensions[$name]['ext_path'] = $ext_path; ksort($this->extensions); $sql = 'UPDATE ' . $this->extension_table . ' @@ -195,6 +201,12 @@ class phpbb_extension_manager */ public function disable_step($name) { + $ext_path = $this->get_extension_path($name); + if (!file_exists($ext_path)) + { + throw new InvalidArgumentException('The provided extension does not exist.'); + } + // ignore extensions that are already disabled if (!isset($this->extensions[$name]) || !$this->extensions[$name]['ext_active']) { @@ -262,6 +274,12 @@ class phpbb_extension_manager */ public function purge_step($name) { + $ext_path = $this->get_extension_path($name); + if (!file_exists($ext_path)) + { + throw new InvalidArgumentException('The provided extension does not exist.'); + } + // ignore extensions that do not exist if (!isset($this->extensions[$name])) { -- cgit v1.2.1 From fb83a5f6c07fe1d3755d868b93bb632802ab7fb7 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Thu, 9 Feb 2012 01:03:51 +0100 Subject: [ticket/10614] Add purge command PHPBB3-10614 --- phpBB/develop/extensions.php | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'phpBB') diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php index 287957f52a..81bfecc45f 100644 --- a/phpBB/develop/extensions.php +++ b/phpBB/develop/extensions.php @@ -31,6 +31,9 @@ function usage() echo "\n"; echo "disable NAME:\n"; echo " Disables the specified extension.\n"; + echo "\n"; + echo "purge NAME:\n"; + echo " Purges the specified extension.\n"; exit(2); } @@ -101,6 +104,15 @@ function disable_extension($name) $phpbb_extension_manager->disable($name); } +function purge_extension($name) +{ + global $phpbb_extension_manager, $cache; + + $cache->destroy('_ext'); + + $phpbb_extension_manager->purge($name); +} + function validate_argument_count($count) { global $argv; @@ -131,6 +143,11 @@ switch ($action) disable_extension($argv[2]); break; + case 'purge': + validate_argument_count(2); + purge_extension($argv[2]); + break; + default: usage(); } -- cgit v1.2.1 From 36728d3414e513f0b4aede75d53316e208e5eceb Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Thu, 9 Feb 2012 01:36:06 +0100 Subject: [ticket/10614] Refactor list command to use manager API PHPBB3-10614 --- phpBB/develop/extensions.php | 74 +++++++++++------------------------- phpBB/includes/extension/manager.php | 12 +++++- 2 files changed, 33 insertions(+), 53 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php index 81bfecc45f..4a5b0c7643 100644 --- a/phpBB/develop/extensions.php +++ b/phpBB/develop/extensions.php @@ -20,11 +20,6 @@ function usage() echo "\n"; echo "list:\n"; echo " Lists all extensions in the database and the filesystem.\n"; - echo " Next to each extension name are two flags:\n"; - echo "\n"; - echo " * present|missing: whether the extension exists in the filesystem\n"; - echo " * active|inactive: whether the extension is activated in the database\n"; - echo " * state: the current persisted installation state\n"; echo "\n"; echo "enable NAME:\n"; echo " Enables the specified extension.\n"; @@ -39,76 +34,51 @@ function usage() function list_extensions() { - global $db, $cache, $phpbb_root_path; + global $phpbb_extension_manager; - $cache->destroy('_ext'); + $phpbb_extension_manager->load_extensions(); - $sql = "SELECT ext_name, ext_active, ext_state from " . EXT_TABLE; + echo "Enabled:\n"; + $enabled = array_keys($phpbb_extension_manager->all_enabled()); + print_extensions($enabled); + echo "\n"; - $result = $db->sql_query($sql); - $extensions = array(); - while ($row = $db->sql_fetchrow($result)) - { - $extensions[$row['ext_name']]['active'] = (bool) $row['ext_active']; - $extensions[$row['ext_name']]['state'] = (bool) $row['ext_state']; - if (file_exists($phpbb_root_path . 'ext/' . $row['ext_name'])) - { - $extensions[$row['ext_name']]['present'] = true; - } - else - { - $extensions[$row['ext_name']]['present'] = false; - } - } + echo "Disabled:\n"; + $disabled = array_keys($phpbb_extension_manager->all_disabled()); + print_extensions($disabled); + echo "\n"; - $iterator = new DirectoryIterator($phpbb_root_path . 'ext'); - foreach ($iterator as $file) - { - // ignore hidden files - // php refuses to subscript iterator objects - $file = "$file"; - if ($file[0] != '.') - { - if (!array_key_exists($file, $extensions)) - { - $extensions[$file] = array('active' => false, 'present' => true, 'state' => false); - } - } - } + echo "Not installed:\n"; + $all = array_keys($phpbb_extension_manager->all_available()); + $purged = array_diff($all, $enabled, $disabled); + print_extensions($purged); +} - ksort($extensions); - foreach ($extensions as $name => $ext) +function print_extensions($exts) +{ + foreach ($exts as $ext) { - $present = $ext['present'] ? 'present' : 'missing'; - $active = $ext['active'] ? 'active' : 'inactive'; - $state = json_encode(unserialize($ext['state'])); - printf("%-20s %-7s %-7s %-20s\n", $name, $present, $active, $state); + echo "- $ext\n"; } } function enable_extension($name) { - global $phpbb_extension_manager, $cache; - - $cache->destroy('_ext'); + global $phpbb_extension_manager; $phpbb_extension_manager->enable($name); } function disable_extension($name) { - global $phpbb_extension_manager, $cache; - - $cache->destroy('_ext'); + global $phpbb_extension_manager; $phpbb_extension_manager->disable($name); } function purge_extension($name) { - global $phpbb_extension_manager, $cache; - - $cache->destroy('_ext'); + global $phpbb_extension_manager; $phpbb_extension_manager->purge($name); } diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index b7f76d0400..b8643b39ee 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -61,7 +61,7 @@ class phpbb_extension_manager * * @return null */ - protected function load_extensions() + public function load_extensions() { $sql = 'SELECT * FROM ' . $this->extension_table; @@ -173,6 +173,8 @@ class phpbb_extension_manager $this->db->sql_query($sql); } + $this->cache->destroy($this->cache_name); + return !$active; } @@ -231,6 +233,8 @@ class phpbb_extension_manager WHERE ext_name = '" . $this->db->sql_escape($name) . "'"; $this->db->sql_query($sql); + $this->cache->destroy($this->cache_name); + return true; } @@ -246,6 +250,8 @@ class phpbb_extension_manager WHERE ext_name = '" . $this->db->sql_escape($name) . "'"; $this->db->sql_query($sql); + $this->cache->destroy($this->cache_name); + return false; } @@ -310,6 +316,8 @@ class phpbb_extension_manager WHERE ext_name = '" . $this->db->sql_escape($name) . "'"; $this->db->sql_query($sql); + $this->cache->destroy($this->cache_name); + return true; } @@ -319,6 +327,8 @@ class phpbb_extension_manager WHERE ext_name = '" . $this->db->sql_escape($name) . "'"; $this->db->sql_query($sql); + $this->cache->destroy($this->cache_name); + return false; } -- cgit v1.2.1 From 68e4c667fa5f29f7974b83549a2a9bb8bbd8abc5 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Thu, 9 Feb 2012 01:37:53 +0100 Subject: [ticket/10614] Remove ext manager exceptions for now PHPBB3-10614 --- phpBB/includes/extension/manager.php | 20 +------------------- 1 file changed, 1 insertion(+), 19 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index b8643b39ee..12b626d69f 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -132,12 +132,6 @@ class phpbb_extension_manager */ public function enable_step($name) { - $ext_path = $this->get_extension_path($name); - if (!file_exists($ext_path)) - { - throw new InvalidArgumentException('The provided extension does not exist.'); - } - // ignore extensions that are already enabled if (isset($this->extensions[$name]) && $this->extensions[$name]['ext_active']) { @@ -158,7 +152,7 @@ class phpbb_extension_manager ); $this->extensions[$name] = $extension_data; - $this->extensions[$name]['ext_path'] = $ext_path; + $this->extensions[$name]['ext_path'] = $this->get_extension_path($extension_data['ext_name']); ksort($this->extensions); $sql = 'UPDATE ' . $this->extension_table . ' @@ -203,12 +197,6 @@ class phpbb_extension_manager */ public function disable_step($name) { - $ext_path = $this->get_extension_path($name); - if (!file_exists($ext_path)) - { - throw new InvalidArgumentException('The provided extension does not exist.'); - } - // ignore extensions that are already disabled if (!isset($this->extensions[$name]) || !$this->extensions[$name]['ext_active']) { @@ -280,12 +268,6 @@ class phpbb_extension_manager */ public function purge_step($name) { - $ext_path = $this->get_extension_path($name); - if (!file_exists($ext_path)) - { - throw new InvalidArgumentException('The provided extension does not exist.'); - } - // ignore extensions that do not exist if (!isset($this->extensions[$name])) { -- cgit v1.2.1 From 78de29b7ce5b8c1c34749bb68813840f7e6c4b7b Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Thu, 9 Feb 2012 01:39:45 +0100 Subject: [ticket/10614] Check if cache exists before destroying it PHPBB3-10614 --- phpBB/includes/extension/manager.php | 25 ++++++++++++++++++++----- 1 file changed, 20 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index 12b626d69f..56092410f2 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -167,7 +167,10 @@ class phpbb_extension_manager $this->db->sql_query($sql); } - $this->cache->destroy($this->cache_name); + if ($this->cache) + { + $this->cache->destroy($this->cache_name); + } return !$active; } @@ -221,7 +224,10 @@ class phpbb_extension_manager WHERE ext_name = '" . $this->db->sql_escape($name) . "'"; $this->db->sql_query($sql); - $this->cache->destroy($this->cache_name); + if ($this->cache) + { + $this->cache->destroy($this->cache_name); + } return true; } @@ -238,7 +244,10 @@ class phpbb_extension_manager WHERE ext_name = '" . $this->db->sql_escape($name) . "'"; $this->db->sql_query($sql); - $this->cache->destroy($this->cache_name); + if ($this->cache) + { + $this->cache->destroy($this->cache_name); + } return false; } @@ -298,7 +307,10 @@ class phpbb_extension_manager WHERE ext_name = '" . $this->db->sql_escape($name) . "'"; $this->db->sql_query($sql); - $this->cache->destroy($this->cache_name); + if ($this->cache) + { + $this->cache->destroy($this->cache_name); + } return true; } @@ -309,7 +321,10 @@ class phpbb_extension_manager WHERE ext_name = '" . $this->db->sql_escape($name) . "'"; $this->db->sql_query($sql); - $this->cache->destroy($this->cache_name); + if ($this->cache) + { + $this->cache->destroy($this->cache_name); + } return false; } -- cgit v1.2.1 From 6858485964fda2d43fd7622123ffce796b2fd365 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 9 Feb 2012 14:08:58 +0100 Subject: [ticket/10636] Resolve variable name ($sql_ary) conflict in cache_moderators(). Regression from 4c77903129749008cd08c346006d2a57cf6ff544. PHPBB3-10636 --- phpBB/includes/functions_admin.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 7fdf874456..2fd58a11e9 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -2330,7 +2330,7 @@ function cache_moderators() $ug_id_ary = array_keys($hold_ary); // Remove users who have group memberships with DENY moderator permissions - $sql_ary = array( + $sql_ary_deny = array( 'SELECT' => 'a.forum_id, ug.user_id, g.group_id', 'FROM' => array( @@ -2357,7 +2357,7 @@ function cache_moderators() AND ug.user_pending = 0 AND o.auth_option " . $db->sql_like_expression('m_' . $db->any_char), ); - $sql = $db->sql_build_query('SELECT', $sql_ary); + $sql = $db->sql_build_query('SELECT', $sql_ary_deny); $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) -- cgit v1.2.1 From f894da0d25f2ecc4c8f3c039dd9f40607137d4ca Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 9 Feb 2012 15:13:29 +0100 Subject: [ticket/10633] Stop leaking filename of attachments when thumbnail is requested While filenames are chosen at random and there is no correlation between the original filename and the new filesystem filename, there is a correlation between filesystem filename and filesytem filename of thumbnails. Adjust error message to no longer include the physical filename and make it consistent with the error message that is shown when there is no attachment at all. This information was mostly useless for regular users (i.e. non-admins) anyway. PHPBB3-10633 --- phpBB/download/file.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/download/file.php b/phpBB/download/file.php index c17f0cf018..bf277c69fa 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -424,7 +424,7 @@ function send_file_to_browser($attachment, $upload_dir, $category) if (!@file_exists($filename)) { send_status_line(404, 'Not Found'); - trigger_error($user->lang['ERROR_NO_ATTACHMENT'] . '

    ' . sprintf($user->lang['FILE_NOT_FOUND_404'], $filename)); + trigger_error('ERROR_NO_ATTACHMENT'); } // Correct the mime type - we force application/octetstream for all files, except images -- cgit v1.2.1 From 35d5d527dbe2de1a608e6af4b004ed807ff22743 Mon Sep 17 00:00:00 2001 From: James King Date: Wed, 8 Feb 2012 01:33:08 +0000 Subject: [ticket/10606] Fix incorrect hidden fields array name in page_header(). Regression from dfb7cc625a37c6345fa647ee3a21f890ba5c9649. PHPBB3-10606 --- phpBB/includes/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 4d2a00f2db..0320230a7d 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4553,7 +4553,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 foreach ($_EXTRA_URL as $url_param) { $url_param = explode('=', $url_param, 2); - $s_hidden_fields[$url_param[0]] = $url_param[1]; + $s_search_hidden_fields[$url_param[0]] = $url_param[1]; } } -- cgit v1.2.1 From a962e788542dac43a365afde295babf3ee681535 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 9 Feb 2012 15:29:21 +0100 Subject: [ticket/10606] Also correctly use $s_search_hidden_fields in view(forum|topic). Regression from dfb7cc625a37c6345fa647ee3a21f890ba5c9649. PHPBB3-10606 --- phpBB/viewforum.php | 2 +- phpBB/viewtopic.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php index 588f60b589..6fec662b02 100644 --- a/phpBB/viewforum.php +++ b/phpBB/viewforum.php @@ -278,7 +278,7 @@ if (!empty($_EXTRA_URL)) foreach ($_EXTRA_URL as $url_param) { $url_param = explode('=', $url_param, 2); - $s_hidden_fields[$url_param[0]] = $url_param[1]; + $s_search_hidden_fields[$url_param[0]] = $url_param[1]; } } diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 01cd6a28a8..74420a25c7 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -607,7 +607,7 @@ if (!empty($_EXTRA_URL)) foreach ($_EXTRA_URL as $url_param) { $url_param = explode('=', $url_param, 2); - $s_hidden_fields[$url_param[0]] = $url_param[1]; + $s_search_hidden_fields[$url_param[0]] = $url_param[1]; } } -- cgit v1.2.1 From 345e8e084fd5ab7f99442ce6515a786a90806e2e Mon Sep 17 00:00:00 2001 From: rxu Date: Fri, 10 Feb 2012 00:31:13 +0800 Subject: [ticket/9084] Don't hide 'non-entered' dropdown CPF value if not required PHPBB3-9084 --- phpBB/includes/functions_profile_fields.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_profile_fields.php b/phpBB/includes/functions_profile_fields.php index 1eae2a9ad6..79701429e6 100644 --- a/phpBB/includes/functions_profile_fields.php +++ b/phpBB/includes/functions_profile_fields.php @@ -571,7 +571,7 @@ class custom_profile $this->get_option_lang($field_id, $lang_id, FIELD_DROPDOWN, false); } - if ($value == $ident_ary['data']['field_novalue']) + if ($value == $ident_ary['data']['field_novalue'] && $ident_ary['data']['field_required']) { return NULL; } -- cgit v1.2.1 From 11606c86073db42b0455a654d35d6ff38fb70105 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 9 Feb 2012 21:58:39 +0200 Subject: [ticket/10637] Leftovers from implementation of extensions Replacing code in includes/functions_admin.php that was missed in ticket 10323 PHPBB3-10637 --- phpBB/includes/functions_admin.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 7fdf874456..7b4393f383 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -847,15 +847,13 @@ function delete_posts($where_type, $where_ids, $auto_sync = true, $posted_sync = } // Remove the message from the search index - $search_type = basename($config['search_type']); + $search_type = $config['search_type']; - if (!file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx)) + if (!class_exists($search_type)) { trigger_error('NO_SUCH_SEARCH_MODULE'); } - include_once("{$phpbb_root_path}includes/search/$search_type.$phpEx"); - $error = false; $search = new $search_type($error); -- cgit v1.2.1 From 1d72a47ea6f47ec95b201ea4a3b9a9e0ea34da9a Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 9 Feb 2012 22:13:13 +0200 Subject: [ticket/10637] Leftovers from implementation of extensions in mcp_main Replacing code in includes/mcp/mcp_main.php that was missed in ticket 10323 PHPBB3-10637 --- phpBB/includes/mcp/mcp_main.php | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/mcp/mcp_main.php b/phpBB/includes/mcp/mcp_main.php index 10e5956fc2..a21c67924d 100644 --- a/phpBB/includes/mcp/mcp_main.php +++ b/phpBB/includes/mcp/mcp_main.php @@ -907,16 +907,11 @@ function mcp_fork_topic($topic_ids) if (!isset($search_type) && $topic_row['enable_indexing']) { // Select the search method and do some additional checks to ensure it can actually be utilised - $search_type = basename($config['search_type']); - - if (!file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx)) - { - trigger_error('NO_SUCH_SEARCH_MODULE'); - } + $search_type = $config['search_type']; if (!class_exists($search_type)) { - include("{$phpbb_root_path}includes/search/$search_type.$phpEx"); + trigger_error('NO_SUCH_SEARCH_MODULE'); } $error = false; -- cgit v1.2.1 From 92303d2dacdd7be3fad4d2ffba84c0d30fcadeaf Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 9 Feb 2012 22:17:33 +0200 Subject: [ticket/10637] Leftovers from implementation of extensions in mcp_post Replacing code in includes/mcp/mcp_post.php that was missed in ticket 10323 PHPBB3-10637 --- phpBB/includes/mcp/mcp_post.php | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/mcp/mcp_post.php b/phpBB/includes/mcp/mcp_post.php index ee79928eb1..2a52a858b3 100644 --- a/phpBB/includes/mcp/mcp_post.php +++ b/phpBB/includes/mcp/mcp_post.php @@ -464,12 +464,10 @@ function change_poster(&$post_info, $userdata) } // refresh search cache of this post - $search_type = basename($config['search_type']); + $search_type = $config['search_type']; - if (file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx)) + if (class_exists($search_type)) { - require("{$phpbb_root_path}includes/search/$search_type.$phpEx"); - // We do some additional checks in the module to ensure it can actually be utilised $error = false; $search = new $search_type($error); -- cgit v1.2.1 From a1a1b61ae8507276f7191be84a8782c0b0218f9c Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 9 Feb 2012 22:22:32 +0200 Subject: [ticket/10637] Leftovers from implementation of extensions in develop tools Replacing code in development tools that was missed in ticket 10323 PHPBB3-10637 --- phpBB/develop/create_search_index.php | 1 - phpBB/develop/search_fill.php | 4 +--- 2 files changed, 1 insertion(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/create_search_index.php b/phpBB/develop/create_search_index.php index 28001035f6..1de20f3099 100644 --- a/phpBB/develop/create_search_index.php +++ b/phpBB/develop/create_search_index.php @@ -25,7 +25,6 @@ $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : '../'; $phpEx = substr(strrchr(__FILE__, '.'), 1); require($phpbb_root_path . 'common.' . $phpEx); require($phpbb_root_path . 'includes/acp/acp_search.' . $phpEx); -require($phpbb_root_path . 'includes/search/' . $class_name . '.' . $phpEx); $user->session_begin(); $auth->acl($user->data); diff --git a/phpBB/develop/search_fill.php b/phpBB/develop/search_fill.php index 371c8c74cc..4c0b607778 100644 --- a/phpBB/develop/search_fill.php +++ b/phpBB/develop/search_fill.php @@ -34,13 +34,11 @@ $user->setup(); $search_type = $config['search_type']; -if (!file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx)) +if (!class_exists($search_type)) { trigger_error('NO_SUCH_SEARCH_MODULE'); } -require($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx); - $error = false; $search = new $search_type($error); -- cgit v1.2.1 From caeadf85d00ce90b8ea141bcb9a05d229ff1b5b4 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 9 Feb 2012 22:24:46 +0200 Subject: [ticket/10637] Leftovers from implementation of extensions in convertor Replacing code in convertor that was missed in ticket 10323 PHPBB3-10637 --- phpBB/install/install_convert.php | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/install_convert.php b/phpBB/install/install_convert.php index 5a868004ef..db974f9903 100644 --- a/phpBB/install/install_convert.php +++ b/phpBB/install/install_convert.php @@ -735,22 +735,20 @@ class install_convert extends module $this->p_master->error(sprintf($user->lang['COULD_NOT_FIND_PATH'], $convert->options['forum_path']), __LINE__, __FILE__); } - $search_type = basename(trim($config['search_type'])); + $search_type = $config['search_type']; // For conversions we are a bit less strict and set to a search backend we know exist... - if (!file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx)) + if (!class_exists($search_type)) { - $search_type = 'fulltext_native'; + $search_type = 'phpbb_search_fulltext_native'; set_config('search_type', $search_type); } - if (!file_exists($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx)) + if (!class_exists($search_type)) { trigger_error('NO_SUCH_SEARCH_MODULE'); } - require($phpbb_root_path . 'includes/search/' . $search_type . '.' . $phpEx); - $error = false; $convert->fulltext_search = new $search_type($error); -- cgit v1.2.1 From 2a5e30db9e13bc5c8895774291137a9dccb3a2c4 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Sat, 11 Feb 2012 01:40:01 -0600 Subject: [ticket/10641] Update MCP template with new plurality forms Updates the MCP template according to PHPBB3-10345 PHPBB3-10641 --- phpBB/styles/prosilver/template/mcp_front.html | 12 +++--------- phpBB/styles/subsilver2/template/mcp_front.html | 18 ------------------ 2 files changed, 3 insertions(+), 27 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/mcp_front.html b/phpBB/styles/prosilver/template/mcp_front.html index 21431b4bc1..e9635e528c 100644 --- a/phpBB/styles/prosilver/template/mcp_front.html +++ b/phpBB/styles/prosilver/template/mcp_front.html @@ -10,7 +10,7 @@

    {L_LATEST_UNAPPROVED}

    -

    {L_UNAPPROVED_TOTAL}

    +

    {L_UNAPPROVED_TOTAL}

      @@ -40,8 +40,6 @@
    - -

    {L_UNAPPROVED_POSTS_ZERO_TOTAL}

    @@ -64,7 +62,7 @@

    {L_LATEST_REPORTED}

    -

    {L_REPORTS_TOTAL}

    +

    {L_REPORTS_TOTAL}

      @@ -92,8 +90,6 @@
    - -

    {L_REPORTS_ZERO_TOTAL}

    @@ -105,7 +101,7 @@

    {L_LATEST_REPORTED_PMS}

    -

    {L_PM_REPORTS_TOTAL}

    +

    {L_PM_REPORTS_TOTAL}

      @@ -133,8 +129,6 @@
    - -

    {L_PM_REPORTS_ZERO_TOTAL}

    diff --git a/phpBB/styles/subsilver2/template/mcp_front.html b/phpBB/styles/subsilver2/template/mcp_front.html index f4b146f4c5..7c17e13c52 100644 --- a/phpBB/styles/subsilver2/template/mcp_front.html +++ b/phpBB/styles/subsilver2/template/mcp_front.html @@ -24,16 +24,10 @@
    - - - - - - @@ -70,16 +64,10 @@ - - - - - -
    {SITENAME}
    {L_PRIVATE_MESSAGING}
    {SITENAME}
    {L_PRIVATE_MESSAGING}

    {L_EMAIL_ADDRESS}:
    {L_CONFIRM_EMAIL}:
    {L_PASSWORD}:
    {L_PASSWORD_EXPLAIN}
    {L_EMAIL_ADDRESS}: {EMAIL}
    {L_CONFIRM_EMAIL}:
    {L_CONFIRM_EMAIL_EXPLAIN}
    {L_NEW_PASSWORD}:
    {L_CHANGE_PASSWORD_EXPLAIN}
    {L_INSTALLED}
    {L_INACTIVE_STYLES}
    {installed.NAME} *
    {L_ACTIVE_IN_FORUM}: {ACTIVE_FORUM}
    [ {ACTIVE_FORUM_POSTS} / {ACTIVE_FORUM_PCT} ]-
    {ACTIVE_FORUM}
    [ {ACTIVE_FORUM_POSTS} / {ACTIVE_FORUM_PCT} ]-
    {L_ACTIVE_IN_TOPIC}: {ACTIVE_TOPIC}
    [ {ACTIVE_TOPIC_POSTS} / {ACTIVE_TOPIC_PCT} ]-
    {ACTIVE_TOPIC}
    [ {ACTIVE_TOPIC_POSTS} / {ACTIVE_TOPIC_PCT} ]-
    {unapproved.POST_TIME}
    {L_UNAPPROVED_POSTS_ZERO_TOTAL}
    {L_UNAPPROVED_TOTAL}
    {S_HIDDEN_FIELDS}  
    {report.REPORTER_FULL} {report.REPORT_TIME}
    {L_REPORTS_ZERO_TOTAL}
    {L_REPORTS_TOTAL}


    @@ -107,16 +95,10 @@
    {pm_report.REPORTER_FULL} {pm_report.REPORT_TIME}
    {L_PM_REPORTS_ZERO_TOTAL}
    {L_PM_REPORTS_TOTAL}


    -- cgit v1.2.1 From 2814021d3ff3be4d57166ac8da224807cabb5367 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 11 Feb 2012 15:08:05 -0500 Subject: [ticket/10614] Unbreak all_available on extension manager. By default RecursiveIteratorIterator skips all directories. This results in extension manager not finding any extensions. Add RecursiveIteratorIterator::SELF_FIRST to correct this. PHPBB3-10614 --- phpBB/includes/extension/manager.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index 56092410f2..c38f0df32e 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -354,7 +354,8 @@ class phpbb_extension_manager $available = array(); $iterator = new RecursiveIteratorIterator( - new RecursiveDirectoryIterator($this->phpbb_root_path . 'ext/')); + new RecursiveDirectoryIterator($this->phpbb_root_path . 'ext/'), + RecursiveIteratorIterator::SELF_FIRST); foreach ($iterator as $file_info) { if ($file_info->isFile() && $file_info->getFilename() == 'ext' . $this->phpEx) -- cgit v1.2.1 From 87914d2788b54a5e59f54431a4745e62d42de907 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 11 Feb 2012 17:31:22 -0500 Subject: [ticket/10614] Change not installed heading to available. "Not installed" implies that extensions listed there can be installed, but the operation is called enable. Reduce the confusion by using "available" for the heading, this matches extension manager code. PHPBB3-10614 --- phpBB/develop/extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php index 4a5b0c7643..2f7c3d1167 100644 --- a/phpBB/develop/extensions.php +++ b/phpBB/develop/extensions.php @@ -48,7 +48,7 @@ function list_extensions() print_extensions($disabled); echo "\n"; - echo "Not installed:\n"; + echo "Available:\n"; $all = array_keys($phpbb_extension_manager->all_available()); $purged = array_diff($all, $enabled, $disabled); print_extensions($purged); -- cgit v1.2.1 From 6d227894f59c14dbc1f907bfd4d7cd5bb0df3dcd Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Mon, 13 Feb 2012 12:28:01 +0200 Subject: [ticket/10645] Missing CSS for checkboxes Missing CSS for checkboxes, invalid cursor for radio input PHPBB3-10645 --- phpBB/adm/style/admin.css | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css index 666f4921ba..ceda824e5a 100644 --- a/phpBB/adm/style/admin.css +++ b/phpBB/adm/style/admin.css @@ -1007,11 +1007,11 @@ fieldset.submit-buttons legend { /* Input field styles ---------------------------------------- */ -input.radio, input.permissions-checkbox { +input.radio, input.checkbox, input.permissions-checkbox { width: auto !important; background-color: transparent; border: none; - cursor: default; + cursor: pointer; } input.full, -- cgit v1.2.1 From 5aad71b22017dea39a4a549d4e3b1b939789c1ce Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Wed, 15 Feb 2012 18:46:27 +0200 Subject: [ticket/10652] Fixing typo in template class Fixing typo in template class that prevents template inheritance from working PHPBB3-10652 --- phpBB/includes/template/template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/template/template.php b/phpBB/includes/template/template.php index 43dec7dbf5..9297b759ac 100644 --- a/phpBB/includes/template/template.php +++ b/phpBB/includes/template/template.php @@ -128,7 +128,7 @@ class phpbb_template { $templates = array($template_name => $template_path); - if ($fallback_template_path !== false) + if ($fallback_template_name !== false) { $templates[$fallback_template_name] = $fallback_template_path; } -- cgit v1.2.1 From f17449e5ffb87c4a63e6c27c52036c5812f970d7 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sat, 4 Feb 2012 11:11:48 +0200 Subject: [feature/prosilver-cleanup/duplicate-colors] Removing duplicate colors Removing color values from files other than colours.css PHPBB3-10619 --- phpBB/styles/prosilver/theme/colours.css | 14 ++-- phpBB/styles/prosilver/theme/common.css | 100 ++++-------------------- phpBB/styles/prosilver/theme/content.css | 128 +++++-------------------------- phpBB/styles/prosilver/theme/cp.css | 100 ++++-------------------- phpBB/styles/prosilver/theme/forms.css | 48 ++---------- phpBB/styles/prosilver/theme/links.css | 55 +++---------- 6 files changed, 80 insertions(+), 365 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/colours.css b/phpBB/styles/prosilver/theme/colours.css index 7bc66f4e7d..f6826f8056 100644 --- a/phpBB/styles/prosilver/theme/colours.css +++ b/phpBB/styles/prosilver/theme/colours.css @@ -26,10 +26,6 @@ hr { border-top-color: #CCCCCC; } -hr.dashed { - border-top-color: #CCCCCC; -} - /* Search box --------------------------------------------- */ @@ -452,6 +448,10 @@ dl.faq dt { color: #BC2A4D; } +.announce, .unreadpost { + /* Highlight the announcements & unread posts box */ +} + /* Post signature */ .signature { border-top-color: #CCCCCC; @@ -963,7 +963,7 @@ dl.mini dt { /* Avatar gallery */ #gallery label { - background-color: #FFFFFF; + background: #FFFFFF; border-color: #CCC; } @@ -998,6 +998,10 @@ dd label { color: #333; } +fieldset.fields1 { + background-color: transparent; +} + /* Hover effects */ fieldset dl:hover dt label { color: #000000; diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 8b5e09297e..f59728447f 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -16,8 +16,6 @@ html { body { /* Text-Sizing with ems: http://www.clagnut.com/blog/348/ */ font-family: Verdana, Helvetica, Arial, sans-serif; - color: #828282; - background-color: #FFFFFF; /*font-size: 62.5%; This sets the default font size to be equivalent to 10px */ font-size: 10px; margin: 0; @@ -28,7 +26,6 @@ h1 { /* Forum name */ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; margin-right: 200px; - color: #FFFFFF; margin-top: 15px; font-weight: bold; font-size: 2em; @@ -38,7 +35,6 @@ h2 { /* Forum header titles */ font-family: "Trebuchet MS", Arial, Helvetica, sans-serif; font-weight: normal; - color: #3f3f3f; font-size: 2em; margin: 0.8em 0 0.2em 0; } @@ -52,11 +48,10 @@ h3 { font-family: Arial, Helvetica, sans-serif; font-weight: bold; text-transform: uppercase; - border-bottom: 1px solid #CCCCCC; + border-bottom: 1px solid transparent; margin-bottom: 3px; padding-bottom: 2px; font-size: 1.05em; - color: #989898; margin-top: 20px; } @@ -78,8 +73,8 @@ img { hr { /* Also see tweaks.css */ - border: 0 none #FFFFFF; - border-top: 1px solid #CCCCCC; + border: 0 solid transparent; + border-top-width: 1px; height: 1px; margin: 5px 0; display: block; @@ -87,7 +82,7 @@ hr { } hr.dashed { - border-top: 1px dashed #CCCCCC; + border-top-style: dashed; margin: 10px 0; } @@ -136,7 +131,6 @@ a#logo:hover { /* Search box --------------------------------------------- */ #search-box { - color: #FFFFFF; position: relative; margin-top: 30px; margin-right: 5px; @@ -148,11 +142,10 @@ a#logo:hover { #search-box #keywords { width: 95px; - background-color: #FFF; } #search-box input { - border: 1px solid #b0b0b0; + border: 1px solid transparent; } /* .button1 style defined later, just a few tweaks for the search button version */ @@ -183,26 +176,24 @@ a#logo:hover { /* Round cornered boxes and backgrounds ---------------------------------------- */ .headerbar { - background: #ebebeb none repeat-x 0 0; - color: #FFFFFF; + background: transparent none repeat-x 0 0; margin-bottom: 4px; padding: 0 5px; } .navbar { - background-color: #ebebeb; padding: 0 10px; } .forabg { - background: #b1b1b1 none repeat-x 0 0; + background: transparent none repeat-x 0 0; margin-bottom: 4px; padding: 0 5px; clear: both; } .forumbg { - background: #ebebeb none repeat-x 0 0; + background: transparent none repeat-x 0 0; margin-bottom: 4px; padding: 0 5px; clear: both; @@ -211,8 +202,6 @@ a#logo:hover { .panel { margin-bottom: 4px; padding: 0 10px; - background-color: #f3f3f3; - color: #3f3f3f; } .post { @@ -222,31 +211,10 @@ a#logo:hover { background-position: 100% 0; } -.post:target .content { - color: #000000; -} - -.post:target h3 a { - color: #000000; -} - -.bg1 { background-color: #f7f7f7;} -.bg2 { background-color: #f2f2f2; } -.bg3 { background-color: #ebebeb; } - .rowbg { margin: 5px 5px 2px 5px; } -.ucprowbg { - background-color: #e2e2e2; -} - -.fieldsbg { - /*border: 1px #DBDEE2 solid;*/ - background-color: #eaeaea; -} - span.corners-top, span.corners-bottom, span.corners-top span, span.corners-bottom span { font-size: 1px; line-height: 1px; @@ -321,7 +289,7 @@ ul.linklist li.rightside, p.rightside { ul.navlinks { padding-bottom: 1px; margin-bottom: 1px; - border-bottom: 1px solid #FFFFFF; + border-bottom: 1px solid transparent; font-weight: bold; } @@ -352,7 +320,6 @@ table.table1 { table.table1 thead th { font-weight: normal; text-transform: uppercase; - color: #FFFFFF; line-height: 1.3em; font-size: 1em; padding: 0 0 4px 3px; @@ -363,30 +330,22 @@ table.table1 thead th span { } table.table1 tbody tr { - border: 1px solid #cfcfcf; -} - -table.table1 tbody tr:hover, table.table1 tbody tr.hover { - background-color: #f6f6f6; - color: #000; + border: 1px solid transparent; } table.table1 td { - color: #6a6a6a; font-size: 1.1em; } table.table1 tbody td { padding: 5px; - border-top: 1px solid #FAFAFA; + border-top: 1px solid transparent; } table.table1 tbody th { padding: 5px; - border-bottom: 1px solid #000000; + border-bottom: 1px solid transparent; text-align: left; - color: #333333; - background-color: #FFFFFF; } /* Specific column styles */ @@ -413,7 +372,6 @@ table.info tbody th { padding: 3px; text-align: right; vertical-align: top; - color: #000000; font-weight: normal; } @@ -460,7 +418,6 @@ dl.details dt { clear: left; width: 30%; text-align: right; - color: #000000; display: block; } @@ -468,7 +425,6 @@ dl.details dd { margin-left: 0; padding-left: 5px; margin-bottom: 5px; - color: #828282; float: left; width: 65%; } @@ -499,28 +455,21 @@ li.pagination { padding: 0 2px; margin: 0 2px; font-weight: normal; - color: #FFFFFF; - background-color: #bfbfbf; - border: 1px solid #bfbfbf; + border: 1px solid transparent; font-size: 0.9em; } .pagination span a, .pagination span a:link, .pagination span a:visited, .pagination span a:active { font-weight: normal; text-decoration: none; - color: #747474; margin: 0 2px; padding: 0 2px; - background-color: #eeeeee; - border: 1px solid #bababa; + border: 1px solid transparent; font-size: 0.9em; line-height: 1.5em; } .pagination span a:hover { - border-color: #d2d2d2; - background-color: #d2d2d2; - color: #FFF; text-decoration: none; } @@ -539,14 +488,6 @@ li.pagination { background: none 0 50% no-repeat; } -.row .pagination span a, li.pagination span a { - background-color: #FFFFFF; -} - -.row .pagination span a:hover, li.pagination span a:hover { - background-color: #d2d2d2; -} - /* Miscellaneous styles ---------------------------------------- */ #forum-permissions { @@ -561,7 +502,6 @@ li.pagination { .copyright { padding: 5px; text-align: center; - color: #555555; } .small { @@ -577,22 +517,11 @@ li.pagination { } .error { - color: #bcbcbc; font-weight: bold; font-size: 1em; } -.reported { - background-color: #f7f7f7; -} - -li.reported:hover { - background-color: #ececec; -} - div.rules { - background-color: #ececec; - color: #bcbcbc; padding: 0 10px; margin: 10px 0; font-size: 1.1em; @@ -603,7 +532,6 @@ div.rules ul, div.rules ol { } p.rules { - background-color: #ececec; background-image: none; padding: 5px; } diff --git a/phpBB/styles/prosilver/theme/content.css b/phpBB/styles/prosilver/theme/content.css index adf5f2ca2a..b0872f78aa 100644 --- a/phpBB/styles/prosilver/theme/content.css +++ b/phpBB/styles/prosilver/theme/content.css @@ -8,13 +8,12 @@ ul.topiclist { } ul.forums { - background: #f9f9f9 none repeat-x 0 0; + background: transparent none repeat-x 0 0; } ul.topiclist li { display: block; list-style-type: none; - color: #777777; margin: 0; } @@ -38,7 +37,7 @@ ul.topiclist dt { ul.topiclist dd { display: block; float: left; - border-left: 1px solid #FFFFFF; + border-left: 1px solid transparent; padding: 4px 0; } @@ -65,28 +64,18 @@ ul.topiclist li.row dt a.subforum { } li.row { - border-top: 1px solid #FFFFFF; - border-bottom: 1px solid #8f8f8f; + border-top: 1px solid transparent; + border-bottom: 1px solid transparent; } li.row strong { font-weight: normal; - color: #000000; -} - -li.row:hover { - background-color: #f6f6f6; -} - -li.row:hover dd { - border-left-color: #CCCCCC; } li.header dt, li.header dd { line-height: 1em; border-left-width: 0; margin: 2px 0 4px 0; - color: #FFFFFF; padding-top: 2px; padding-bottom: 2px; font-size: 1em; @@ -205,7 +194,6 @@ ul.topiclist dd.searchextra { margin-left: 5px; padding: 0.2em 0; font-size: 1.1em; - color: #333333; border-left: none; clear: both; width: 98%; @@ -228,7 +216,6 @@ div[class].topic-actions { .postbody { padding: 0; line-height: 1.48em; - color: #333333; width: 76%; float: left; clear: both; @@ -320,14 +307,12 @@ div[class].topic-actions { line-height: 1.4em; font-family: "Lucida Grande", "Trebuchet MS", Verdana, Helvetica, Arial, sans-serif; font-size: 1em; - color: #333333; padding-bottom: 1px; } .content h2, .panel h2 { font-weight: normal; - color: #989898; - border-bottom: 1px solid #CCCCCC; + border-bottom: 1px solid transparent; font-size: 1.6em; margin-top: 0.5em; margin-bottom: 0.5em; @@ -361,7 +346,6 @@ dl.faq { dl.faq dt { font-weight: bold; - color: #333333; } .content dl.faq { @@ -379,17 +363,9 @@ dl.faq dt { } .posthilit { - background-color: #f3f3f3; - color: #BCBCBC; padding: 0 2px 1px 2px; } -.announce, .unreadpost { - /* Highlight the announcements & unread posts box */ - border-left-color: #BCBCBC; - border-right-color: #BCBCBC; -} - /* Post author */ p.author { margin: 0 15em 0.6em 0; @@ -404,7 +380,7 @@ p.author { margin-top: 1.5em; padding-top: 0.2em; font-size: 1.1em; - border-top: 1px solid #CCCCCC; + border-top: 1px solid transparent; clear: left; line-height: 140%; overflow: hidden; @@ -434,7 +410,7 @@ dd .signature { margin-top: 1.5em; padding-top: 0.2em; font-size: 1em; - border-top: 1px dashed #CCCCCC; + border-top: 1px dashed transparent; clear: left; line-height: 130%; } @@ -450,8 +426,8 @@ ul.searchresults { ----------------------------------------*/ /* Quote block */ blockquote { - background: #ebebeb none 6px 8px no-repeat; - border: 1px solid #dbdbdb; + background: transparent none 6px 8px no-repeat; + border: 1px solid transparent; font-size: 0.95em; margin: 0.5em 1px 0 25px; overflow: hidden; @@ -460,16 +436,10 @@ blockquote { blockquote blockquote { /* Nested quotes */ - background-color: #bababa; font-size: 1em; margin: 0.5em 1px 0 15px; } -blockquote blockquote blockquote { - /* Nested quotes */ - background-color: #e4e4e4; -} - blockquote cite { /* Username/source of quoter */ font-style: normal; @@ -490,14 +460,13 @@ blockquote.uncited { /* Code block */ dl.codebox { padding: 3px; - background-color: #FFFFFF; - border: 1px solid #d8d8d8; + border: 1px solid transparent; font-size: 1em; } dl.codebox dt { text-transform: uppercase; - border-bottom: 1px solid #CCCCCC; + border-bottom: 1px solid transparent; margin-bottom: 3px; font-size: 0.8em; font-weight: bold; @@ -518,17 +487,9 @@ dl.codebox code { padding-top: 5px; font: 0.9em Monaco, "Andale Mono","Courier New", Courier, mono; line-height: 1.3em; - color: #8b8b8b; margin: 2px 0; } -.syntaxbg { color: #FFFFFF; } -.syntaxcomment { color: #000000; } -.syntaxdefault { color: #bcbcbc; } -.syntaxhtml { color: #000000; } -.syntaxkeyword { color: #585858; } -.syntaxstring { color: #a7a7a7; } - /* Attachments ----------------------------------------*/ .attachbox { @@ -536,15 +497,10 @@ dl.codebox code { width: auto; margin: 5px 5px 5px 0; padding: 6px; - background-color: #FFFFFF; - border: 1px dashed #d8d8d8; + border: 1px dashed transparent; clear: left; } -.pm-message .attachbox { - background-color: #f3f3f3; -} - .attachbox dt { font-family: Arial, Helvetica, sans-serif; text-transform: uppercase; @@ -554,7 +510,7 @@ dl.codebox code { margin-top: 4px; padding-top: 4px; clear: left; - border-top: 1px solid #d8d8d8; + border-top: 1px solid transparent; } .attachbox dd dd { @@ -563,7 +519,6 @@ dl.codebox code { .attachbox p { line-height: 110%; - color: #666666; font-weight: normal; clear: left; } @@ -571,7 +526,6 @@ dl.codebox code { .attachbox p.stats { line-height: 110%; - color: #666666; font-weight: normal; clear: left; } @@ -584,7 +538,7 @@ dl.codebox code { } .attach-image img { - border: 1px solid #999999; + border: 1px solid transparent; /* cursor: move; */ cursor: default; } @@ -613,19 +567,16 @@ dl.file dt { } dl.file dd { - color: #666666; margin: 0; padding: 0; } dl.thumbnail img { padding: 3px; - border: 1px solid #666666; - background-color: #FFF; + border: 1px solid transparent; } dl.thumbnail dd { - color: #666666; font-style: italic; font-family: Verdana, Arial, Helvetica, sans-serif; } @@ -634,12 +585,8 @@ dl.thumbnail dd { font-size: 100%; } -dl.thumbnail dt a:hover { - background-color: #EEEEEE; -} - dl.thumbnail dt a:hover img { - border: 1px solid #d2d2d2; + border: 1px solid transparent; } /* Post poll styles @@ -650,15 +597,13 @@ fieldset.polls { fieldset.polls dl { margin-top: 5px; - border-top: 1px solid #e2e2e2; + border-top: 1px solid transparent; padding: 5px 0 0 0; line-height: 120%; - color: #666666; } fieldset.polls dl.voted { font-weight: bold; - color: #000000; } fieldset.polls dt { @@ -692,41 +637,15 @@ fieldset.polls dd input { fieldset.polls dd div { text-align: right; font-family: Arial, Helvetica, sans-serif; - color: #FFFFFF; font-weight: bold; padding: 0 2px; overflow: visible; min-width: 2%; } -.pollbar1 { - background-color: #aaaaaa; - border-bottom: 1px solid #747474; - border-right: 1px solid #747474; -} - -.pollbar2 { - background-color: #bebebe; - border-bottom: 1px solid #8c8c8c; - border-right: 1px solid #8c8c8c; -} - -.pollbar3 { - background-color: #D1D1D1; - border-bottom: 1px solid #aaaaaa; - border-right: 1px solid #aaaaaa; -} - -.pollbar4 { - background-color: #e4e4e4; - border-bottom: 1px solid #bebebe; - border-right: 1px solid #bebebe; -} - -.pollbar5 { - background-color: #f8f8f8; - border-bottom: 1px solid #D1D1D1; - border-right: 1px solid #D1D1D1; +.pollbar1, .pollbar2, .pollbar3, .pollbar4, .pollbar5 { + border-bottom: 1px solid transparent; + border-right: 1px solid transparent; } /* Poster profile block @@ -735,15 +654,11 @@ fieldset.polls dd div { /* Also see tweaks.css */ margin: 5px 0 10px 0; min-height: 80px; - color: #666666; - border-left: 1px solid #FFFFFF; + border-left: 1px solid transparent; width: 22%; float: right; display: inline; } -.pm .postprofile { - border-left: 1px solid #DDDDDD; -} .postprofile dd, .postprofile dt { line-height: 1.2em; @@ -752,7 +667,6 @@ fieldset.polls dd div { .postprofile strong { font-weight: normal; - color: #000000; } .avatar { diff --git a/phpBB/styles/prosilver/theme/cp.css b/phpBB/styles/prosilver/theme/cp.css index 708bfbaf83..62e8513733 100644 --- a/phpBB/styles/prosilver/theme/cp.css +++ b/phpBB/styles/prosilver/theme/cp.css @@ -20,10 +20,6 @@ padding: 0; } -#cp-main h3, #cp-main hr, #cp-menu hr { - border-color: #bfbfbf; -} - #cp-main .panel p { font-size: 1.1em; } @@ -34,17 +30,16 @@ } #cp-main .panel li.row { - border-bottom: 1px solid #cbcbcb; - border-top: 1px solid #F9F9F9; + border-bottom: 1px solid transparent; + border-top: 1px solid transparent; } ul.cplist { margin-bottom: 5px; - border-top: 1px solid #cbcbcb; + border-top: 1px solid transparent; } #cp-main .panel li.header dd, #cp-main .panel li.header dt { - color: #000000; margin-bottom: 2px; } @@ -53,9 +48,8 @@ ul.cplist { } #cp-main table.table1 thead th { - color: #333333; font-weight: bold; - border-bottom: 1px solid #333333; + border-bottom: 1px solid transparent; padding: 5px; } @@ -76,9 +70,8 @@ ul.cplist { } #cp-main .pm-message { - border: 1px solid #e2e2e2; + border: 1px solid transparent; margin: 10px 0; - background-color: #FFFFFF; width: auto; float: none; } @@ -141,23 +134,17 @@ ul.cplist { display: block; background: none no-repeat 100% -35px; padding: 6px 10px 6px 5px; - color: #828282; white-space: nowrap; } -#tabs a:hover span { - color: #bcbcbc; -} - #tabs .activetab a { background-position: 0 0; - border-bottom: 1px solid #ebebeb; + border-bottom: 1px solid transparent; } #tabs .activetab a span { background-position: 100% 0; padding-bottom: 7px; - color: #333333; } #tabs a:hover { @@ -173,7 +160,6 @@ ul.cplist { } #tabs .activetab a:hover span { - color: #000000; background-position: 100% 0; } @@ -196,7 +182,6 @@ ul.cplist { padding: 0 10px 4px 10px; font-size: 1em; font-weight: bold; - background-color: #f2f2f2; margin-left: 2px; } @@ -207,14 +192,6 @@ ul.cplist { text-decoration: none; } -#minitabs li.activetab { - background-color: #F9F9F9; -} - -#minitabs li.activetab a, #minitabs li.activetab a:hover { - color: #333333; -} - /* UCP navigation menu ----------------------------------------*/ /* Container for sub-navigation list */ @@ -242,43 +219,25 @@ ul.cplist { margin: 1px 0; text-decoration: none; font-weight: bold; - color: #333; - background: #cfcfcf none repeat-y 100% 0; + background: transparent none repeat-y 100% 0; } #navigation a:hover { text-decoration: none; - background-color: #c6c6c6; - color: #bcbcbc; background-image: none; } #navigation #active-subsection a { display: block; - color: #d3d3d3; - background-color: #F9F9F9; background-image: none; } -#navigation #active-subsection a:hover { - color: #d3d3d3; -} - /* Preferences pane layout ----------------------------------------*/ #cp-main h2 { border-bottom: none; padding: 0; margin-left: 10px; - color: #333333; -} - -#cp-main .panel { - background-color: #F9F9F9; -} - -#cp-main .pm { - background-color: #FFFFFF; } #cp-main span.corners-top, #cp-menu span.corners-top { @@ -316,7 +275,6 @@ ul.cplist { /* Friends list */ .cp-mini { - background-color: #f9f9f9; padding: 0 5px; margin: 10px 15px 10px 5px; } @@ -327,7 +285,6 @@ ul.cplist { dl.mini dt { font-weight: bold; - color: #676767; } dl.mini dd { @@ -352,7 +309,7 @@ dl.mini dd { .pm-panel-header { margin: 0; padding-bottom: 10px; - border-bottom: 1px dashed #A4B3BF; + border-bottom: 1px dashed transparent; } .reply-all { @@ -373,12 +330,7 @@ dl.mini dd { #cp-main .pm-message-nav { margin: 0; padding: 2px 10px 5px 10px; - border-bottom: 1px dashed #A4B3BF; -} - -/* PM Message history */ -.current { - color: #999999; + border-bottom: 1px dashed transparent; } /* Defined rules list for PM options */ @@ -401,31 +353,16 @@ ol.def-rules li { } .pmlist li.pm_message_reported_colour, .pm_message_reported_colour { - border-left-color: #bcbcbc; - border-right-color: #bcbcbc; -} - -.pmlist li.pm_marked_colour, .pm_marked_colour { - padding: 0; - border: solid 3px #ffffff; - border-width: 0 3px; -} - -.pmlist li.pm_replied_colour, .pm_replied_colour { - padding: 0; - border: solid 3px #c2c2c2; - border-width: 0 3px; -} - -.pmlist li.pm_friend_colour, .pm_friend_colour { - padding: 0; - border: solid 3px #bdbdbd; - border-width: 0 3px; + border-left-color: transparent; + border-right-color: transparent; } +.pmlist li.pm_marked_colour, .pm_marked_colour, +.pmlist li.pm_replied_colour, .pm_replied_colour, +.pmlist li.pm_friend_colour, .pm_friend_colour, .pmlist li.pm_foe_colour, .pm_foe_colour { padding: 0; - border: solid 3px #000000; + border: solid 3px transparent; border-width: 0 3px; } @@ -444,11 +381,6 @@ ol.def-rules li { margin: 10px; padding: 5px; width: auto; - background: #FFFFFF; - border: 1px solid #CCC; + border: 1px solid transparent; text-align: center; } - -#gallery label:hover { - background-color: #EEE; -} diff --git a/phpBB/styles/prosilver/theme/forms.css b/phpBB/styles/prosilver/theme/forms.css index 43888733cc..a381ecc04c 100644 --- a/phpBB/styles/prosilver/theme/forms.css +++ b/phpBB/styles/prosilver/theme/forms.css @@ -23,9 +23,8 @@ select { font-weight: normal; cursor: pointer; vertical-align: middle; - border: 1px solid #666666; + border: 1px solid transparent; padding: 1px; - background-color: #FAFAFA; font-size: 1em; } @@ -33,10 +32,6 @@ option { padding-right: 1em; } -option.disabled-option { - color: graytext; -} - textarea { font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; width: 60%; @@ -48,7 +43,6 @@ textarea { label { cursor: default; padding-right: 5px; - color: #676767; } label input { @@ -89,10 +83,6 @@ fieldset.fields1 dd { border-left-width: 0; } -fieldset.fields1 { - background-color: transparent; -} - fieldset.fields1 div { margin-bottom: 3px; } @@ -121,7 +111,6 @@ dt label { dd label { white-space: nowrap; - color: #333; } dd input, dd textarea { @@ -137,14 +126,6 @@ dd textarea { } /* Hover effects */ -fieldset dl:hover dt label { - color: #000000; -} - -fieldset.fields2 dl:hover dt label { - color: inherit; -} - #timezone { width: 95%; } @@ -166,7 +147,6 @@ fieldset.quick-login input.inputbox { width: 15%; vertical-align: middle; margin-right: 5px; - background-color: #f3f3f3; } fieldset.quick-login label { @@ -268,7 +248,6 @@ fieldset.submit-buttons input { min-width: 100%; max-width: 100%; font-size: 1.2em; - color: #333333; } /* Emoticons panel */ @@ -284,20 +263,13 @@ fieldset.submit-buttons input { /* Input field styles ---------------------------------------- */ .inputbox { - background-color: #FFFFFF; - border: 1px solid #c0c0c0; - color: #333333; + border: 1px solid transparent; padding: 2px; cursor: text; } -.inputbox:hover { - border: 1px solid #eaeaea; -} - -.inputbox:focus { - border: 1px solid #eaeaea; - color: #4b4b4b; +.inputbox:hover, .inputbox:focus { + border: 1px solid transparent; } input.inputbox { width: 85%; } @@ -324,13 +296,12 @@ a.button1, input.button1, input.button3, a.button2, input.button2 { padding-top: 1px; padding-bottom: 1px; font-family: "Lucida Grande", Verdana, Helvetica, Arial, sans-serif; - color: #000; - background: #FAFAFA none repeat-x top left; + background: transparent none repeat-x top left; } a.button1, input.button1 { font-weight: bold; - border: 1px solid #666666; + border: 1px solid transparent; } input.button3 { @@ -344,13 +315,12 @@ input.button3 { /* Alternative button */ a.button2, input.button2, input.button3 { - border: 1px solid #666666; + border: 1px solid transparent; } /* button in the style of the form buttons */ a.button1, a.button1:link, a.button1:visited, a.button1:active, a.button2, a.button2:link, a.button2:visited, a.button2:active { text-decoration: none; - color: #000000; padding: 2px 8px; line-height: 250%; vertical-align: text-bottom; @@ -359,14 +329,12 @@ a.button1, a.button1:link, a.button1:visited, a.button1:active, a.button2, a.but /* Hover states */ a.button1:hover, input.button1:hover, a.button2:hover, input.button2:hover, input.button3:hover { - border: 1px solid #BCBCBC; + border: 1px solid transparent; background-position: 0 100%; - color: #BCBCBC; } input.disabled { font-weight: normal; - color: #666666; } /* Topic and forum Search */ diff --git a/phpBB/styles/prosilver/theme/links.css b/phpBB/styles/prosilver/theme/links.css index c6a7cb4559..3cb6e928b5 100644 --- a/phpBB/styles/prosilver/theme/links.css +++ b/phpBB/styles/prosilver/theme/links.css @@ -7,10 +7,17 @@ a { unicode-bidi: embed; } -a:link { color: #898989; text-decoration: none; } -a:visited { color: #898989; text-decoration: none; } -a:hover { color: #d3d3d3; text-decoration: underline; } -a:active { color: #d2d2d2; text-decoration: none; } +a:link, a:visited { + text-decoration: none; +} + +a:hover { + text-decoration: underline; +} + +a:active { + text-decoration: none; +} /* Coloured usernames */ .username-coloured { @@ -21,22 +28,18 @@ a:active { color: #d2d2d2; text-decoration: none; } /* Links on gradient backgrounds */ #search-box a:link, .navbg a:link, .forumbg .header a:link, .forabg .header a:link, th a:link { - color: #FFFFFF; text-decoration: none; } #search-box a:visited, .navbg a:visited, .forumbg .header a:visited, .forabg .header a:visited, th a:visited { - color: #FFFFFF; text-decoration: none; } #search-box a:hover, .navbg a:hover, .forumbg .header a:hover, .forabg .header a:hover, th a:hover { - color: #ffffff; text-decoration: underline; } #search-box a:active, .navbg a:active, .forumbg .header a:active, .forabg .header a:active, th a:active { - color: #ffffff; text-decoration: none; } @@ -45,96 +48,65 @@ a.forumtitle { font-family: "Trebuchet MS", Helvetica, Arial, Sans-serif; font-size: 1.2em; font-weight: bold; - color: #898989; text-decoration: none; } -/* a.forumtitle:visited { color: #898989; } */ - a.forumtitle:hover { - color: #bcbcbc; text-decoration: underline; } -a.forumtitle:active { - color: #898989; -} - a.topictitle { font-family: "Trebuchet MS", Helvetica, Arial, Sans-serif; font-size: 1.2em; font-weight: bold; - color: #898989; text-decoration: none; } -/* a.topictitle:visited { color: #d2d2d2; } */ - a.topictitle:hover { - color: #bcbcbc; text-decoration: underline; } -a.topictitle:active { - color: #898989; -} - /* Post body links */ .postlink { text-decoration: none; - color: #d2d2d2; - border-bottom: 1px solid #d2d2d2; + border-bottom: 1px solid transparent; padding-bottom: 0; } -/* .postlink:visited { color: #bdbdbd; } */ - -.postlink:active { - color: #d2d2d2; -} - .postlink:hover { - background-color: #f6f6f6; text-decoration: none; - color: #404040; } .signature a, .signature a:visited, .signature a:hover, .signature a:active { border: none; text-decoration: underline; - background-color: transparent; } /* Profile links */ .postprofile a:link, .postprofile a:visited, .postprofile dt.author a { font-weight: bold; - color: #898989; text-decoration: none; } .postprofile a:hover, .postprofile dt.author a:hover { text-decoration: underline; - color: #d3d3d3; } /* CSS spec requires a:link, a:visited, a:hover and a:active rules to be specified in this order. */ /* See http://www.phpbb.com/bugs/phpbb3/59685 */ .postprofile a:active { font-weight: bold; - color: #898989; text-decoration: none; } /* Profile searchresults */ .search .postprofile a { - color: #898989; text-decoration: none; font-weight: normal; } .search .postprofile a:hover { - color: #d3d3d3; text-decoration: underline; } @@ -177,7 +149,6 @@ a.up, a.up:link, a.up:active, a.up:visited { a.up:hover { background-position: left top; - background-color: transparent; } a.down, a.down:link, a.down:active, a.down:visited { @@ -194,7 +165,6 @@ a.left, a.left:active, a.left:visited { } a.left:hover { - color: #d2d2d2; text-decoration: none; background-position: 0 60%; } @@ -204,7 +174,6 @@ a.right, a.right:active, a.right:visited { } a.right:hover { - color: #d2d2d2; text-decoration: none; background-position: 100% 60%; } -- cgit v1.2.1 From 17f5c6bf71f560be2f4e2ecabae83ab2973bec47 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 18 Feb 2012 12:00:12 +0100 Subject: [ticket/10605] Check for orphan privmsgs when deleting a user Also moved the hole code into a new function. PHPBB3-10605 --- phpBB/includes/functions_privmsgs.php | 116 ++++++++++++++++++++++++++++++++++ phpBB/includes/functions_user.php | 58 ++--------------- 2 files changed, 120 insertions(+), 54 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php index c40ceb088f..30cff8ed72 100644 --- a/phpBB/includes/functions_privmsgs.php +++ b/phpBB/includes/functions_privmsgs.php @@ -1083,6 +1083,122 @@ function delete_pm($user_id, $msg_ids, $folder_id) return true; } +/** +* Delete all PM(s) for a given user and delete the ones without references +*/ +function delete_user_pms($user_id) +{ + global $db, $user, $phpbb_root_path, $phpEx; + + $user_id = (int) $user_id; + + if (!$user_id) + { + return false; + } + + // Get PM Information for later deleting + $sql = 'SELECT msg_id, author_id, folder_id, pm_unread, pm_new + FROM ' . PRIVMSGS_TO_TABLE . ' + WHERE user_id = ' . $user_id . ' + OR (author_id = ' . $user_id . ' + AND folder_id = ' . PRIVMSGS_NO_BOX . ')'; + $result = $db->sql_query($sql); + + $undelivered_msg = $undelivered_user = $delete_rows = array(); + $num_unread = $num_new = $num_deleted = 0; + while ($row = $db->sql_fetchrow($result)) + { + if ($row['author_id'] == $user_id && $row['folder_id'] == PRIVMSGS_NO_BOX) + { + // Undelivered messages + $undelivered_msg[] = $row['msg_id']; + $undelivered_user[$row['user_id']][] = true; + } + + $delete_rows[$row['msg_id']] = 1; + } + $db->sql_freeresult($result); + + if (!sizeof($delete_rows)) + { + return false; + } + + $db->sql_transaction('begin'); + + if (sizeof($undelivered_msg)) + { + $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' + WHERE ' . $db->sql_in_set('msg_id', $undelivered_msg); + $db->sql_query($sql); + } + + foreach ($undelivered_user as $_user_id => $ary) + { + if ($_user_id == $user_id) + { + continue; + } + + $sql = 'UPDATE ' . USERS_TABLE . ' + SET user_new_privmsg = user_new_privmsg - ' . sizeof($ary) . ', + user_unread_privmsg = user_unread_privmsg - ' . sizeof($ary) . ' + WHERE user_id = ' . $_user_id; + $db->sql_query($sql); + } + + // Delete private message data + $sql = 'DELETE FROM ' . PRIVMSGS_TO_TABLE . " + WHERE user_id = $user_id + AND " . $db->sql_in_set('msg_id', array_keys($delete_rows)); + $db->sql_query($sql); + + // Now we have to check which messages we can delete completely + $sql = 'SELECT msg_id + FROM ' . PRIVMSGS_TO_TABLE . ' + WHERE ' . $db->sql_in_set('msg_id', array_keys($delete_rows)); + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) + { + unset($delete_rows[$row['msg_id']]); + } + $db->sql_freeresult($result); + + $delete_ids = array_keys($delete_rows); + + if (sizeof($delete_ids)) + { + // Check if there are any attachments we need to remove + if (!function_exists('delete_attachments')) + { + include($phpbb_root_path . 'includes/functions_admin.' . $phpEx); + } + + delete_attachments('message', $delete_ids, false); + + $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' + WHERE ' . $db->sql_in_set('msg_id', $delete_ids); + $db->sql_query($sql); + } + + // Set the remaining author id to anonymous - this way users are still able to read messages from users being removed + $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . ' + SET author_id = ' . ANONYMOUS . ' + WHERE author_id = ' . $user_id; + $db->sql_query($sql); + + $sql = 'UPDATE ' . PRIVMSGS_TABLE . ' + SET author_id = ' . ANONYMOUS . ' + WHERE author_id = ' . $user_id; + $db->sql_query($sql); + + $db->sql_transaction('commit'); + + return true; +} + /** * Rebuild message header */ diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 6b5cca8abb..20923ea495 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -528,62 +528,12 @@ function user_delete($mode, $user_id, $post_username = false) WHERE session_user_id = ' . $user_id; $db->sql_query($sql); - // Remove any undelivered mails... - $sql = 'SELECT msg_id, user_id - FROM ' . PRIVMSGS_TO_TABLE . ' - WHERE author_id = ' . $user_id . ' - AND folder_id = ' . PRIVMSGS_NO_BOX; - $result = $db->sql_query($sql); - - $undelivered_msg = $undelivered_user = array(); - while ($row = $db->sql_fetchrow($result)) - { - $undelivered_msg[] = $row['msg_id']; - $undelivered_user[$row['user_id']][] = true; - } - $db->sql_freeresult($result); - - if (sizeof($undelivered_msg)) + // Clean the private messages tables from the user + if (!function_exists('delete_user_pms')) { - $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' - WHERE ' . $db->sql_in_set('msg_id', $undelivered_msg); - $db->sql_query($sql); - } - - $sql = 'DELETE FROM ' . PRIVMSGS_TO_TABLE . ' - WHERE author_id = ' . $user_id . ' - AND folder_id = ' . PRIVMSGS_NO_BOX; - $db->sql_query($sql); - - // Delete all to-information - $sql = 'DELETE FROM ' . PRIVMSGS_TO_TABLE . ' - WHERE user_id = ' . $user_id; - $db->sql_query($sql); - - // Set the remaining author id to anonymous - this way users are still able to read messages from users being removed - $sql = 'UPDATE ' . PRIVMSGS_TO_TABLE . ' - SET author_id = ' . ANONYMOUS . ' - WHERE author_id = ' . $user_id; - $db->sql_query($sql); - - $sql = 'UPDATE ' . PRIVMSGS_TABLE . ' - SET author_id = ' . ANONYMOUS . ' - WHERE author_id = ' . $user_id; - $db->sql_query($sql); - - foreach ($undelivered_user as $_user_id => $ary) - { - if ($_user_id == $user_id) - { - continue; - } - - $sql = 'UPDATE ' . USERS_TABLE . ' - SET user_new_privmsg = user_new_privmsg - ' . sizeof($ary) . ', - user_unread_privmsg = user_unread_privmsg - ' . sizeof($ary) . ' - WHERE user_id = ' . $_user_id; - $db->sql_query($sql); + include($phpbb_root_path . 'includes/functions_privmsgs.' . $phpEx); } + delete_user_pms($user_id); $db->sql_transaction('commit'); -- cgit v1.2.1 From 162f9b738aaa74684ea42e3ce4d6a911a183a996 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sat, 18 Feb 2012 16:35:43 +0200 Subject: [feature/purge-cache] Allow all admins to purge cache Allow all administrators to purge cache PHPBB3-10659 --- phpBB/adm/style/acp_main.html | 3 ++- phpBB/includes/acp/acp_main.php | 5 ----- 2 files changed, 2 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_main.html b/phpBB/adm/style/acp_main.html index 11f7fedd38..63ca3a1c79 100644 --- a/phpBB/adm/style/acp_main.html +++ b/phpBB/adm/style/acp_main.html @@ -194,13 +194,14 @@
    + +

    {L_PURGE_CACHE_EXPLAIN}
    - diff --git a/phpBB/includes/acp/acp_main.php b/phpBB/includes/acp/acp_main.php index b30c294ce2..7cdf734973 100644 --- a/phpBB/includes/acp/acp_main.php +++ b/phpBB/includes/acp/acp_main.php @@ -330,11 +330,6 @@ class acp_main break; case 'purge_cache': - if ((int) $user->data['user_type'] !== USER_FOUNDER) - { - trigger_error($user->lang['NO_AUTH_OPERATION'] . adm_back_link($this->u_action), E_USER_WARNING); - } - global $cache; $cache->purge(); -- cgit v1.2.1 From 11c5a6621389af854170d3190432d3f414c77618 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 18 Feb 2012 23:31:31 +0100 Subject: [ticket/10658] Use get_user_rank() for group ranks on group view. The old code was buggy because it did not prefix the path with the phpBB root path which causes problems with bridges and other URL rewriting. PHPBB3-10658 --- phpBB/memberlist.php | 15 +++++---------- 1 file changed, 5 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index b3c0bae16a..cfa1631dbe 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -1221,21 +1221,16 @@ switch ($mode) // Misusing the avatar function for displaying group avatars... $avatar_img = get_user_avatar($group_row['group_avatar'], $group_row['group_avatar_type'], $group_row['group_avatar_width'], $group_row['group_avatar_height'], 'GROUP_AVATAR'); + // ... same for group rank $rank_title = $rank_img = $rank_img_src = ''; if ($group_row['group_rank']) { - if (isset($ranks['special'][$group_row['group_rank']])) + get_user_rank($group_row['group_rank'], false, $rank_title, $rank_img, $rank_img_src); + + if ($rank_img) { - $rank_title = $ranks['special'][$group_row['group_rank']]['rank_title']; + $rank_img .= '
    '; } - $rank_img = (!empty($ranks['special'][$group_row['group_rank']]['rank_image'])) ? '' . $ranks['special'][$group_row['group_rank']]['rank_title'] . '
    ' : ''; - $rank_img_src = (!empty($ranks['special'][$group_row['group_rank']]['rank_image'])) ? $config['ranks_path'] . '/' . $ranks['special'][$group_row['group_rank']]['rank_image'] : ''; - } - else - { - $rank_title = ''; - $rank_img = ''; - $rank_img_src = ''; } $template->assign_vars(array( -- cgit v1.2.1 From c3265c913817e5e774d30993c181d70e853b60d4 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 20 Feb 2012 01:52:33 +0100 Subject: [ticket/10639] Do not allow negative post count as rank's minimum posts PHPBB3-10639 --- phpBB/includes/acp/acp_ranks.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_ranks.php b/phpBB/includes/acp/acp_ranks.php index dfd7511427..ea057cd84c 100644 --- a/phpBB/includes/acp/acp_ranks.php +++ b/phpBB/includes/acp/acp_ranks.php @@ -52,7 +52,7 @@ class acp_ranks } $rank_title = utf8_normalize_nfc(request_var('title', '', true)); $special_rank = request_var('special_rank', 0); - $min_posts = ($special_rank) ? 0 : request_var('min_posts', 0); + $min_posts = ($special_rank) ? 0 : max(0, request_var('min_posts', 0)); $rank_image = request_var('rank_image', ''); // The rank image has to be a jpg, gif or png -- cgit v1.2.1 From afcf9cbc8617462853d3b42e4dfc9f1f46051e79 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 20 Feb 2012 02:14:23 +0100 Subject: [ticket/10630] Perform array_unique on authors array before creating the query This is needed to avoid an additional appearance for an author for every post he made. PHPBB3-10630 --- phpBB/includes/search/fulltext_mysql.php | 2 +- phpBB/includes/search/fulltext_native.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_mysql.php b/phpBB/includes/search/fulltext_mysql.php index 29cdd8ee9a..52372a14d8 100644 --- a/phpBB/includes/search/fulltext_mysql.php +++ b/phpBB/includes/search/fulltext_mysql.php @@ -707,7 +707,7 @@ class fulltext_mysql extends search_backend */ function index_remove($post_ids, $author_ids, $forum_ids) { - $this->destroy_cache(array(), $author_ids); + $this->destroy_cache(array(), array_unique($author_ids)); } /** diff --git a/phpBB/includes/search/fulltext_native.php b/phpBB/includes/search/fulltext_native.php index 727e3aaffb..b63205fd76 100644 --- a/phpBB/includes/search/fulltext_native.php +++ b/phpBB/includes/search/fulltext_native.php @@ -1334,7 +1334,7 @@ class fulltext_native extends search_backend $db->sql_query($sql); } - $this->destroy_cache(array_unique($word_texts), $author_ids); + $this->destroy_cache(array_unique($word_texts), array_unique($author_ids)); } /** -- cgit v1.2.1 From ef154b78a169402e7f968cd2189b69b041a73543 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 20 Feb 2012 02:16:41 +0100 Subject: [ticket/10630] Use sql_like_expression() method instead of hardcoded LIKE '%x%' PHPBB3-10630 --- phpBB/includes/search/search.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/search.php b/phpBB/includes/search/search.php index 2f20d11495..df7c8a0892 100644 --- a/phpBB/includes/search/search.php +++ b/phpBB/includes/search/search.php @@ -295,7 +295,7 @@ class search_backend $sql_where = ''; foreach ($authors as $author) { - $sql_where .= (($sql_where) ? ' OR ' : '') . 'search_authors LIKE \'% ' . (int) $author . ' %\''; + $sql_where .= (($sql_where) ? ' OR ' : '') . 'search_authors ' . $db->sql_like_expression($db->any_char . ' ' . (int) $author . ' ' . $db->any_char); } $sql = 'SELECT search_key -- cgit v1.2.1 From cd5c01ac2da2ec316e997e8850e1b2d326191e56 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 21 Feb 2012 11:10:10 +0100 Subject: [ticket/9089] Add tabindex to PM recipient box, to allow tabbing to the subject I also added tabindex 1 to the buttons for adding the recipients. Also note, that duplicated tabindex are fine: http://www.w3.org/TR/html4/interact/forms.html#adef-tabindex PHPBB3-9089 --- phpBB/styles/prosilver/template/posting_editor.html | 6 +++--- phpBB/styles/subsilver2/template/ucp_header.html | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/posting_editor.html b/phpBB/styles/prosilver/template/posting_editor.html index 5f7fb8408e..e7c1dc21eb 100644 --- a/phpBB/styles/prosilver/template/posting_editor.html +++ b/phpBB/styles/prosilver/template/posting_editor.html @@ -37,10 +37,10 @@
    -
    +
    {L_FIND_USERNAME}
    -
    -
    +
    +
    diff --git a/phpBB/styles/subsilver2/template/ucp_header.html b/phpBB/styles/subsilver2/template/ucp_header.html index ea64dcb299..1566a15929 100644 --- a/phpBB/styles/subsilver2/template/ucp_header.html +++ b/phpBB/styles/subsilver2/template/ucp_header.html @@ -26,7 +26,7 @@ {L_USERNAMES}: -
    +
    [ {L_FIND_USERNAME} ] @@ -41,7 +41,7 @@ -
      
      
    +
      
      
    -- cgit v1.2.1 From 340a8f19d687efab84de9335e7c40cabeef90acf Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 21 Feb 2012 11:25:22 +0100 Subject: [ticket/10456] Add tabindex to subsilver2 captcha Did not set tabindex on registration page, as the hole page does not have any. PHPBB3-10456 --- phpBB/styles/subsilver2/template/captcha_default.html | 2 +- phpBB/styles/subsilver2/template/captcha_qa.html | 2 +- phpBB/styles/subsilver2/template/login_body.html | 2 +- phpBB/styles/subsilver2/template/posting_body.html | 1 + 4 files changed, 4 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/captcha_default.html b/phpBB/styles/subsilver2/template/captcha_default.html index 4c65f81643..e2edf0b810 100644 --- a/phpBB/styles/subsilver2/template/captcha_default.html +++ b/phpBB/styles/subsilver2/template/captcha_default.html @@ -12,6 +12,6 @@ {L_CONFIRM_CODE}:
    {L_CONFIRM_CODE_EXPLAIN} - + tabindex="{$CAPTCHA_TAB_INDEX}" /> diff --git a/phpBB/styles/subsilver2/template/captcha_qa.html b/phpBB/styles/subsilver2/template/captcha_qa.html index 23d2a92f68..acc9cdcdfb 100644 --- a/phpBB/styles/subsilver2/template/captcha_qa.html +++ b/phpBB/styles/subsilver2/template/captcha_qa.html @@ -3,6 +3,6 @@ {QA_CONFIRM_QUESTION}:
    {L_CONFIRM_QUESTION_EXPLAIN} - + tabindex="{$CAPTCHA_TAB_INDEX}" /> diff --git a/phpBB/styles/subsilver2/template/login_body.html b/phpBB/styles/subsilver2/template/login_body.html index 262341e0c0..ba316517a9 100644 --- a/phpBB/styles/subsilver2/template/login_body.html +++ b/phpBB/styles/subsilver2/template/login_body.html @@ -68,7 +68,7 @@ - + diff --git a/phpBB/styles/subsilver2/template/posting_body.html b/phpBB/styles/subsilver2/template/posting_body.html index fec6d7ff6c..d7947caf2f 100644 --- a/phpBB/styles/subsilver2/template/posting_body.html +++ b/phpBB/styles/subsilver2/template/posting_body.html @@ -333,6 +333,7 @@ + -- cgit v1.2.1 From 41870c40954bdd0faad2ce4b01fb416a03eed4e0 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Tue, 21 Feb 2012 18:32:08 +0100 Subject: [ticket/10663] Extension finder should not find subdirs with directory filter The directory filter pattern now has a $ in the end, do avoid subdirectories from being matched as well. PHPBB3-10663 --- phpBB/includes/extension/finder.php | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index e5e5e4983e..23b9f1c658 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -375,6 +375,10 @@ class phpbb_extension_finder { $directory_pattern = preg_quote(DIRECTORY_SEPARATOR . str_replace('/', DIRECTORY_SEPARATOR, $directory) . DIRECTORY_SEPARATOR, '#'); } + if ($is_dir) + { + $directory_pattern .= '$'; + } $directory_pattern = '#' . $directory_pattern . '#'; $iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator($path), RecursiveIteratorIterator::SELF_FIRST); -- cgit v1.2.1 From 8e1e48a7b69b78e10297869e3aaf224e5c12e493 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 23 Feb 2012 10:55:57 +0100 Subject: [ticket/8636] Add resync option to topic_view moderation page PHPBB3-8636 --- phpBB/includes/mcp/mcp_topic.php | 11 +++++++++++ phpBB/styles/prosilver/template/mcp_topic.html | 1 + phpBB/styles/subsilver2/template/mcp_topic.html | 1 + 3 files changed, 13 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/mcp/mcp_topic.php b/phpBB/includes/mcp/mcp_topic.php index d7cc1e795a..7d4edaf362 100644 --- a/phpBB/includes/mcp/mcp_topic.php +++ b/phpBB/includes/mcp/mcp_topic.php @@ -50,6 +50,16 @@ function mcp_topic_view($id, $mode, $action) $submitted_id_list = request_var('post_ids', array(0)); $checked_ids = $post_id_list = request_var('post_id_list', array(0)); + // Resync Topic? + if ($action == 'resync') + { + if (!function_exists('mcp_resync_topics')) + { + include($phpbb_root_path . 'includes/mcp/mcp_forum.' . $phpEx); + } + mcp_resync_topics(array($topic_id)); + } + // Split Topic? if ($action == 'split_all' || $action == 'split_beyond') { @@ -320,6 +330,7 @@ function mcp_topic_view($id, $mode, $action) 'S_CAN_APPROVE' => ($has_unapproved_posts && $auth->acl_get('m_approve', $topic_info['forum_id'])) ? true : false, 'S_CAN_LOCK' => ($auth->acl_get('m_lock', $topic_info['forum_id'])) ? true : false, 'S_CAN_REPORT' => ($auth->acl_get('m_report', $topic_info['forum_id'])) ? true : false, + 'S_CAN_SYNC' => $auth->acl_get('m_', $topic_info['forum_id']), 'S_REPORT_VIEW' => ($action == 'reports') ? true : false, 'S_MERGE_VIEW' => ($action == 'merge') ? true : false, 'S_SPLIT_VIEW' => ($action == 'split') ? true : false, diff --git a/phpBB/styles/prosilver/template/mcp_topic.html b/phpBB/styles/prosilver/template/mcp_topic.html index a4d2a0f600..2a5f52f038 100644 --- a/phpBB/styles/prosilver/template/mcp_topic.html +++ b/phpBB/styles/prosilver/template/mcp_topic.html @@ -158,6 +158,7 @@ onload_functions.push('subPanels()'); +   diff --git a/phpBB/styles/subsilver2/template/mcp_topic.html b/phpBB/styles/subsilver2/template/mcp_topic.html index 13865d26ee..f9f9382ff2 100644 --- a/phpBB/styles/subsilver2/template/mcp_topic.html +++ b/phpBB/styles/subsilver2/template/mcp_topic.html @@ -135,6 +135,7 @@ +  
    -- cgit v1.2.1 From 30c08bfe5bcfa9e9a62cf8a018dd32d2a7e11b81 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 23 Feb 2012 16:25:47 +0100 Subject: [ticket/10458] Fix xHTML errors when print-viewing PMs PHPBB3-10458 --- phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html b/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html index e72d9bba6e..bafb64dbc8 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html +++ b/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html @@ -1,10 +1,7 @@ - - - - + @@ -16,7 +13,7 @@
    - + diff --git a/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html b/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html index 79c2c0355f..1840732b64 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html +++ b/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html @@ -2,7 +2,7 @@ -
    +
    diff --git a/phpBB/styles/prosilver/theme/cp.css b/phpBB/styles/prosilver/theme/cp.css index e28887d60f..aed88831a8 100644 --- a/phpBB/styles/prosilver/theme/cp.css +++ b/phpBB/styles/prosilver/theme/cp.css @@ -358,7 +358,7 @@ dl.mini dd { } .reply-all { - font-size: 11px; + font-size: 11px; padding-top: 5px; } -- cgit v1.2.1 From 45f39c6d1f2adc318d521bd9eb75d80f0750fdb8 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 18 Feb 2012 12:16:21 +0100 Subject: [ticket/10605] Delete orphan private messages on update PHPBB3-10605 --- phpBB/install/database_update.php | 42 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index a1b7dcd47f..b6298ca651 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -2024,6 +2024,48 @@ function change_database_data(&$no_updates, $version) // No changes from 3.0.10-RC3 to 3.0.10 case '3.0.10-RC3': break; + + // Changes from 3.0.10 to 3.0.11-RC1 + case '3.0.10': + // Delete orphan private messages + $batch_size = 500; + + $sql_array = array( + 'SELECT' => 'p.msg_id', + 'FROM' => array( + PRIVMSGS_TABLE => 'p', + ), + 'LEFT_JOIN' => array( + array( + 'FROM' => array(PRIVMSGS_TO_TABLE, 't'), + 'ON' => 'p.msg_id = t.msg_id', + ), + ), + 'WHERE' => 't.user_id IS NULL'; + $sql = $db->sql_build_query('SELECT', $sql_array); + + do + { + $result = $db->sql_query_limit($sql, $batch_size); + + $delete_pms = array(); + while ($row = $db->sql_fetchrow($result)) + { + $delete_pms[] = (int) $row['msg_id']; + } + $db->sql_freeresult($result); + + if (!empty($delete_pms)) + { + $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' + WHERE ' . $db->sql_in_set('msg_id', $delete_pms); + $db->sql_query($sql); + } + } + while (sizeof($delete_pms) == $batch_size); + + $no_updates = false; + break; } } -- cgit v1.2.1 From d3091da5eade90aac1b13244d04bd1fb342bcc59 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 21 Feb 2012 01:08:04 +0100 Subject: [ticket/9220] Remove margin on table.table1 so it's centered in the blue box. The problem here was, that we use width: 100% in combination with the negative margin. This causes the element to be just moved to the side, so it's not centered anymore. width: auto would fix this, but it causes strange behaviour on IE and looks even more ugly. So I decided to just remove the margin at all. The border is now 1px thicker for all sides. PHPBB3-9220 --- phpBB/styles/prosilver/template/memberlist_body.html | 2 +- phpBB/styles/prosilver/template/memberlist_leaders.html | 4 ++-- phpBB/styles/prosilver/template/search_body.html | 2 +- phpBB/styles/prosilver/template/viewonline_body.html | 2 +- phpBB/styles/prosilver/theme/common.css | 14 +++++++++++++- phpBB/styles/prosilver/theme/tweaks.css | 4 ---- 6 files changed, 18 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/memberlist_body.html b/phpBB/styles/prosilver/template/memberlist_body.html index 9e6f8c3aab..5ea774bf06 100644 --- a/phpBB/styles/prosilver/template/memberlist_body.html +++ b/phpBB/styles/prosilver/template/memberlist_body.html @@ -80,7 +80,7 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/memberlist_leaders.html b/phpBB/styles/prosilver/template/memberlist_leaders.html index 3917498050..26e299d261 100644 --- a/phpBB/styles/prosilver/template/memberlist_leaders.html +++ b/phpBB/styles/prosilver/template/memberlist_leaders.html @@ -4,7 +4,7 @@ -
    +
    @@ -37,7 +37,7 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/search_body.html b/phpBB/styles/prosilver/template/search_body.html index 6616b95a73..4b1d30d77d 100644 --- a/phpBB/styles/prosilver/template/search_body.html +++ b/phpBB/styles/prosilver/template/search_body.html @@ -98,7 +98,7 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/viewonline_body.html b/phpBB/styles/prosilver/template/viewonline_body.html index b111d743f9..3f1f0e64bf 100644 --- a/phpBB/styles/prosilver/template/viewonline_body.html +++ b/phpBB/styles/prosilver/template/viewonline_body.html @@ -7,7 +7,7 @@ -
    +
    diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 8b5e09297e..7eb00bd808 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -418,7 +418,19 @@ table.info tbody th { } .forumbg table.table1 { - margin: 0 -2px -1px -1px; + margin: 0; +} + +.forumbg-table > .inner { + margin: 0 -1px; +} + +.forumbg-table > .inner > span.corners-top { + margin: 0 -4px -1px -4px; +} + +.forumbg-table > .inner > span.corners-bottom { + margin: -1px -4px 0 -4px; } /* Misc layout styles diff --git a/phpBB/styles/prosilver/theme/tweaks.css b/phpBB/styles/prosilver/theme/tweaks.css index f7322c2cce..5e11b2122b 100644 --- a/phpBB/styles/prosilver/theme/tweaks.css +++ b/phpBB/styles/prosilver/theme/tweaks.css @@ -87,10 +87,6 @@ dl.icon { float: none; } -* html .forumbg table.table1 { - margin: 0 -2px 0px -1px; -} - /* Headerbar height fix for IE7 and below */ * html #site-description p { margin-bottom: 1.0em; -- cgit v1.2.1 From 17dc8c6c5c0e651a305961fae579c59d09abf88d Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 27 Feb 2012 17:16:42 +0100 Subject: [ticket/9089] Add tabindex to pm/topic/post icon-options aswell PHPBB3-9089 --- phpBB/styles/prosilver/template/posting_editor.html | 4 ++-- phpBB/styles/subsilver2/template/posting_body.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/posting_editor.html b/phpBB/styles/prosilver/template/posting_editor.html index e7c1dc21eb..67ba74a690 100644 --- a/phpBB/styles/prosilver/template/posting_editor.html +++ b/phpBB/styles/prosilver/template/posting_editor.html @@ -87,8 +87,8 @@
    - - + +
    diff --git a/phpBB/styles/subsilver2/template/posting_body.html b/phpBB/styles/subsilver2/template/posting_body.html index fec6d7ff6c..dbdf6b230c 100644 --- a/phpBB/styles/subsilver2/template/posting_body.html +++ b/phpBB/styles/subsilver2/template/posting_body.html @@ -127,7 +127,7 @@
    -- cgit v1.2.1 From 5924bc1d027b427e4bc5df78bbac617e006d3633 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 27 Feb 2012 19:13:31 +0100 Subject: [ticket/10672] Fix total post count language string in statistics and feed PHPBB3-10672 --- phpBB/feed.php | 2 +- phpBB/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/feed.php b/phpBB/feed.php index 00247c1958..fcf42a83ae 100644 --- a/phpBB/feed.php +++ b/phpBB/feed.php @@ -1106,7 +1106,7 @@ class phpbb_feed_forums extends phpbb_feed_base global $user; $item_row['statistics'] = $user->lang('TOTAL_TOPICS', (int) $row['forum_topics']) - . ' ' . $this->separator_stats . ' ' . $user->lang('TOTAL_POSTS_OTHER', (int) $row['forum_posts']); + . ' ' . $this->separator_stats . ' ' . $user->lang('TOTAL_POSTS_COUNT', (int) $row['forum_posts']); } } } diff --git a/phpBB/index.php b/phpBB/index.php index 5f2254ac7f..f1243bb336 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -114,7 +114,7 @@ if ($config['load_birthdays'] && $config['allow_birthdays'] && $auth->acl_gets(' // Assign index specific vars $template->assign_vars(array( - 'TOTAL_POSTS' => $user->lang('TOTAL_POSTS', (int) $config['num_posts']), + 'TOTAL_POSTS' => $user->lang('TOTAL_POSTS_COUNT', (int) $config['num_posts']), 'TOTAL_TOPICS' => $user->lang('TOTAL_TOPICS', (int) $config['num_topics']), 'TOTAL_USERS' => $user->lang('TOTAL_USERS', (int) $config['num_users']), 'NEWEST_USER' => $user->lang('NEWEST_USER', get_username_string('full', $config['newest_user_id'], $config['newest_username'], $config['newest_user_colour'])), -- cgit v1.2.1 From 470b79c9e38ea5c37fe5f4685618e5794b6954ad Mon Sep 17 00:00:00 2001 From: Bruno Ais Date: Fri, 24 Feb 2012 07:41:08 +0000 Subject: [ticket/8652] Sending 2 emails on 2 replies This is a fix for the problem of the system sending 2 emails when there are 2 replies to a topic where the user is subscribed in a topic and the forum that contains the topic. This simple fix seems to solve the problem. In simple tests I made it shows it does. PHPBB3-8652 --- phpBB/includes/functions_posting.php | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 77d92e26e2..38f542264c 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -1286,6 +1286,12 @@ function user_notification($mode, $subject, $topic_title, $forum_name, $forum_id { $msg_users[] = $row; $update_notification[$row['notify_type']][] = $row['user_id']; + if ($row['notify_type'] === 'topic') + { + // Using SQL characteristics. If it didn't exist it isn't added. + // It's very rare to find someone that is registered in topic and noone is registered in the forum + $update_notification['forum'][] = $row['user_id']; + } } } unset($notify_rows); -- cgit v1.2.1 From b74530259faa6197d7215d957c180280210a93e0 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 2 Mar 2012 00:19:42 +0100 Subject: [ticket/8652] Comment for also updating forum watch table in user_notification. PHPBB3-8652 --- phpBB/includes/functions_posting.php | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 38f542264c..f920be9c4b 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -1286,10 +1286,18 @@ function user_notification($mode, $subject, $topic_title, $forum_name, $forum_id { $msg_users[] = $row; $update_notification[$row['notify_type']][] = $row['user_id']; + + /* + * We also update the forums watch table for this user when we are + * sending out a topic notification to prevent sending out another + * notification in case this user is also subscribed to the forum + * this topic was posted in. + * Since an UPDATE query is used, this has no effect on users only + * subscribed to the topic (i.e. no row is created) and should not + * be a performance issue. + */ if ($row['notify_type'] === 'topic') { - // Using SQL characteristics. If it didn't exist it isn't added. - // It's very rare to find someone that is registered in topic and noone is registered in the forum $update_notification['forum'][] = $row['user_id']; } } -- cgit v1.2.1 From efe25a0b49c7445bef665ab28fc979e485e49289 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 29 Oct 2011 15:31:29 +0200 Subject: [ticket/9813] Use SHOW TABLE STATUS to get search stats for native on MySQL. PHPBB3-9813 --- phpBB/includes/search/fulltext_native.php | 38 +++++++++++++++++++++++-------- 1 file changed, 28 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_native.php b/phpBB/includes/search/fulltext_native.php index b63205fd76..e5eee50fdb 100644 --- a/phpBB/includes/search/fulltext_native.php +++ b/phpBB/includes/search/fulltext_native.php @@ -1461,17 +1461,35 @@ class fulltext_native extends search_backend { global $db; - $sql = 'SELECT COUNT(*) as total_words - FROM ' . SEARCH_WORDLIST_TABLE; - $result = $db->sql_query($sql); - $this->stats['total_words'] = (int) $db->sql_fetchfield('total_words'); - $db->sql_freeresult($result); + switch ($db->sql_layer) + { + case 'mysql4': + case 'mysqli': + $sql = "SHOW TABLE STATUS LIKE '" . SEARCH_WORDLIST_TABLE . "'"; + $result = $db->sql_query($sql); + $this->stats['total_words'] = (int) $db->sql_fetchfield('Rows'); + $db->sql_freeresult($result); + + $sql = "SHOW TABLE STATUS LIKE '" . SEARCH_WORDMATCH_TABLE . "'"; + $result = $db->sql_query($sql); + $this->stats['total_matches'] = (int) $db->sql_fetchfield('Rows'); + $db->sql_freeresult($result); + break; - $sql = 'SELECT COUNT(*) as total_matches - FROM ' . SEARCH_WORDMATCH_TABLE; - $result = $db->sql_query($sql); - $this->stats['total_matches'] = (int) $db->sql_fetchfield('total_matches'); - $db->sql_freeresult($result); + default: + $sql = 'SELECT COUNT(*) as total_words + FROM ' . SEARCH_WORDLIST_TABLE; + $result = $db->sql_query($sql); + $this->stats['total_words'] = (int) $db->sql_fetchfield('total_words'); + $db->sql_freeresult($result); + + $sql = 'SELECT COUNT(*) as total_matches + FROM ' . SEARCH_WORDMATCH_TABLE; + $result = $db->sql_query($sql); + $this->stats['total_matches'] = (int) $db->sql_fetchfield('total_matches'); + $db->sql_freeresult($result); + break; + } } /** -- cgit v1.2.1 From 97cf433dea658127ed60c70ea47d1c3830964f25 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 12 Dec 2011 02:41:48 +0100 Subject: [ticket/9813] Use table status row count only if greater than 100000 or exact. PHPBB3-9813 --- phpBB/includes/search/fulltext_native.php | 67 +++++++++++++++++++------------ 1 file changed, 41 insertions(+), 26 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_native.php b/phpBB/includes/search/fulltext_native.php index e5eee50fdb..69937ff9c9 100644 --- a/phpBB/includes/search/fulltext_native.php +++ b/phpBB/includes/search/fulltext_native.php @@ -1458,38 +1458,53 @@ class fulltext_native extends search_backend } function get_stats() + { + $this->stats['total_words'] = $this->get_table_row_count(SEARCH_WORDLIST_TABLE); + $this->stats['total_matches'] = $this->get_table_row_count(SEARCH_WORDMATCH_TABLE); + } + + /** + * Gets statistics for a specific database table. + * + * @param string $table_name Table name + * + * @return string Row count. Prefixed with ~ if estimated. + * + * @access protected + */ + function get_table_row_count($table_name) { global $db; - switch ($db->sql_layer) + if (stripos($db->sql_layer, 'mysql') === 0) { - case 'mysql4': - case 'mysqli': - $sql = "SHOW TABLE STATUS LIKE '" . SEARCH_WORDLIST_TABLE . "'"; - $result = $db->sql_query($sql); - $this->stats['total_words'] = (int) $db->sql_fetchfield('Rows'); - $db->sql_freeresult($result); - - $sql = "SHOW TABLE STATUS LIKE '" . SEARCH_WORDMATCH_TABLE . "'"; - $result = $db->sql_query($sql); - $this->stats['total_matches'] = (int) $db->sql_fetchfield('Rows'); - $db->sql_freeresult($result); - break; + $sql = "SHOW TABLE STATUS + LIKE '" . $table_name . "'"; + $result = $db->sql_query($sql); + $table_status = $db->sql_fetchrow($result); + $db->sql_freeresult($result); - default: - $sql = 'SELECT COUNT(*) as total_words - FROM ' . SEARCH_WORDLIST_TABLE; - $result = $db->sql_query($sql); - $this->stats['total_words'] = (int) $db->sql_fetchfield('total_words'); - $db->sql_freeresult($result); - - $sql = 'SELECT COUNT(*) as total_matches - FROM ' . SEARCH_WORDMATCH_TABLE; - $result = $db->sql_query($sql); - $this->stats['total_matches'] = (int) $db->sql_fetchfield('total_matches'); - $db->sql_freeresult($result); - break; + if (isset($table_status['Engine'])) + { + if ($table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000) + { + return '~' . $table_status['Rows']; + } + } } + + // Get exact row count by actually counting rows + $sql = 'SELECT COUNT(*) AS rows_total + FROM ' . $table_name; + $result = $db->sql_query($sql); + $rows_total = $db->sql_fetchfield('rows_total'); + $db->sql_freeresult($result); + + return $rows_total; } /** -- cgit v1.2.1 From f9953fc3395e6b206c0789d40f89f9d2463348e7 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 18 Feb 2012 19:29:32 +0100 Subject: [ticket/10653] Add ability to count table rows to database abstraction layer. PHPBB3-10653 --- phpBB/includes/db/dbal.php | 35 ++++++++++++++++ phpBB/includes/db/mysql.php | 70 +++++++++++++++++++++++++++++++ phpBB/includes/db/mysqli.php | 70 +++++++++++++++++++++++++++++++ phpBB/includes/search/fulltext_native.php | 46 +------------------- 4 files changed, 177 insertions(+), 44 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 230c9c8ed7..5d456c2ff0 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -900,6 +900,41 @@ class dbal return true; } + + /** + * Gets the estimated number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Number of rows in $table_name. + * Prefixed with ~ if estimated (otherwise exact). + * + * @access public + */ + function get_estimated_row_count($table_name) + { + return $this->get_row_count($table_name); + } + + /** + * Gets the exact number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Exact number of rows in $table_name. + * + * @access public + */ + function get_row_count($table_name) + { + $sql = 'SELECT COUNT(*) AS rows_total + FROM ' . $this->sql_escape($table_name); + $result = $this->sql_query($sql); + $rows_total = $this->sql_fetchfield('rows_total'); + $this->sql_freeresult($result); + + return $rows_total; + } } /** diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index 1e24c79577..87413e808d 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -318,6 +318,76 @@ class dbal_mysql extends dbal return @mysql_real_escape_string($msg, $this->db_connect_id); } + /** + * Gets the estimated number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Number of rows in $table_name. + * Prefixed with ~ if estimated (otherwise exact). + * + * @access public + */ + function get_estimated_row_count($table_name) + { + $table_status = $this->get_table_status($table_name); + + if (isset($table_status['Engine'])) + { + if ($table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000) + { + return '~' . $table_status['Rows']; + } + } + + return $this->get_row_count($table_name); + } + + /** + * Gets the exact number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Exact number of rows in $table_name. + * + * @access public + */ + function get_row_count($table_name) + { + $table_status = $this->get_table_status($table_name); + + if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + + return parent::get_row_count($table_name); + } + + /** + * Gets some information about the specified table. + * + * @param string $table_name Table name + * + * @return array + * + * @access protected + */ + function get_table_status($table_name) + { + $sql = "SHOW TABLE STATUS + LIKE '" . $this->sql_escape($table_name) . "'"; + $result = $this->sql_query($sql); + $table_status = $this->sql_fetchrow($result); + $this->sql_freeresult($result); + + return $table_status; + } + /** * Build LIKE expression * @access private diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index 456ce906d0..49b2789ce6 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -315,6 +315,76 @@ class dbal_mysqli extends dbal return @mysqli_real_escape_string($this->db_connect_id, $msg); } + /** + * Gets the estimated number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Number of rows in $table_name. + * Prefixed with ~ if estimated (otherwise exact). + * + * @access public + */ + function get_estimated_row_count($table_name) + { + $table_status = $this->get_table_status($table_name); + + if (isset($table_status['Engine'])) + { + if ($table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000) + { + return '~' . $table_status['Rows']; + } + } + + return $this->get_row_count($table_name); + } + + /** + * Gets the exact number of rows in a specified table. + * + * @param string $table_name Table name + * + * @return string Exact number of rows in $table_name. + * + * @access public + */ + function get_row_count($table_name) + { + $table_status = $this->get_table_status($table_name); + + if (isset($table_status['Engine']) && $table_status['Engine'] === 'MyISAM') + { + return $table_status['Rows']; + } + + return parent::get_row_count($table_name); + } + + /** + * Gets some information about the specified table. + * + * @param string $table_name Table name + * + * @return array + * + * @access protected + */ + function get_table_status($table_name) + { + $sql = "SHOW TABLE STATUS + LIKE '" . $this->sql_escape($table_name) . "'"; + $result = $this->sql_query($sql); + $table_status = $this->sql_fetchrow($result); + $this->sql_freeresult($result); + + return $table_status; + } + /** * Build LIKE expression * @access private diff --git a/phpBB/includes/search/fulltext_native.php b/phpBB/includes/search/fulltext_native.php index 69937ff9c9..dc961f3c8a 100644 --- a/phpBB/includes/search/fulltext_native.php +++ b/phpBB/includes/search/fulltext_native.php @@ -1458,53 +1458,11 @@ class fulltext_native extends search_backend } function get_stats() - { - $this->stats['total_words'] = $this->get_table_row_count(SEARCH_WORDLIST_TABLE); - $this->stats['total_matches'] = $this->get_table_row_count(SEARCH_WORDMATCH_TABLE); - } - - /** - * Gets statistics for a specific database table. - * - * @param string $table_name Table name - * - * @return string Row count. Prefixed with ~ if estimated. - * - * @access protected - */ - function get_table_row_count($table_name) { global $db; - if (stripos($db->sql_layer, 'mysql') === 0) - { - $sql = "SHOW TABLE STATUS - LIKE '" . $table_name . "'"; - $result = $db->sql_query($sql); - $table_status = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - if (isset($table_status['Engine'])) - { - if ($table_status['Engine'] === 'MyISAM') - { - return $table_status['Rows']; - } - else if ($table_status['Engine'] === 'InnoDB' && $table_status['Rows'] > 100000) - { - return '~' . $table_status['Rows']; - } - } - } - - // Get exact row count by actually counting rows - $sql = 'SELECT COUNT(*) AS rows_total - FROM ' . $table_name; - $result = $db->sql_query($sql); - $rows_total = $db->sql_fetchfield('rows_total'); - $db->sql_freeresult($result); - - return $rows_total; + $this->stats['total_words'] = $db->get_estimated_row_count(SEARCH_WORDLIST_TABLE); + $this->stats['total_matches'] = $db->get_estimated_row_count(SEARCH_WORDMATCH_TABLE); } /** -- cgit v1.2.1 From c5de658c7f15a6ab0028353684323c3ef21521c9 Mon Sep 17 00:00:00 2001 From: callumacrae Date: Fri, 2 Dec 2011 17:26:39 +0000 Subject: [ticket/10510] Moved quick-mod tools markup to template. PHPBB3-10510 --- .../styles/prosilver/template/viewtopic_body.html | 20 ++++++++++++++-- .../styles/subsilver2/template/viewtopic_body.html | 24 ++++++++++++++++++- phpBB/viewtopic.php | 28 ++++++++++------------ 3 files changed, 54 insertions(+), 18 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html index 952b986d9f..674f8b1ff4 100644 --- a/phpBB/styles/prosilver/template/viewtopic_body.html +++ b/phpBB/styles/prosilver/template/viewtopic_body.html @@ -254,10 +254,26 @@ - +
    - {S_TOPIC_MOD} + + + {S_FORM_TOKEN}
    diff --git a/phpBB/styles/subsilver2/template/viewtopic_body.html b/phpBB/styles/subsilver2/template/viewtopic_body.html index b8387482bf..f9526b9b28 100644 --- a/phpBB/styles/subsilver2/template/viewtopic_body.html +++ b/phpBB/styles/subsilver2/template/viewtopic_body.html @@ -347,7 +347,29 @@
    - +
    {L_NO_TOPIC_ICON}{L_NO_PM_ICON} {L_NO_TOPIC_ICON}{L_NO_PM_ICON}
    - +
    {L_QUICK_MOD}: {S_TOPIC_MOD}
    + +
    + {L_QUICK_MOD}: + + +
    + +
    {rules.RULE}
    diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 7cb6df3660..450ebfeda8 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -517,20 +517,6 @@ gen_forum_auth_level('topic', $forum_id, $topic_data['forum_status']); // Quick mod tools $allow_change_type = ($auth->acl_get('m_', $forum_id) || ($user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'])) ? true : false; -$topic_mod = ''; -$topic_mod .= ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'] && $topic_data['topic_status'] == ITEM_UNLOCKED)) ? (($topic_data['topic_status'] == ITEM_UNLOCKED) ? '' : '') : ''; -$topic_mod .= ($auth->acl_get('m_delete', $forum_id)) ? '' : ''; -$topic_mod .= ($auth->acl_get('m_move', $forum_id) && $topic_data['topic_status'] != ITEM_MOVED) ? '' : ''; -$topic_mod .= ($auth->acl_get('m_split', $forum_id)) ? '' : ''; -$topic_mod .= ($auth->acl_get('m_merge', $forum_id)) ? '' : ''; -$topic_mod .= ($auth->acl_get('m_merge', $forum_id)) ? '' : ''; -$topic_mod .= ($auth->acl_get('m_move', $forum_id)) ? '' : ''; -$topic_mod .= ($allow_change_type && $auth->acl_gets('f_sticky', 'f_announce', $forum_id) && $topic_data['topic_type'] != POST_NORMAL) ? '' : ''; -$topic_mod .= ($allow_change_type && $auth->acl_get('f_sticky', $forum_id) && $topic_data['topic_type'] != POST_STICKY) ? '' : ''; -$topic_mod .= ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_ANNOUNCE) ? '' : ''; -$topic_mod .= ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_GLOBAL) ? '' : ''; -$topic_mod .= ($auth->acl_get('m_', $forum_id)) ? '' : ''; - // If we've got a hightlight set pass it on to pagination. $pagination = generate_pagination(append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . ((strlen($u_sort_param)) ? "&$u_sort_param" : '') . (($highlight_match) ? "&hilit=$highlight" : '')), $total_posts, $config['posts_per_page'], $start); @@ -617,7 +603,19 @@ $template->assign_vars(array( 'S_SELECT_SORT_DAYS' => $s_limit_days, 'S_SINGLE_MODERATOR' => (!empty($forum_moderators[$forum_id]) && sizeof($forum_moderators[$forum_id]) > 1) ? false : true, 'S_TOPIC_ACTION' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start")), - 'S_TOPIC_MOD' => ($topic_mod != '') ? '' : '', + 'S_TOPIC_MOD_LOCK' => ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'] && $topic_data['topic_status'] == ITEM_UNLOCKED)) ? (($topic_data['topic_status'] == ITEM_UNLOCKED) ? 'lock' : 'unlock') : '', + 'S_TOPIC_MOD_DELETE' => ($auth->acl_get('m_delete', $forum_id)) ? true : false, + 'S_TOPIC_MOD_MOVE' => ($auth->acl_get('m_move', $forum_id) && $topic_data['topic_status'] != ITEM_MOVED) ? true : false, + 'S_TOPIC_MOD_SPLIT' => ($auth->acl_get('m_split', $forum_id)) ? true : false, + 'S_TOPIC_MOD_MERGE' => ($auth->acl_get('m_merge', $forum_id)) ? true : false, + 'S_TOPIC_MOD_MERGE_TOPIC' => ($auth->acl_get('m_merge', $forum_id)) ? true : false, + 'S_TOPIC_MOD_FORK' => ($auth->acl_get('m_move', $forum_id)) ? true : false, + 'S_TOPIC_MOD_MAKE_NORMAL' => ($allow_change_type && $auth->acl_gets('f_sticky', 'f_announce', $forum_id) && $topic_data['topic_type'] != POST_NORMAL) ? true : false, + 'S_TOPIC_MOD_MAKE_STICKY' => ($allow_change_type && $auth->acl_get('f_sticky', $forum_id) && $topic_data['topic_type'] != POST_STICKY) ? true : false, + 'S_TOPIC_MOD_MAKE_ANNOUNCE' => ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_ANNOUNCE) ? true : false, + 'S_TOPIC_MOD_MAKE_GLOBAL' => ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_GLOBAL) ? true : false, + 'S_TOPIC_MOD_TOPIC_LOGS' => ($auth->acl_get('m_', $forum_id)), + 'S_MOD_ACTION' => append_sid("{$phpbb_root_path}mcp.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start") . "&quickmod=1&redirect=" . urlencode(str_replace('&', '&', $viewtopic_url)), true, $user->session_id), 'S_VIEWTOPIC' => true, -- cgit v1.2.1 From 2b0282cba73c8649b1649444a23c3913cc652de2 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Tue, 20 Dec 2011 09:27:56 +0000 Subject: [ticket/10510] Updated quick-mod conditional in subsilver2. It was still trying to use the old conditional, which was referring to a variable which had been removed. PHPBB3-10510 --- phpBB/styles/subsilver2/template/viewtopic_body.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/viewtopic_body.html b/phpBB/styles/subsilver2/template/viewtopic_body.html index f9526b9b28..a431d51c79 100644 --- a/phpBB/styles/subsilver2/template/viewtopic_body.html +++ b/phpBB/styles/subsilver2/template/viewtopic_body.html @@ -348,7 +348,7 @@ - + -- cgit v1.2.1 From ae7d290a2222455589d1dcbfba650f789acda508 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Wed, 14 Mar 2012 23:24:16 +0200 Subject: [feature/merging-style-components] Updating PHP files Removing theme and template entries in all files, except for acp styles section PHPBB3-10632 --- phpBB/includes/functions.php | 22 +++++++++++----------- phpBB/includes/session.php | 16 ++++++---------- 2 files changed, 17 insertions(+), 21 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 9913a80a70..bd6272792b 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3092,9 +3092,9 @@ function parse_cfg_file($filename, $lines = false) $parsed_items[$key] = $value; } - if (isset($parsed_items['inherit_from']) && isset($parsed_items['name']) && $parsed_items['inherit_from'] == $parsed_items['name']) + if (isset($parsed_items['parent']) && isset($parsed_items['name']) && $parsed_items['parent'] == $parsed_items['name']) { - unset($parsed_items['inherit_from']); + unset($parsed_items['parent']); } return $parsed_items; @@ -4728,9 +4728,9 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'S_SEARCH_HIDDEN_FIELDS' => build_hidden_fields($s_search_hidden_fields), 'T_ASSETS_PATH' => "{$web_path}assets", - 'T_THEME_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['theme_path']) . '/theme', - 'T_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['template_path']) . '/template', - 'T_SUPER_TEMPLATE_PATH' => (isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? "{$web_path}styles/" . rawurlencode($user->theme['template_inherit_path']) . '/template' : "{$web_path}styles/" . rawurlencode($user->theme['template_path']) . '/template', + 'T_THEME_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/theme', + 'T_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/template', + 'T_SUPER_TEMPLATE_PATH' => ($user->theme['style_parent_id']) ? "{$web_path}styles/" . rawurlencode($user->theme['style_parent_tree']) . '/template' : "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/template', 'T_IMAGES_PATH' => "{$web_path}images/", 'T_SMILIES_PATH' => "{$web_path}{$config['smilies_path']}/", 'T_AVATAR_PATH' => "{$web_path}{$config['avatar_path']}/", @@ -4738,16 +4738,16 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'T_ICONS_PATH' => "{$web_path}{$config['icons_path']}/", 'T_RANKS_PATH' => "{$web_path}{$config['ranks_path']}/", 'T_UPLOAD_PATH' => "{$web_path}{$config['upload_path']}/", - 'T_STYLESHEET_LINK' => "{$web_path}styles/" . rawurlencode($user->theme['theme_path']) . '/theme/stylesheet.css', - 'T_STYLESHEET_LANG_LINK' => "{$web_path}styles/" . rawurlencode($user->theme['theme_path']) . '/theme/' . $user->lang_name . '/stylesheet.css', - 'T_STYLESHEET_NAME' => $user->theme['theme_name'], + 'T_STYLESHEET_LINK' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/theme/stylesheet.css', + 'T_STYLESHEET_LANG_LINK' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/theme/' . $user->lang_name . '/stylesheet.css', + 'T_STYLESHEET_NAME' => $user->theme['style_name'], 'T_JQUERY_LINK' => ($config['load_jquery_cdn'] && !empty($config['load_jquery_url'])) ? $config['load_jquery_url'] : "{$web_path}assets/javascript/jquery.js", 'S_JQUERY_FALLBACK' => ($config['load_jquery_cdn']) ? true : false, - 'T_THEME_NAME' => rawurlencode($user->theme['theme_path']), + 'T_THEME_NAME' => rawurlencode($user->theme['style_path']), 'T_THEME_LANG_NAME' => $user->data['user_lang'], - 'T_TEMPLATE_NAME' => $user->theme['template_path'], - 'T_SUPER_TEMPLATE_NAME' => rawurlencode((isset($user->theme['template_inherit_path']) && $user->theme['template_inherit_path']) ? $user->theme['template_inherit_path'] : $user->theme['template_path']), + 'T_TEMPLATE_NAME' => $user->theme['style_path'], + 'T_SUPER_TEMPLATE_NAME' => rawurlencode((isset($user->theme['style_parent_tree']) && $user->theme['style_parent_tree']) ? $user->theme['style_parent_tree'] : $user->theme['style_path']), 'T_IMAGES' => 'images', 'T_SMILIES' => $config['smilies_path'], 'T_AVATAR' => $config['avatar_path'], diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 6dad068ecb..cd6f17154a 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1653,11 +1653,9 @@ class user extends session $style = ($style) ? $style : ((!$config['override_user_style']) ? $this->data['user_style'] : $config['default_style']); } - $sql = 'SELECT s.style_id, t.template_path, t.template_id, t.bbcode_bitfield, t.template_inherits_id, t.template_inherit_path, c.theme_path, c.theme_name, c.theme_id - FROM ' . STYLES_TABLE . ' s, ' . STYLES_TEMPLATE_TABLE . ' t, ' . STYLES_THEME_TABLE . " c - WHERE s.style_id = $style - AND t.template_id = s.template_id - AND c.theme_id = s.theme_id"; + $sql = 'SELECT * + FROM ' . STYLES_TABLE . " s + WHERE s.style_id = $style"; $result = $db->sql_query($sql, 3600); $this->theme = $db->sql_fetchrow($result); $db->sql_freeresult($result); @@ -1672,11 +1670,9 @@ class user extends session WHERE user_id = {$this->data['user_id']}"; $db->sql_query($sql); - $sql = 'SELECT s.style_id, t.template_path, t.template_id, t.bbcode_bitfield, c.theme_path, c.theme_name, c.theme_id - FROM ' . STYLES_TABLE . ' s, ' . STYLES_TEMPLATE_TABLE . ' t, ' . STYLES_THEME_TABLE . " c - WHERE s.style_id = $style - AND t.template_id = s.template_id - AND c.theme_id = s.theme_id"; + $sql = 'SELECT * + FROM ' . STYLES_TABLE . " s + WHERE s.style_id = $style"; $result = $db->sql_query($sql, 3600); $this->theme = $db->sql_fetchrow($result); $db->sql_freeresult($result); -- cgit v1.2.1 From 68336ab137432ecf9322474a7853d5d16e660fb2 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Wed, 14 Mar 2012 23:25:07 +0200 Subject: [feature/merging-style-components] Updating coding guidelines Updating template inheritance section in coding guidelines PHPBB3-10632 --- phpBB/docs/coding-guidelines.html | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html index 55fbf6d4e8..e85be02d45 100644 --- a/phpBB/docs/coding-guidelines.html +++ b/phpBB/docs/coding-guidelines.html @@ -71,7 +71,7 @@
  • Templating
    1. General Templating
    2. -
    3. Template Inheritance
    4. +
    5. Styles Tree
  • Character Sets and Encodings
  • Translation (i18n/L10n) Guidelines @@ -1623,24 +1623,25 @@ div </form>
    -

    4.ii. Template Inheritance

    -

    When basing a new style on an existing one, it is not necessary to provide all the template files. By declaring the base style name in the inherit_from field in the template configuration file, the style can be set to inherit template files from the base style. The limitation on this is that the base style has to be installed and complete, meaning that it is not itself inheriting.

    +

    4.ii. Styles Tree

    +

    When basing a new style on an existing one, it is not necessary to provide all the template files. By declaring the base style name in the parent field in the style configuration file, the style can be set to reuse template files from the parent style.

    -

    The effect of doing so is that the template engine will use the template files in the new style where they exist, but fall back to files in the base style otherwise. Declaring a style to inherit from another also causes it to use some of the configuration settings of the base style, notably database storage.

    +

    The effect of doing so is that the template engine will use the template files in the new style where they exist, but fall back to files in the parent style otherwise.

    -

    We strongly encourage the use of inheritance for styles based on the bundled styles, as it will ease the update procedure.

    +

    We strongly encourage the use of parent styles for styles based on the bundled styles, as it will ease the update procedure.

    -        # General Information about this template
    -        name = inherits
    -        copyright = © phpBB Group, 2007
    -        version = 3.0.3
    +# General Information about this style
    +name = Custom Style
    +copyright = &copy; phpBB Group, 2007
    +version = 3.1.0
     
    -        # Defining a different template bitfield
    -        template_bitfield = lNg=
    +# Defining a different template bitfield
    +# template_bitfield = lNg=
     
    -        # Are we inheriting?
    -        inherit_from = prosilver
    +# Parent style
    +# Set value to empty or to this style's name if this style does not have a parent style
    +parent = prosilver
     		
    -- cgit v1.2.1 From 1cc9f60f959730c8432a8489527ce9e1606a7ebd Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Wed, 14 Mar 2012 23:26:01 +0200 Subject: [feature/merging-style-components] Removing theme.cfg and template.cfg Removing theme.cfg and template.cfg PHPBB3-10632 --- phpBB/styles/prosilver/template/template.cfg | 30 --------------------------- phpBB/styles/prosilver/theme/theme.cfg | 21 ------------------- phpBB/styles/subsilver2/template/template.cfg | 27 ------------------------ phpBB/styles/subsilver2/theme/theme.cfg | 21 ------------------- 4 files changed, 99 deletions(-) delete mode 100644 phpBB/styles/prosilver/template/template.cfg delete mode 100644 phpBB/styles/prosilver/theme/theme.cfg delete mode 100644 phpBB/styles/subsilver2/template/template.cfg delete mode 100644 phpBB/styles/subsilver2/theme/theme.cfg (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/template.cfg b/phpBB/styles/prosilver/template/template.cfg deleted file mode 100644 index 22ca73b487..0000000000 --- a/phpBB/styles/prosilver/template/template.cfg +++ /dev/null @@ -1,30 +0,0 @@ -# -# phpBB Template Configuration File -# -# @package phpBB3 -# @copyright (c) 2006 phpBB Group -# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -# -# -# At the left is the name, please do not change this -# At the right the value is entered -# For on/off options the valid values are on, off, 1, 0, true and false -# -# Values get trimmed, if you want to add a space in front or at the end of -# the value, then enclose the value with single or double quotes. -# Single and double quotes do not need to be escaped. -# -# - -# General Information about this template -name = prosilver -copyright = © phpBB Group, 2007 -version = 3.1.0-dev - -# Defining a different template bitfield -template_bitfield = lNg= - -# Template inheritance -# See http://blog.phpbb.com/2008/07/31/templating-just-got-easier/ -# Set value to empty to ignore template inheritance -inherit_from = prosilver diff --git a/phpBB/styles/prosilver/theme/theme.cfg b/phpBB/styles/prosilver/theme/theme.cfg deleted file mode 100644 index eced2a665e..0000000000 --- a/phpBB/styles/prosilver/theme/theme.cfg +++ /dev/null @@ -1,21 +0,0 @@ -# -# phpBB Theme Configuration File -# -# @package phpBB3 -# @copyright (c) 2006 phpBB Group -# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -# -# -# At the left is the name, please do not change this -# At the right the value is entered -# For on/off options the valid values are on, off, 1, 0, true and false -# -# Values get trimmed, if you want to add a space in front or at the end of -# the value, then enclose the value with single or double quotes. -# Single and double quotes do not need to be escaped. -# - -# General Information about this theme -name = prosilver -copyright = © phpBB Group, 2007 -version = 3.1.0-dev diff --git a/phpBB/styles/subsilver2/template/template.cfg b/phpBB/styles/subsilver2/template/template.cfg deleted file mode 100644 index cf5562a8a4..0000000000 --- a/phpBB/styles/subsilver2/template/template.cfg +++ /dev/null @@ -1,27 +0,0 @@ -# -# phpBB Template Configuration File -# -# @package phpBB3 -# @copyright (c) 2005 phpBB Group -# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -# -# -# At the left is the name, please do not change this -# At the right the value is entered -# For on/off options the valid values are on, off, 1, 0, true and false -# -# Values get trimmed, if you want to add a space in front or at the end of -# the value, then enclose the value with single or double quotes. -# Single and double quotes do not need to be escaped. -# -# - -# General Information about this template -name = subsilver2 -copyright = © phpBB Group, 2003 -version = 3.1.0-dev - -# Template inheritance -# See http://blog.phpbb.com/2008/07/31/templating-just-got-easier/ -# Set value to empty to ignore template inheritance -inherit_from = subsilver2 diff --git a/phpBB/styles/subsilver2/theme/theme.cfg b/phpBB/styles/subsilver2/theme/theme.cfg deleted file mode 100644 index 16d66c844a..0000000000 --- a/phpBB/styles/subsilver2/theme/theme.cfg +++ /dev/null @@ -1,21 +0,0 @@ -# -# phpBB Theme Configuration File -# -# @package phpBB3 -# @copyright (c) 2005 phpBB Group -# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -# -# -# At the left is the name, please do not change this -# At the right the value is entered -# For on/off options the valid values are on, off, 1, 0, true and false -# -# Values get trimmed, if you want to add a space in front or at the end of -# the value, then enclose the value with single or double quotes. -# Single and double quotes do not need to be escaped. -# - -# General Information about this theme -name = subsilver2 -copyright = © phpBB Group, 2003 -version = 3.1.0-dev -- cgit v1.2.1 From 95a69639fdc8491e47386dcc7e95e715fe769aed Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Wed, 14 Mar 2012 23:26:23 +0200 Subject: [feature/merging-style-components] Adding template information to style.cfg Adding template data to style.cfg and removing obsolete comments PHPBB3-10632 --- phpBB/styles/prosilver/style.cfg | 8 +++++++- phpBB/styles/subsilver2/style.cfg | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/style.cfg b/phpBB/styles/prosilver/style.cfg index 538e167df6..a80f1ed537 100644 --- a/phpBB/styles/prosilver/style.cfg +++ b/phpBB/styles/prosilver/style.cfg @@ -8,7 +8,6 @@ # # At the left is the name, please do not change this # At the right the value is entered -# For on/off options the valid values are on, off, 1, 0, true and false # # Values get trimmed, if you want to add a space in front or at the end of # the value, then enclose the value with single or double quotes. @@ -20,3 +19,10 @@ name = prosilver copyright = © phpBB Group, 2007 version = 3.1.0-dev + +# Defining a different template bitfield +# template_bitfield = lNg= + +# Parent style +# Set value to empty or to this style's name if this style does not have a parent style +parent = prosilver diff --git a/phpBB/styles/subsilver2/style.cfg b/phpBB/styles/subsilver2/style.cfg index 0804a27082..1a71e7254d 100644 --- a/phpBB/styles/subsilver2/style.cfg +++ b/phpBB/styles/subsilver2/style.cfg @@ -8,7 +8,6 @@ # # At the left is the name, please do not change this # At the right the value is entered -# For on/off options the valid values are on, off, 1, 0, true and false # # Values get trimmed, if you want to add a space in front or at the end of # the value, then enclose the value with single or double quotes. @@ -20,3 +19,10 @@ name = subsilver2 copyright = © 2005 phpBB Group version = 3.1.0-dev + +# Defining a different template bitfield +# template_bitfield = lNg= + +# Parent style +# Set value to empty or to this style's name if this style does not have a parent style +parent = subsilver2 -- cgit v1.2.1 From f32cc3ae8fc3fbd28f4fe9e6b7e2a4eb27cfac03 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sat, 18 Feb 2012 01:20:21 +0200 Subject: [feature/merging-style-components] Admin.css additions for acp_styles Adding background colors for row iterations and font color for disabled rows to admin control panel css. PHPBB3-10632 --- phpBB/adm/style/admin.css | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) (limited to 'phpBB') diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css index ceda824e5a..14a2b6dded 100644 --- a/phpBB/adm/style/admin.css +++ b/phpBB/adm/style/admin.css @@ -626,12 +626,29 @@ td.name { .col1 { background-color: #DCEBFE; } .col2 { background-color: #F9F9F9; } +/* 4 row background colours for trees */ +.row1a { background-color: #F9F9F9; } +.row1b { background-color: #F6F6F6; } +.row2a { background-color: #E7EEF4; } +.row2b { background-color: #E3EBF2; } + .spacer { background-color: #DBDFE2; height: 1px; line-height: 1px; } +/* Deactivated row */ +.row-inactive { + color: #999; +} +.row-inactive a, .row-inactive strong { + color: #888; +} +.row-inactive a:hover { + color: #BC2A4D; +} + /* General form styles ----------------------------------------*/ fieldset { -- cgit v1.2.1 From 0c6955e73c72d69c91548bb0c3106e39ce166b70 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Wed, 14 Mar 2012 23:45:54 +0200 Subject: [feature/merging-style-components] Adding new language variables Adding new language variables for acp_styles and removing some unused variables PHPBB3-10632 --- phpBB/language/en/acp/common.php | 2 ++ phpBB/language/en/acp/styles.php | 64 ++++++++++++++++------------------------ 2 files changed, 28 insertions(+), 38 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/common.php b/phpBB/language/en/acp/common.php index 7f1ecb5c01..254cd473a5 100644 --- a/phpBB/language/en/acp/common.php +++ b/phpBB/language/en/acp/common.php @@ -168,6 +168,8 @@ $lang = array_merge($lang, array( 'ACP_STYLE_COMPONENTS' => 'Style components', 'ACP_STYLE_MANAGEMENT' => 'Style management', 'ACP_STYLES' => 'Styles', + 'ACP_STYLES_CACHE' => 'Purge Cache', + 'ACP_STYLES_INSTALL' => 'Install Styles', 'ACP_SUBMIT_CHANGES' => 'Submit changes', diff --git a/phpBB/language/en/acp/styles.php b/phpBB/language/en/acp/styles.php index 59df82477e..fe7fae5808 100644 --- a/phpBB/language/en/acp/styles.php +++ b/phpBB/language/en/acp/styles.php @@ -35,15 +35,9 @@ if (empty($lang) || !is_array($lang)) // in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine $lang = array_merge($lang, array( - 'ACP_STYLES_EXPLAIN' => 'Here you can manage the available styles on your board. A style consists of a template and theme. You may alter existing styles, delete, deactivate, reactivate, create or import new ones. You can also see what a style will look like using the preview function. The current default style is noted by the presence of an asterisk (*). Also listed is the total user count for each style, note that overriding user styles will not be reflected here.', - 'ACP_TEMPLATES_EXPLAIN' => 'A template set comprises all the markup used to generate the layout of your board. Here you can edit existing template sets, delete, export, import and preview sets. You can also modify the templating code used to generate BBCode.', - 'ACP_THEMES_EXPLAIN' => 'From here you can create, install, edit, delete and export themes. A theme is the combination of colours and images that are applied to your templates to define the basic look of your board. The range of options open to you depends on the configuration of your server and phpBB installation, see the manual for further details. Please note that when creating new themes the use of an existing theme as a basis is optional.', - 'ADD_STYLE' => 'Create style', - 'ADD_STYLE_EXPLAIN' => 'Here you can create a new style. Depending on your server configuration and file permissions you may have additional options. For example you may be able to base this style on an existing one. You may also be able to upload or import (from the store directory) a style archive. If you upload or import an archive the style name will be determined automatically.', + 'ACP_STYLES_EXPLAIN' => 'Here you can manage the available styles on your board. You may alter existing styles, delete, deactivate, reactivate, install new ones. You can also see what a style will look like using the preview function. Also listed is the total user count for each style, note that overriding user styles will not be reflected here.', 'ADD_TEMPLATE' => 'Create template', 'ADD_TEMPLATE_EXPLAIN' => 'Here you can add a new template. Depending on your server configuration and file permissions you may have additional options here. For example you may be able to base this template set on an existing one. You may also be able to upload or import (from the store directory) a template archive. If you upload or import an archive the template name can be optionally taken from the archive name (to do this leave the template name blank).', - 'ADD_THEME' => 'Create theme', - 'ADD_THEME_EXPLAIN' => 'Here you can add a new theme. Depending on your server configuration and file permissions you may have additional options here. For example you may be able to base this theme on an existing one. You may also be able to upload or import (from the store directory) a theme archive. If you upload or import an archive the theme name can be optionally taken from the archive name (to do this leave the theme name blank).', 'ARCHIVE_FORMAT' => 'Archive file type', 'AUTOMATIC_EXPLAIN' => 'Leave blank to attempt automatic detection.', @@ -58,7 +52,9 @@ $lang = array_merge($lang, array( 'CACHE_FILENAME' => 'Template file', 'CACHE_FILESIZE' => 'File size', 'CACHE_MODIFIED' => 'Modified', + 'CANNOT_BE_INSTALLED' => 'Cannot be installed', 'CONFIRM_TEMPLATE_CLEAR_CACHE' => 'Are you sure you wish to clear all cached versions of your template files?', + 'CONFIRM_DELETE_STYLES' => 'Are you sure you wish to delete selected styles?', 'COPYRIGHT' => 'Copyright', 'CREATE_STYLE' => 'Create new style', 'CREATE_TEMPLATE' => 'Create new template set', @@ -66,13 +62,14 @@ $lang = array_merge($lang, array( 'CURRENT_IMAGE' => 'Current image', 'DEACTIVATE_DEFAULT' => 'You cannot deactivate the default style.', + 'DELETE_DEFAULT' => 'You cannot delete the default style.', 'DELETE_FROM_FS' => 'Delete from filesystem', 'DELETE_STYLE' => 'Delete style', 'DELETE_STYLE_EXPLAIN' => 'Here you can remove the selected style. Take care in deleting styles, there is no undo capability.', + 'DELETE_STYLE_FILES_FAILED' => 'Error deleting files for style "%s".', + 'DELETE_STYLE_FILES_SUCCESS' => 'Files for style "%s" have been deleted.', 'DELETE_TEMPLATE' => 'Delete template', 'DELETE_TEMPLATE_EXPLAIN' => 'Here you can remove the selected template set from the database. Please note that there is no undo capability. It is recommended that you first export your set for possible future use.', - 'DELETE_THEME' => 'Delete theme', - 'DELETE_THEME_EXPLAIN' => 'Here you can remove the selected theme from the database. Please note that there is no undo capability. It is recommended that you first export your theme for possible future use.', 'DETAILS' => 'Details', 'DIMENSIONS_EXPLAIN' => 'Selecting yes here will include width/height parameters.', @@ -239,17 +236,10 @@ $lang = array_merge($lang, array( 'INCLUDE_THEME' => 'Include theme', 'INHERITING_FROM' => 'Inherits from', 'INSTALL_STYLE' => 'Install style', - 'INSTALL_STYLE_EXPLAIN' => 'Here you can install a new style and if appropriate the corresponding style elements. If you already have the relevant style elements installed they will not be overwritten. Some styles require existing style elements to already be installed. If you try installing such a style and do not have the required elements you will be notified.', - 'INSTALL_TEMPLATE' => 'Install Template', - 'INSTALL_TEMPLATE_EXPLAIN' => 'Here you can install a new template set. Depending on your server configuration you may have a number of options here.', - 'INSTALL_THEME' => 'Install theme', - 'INSTALL_THEME_EXPLAIN' => 'Here you can install your selected theme. You can edit certain details if you wish or use the installation defaults.', + 'INSTALL_STYLES' => 'Install styles', + 'INSTALL_STYLES_EXPLAIN' => 'Here you can install new styles.
    If you cannot find a specific style in list below, check if that style is already installed. If it is not installed, check if it was uploaded correctly.', 'INSTALLED_STYLE' => 'Installed styles', - 'INSTALLED_TEMPLATE' => 'Installed templates', - 'INSTALLED_THEME' => 'Installed themes', - - 'KEEP_TEMPLATE' => 'Keep “%s†template', - 'KEEP_THEME' => 'Keep “%s†theme', + 'INVALID_STYLE_ID' => 'Invalid style ID.', 'LINE_SPACING' => 'Line spacing', 'LOCALISED_IMAGES' => 'Localised', @@ -257,18 +247,17 @@ $lang = array_merge($lang, array( 'NO_CLASS' => 'Cannot find class in stylesheet.', 'NO_IMAGE' => 'No image', 'NO_IMAGE_ERROR' => 'Cannot find image on filesystem.', + 'NO_MATCHING_STYLES_FOUND' => 'No styles match your query.', 'NO_STYLE' => 'Cannot find style on filesystem.', 'NO_TEMPLATE' => 'Cannot find template on filesystem.', 'NO_THEME' => 'Cannot find theme on filesystem.', 'NO_UNINSTALLED_STYLE' => 'No uninstalled styles detected.', - 'NO_UNINSTALLED_TEMPLATE' => 'No uninstalled templates detected.', - 'NO_UNINSTALLED_THEME' => 'No uninstalled themes detected.', 'NO_UNIT' => 'None', 'ONLY_STYLE' => 'This is the only remaining style, you cannot delete it.', - 'ONLY_TEMPLATE' => 'This is the only remaining template set, you cannot delete it.', - 'ONLY_THEME' => 'This is the only remaining theme, you cannot delete it.', - 'OPTIONAL_BASIS' => 'Optional basis', + + 'PARENT_STYLE_NOT_FOUND' => 'Parent style was not found. This style may not work correctly. Please uninstall it.', + 'PURGED_CACHE' => 'Cache was purged.', 'REFRESH' => 'Refresh', 'REPEAT_NO' => 'None', @@ -282,8 +271,7 @@ $lang = array_merge($lang, array( 'REPLACE_THEME' => 'Replace theme with', 'REPLACE_THEME_EXPLAIN' => 'This theme will replace the one you are deleting in any styles that use it.', 'REPLACE_WITH_OPTION' => 'Replace with “%sâ€', - 'REQUIRES_TEMPLATE' => 'This style requires the %s template set to be installed.', - 'REQUIRES_THEME' => 'This style requires the %s theme to be installed.', + 'REQUIRES_STYLE' => 'This style requires the style "%s" to be installed.', 'SELECT_IMAGE' => 'Select image', 'SELECT_TEMPLATE' => 'Select template file', @@ -299,21 +287,31 @@ $lang = array_merge($lang, array( 'STYLE_ADDED' => 'Style added successfully.', 'STYLE_DEACTIVATE' => 'Deactivate', 'STYLE_DEFAULT' => 'Make default style', - 'STYLE_DELETED' => 'Style deleted successfully.', + 'STYLE_DEFAULT_CHANGE' => 'Change default style', + 'STYLE_DEFAULT_CHANGE_INACTIVE' => 'You must activate style before making it default style.', + 'STYLE_DELETE_DEPENDENT' => 'Style "%s" cannot be deleted because it has one or more child styles.', + 'STYLE_DELETED' => 'Style "%s" deleted successfully.', 'STYLE_DETAILS_UPDATED' => 'Style edited successfully.', 'STYLE_ERR_ARCHIVE' => 'Please select an archive method.', 'STYLE_ERR_COPY_LONG' => 'The copyright can be no longer than 60 characters.', + 'STYLE_ERR_INVALID_PARENT' => 'Invalid parent style.', 'STYLE_ERR_MORE_ELEMENTS' => 'You must select at least one style element.', 'STYLE_ERR_NAME_CHARS' => 'The style name can only contain alphanumeric characters, -, +, _ and space.', 'STYLE_ERR_NAME_EXIST' => 'A style with that name already exists.', 'STYLE_ERR_NAME_LONG' => 'The style name can be no longer than 30 characters.', - 'STYLE_ERR_NO_IDS' => 'You must select a template and theme for this style.', 'STYLE_ERR_NOT_STYLE' => 'The imported or uploaded file did not contain a valid style archive.', 'STYLE_ERR_STYLE_NAME' => 'You must supply a name for this style.', 'STYLE_EXPORT' => 'Export style', 'STYLE_EXPORT_EXPLAIN' => 'Here you can export a style in the form of an archive. A style does not need to contain all elements but it must contain at least one. For example if you have created a new theme for a commonly used template you could simply export the theme and omit the template. You may select whether to download the file directly or to place it in your store folder for download later or via FTP.', 'STYLE_EXPORTED' => 'Style exported successfully and stored in %s.', + 'STYLE_INSTALLED' => 'Style "%s" has been installed.', + 'STYLE_INSTALLED_EDIT_DETAILS' => 'Click here to edit style details or to change default style.', + 'STYLE_INSTALLED_RETURN_STYLES' => 'Click here to return to installed styles list.', + 'STYLE_INSTALLED_RETURN_UNINSTALLED' => 'Click here to install more styles.', 'STYLE_NAME' => 'Style name', + 'STYLE_NOT_INSTALLED' => 'Style "%s" was not installed.', + 'STYLE_PATH' => 'Style path:', + 'STYLE_PARENT' => 'Parent style:', 'STYLE_TEMPLATE' => 'Template', 'STYLE_THEME' => 'Theme', 'STYLE_USED_BY' => 'Used by (including robots)', @@ -323,8 +321,6 @@ $lang = array_merge($lang, array( 'TEMPLATE_CACHE_EXPLAIN' => 'By default phpBB caches the compiled version of its templates. This decreases the load on the server each time a page is viewed and thus may reduce the page generation time. Here you can view the cache status of each file and delete individual files or the entire cache.', 'TEMPLATE_CACHE_CLEARED' => 'Template cache cleared successfully.', 'TEMPLATE_CACHE_EMPTY' => 'There are no cached templates.', - 'TEMPLATE_DELETED' => 'Template set deleted successfully.', - 'TEMPLATE_DELETE_DEPENDENT' => 'The template set cannot be deleted as there are one or more other template sets inheriting from it:', 'TEMPLATE_DELETED_FS' => 'Template set removed from database but files remain on the filesystem.', 'TEMPLATE_DETAILS_UPDATED' => 'Template details successfully updated.', 'TEMPLATE_EDITOR' => 'Raw HTML template editor', @@ -333,17 +329,12 @@ $lang = array_merge($lang, array( 'TEMPLATE_ERR_CACHE_READ' => 'The cache directory used to store cached versions of template files could not be opened.', 'TEMPLATE_ERR_COPY_LONG' => 'The copyright can be no longer than 60 characters.', 'TEMPLATE_ERR_NAME_CHARS' => 'The template name can only contain alphanumeric characters, -, +, _ and space.', - 'TEMPLATE_ERR_NAME_EXIST' => 'A template set with that name already exists.', 'TEMPLATE_ERR_NAME_LONG' => 'The template name can be no longer than 30 characters.', - 'TEMPLATE_ERR_NOT_TEMPLATE' => 'The archive you specified does not contain a valid template set.', - 'TEMPLATE_ERR_REQUIRED_OR_INCOMPLETE' => 'The new template set requires the template %s to be installed and not inheriting itself.', 'TEMPLATE_ERR_STYLE_NAME' => 'You must supply a name for this template.', - 'TEMPLATE_EXPORT' => 'Export templates', 'TEMPLATE_EXPORT_EXPLAIN' => 'Here you can export a template set in the form of an archive. This archive will contain all the files necessary to install the templates on another board. You may select whether to download the file directly or to place it in your store folder for download later or via FTP.', 'TEMPLATE_EXPORTED' => 'Templates exported successfully and stored in %s.', 'TEMPLATE_FILE' => 'Template file', 'TEMPLATE_FILE_UPDATED' => 'Template file updated successfully.', - 'TEMPLATE_INHERITS' => 'This template sets inherits from %s and thus cannot have a different storage setting than its super template.', 'TEMPLATE_NAME' => 'Template name', 'TEMPLATE_FILE_NOT_WRITABLE'=> 'Unable to write to template file %s. Please check the permissions for the directory and the files.', @@ -371,9 +362,6 @@ $lang = array_merge($lang, array( 'THEME_UPDATED' => 'Theme updated successfully.', 'UNDERLINE' => 'Underline', - 'UNINSTALLED_STYLE' => 'Uninstalled styles', - 'UNINSTALLED_TEMPLATE' => 'Uninstalled templates', - 'UNINSTALLED_THEME' => 'Uninstalled themes', 'UNSET' => 'Undefined', )); -- cgit v1.2.1 From e35a20f957342a320a7c11b0cee1b94025848813 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Wed, 14 Mar 2012 23:47:57 +0200 Subject: [feature/merging-style-components] New acp_styles New acp_styles, completely rewritten PHPBB3-10632 --- phpBB/includes/acp/acp_styles.php | 3295 ++++++++++---------------------- phpBB/includes/acp/info/acp_styles.php | 6 +- 2 files changed, 1002 insertions(+), 2299 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php index 7b449d3b35..acd010b77e 100644 --- a/phpBB/includes/acp/acp_styles.php +++ b/phpBB/includes/acp/acp_styles.php @@ -21,2588 +21,1291 @@ if (!defined('IN_PHPBB')) class acp_styles { var $u_action; + var $u_base_action; + var $s_hidden_fields; + var $mode; + var $styles_path; + var $styles_path_absolute = 'styles'; - var $style_cfg; - var $template_cfg; - var $theme_cfg; - - function main($id, $mode) - { - global $db, $user, $auth, $template, $cache; - global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; - - // Hardcoded template bitfield to add for new templates - $bitfield = new bitfield(); - $bitfield->set(0); - $bitfield->set(1); - $bitfield->set(2); - $bitfield->set(3); - $bitfield->set(4); - $bitfield->set(8); - $bitfield->set(9); - $bitfield->set(11); - $bitfield->set(12); - $this->template_bitfield = $bitfield->get_base64(); - unset($bitfield); - - $user->add_lang('acp/styles'); - - $this->tpl_name = 'acp_styles'; - $this->page_title = 'ACP_CAT_STYLES'; - - $action = request_var('action', ''); - $action = (isset($_POST['add'])) ? 'add' : $action; - $style_id = request_var('id', 0); - - // Fill the configuration variables - $this->style_cfg = $this->template_cfg = $this->theme_cfg = ' -# -# phpBB {MODE} configuration file -# -# @package phpBB3 -# @copyright (c) 2005 phpBB Group -# @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 -# -# -# At the left is the name, please do not change this -# At the right the value is entered -# For on/off options the valid values are on, off, 1, 0, true and false -# -# Values get trimmed, if you want to add a space in front or at the end of -# the value, then enclose the value with single or double quotes. -# Single and double quotes do not need to be escaped. -# -# - -# General Information about this {MODE} -name = {NAME} -copyright = {COPYRIGHT} -version = {VERSION} -'; - - $this->template_cfg .= ' -# Some configuration options - -# Template inheritance -# See http://blog.phpbb.com/2008/07/31/templating-just-got-easier/ -# Set value to empty or this template name to ignore template inheritance. -inherit_from = {INHERIT_FROM} -'; - - // Execute overall actions - switch ($action) - { - case 'delete': - if ($style_id) - { - $this->remove($mode, $style_id); - return; - } - break; - - case 'export': - if ($style_id) - { - $this->export($mode, $style_id); - return; - } - break; - - case 'install': - $this->install($mode); - return; - break; - - case 'add': - $this->add($mode); - return; - break; - - case 'details': - if ($style_id) - { - $this->details($mode, $style_id); - return; - } - break; - - case 'edit': - if ($style_id) - { - switch ($mode) - { - case 'template': - return $this->edit_template($style_id); - case 'theme': - return $this->edit_theme($style_id); - } - } - break; - - case 'cache': - if ($style_id) - { - switch ($mode) - { - case 'template': - return $this->template_cache($style_id); - } - } - break; - } - - switch ($mode) - { - case 'style': - - switch ($action) - { - case 'activate': - case 'deactivate': - - if ($style_id == $config['default_style']) - { - trigger_error($user->lang['DEACTIVATE_DEFAULT'] . adm_back_link($this->u_action), E_USER_WARNING); - } - - if (($action == 'deactivate' && confirm_box(true)) || $action == 'activate') - { - $sql = 'UPDATE ' . STYLES_TABLE . ' - SET style_active = ' . (($action == 'activate') ? 1 : 0) . ' - WHERE style_id = ' . $style_id; - $db->sql_query($sql); - - // Set style to default for any member using deactivated style - if ($action == 'deactivate') - { - $sql = 'UPDATE ' . USERS_TABLE . ' - SET user_style = ' . $config['default_style'] . " - WHERE user_style = $style_id"; - $db->sql_query($sql); - - $sql = 'UPDATE ' . FORUMS_TABLE . ' - SET forum_style = 0 - WHERE forum_style = ' . $style_id; - $db->sql_query($sql); - } - } - else if ($action == 'deactivate') - { - $s_hidden_fields = array( - 'i' => $id, - 'mode' => $mode, - 'action' => $action, - 'style_id' => $style_id, - ); - confirm_box(false, $user->lang['CONFIRM_OPERATION'], build_hidden_fields($s_hidden_fields)); - } - break; - } - - $this->frontend('style', array('details'), array('export', 'delete')); - break; - - case 'template': - - switch ($action) - { - // Clear cache - case 'refresh': - - $sql = 'SELECT * - FROM ' . STYLES_TEMPLATE_TABLE . " - WHERE template_id = $style_id"; - $result = $db->sql_query($sql); - $template_row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - if (!$template_row) - { - trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING); - } - - if (confirm_box(true)) - { - $this->clear_template_cache($template_row); - - trigger_error($user->lang['TEMPLATE_CACHE_CLEARED'] . adm_back_link($this->u_action)); - } - else - { - confirm_box(false, $user->lang['CONFIRM_TEMPLATE_CLEAR_CACHE'], build_hidden_fields(array( - 'i' => $id, - 'mode' => $mode, - 'action' => $action, - 'id' => $style_id - ))); - } - - break; - } - - $this->frontend('template', array('edit', 'cache', 'details'), array('refresh', 'export', 'delete')); - break; - - case 'theme': - $this->frontend('theme', array('edit', 'details'), array('export', 'delete')); - break; - } - } - - /** - * Build Frontend with supplied options - */ - function frontend($mode, $options, $actions) - { - global $user, $template, $db, $config, $phpbb_root_path, $phpEx; - - $sql_from = ''; - $sql_sort = 'LOWER(' . $mode . '_name)'; - $style_count = array(); - - switch ($mode) - { - case 'style': - $sql_from = STYLES_TABLE; - $sql_sort = 'style_active DESC, ' . $sql_sort; - - $sql = 'SELECT user_style, COUNT(user_style) AS style_count - FROM ' . USERS_TABLE . ' - GROUP BY user_style'; - $result = $db->sql_query($sql); - - while ($row = $db->sql_fetchrow($result)) - { - $style_count[$row['user_style']] = $row['style_count']; - } - $db->sql_freeresult($result); - - break; - - case 'template': - $sql_from = STYLES_TEMPLATE_TABLE; - break; - - case 'theme': - $sql_from = STYLES_THEME_TABLE; - break; - - default: - trigger_error($user->lang['NO_MODE'] . adm_back_link($this->u_action), E_USER_WARNING); - } - - $l_prefix = strtoupper($mode); - - $this->page_title = 'ACP_' . $l_prefix . 'S'; - - $template->assign_vars(array( - 'S_FRONTEND' => true, - 'S_STYLE' => ($mode == 'style') ? true : false, - - 'L_TITLE' => $user->lang[$this->page_title], - 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'], - 'L_NAME' => $user->lang[$l_prefix . '_NAME'], - 'L_INSTALLED' => $user->lang['INSTALLED_' . $l_prefix], - 'L_UNINSTALLED' => $user->lang['UNINSTALLED_' . $l_prefix], - 'L_NO_UNINSTALLED' => $user->lang['NO_UNINSTALLED_' . $l_prefix], - 'L_CREATE' => $user->lang['CREATE_' . $l_prefix], - - 'U_ACTION' => $this->u_action, - ) - ); - - $sql = "SELECT * - FROM $sql_from - ORDER BY $sql_sort ASC"; - $result = $db->sql_query($sql); - - $installed = array(); - - $basis_options = ''; - while ($row = $db->sql_fetchrow($result)) - { - $installed[] = $row[$mode . '_name']; - $basis_options .= ''; - - $stylevis = ($mode == 'style' && !$row['style_active']) ? 'activate' : 'deactivate'; - - $s_options = array(); - foreach ($options as $option) - { - $s_options[] = '' . $user->lang[strtoupper($option)] . ''; - } - - $s_actions = array(); - foreach ($actions as $option) - { - $s_actions[] = '' . $user->lang[strtoupper($option)] . ''; - } - - $template->assign_block_vars('installed', array( - 'S_DEFAULT_STYLE' => ($mode == 'style' && $row['style_id'] == $config['default_style']) ? true : false, - 'U_EDIT' => $this->u_action . '&action=' . (($mode == 'style') ? 'details' : 'edit') . '&id=' . $row[$mode . '_id'], - 'U_STYLE_ACT_DEACT' => $this->u_action . '&action=' . $stylevis . '&id=' . $row[$mode . '_id'], - 'L_STYLE_ACT_DEACT' => $user->lang['STYLE_' . strtoupper($stylevis)], - 'S_OPTIONS' => implode(' | ', $s_options), - 'S_ACTIONS' => implode(' | ', $s_actions), - 'U_PREVIEW' => ($mode == 'style') ? append_sid("{$phpbb_root_path}index.$phpEx", "$mode=" . $row[$mode . '_id']) : '', - - 'NAME' => $row[$mode . '_name'], - 'STYLE_COUNT' => ($mode == 'style' && isset($style_count[$row['style_id']])) ? $style_count[$row['style_id']] : 0, - - 'S_INACTIVE' => ($mode == 'style' && !$row['style_active']) ? true : false, - ) - ); - } - $db->sql_freeresult($result); - - // Grab uninstalled items - $new_ary = $cfg = array(); - - $dp = @opendir("{$phpbb_root_path}styles"); - - if ($dp) - { - while (($file = readdir($dp)) !== false) - { - if ($file[0] == '.' || !is_dir($phpbb_root_path . 'styles/' . $file)) - { - continue; - } - - $subpath = ($mode != 'style') ? "$mode/" : ''; - if (file_exists("{$phpbb_root_path}styles/$file/$subpath$mode.cfg")) - { - if ($cfg = file("{$phpbb_root_path}styles/$file/$subpath$mode.cfg")) - { - $items = parse_cfg_file('', $cfg); - $name = (isset($items['name'])) ? trim($items['name']) : false; - - if ($name && !in_array($name, $installed)) - { - $new_ary[] = array( - 'path' => $file, - 'name' => $name, - 'copyright' => $items['copyright'], - ); - } - } - } - } - closedir($dp); - } - - unset($installed); - - if (sizeof($new_ary)) - { - foreach ($new_ary as $cfg) - { - $template->assign_block_vars('uninstalled', array( - 'NAME' => $cfg['name'], - 'COPYRIGHT' => $cfg['copyright'], - 'U_INSTALL' => $this->u_action . '&action=install&path=' . urlencode($cfg['path'])) - ); - } - } - unset($new_ary); - - $template->assign_vars(array( - 'S_BASIS_OPTIONS' => $basis_options) - ); - - } - - /** - * Provides a template editor which allows saving changes to template files on the filesystem or in the database. - * - * @param int $template_id specifies which template set is being edited - */ - function edit_template($template_id) - { - global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template, $safe_mode; - - if (defined('PHPBB_DISABLE_ACP_EDITOR')) - { - trigger_error($user->lang['EDITOR_DISABLED'] . adm_back_link($this->u_action)); - } - - $this->page_title = 'EDIT_TEMPLATE'; - - $filelist = $filelist_cats = array(); - - $template_data = utf8_normalize_nfc(request_var('template_data', '', true)); - $template_data = htmlspecialchars_decode($template_data); - $template_file = utf8_normalize_nfc(request_var('template_file', '', true)); - $text_rows = max(5, min(999, request_var('text_rows', 20))); - $save_changes = (isset($_POST['save'])) ? true : false; - - // make sure template_file path doesn't go upwards - $template_file = preg_replace('#\.{2,}#', '.', $template_file); - - // Retrieve some information about the template - $sql = 'SELECT template_path, template_name - FROM ' . STYLES_TEMPLATE_TABLE . " - WHERE template_id = $template_id"; - $result = $db->sql_query($sql); - $template_info = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - if (!$template_info) - { - trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING); - } - - // Get the filesystem location of the current file - $template_path = "{$phpbb_root_path}styles/{$template_info['template_path']}/template"; - $file = "$template_path/$template_file"; - - if ($template_file) - { - $l_not_writable = sprintf($user->lang['TEMPLATE_FILE_NOT_WRITABLE'], htmlspecialchars($template_file)) . adm_back_link($this->u_action); - - if ($safe_mode) - { - trigger_error($l_not_writable, E_USER_WARNING); - } - - if (file_exists($file) && is_file($file) && is_readable($file)) - { - if (!phpbb_is_writable($file)) - { - trigger_error($l_not_writable, E_USER_WARNING); - } - } - else - { - trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING); - } - } - - if ($save_changes && !check_form_key('acp_styles')) - { - trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action), E_USER_WARNING); - } - else if (!$save_changes) - { - add_form_key('acp_styles'); - } - - // save changes to the template if the user submitted any - if ($save_changes && $template_file) - { - // Try to write the file - if (!($fp = @fopen($file, 'wb'))) - { - // File exists and is writeable, but still not able to be written to - trigger_error($l_not_writable, E_USER_WARNING); - } - fwrite($fp, $template_data); - fclose($fp); - - // destroy the cached version of the template (filename without extension) - $this->clear_template_cache($template_info, array(substr($template_file, 0, -5))); - - $cache->destroy('sql', STYLES_TABLE); - - add_log('admin', 'LOG_TEMPLATE_EDIT', $template_info['template_name'], $template_file); - trigger_error($user->lang['TEMPLATE_FILE_UPDATED'] . adm_back_link($this->u_action . "&action=edit&id=$template_id&text_rows=$text_rows&template_file=$template_file")); - } - - // Generate a category array containing template filenames - - $filelist = filelist($template_path, '', 'html'); - $filelist[''] = array_diff($filelist[''], array('bbcode.html')); - - if ($template_file) - { - $template_data = file_get_contents($file); - - if (!$template_data) - { - trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING); - } - } - - if (empty($filelist[''])) - { - trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING); - } - - // Now create the categories - $filelist_cats[''] = array(); - foreach ($filelist as $pathfile => $file_ary) - { - // Use the directory name as category name - if (!empty($pathfile)) - { - $filelist_cats[$pathfile] = array(); - foreach ($file_ary as $file) - { - $filelist_cats[$pathfile][$pathfile . $file] = $file; - } - } - // or if it's in the main category use the word before the first underscore to group files - else - { - $cats = array(); - foreach ($file_ary as $file) - { - $cats[] = substr($file, 0, strpos($file, '_')); - $filelist_cats[substr($file, 0, strpos($file, '_'))][$file] = $file; - } - - $cats = array_values(array_unique($cats)); - - // we don't need any single element categories so put them into the misc '' category - for ($i = 0, $n = sizeof($cats); $i < $n; $i++) - { - if (sizeof($filelist_cats[$cats[$i]]) == 1 && $cats[$i] !== '') - { - $filelist_cats[''][key($filelist_cats[$cats[$i]])] = current($filelist_cats[$cats[$i]]); - unset($filelist_cats[$cats[$i]]); - } - } - unset($cats); - } - } - unset($filelist); - - // Generate list of categorised template files - $tpl_options = ''; - ksort($filelist_cats); - foreach ($filelist_cats as $category => $tpl_ary) - { - ksort($tpl_ary); - - if (!empty($category)) - { - $tpl_options .= ''; - } - - foreach ($tpl_ary as $filename => $file) - { - $selected = ($template_file == $filename) ? ' selected="selected"' : ''; - $tpl_options .= ''; - } - } - - $template->assign_vars(array( - 'S_EDIT_TEMPLATE' => true, - 'S_HIDDEN_FIELDS' => build_hidden_fields(array('template_file' => $template_file)), - 'S_TEMPLATES' => $tpl_options, - - 'U_ACTION' => $this->u_action . "&action=edit&id=$template_id&text_rows=$text_rows", - 'U_BACK' => $this->u_action, - - 'L_EDIT' => $user->lang['EDIT_TEMPLATE'], - 'L_EDIT_EXPLAIN' => $user->lang['EDIT_TEMPLATE_EXPLAIN'], - 'L_EDITOR' => $user->lang['TEMPLATE_EDITOR'], - 'L_EDITOR_HEIGHT' => $user->lang['TEMPLATE_EDITOR_HEIGHT'], - 'L_FILE' => $user->lang['TEMPLATE_FILE'], - 'L_SELECT' => $user->lang['SELECT_TEMPLATE'], - 'L_SELECTED' => $user->lang['SELECTED_TEMPLATE'], - 'L_SELECTED_FILE' => $user->lang['SELECTED_TEMPLATE_FILE'], - - 'SELECTED_TEMPLATE' => $template_info['template_name'], - 'TEMPLATE_FILE' => $template_file, - 'TEMPLATE_DATA' => utf8_htmlspecialchars($template_data), - 'TEXT_ROWS' => $text_rows) - ); - } - - /** - * Allows the admin to view cached versions of template files and clear single template cache files - * - * @param int $template_id specifies which template's cache is shown - */ - function template_cache($template_id) - { - global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template; - - $source = str_replace('/', '.', request_var('source', '')); - $file_ary = array_diff(request_var('delete', array('')), array('')); - $submit = isset($_POST['submit']) ? true : false; - - $sql = 'SELECT * - FROM ' . STYLES_TEMPLATE_TABLE . " - WHERE template_id = $template_id"; - $result = $db->sql_query($sql); - $template_row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - if (!$template_row) - { - trigger_error($user->lang['NO_TEMPLATE'] . adm_back_link($this->u_action), E_USER_WARNING); - } - - // User wants to delete one or more files ... - if ($submit && $file_ary) - { - $this->clear_template_cache($template_row, $file_ary); - trigger_error($user->lang['TEMPLATE_CACHE_CLEARED'] . adm_back_link($this->u_action . "&action=cache&id=$template_id")); - } - - $cache_prefix = 'tpl_' . str_replace('_', '-', $template_row['template_path']); - - // Someone wants to see the cached source ... so we'll highlight it, - // add line numbers and indent it appropriately. This could be nasty - // on larger source files ... - if ($source && file_exists("{$phpbb_root_path}cache/{$cache_prefix}_$source.html.$phpEx")) - { - adm_page_header($user->lang['TEMPLATE_CACHE']); - - $template->set_filenames(array( - 'body' => 'viewsource.html') - ); - - $template->assign_vars(array( - 'FILENAME' => str_replace('.', '/', $source) . '.html') - ); - - $code = str_replace(array("\r\n", "\r"), array("\n", "\n"), file_get_contents("{$phpbb_root_path}cache/{$cache_prefix}_$source.html.$phpEx")); - - $conf = array('highlight.bg', 'highlight.comment', 'highlight.default', 'highlight.html', 'highlight.keyword', 'highlight.string'); - foreach ($conf as $ini_var) - { - @ini_set($ini_var, str_replace('highlight.', 'syntax', $ini_var)); - } - - $marker = 'MARKER' . time(); - $code = highlight_string(str_replace("\n", $marker, $code), true); - $code = str_replace($marker, "\n", $code); - $str_from = array('', '', '','[', ']', '.', ':'); - $str_to = array('', '', '', '[', ']', '.', ':'); - - $code = str_replace($str_from, $str_to, $code); - $code = preg_replace('#^()\n?(.*?)\n?()$#ism', '$1$2$3', $code); - $code = substr($code, strlen('')); - $code = substr($code, 0, -1 * strlen('')); - $code = explode("\n", $code); - - foreach ($code as $key => $line) - { - $template->assign_block_vars('source', array( - 'LINENUM' => $key + 1, - 'LINE' => preg_replace('#([^ ;]) ([^ &])#', '$1 $2', $line)) - ); - unset($code[$key]); - } - - adm_page_footer(); - } - - // Get a list of cached template files and then retrieve additional information about them - $file_ary = $this->template_cache_filelist($template_row['template_path']); - - foreach ($file_ary as $file) - { - $file = str_replace('/', '.', $file); - - // perform some dirty guessing to get the path right. - // We assume that three dots in a row were '../' - $tpl_file = str_replace('.', '/', $file); - $tpl_file = str_replace('///', '../', $tpl_file); - - $filename = "{$cache_prefix}_$file.html.$phpEx"; - - if (!file_exists("{$phpbb_root_path}cache/$filename")) - { - continue; - } - - $file_tpl = "{$phpbb_root_path}styles/{$template_row['template_path']}/template/$tpl_file.html"; - $inherited = false; - - if (isset($template_row['template_inherits_id']) && $template_row['template_inherits_id'] && !file_exists($file_tpl)) - { - $file_tpl = "{$phpbb_root_path}styles/{$template_row['template_inherit_path']}/template/$tpl_file.html"; - $inherited = true; - } - - $template->assign_block_vars('file', array( - 'U_VIEWSOURCE' => $this->u_action . "&action=cache&id=$template_id&source=$file", - - 'CACHED' => $user->format_date(filemtime("{$phpbb_root_path}cache/$filename")), - 'FILENAME' => $file, - 'FILENAME_PATH' => $file_tpl, - 'FILESIZE' => get_formatted_filesize(filesize("{$phpbb_root_path}cache/$filename")), - 'MODIFIED' => $user->format_date(filemtime($file_tpl)), - )); - } - - $template->assign_vars(array( - 'S_CACHE' => true, - 'S_TEMPLATE' => true, - - 'U_ACTION' => $this->u_action . "&action=cache&id=$template_id", - 'U_BACK' => $this->u_action) - ); - } - - /** - * Provides a css editor and a basic easier to use stylesheet editing tool for less experienced (or lazy) users - * - * @param int $theme_id specifies which theme is being edited - */ - function edit_theme($theme_id) - { - global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template, $safe_mode; - - $this->page_title = 'EDIT_THEME'; - - $filelist = $filelist_cats = array(); - - $theme_data = utf8_normalize_nfc(request_var('template_data', '', true)); - $theme_data = htmlspecialchars_decode($theme_data); - $theme_file = utf8_normalize_nfc(request_var('template_file', '', true)); - $text_rows = max(5, min(999, request_var('text_rows', 20))); - $save_changes = (isset($_POST['save'])) ? true : false; - - // make sure theme_file path doesn't go upwards - $theme_file = str_replace('..', '.', $theme_file); - - // Retrieve some information about the theme - $sql = 'SELECT theme_path, theme_name - FROM ' . STYLES_THEME_TABLE . " - WHERE theme_id = $theme_id"; - $result = $db->sql_query($sql); - - if (!($theme_info = $db->sql_fetchrow($result))) - { - trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING); - } - $db->sql_freeresult($result); - - // Get the filesystem location of the current file - $theme_path = "{$phpbb_root_path}styles/{$theme_info['theme_path']}/theme"; - $file = "$theme_path/$theme_file"; - - if ($theme_file) - { - $l_not_writable = sprintf($user->lang['THEME_FILE_NOT_WRITABLE'], htmlspecialchars($theme_file)) . adm_back_link($this->u_action); - - if ($safe_mode) - { - trigger_error($l_not_writable, E_USER_WARNING); - } - - if (file_exists($file) && is_file($file) && is_readable($file)) - { - if (!phpbb_is_writable($file)) - { - trigger_error($l_not_writable, E_USER_WARNING); - } - } - else - { - trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING); - } - } - - // save changes to the theme if the user submitted any - if ($save_changes && $theme_file) - { - $message = $user->lang['THEME_UPDATED']; - - if (!($fp = @fopen($file, 'wb'))) - { - trigger_error($l_not_writable, E_USER_WARNING); - } - fwrite($fp, $theme_data); - fclose($fp); - - $cache->destroy('sql', STYLES_THEME_TABLE); - add_log('admin', 'LOG_THEME_EDIT_FILE', $theme_info['theme_name'], $theme_file); - - trigger_error($message . adm_back_link($this->u_action . "&action=edit&id=$theme_id&template_file=$theme_file&text_rows=$text_rows")); - } - - // Generate a category array containing theme filenames - $filelist = filelist($theme_path, '', 'css'); - - if ($theme_file) - { - $theme_data = file_get_contents($file); - - if (!$theme_data) - { - trigger_error($user->lang['NO_THEME'] . adm_back_link($this->u_action), E_USER_WARNING); - } - } - - // Now create the categories - $filelist_cats[''] = array(); - foreach ($filelist as $pathfile => $file_ary) - { - // Use the directory name as category name - if (!empty($pathfile)) - { - $filelist_cats[$pathfile] = array(); - foreach ($file_ary as $file) - { - $filelist_cats[$pathfile][$pathfile . $file] = $file; - } - } - // or if it's in the main category use the word before the first underscore to group files - else - { - $cats = array(); - foreach ($file_ary as $file) - { - $cats[] = substr($file, 0, strpos($file, '_')); - $filelist_cats[substr($file, 0, strpos($file, '_'))][$file] = $file; - } - - $cats = array_values(array_unique($cats)); - - // we don't need any single element categories so put them into the misc '' category - for ($i = 0, $n = sizeof($cats); $i < $n; $i++) - { - if (sizeof($filelist_cats[$cats[$i]]) == 1 && $cats[$i] !== '') - { - $filelist_cats[''][key($filelist_cats[$cats[$i]])] = current($filelist_cats[$cats[$i]]); - unset($filelist_cats[$cats[$i]]); - } - } - unset($cats); - } - } - unset($filelist); - - // Generate list of categorised theme files - $tpl_options = ''; - ksort($filelist_cats); - foreach ($filelist_cats as $category => $tpl_ary) - { - ksort($tpl_ary); - - if (!empty($category)) - { - $tpl_options .= ''; - } - - foreach ($tpl_ary as $filename => $file) - { - $selected = ($theme_file == $filename) ? ' selected="selected"' : ''; - $tpl_options .= ''; - } - } + function main($id, $mode) + { + global $user, $phpbb_admin_path, $phpbb_root_path, $phpEx, $template, $request; - $template->assign_vars(array( - 'S_EDIT_THEME' => true, - 'S_HIDDEN_FIELDS' => build_hidden_fields(array('template_file' => $theme_file)), - 'S_TEMPLATES' => $tpl_options, - - 'U_ACTION' => $this->u_action . "&action=edit&id=$theme_id&text_rows=$text_rows", - 'U_BACK' => $this->u_action, - - 'L_EDIT' => $user->lang['EDIT_THEME'], - 'L_EDIT_EXPLAIN' => $user->lang['EDIT_THEME_EXPLAIN'], - 'L_EDITOR' => $user->lang['THEME_EDITOR'], - 'L_EDITOR_HEIGHT' => $user->lang['THEME_EDITOR_HEIGHT'], - 'L_FILE' => $user->lang['THEME_FILE'], - 'L_SELECT' => $user->lang['SELECT_THEME'], - 'L_SELECTED' => $user->lang['SELECTED_THEME'], - 'L_SELECTED_FILE' => $user->lang['SELECTED_THEME_FILE'], - - 'SELECTED_TEMPLATE' => $theme_info['theme_name'], - 'TEMPLATE_FILE' => $theme_file, - 'TEMPLATE_DATA' => utf8_htmlspecialchars($theme_data), - 'TEXT_ROWS' => $text_rows, - )); - } + $this->styles_path = $phpbb_root_path . $this->styles_path_absolute . '/'; - /** - * Remove style/template/theme - */ - function remove($mode, $style_id) - { - global $db, $template, $user, $phpbb_root_path, $cache, $config; + $this->u_base_action = append_sid("{$phpbb_admin_path}index.$phpEx", "i={$id}"); + $this->s_hidden_fields = array( + 'mode' => $mode, + ); - $new_id = request_var('new_id', 0); - $update = (isset($_POST['update'])) ? true : false; - $sql_where = ''; + $user->add_lang('acp/styles'); - switch ($mode) - { - case 'style': - $sql_from = STYLES_TABLE; - $sql_select = 'style_id, style_name, template_id, theme_id'; - $sql_where = 'AND style_active = 1'; - break; - - case 'template': - $sql_from = STYLES_TEMPLATE_TABLE; - $sql_select = 'template_id, template_name, template_path'; - break; - - case 'theme': - $sql_from = STYLES_THEME_TABLE; - $sql_select = 'theme_id, theme_name, theme_path'; - break; - } + $this->tpl_name = 'acp_styles'; + $this->page_title = 'ACP_CAT_STYLES'; + $this->mode = $mode; - if ($mode === 'template' && ($conflicts = $this->check_inheritance($mode, $style_id))) + $action = $request->variable('action', ''); + $post_actions = array('install', 'activate', 'deactivate', 'delete'); + foreach ($post_actions as $key) { - $l_type = strtoupper($mode); - $msg = $user->lang[$l_type . '_DELETE_DEPENDENT']; - foreach ($conflicts as $id => $values) + if (isset($_POST[$key])) { - $msg .= '
    ' . $values['template_name']; + $action = $key; } - - trigger_error($msg . adm_back_link($this->u_action), E_USER_WARNING); - } - - $l_prefix = strtoupper($mode); - - $sql = "SELECT $sql_select - FROM $sql_from - WHERE {$mode}_id = $style_id"; - $result = $db->sql_query($sql); - $style_row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - if (!$style_row) - { - trigger_error($user->lang['NO_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING); } - - $s_only_component = $this->display_component_options($mode, $style_row[$mode . '_id'], $style_row); - - if ($s_only_component) - { - trigger_error($user->lang['ONLY_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING); - } - - if ($update) + if ($action != '') { - if ($mode == 'style') - { - $sql = "DELETE FROM $sql_from - WHERE {$mode}_id = $style_id"; - $db->sql_query($sql); - - $sql = 'UPDATE ' . USERS_TABLE . " - SET user_style = $new_id - WHERE user_style = $style_id"; - $db->sql_query($sql); - - $sql = 'UPDATE ' . FORUMS_TABLE . " - SET forum_style = $new_id - WHERE forum_style = $style_id"; - $db->sql_query($sql); - - if ($style_id == $config['default_style']) - { - set_config('default_style', $new_id); - } - - // Remove the components - $components = array('template', 'theme'); - foreach ($components as $component) - { - $new_id = request_var('new_' . $component . '_id', 0); - $component_id = $style_row[$component . '_id']; - $this->remove_component($component, $component_id, $new_id, $style_id); - } - } - else - { - $this->remove_component($mode, $style_id, $new_id); - } - - $cache->destroy('sql', STYLES_TABLE); - - add_log('admin', 'LOG_' . $l_prefix . '_DELETE', $style_row[$mode . '_name']); - $message = ($mode != 'style') ? $l_prefix . '_DELETED_FS' : $l_prefix . '_DELETED'; - trigger_error($user->lang[$message] . adm_back_link($this->u_action)); + $this->s_hidden_fields['action'] = $action; } - $this->page_title = 'DELETE_' . $l_prefix; - $template->assign_vars(array( - 'S_DELETE' => true, - - 'L_TITLE' => $user->lang[$this->page_title], - 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'], - 'L_NAME' => $user->lang[$l_prefix . '_NAME'], - 'L_REPLACE' => $user->lang['REPLACE_' . $l_prefix], - 'L_REPLACE_EXPLAIN' => $user->lang['REPLACE_' . $l_prefix . '_EXPLAIN'], - - 'U_ACTION' => $this->u_action . "&action=delete&id=$style_id", - 'U_BACK' => $this->u_action, - - 'NAME' => $style_row[$mode . '_name'], + 'U_ACTION' => $this->u_base_action, + 'S_HIDDEN_FIELDS' => build_hidden_fields($this->s_hidden_fields) ) ); - - if ($mode == 'style') + + // Execute actions + switch ($action) { - $template->assign_vars(array( - 'S_DELETE_STYLE' => true, - )); + case 'install': + $this->action_install(); + return; + case 'delete': + $this->action_delete(); + return; + case 'activate': + $this->action_activate(); + return; + case 'deactivate': + $this->action_deactivate(); + return; + case 'details': + $this->action_details(); + return; + default: + $this->frontend(); } } - + /** - * Remove template/theme entry from the database + * Main page */ - function remove_component($component, $component_id, $new_id, $style_id = false) + function frontend() { - global $db; - - if (($new_id == 0) || ($component === 'template' && ($conflicts = $this->check_inheritance($component, $component_id)))) - { - // We can not delete the template, as the user wants to keep the component or an other template is inheriting from this one. - return; - } - - $component_in_use = array(); - if ($component != 'style') - { - $component_in_use = $this->component_in_use($component, $component_id, $style_id); - } - - if (($new_id == -1) && !empty($component_in_use)) - { - // We can not delete the component, as it is still in use - return; - } - - switch ($component) + // Check mode + switch ($this->mode) { - case 'template': - $sql_from = STYLES_TEMPLATE_TABLE; - break; - - case 'theme': - $sql_from = STYLES_THEME_TABLE; - break; + case 'style': + $this->welcome_message('ACP_STYLES', 'ACP_STYLES_EXPLAIN'); + $this->show_installed(); + return; + case 'install': + $this->welcome_message('INSTALL_STYLES', 'INSTALL_STYLES_EXPLAIN'); + $this->show_available(); + return; + case 'cache': + $this->action_cache(); + return; } - - $sql = "DELETE FROM $sql_from - WHERE {$component}_id = $component_id"; - $db->sql_query($sql); - - $sql = 'UPDATE ' . STYLES_TABLE . " - SET {$component}_id = $new_id - WHERE {$component}_id = $component_id"; - $db->sql_query($sql); + global $user; + trigger_error($user->lang['NO_MODE'] . adm_back_link($this->u_action), E_USER_WARNING); } - + /** - * Display the options which can be used to replace a style/template/theme - * - * @return boolean Returns true if the component is the only component and can not be deleted. + * Purge cache */ - function display_component_options($component, $component_id, $style_row = false, $style_id = false) + function action_cache() { - global $db, $template, $user; - - $is_only_component = true; - $component_in_use = array(); - if ($component != 'style') - { - $component_in_use = $this->component_in_use($component, $component_id, $style_id); - } + global $cache, $auth, $user; + + $cache->purge(); - $sql_where = ''; - switch ($component) - { - case 'style': - $sql_from = STYLES_TABLE; - $sql_where = 'WHERE style_active = 1'; - break; - - case 'template': - $sql_from = STYLES_TEMPLATE_TABLE; - $sql_where = 'WHERE template_inherits_id <> ' . $component_id; - break; - - case 'theme': - $sql_from = STYLES_THEME_TABLE; - break; - } + // Clear permissions + $auth->acl_clear_prefetch(); + cache_moderators(); - $s_options = ''; - if (($component != 'style') && empty($component_in_use)) - { - // If it is not in use, there must be another component - $is_only_component = false; - - $sql = "SELECT {$component}_id, {$component}_name - FROM $sql_from - WHERE {$component}_id = {$component_id}"; - $result = $db->sql_query($sql); - $row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - $s_options .= ''; - $s_options .= ''; - } - else - { - $sql = "SELECT {$component}_id, {$component}_name - FROM $sql_from - $sql_where - ORDER BY {$component}_name ASC"; - $result = $db->sql_query($sql); - - $s_keep_option = $s_options = ''; - while ($row = $db->sql_fetchrow($result)) - { - if ($row[$component . '_id'] != $component_id) - { - $is_only_component = false; - $s_options .= ''; - } - else if ($component != 'style') + add_log('admin', 'LOG_PURGE_CACHE'); + + trigger_error($user->lang['PURGED_CACHE'] . adm_back_link($this->u_base_action), E_USER_NOTICE); + } + + /** + * Install style(s) + */ + function action_install() + { + global $user; + + // Get list of styles to install + $dirs = $this->request_vars('dir', '', true); + + // Get list of styles that can be installed + $styles = $this->find_available(false); + + // Install each style + $messages = array(); + $installed_names = array(); + $installed_dirs = array(); + $last_installed = false; + foreach ($dirs as $dir) + { + $found = false; + foreach ($styles as &$style) + { + // Check if: + // 1. Directory matches directory we are looking for + // 2. Style is not installed yet + // 3. Style with same name or directory hasn't been installed already within this function + if ($style['style_path'] == $dir && empty($style['_installed']) && !in_array($style['style_path'], $installed_dirs) && !in_array($style['style_name'], $installed_names)) { - $s_keep_option = ''; + // Install style + $style['style_active'] = 1; + $style['style_id'] = $this->install_style($style); + $style['_installed'] = true; + $found = true; + $last_installed = $style['style_id']; + $installed_names[] = $style['style_name']; + $installed_dirs[] = $style['style_path']; + $messages[] = sprintf($user->lang['STYLE_INSTALLED'], htmlspecialchars($style['style_name'])); } } - $db->sql_freeresult($result); - $s_options = $s_keep_option . $s_options; + if (!$found) + { + $messages[] = sprintf($user->lang['STYLE_NOT_INSTALLED'], htmlspecialchars($dir)); + } } - - if (!$style_row) + + // Show message + if (!count($messages)) { - $template->assign_var('S_REPLACE_' . strtoupper($component) . '_OPTIONS', $s_options); + trigger_error($user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING); } - else + $message = implode('
    ', $messages); + if (count($messages) == 1 && $last_installed !== false) { - $template->assign_var('S_REPLACE_OPTIONS', $s_options); - if ($component == 'style') - { - $components = array('template', 'theme'); - foreach ($components as $component) - { - $this->display_component_options($component, $style_row[$component . '_id'], false, $component_id, true); - } - } + $message .= '

    ' . sprintf($user->lang['STYLE_INSTALLED_EDIT_DETAILS'], $this->u_base_action . '&mode=style&action=details&id=' . $last_installed); } - - return $is_only_component; + $message .= '

    ' . sprintf($user->lang['STYLE_INSTALLED_RETURN_STYLES'], $this->u_base_action . '&mode=style'); + $message .= '

    ' . sprintf($user->lang['STYLE_INSTALLED_RETURN_UNINSTALLED'], $this->u_base_action . '&mode=install'); + trigger_error($message, E_USER_NOTICE); } - + /** - * Check whether the component is still used by another style or component + * Confirm styles deletion */ - function component_in_use($component, $component_id, $style_id = false) + function action_delete() { - global $db; - - $component_in_use = array(); - - if ($style_id) - { - $sql = 'SELECT style_id, style_name - FROM ' . STYLES_TABLE . " - WHERE {$component}_id = {$component_id} - AND style_id <> {$style_id} - ORDER BY style_name ASC"; - } - else - { - $sql = 'SELECT style_id, style_name - FROM ' . STYLES_TABLE . " - WHERE {$component}_id = {$component_id} - ORDER BY style_name ASC"; - } - $result = $db->sql_query($sql); - while ($row = $db->sql_fetchrow($result)) - { - $component_in_use[] = $row['style_name']; - } - $db->sql_freeresult($result); - - if ($component === 'template' && ($conflicts = $this->check_inheritance($component, $component_id))) - { - foreach ($conflicts as $temp_id => $conflict_data) - { - $component_in_use[] = $conflict_data['template_name']; - } + global $user, $config, $template, $request; + + // Get list of styles to delete + $ids = $this->request_vars('id', 0, true); + + // Check if confirmation box was submitted + if (confirm_box(true)) + { + // Delete + $this->action_delete_confirmed($ids, $request->variable('confirm_delete_files', false)); + return; } - - return $component_in_use; + + // Confirm box + $s_hidden = build_hidden_fields(array( + 'action' => 'delete', + 'ids' => $ids + )); + $template->assign_var('S_CONFIRM_DELETE', true); + confirm_box(false, $user->lang['CONFIRM_DELETE_STYLES'], $s_hidden, 'acp_styles.html'); + + // Canceled - show styles list + $this->frontend(); } /** - * Export style or style elements + * Delete styles(s) + * + * @param array $ids List of style IDs + * @param bool $delete_files If true, script will attempt to remove files for selected styles */ - function export($mode, $style_id) + function action_delete_confirmed($ids, $delete_files) { - global $db, $template, $user, $phpbb_root_path, $cache, $phpEx, $config; - - $update = (isset($_POST['update'])) ? true : false; - - $inc_template = request_var('inc_template', 0); - $inc_theme = request_var('inc_theme', 0); - $store = request_var('store', 0); - $format = request_var('format', ''); - - $error = array(); - $methods = array('tar'); - - $available_methods = array('tar.gz' => 'zlib', 'tar.bz2' => 'bz2', 'zip' => 'zlib'); - foreach ($available_methods as $type => $module) - { - if (!@extension_loaded($module)) - { - continue; - } - - $methods[] = $type; - } - - if (!in_array($format, $methods)) - { - $format = 'tar'; - } - - switch ($mode) - { - case 'style': - if ($update && ($inc_template + $inc_theme) < 1) - { - $error[] = $user->lang['STYLE_ERR_MORE_ELEMENTS']; - } - - $name = 'style_name'; - - $sql_select = 's.style_id, s.style_name, s.style_copyright'; - $sql_select .= ($inc_template) ? ', t.*' : ', t.template_name'; - $sql_select .= ($inc_theme) ? ', c.*' : ', c.theme_name'; - $sql_from = STYLES_TABLE . ' s, ' . STYLES_TEMPLATE_TABLE . ' t, ' . STYLES_THEME_TABLE . ' c'; - $sql_where = "s.style_id = $style_id AND t.template_id = s.template_id AND c.theme_id = s.theme_id"; - - $l_prefix = 'STYLE'; - break; - - case 'template': - $name = 'template_name'; + global $db, $user, $cache; - $sql_select = '*'; - $sql_from = STYLES_TEMPLATE_TABLE; - $sql_where = "template_id = $style_id"; + $default = $config['default_style']; + $deleted = array(); + $messages = array(); - $l_prefix = 'TEMPLATE'; - break; - - case 'theme': - $name = 'theme_name'; - - $sql_select = '*'; - $sql_from = STYLES_THEME_TABLE; - $sql_where = "theme_id = $style_id"; - - $l_prefix = 'THEME'; - break; - } - - if ($update && !sizeof($error)) + // Check styles list + foreach ($ids as $id) { - $sql = "SELECT $sql_select - FROM $sql_from - WHERE $sql_where"; - $result = $db->sql_query($sql); - $style_row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - if (!$style_row) - { - trigger_error($user->lang['NO_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING); - } - - $var_ary = array('style_id', 'style_name', 'style_copyright', 'template_id', 'template_name', 'template_path', 'template_copyright', 'template_inherits_id', 'bbcode_bitfield', 'theme_id', 'theme_name', 'theme_path', 'theme_copyright'); - - foreach ($var_ary as $var) - { - if (!isset($style_row[$var])) - { - $style_row[$var] = ''; - } - } - - $files = $data = array(); - - if ($mode == 'style') - { - $style_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['style_name'], $style_row['style_copyright'], $config['version']), $this->style_cfg); - - $style_cfg .= (!$inc_template) ? "\nrequired_template = {$style_row['template_name']}" : ''; - $style_cfg .= (!$inc_theme) ? "\nrequired_theme = {$style_row['theme_name']}" : ''; - - $data[] = array( - 'src' => $style_cfg, - 'prefix' => 'style.cfg' - ); - - unset($style_cfg); - } - - // Export template core code - if ($mode == 'template' || $inc_template) - { - $use_template_name = $style_row['template_name']; - - // Add the inherit from variable, depending on it's use... - if ($style_row['template_inherits_id']) - { - // Get the template name - $sql = 'SELECT template_name - FROM ' . STYLES_TEMPLATE_TABLE . ' - WHERE template_id = ' . (int) $style_row['template_inherits_id']; - $result = $db->sql_query($sql); - $use_template_name = (string) $db->sql_fetchfield('template_name'); - $db->sql_freeresult($result); - } - - $template_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}', '{INHERIT_FROM}'), array($mode, $style_row['template_name'], $style_row['template_copyright'], $config['version'], $use_template_name), $this->template_cfg); - - $template_cfg .= "\n\nbbcode_bitfield = {$style_row['bbcode_bitfield']}"; - - $data[] = array( - 'src' => $template_cfg, - 'prefix' => 'template/template.cfg' - ); - - // This is potentially nasty memory-wise ... - $files[] = array( - 'src' => "styles/{$style_row['template_path']}/template/", - 'prefix-' => "styles/{$style_row['template_path']}/", - 'prefix+' => false, - 'exclude' => 'template.cfg' - ); - unset($template_cfg); - } - - // Export theme core code - if ($mode == 'theme' || $inc_theme) - { - $theme_cfg = str_replace(array('{MODE}', '{NAME}', '{COPYRIGHT}', '{VERSION}'), array($mode, $style_row['theme_name'], $style_row['theme_copyright'], $config['version']), $this->theme_cfg); - - // Read old cfg file - $items = $cache->obtain_cfg_items($style_row); - $items = $items['theme']; - - $files[] = array( - 'src' => "styles/{$style_row['theme_path']}/theme/", - 'prefix-' => "styles/{$style_row['theme_path']}/", - 'prefix+' => false, - 'exclude' => 'theme.cfg', - ); - - $data[] = array( - 'src' => $theme_cfg, - 'prefix' => 'theme/theme.cfg', - ); - - unset($items, $theme_cfg); - } - - switch ($format) + if (!$id) { - case 'tar': - $ext = '.tar'; - break; - - case 'zip': - $ext = '.zip'; - break; - - case 'tar.gz': - $ext = '.tar.gz'; - break; - - case 'tar.bz2': - $ext = '.tar.bz2'; - break; - - default: - $error[] = $user->lang[$l_prefix . '_ERR_ARCHIVE']; + trigger_error($user->lang['INVALID_STYLE_ID'] . adm_back_link($this->u_action), E_USER_WARNING); } - - if (!sizeof($error)) + if ($id == $default) { - include($phpbb_root_path . 'includes/functions_compress.' . $phpEx); - - if ($mode == 'style') - { - $path = preg_replace('#[^\w-]+#', '_', $style_row['style_name']); - } - else - { - $path = $style_row[$mode . '_path']; - } - - if ($format == 'zip') - { - $compress = new compress_zip('w', $phpbb_root_path . "store/$path$ext"); - } - else - { - $compress = new compress_tar('w', $phpbb_root_path . "store/$path$ext", $ext); - } - - if (sizeof($files)) - { - foreach ($files as $file_ary) - { - $compress->add_file($file_ary['src'], $file_ary['prefix-'], $file_ary['prefix+'], $file_ary['exclude']); - } - } - - if (sizeof($data)) - { - foreach ($data as $data_ary) - { - $compress->add_data($data_ary['src'], $data_ary['prefix']); - } - } - - $compress->close(); - - add_log('admin', 'LOG_' . $l_prefix . '_EXPORT', $style_row[$mode . '_name']); - - if (!$store) - { - $compress->download($path); - @unlink("{$phpbb_root_path}store/$path$ext"); - exit; - } - - trigger_error(sprintf($user->lang[$l_prefix . '_EXPORTED'], "store/$path$ext") . adm_back_link($this->u_action)); + trigger_error($user->lang['DELETE_DEFAULT'] . adm_back_link($this->u_action), E_USER_WARNING); } + $deleted[$id] = false; } - $sql = "SELECT {$mode}_id, {$mode}_name - FROM " . (($mode == 'style') ? STYLES_TABLE : $sql_from) . " - WHERE {$mode}_id = $style_id"; + // Order by reversed style_id, so parent styles would be removed after child styles + // This way parent and child styles can be removed in same function call + $sql = 'SELECT * + FROM ' . STYLES_TABLE . ' + WHERE style_id IN (' . implode(', ', $ids) . ') + ORDER BY style_id DESC'; $result = $db->sql_query($sql); - $style_row = $db->sql_fetchrow($result); + + $rows = $db->sql_fetchrowset($result); $db->sql_freeresult($result); - if (!$style_row) + // Delete each style + $deleted = array(); + foreach ($rows as $style) { - trigger_error($user->lang['NO_' . $l_prefix] . adm_back_link($this->u_action), E_USER_WARNING); + $result = $this->delete_style($style, $delete_files); + + if (is_string($result)) + { + $messages[] = $result; + continue; + } + $messages[] = sprintf($user->lang['STYLE_DELETED'], $style['style_name']); + $deleted[] = $style['style_name']; + + // Attempt to delete files + if ($delete_files) + { + $messages[] = sprintf($user->lang[$this->delete_style_files($style['style_path']) ? 'DELETE_STYLE_FILES_SUCCESS' : 'DELETE_STYLE_FILES_FAILED'], $style['style_name']); + } } - $this->page_title = $l_prefix . '_EXPORT'; + if (empty($messages)) + { + // Nothing to delete? + trigger_error($user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING); + } - $format_buttons = ''; - foreach ($methods as $method) + // Log action + if (count($deleted)) { - $format_buttons .= ''; + add_log('admin', 'LOG_STYLE_DELETE', implode(', ', $deleted)); } - $template->assign_vars(array( - 'S_EXPORT' => true, - 'S_ERROR_MSG' => (sizeof($error)) ? true : false, - 'S_STYLE' => ($mode == 'style') ? true : false, + // Clear cache + $cache->purge(); - 'L_TITLE' => $user->lang[$this->page_title], - 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'], - 'L_NAME' => $user->lang[$l_prefix . '_NAME'], + // Show message + trigger_error(implode('
    ', $messages) . adm_back_link($this->u_action), E_USER_NOTICE); + } - 'U_ACTION' => $this->u_action . '&action=export&id=' . $style_id, - 'U_BACK' => $this->u_action, + /** + * Activate styles + */ + function action_activate() + { + global $user, $config, $cache, $db; + + // Get list of styles to activate + $ids = $this->request_vars('id', 0, true); + + // Activate styles + $sql = 'UPDATE ' . STYLES_TABLE . ' + SET style_active = 1 + WHERE style_id IN (' . implode(', ', $ids) . ')'; + $db->sql_query($sql); - 'ERROR_MSG' => (sizeof($error)) ? implode('
    ', $error) : '', - 'NAME' => $style_row[$mode . '_name'], - 'FORMAT_BUTTONS' => $format_buttons) - ); + // Purge cache + $cache->destroy('sql', STYLES_TABLE); + + // Show styles list + $this->frontend(); } /** - * Display details + * Deactivate styles */ - function details($mode, $style_id) + function action_deactivate() { - global $template, $db, $config, $user, $safe_mode, $cache, $phpbb_root_path; + global $user, $config, $cache, $db; - $update = (isset($_POST['update'])) ? true : false; - $l_type = strtoupper($mode); + // Get list of styles to deactivate + $ids = $this->request_vars('id', 0, true); - $error = array(); - $element_ary = array('template' => STYLES_TEMPLATE_TABLE, 'theme' => STYLES_THEME_TABLE); - - switch ($mode) + // Check for default style + foreach ($ids as $id) { - case 'style': - $sql_from = STYLES_TABLE; - break; + if ($id == $config['default_style']) + { + trigger_error($user->lang['DEACTIVATE_DEFAULT'] . adm_back_link($this->u_action), E_USER_WARNING); + } + } - case 'template': - $sql_from = STYLES_TEMPLATE_TABLE; - break; + // Reset default style for users who use selected styles + $sql = 'UPDATE ' . USERS_TABLE . ' + SET user_style = 0 + WHERE user_style IN (' . implode(', ', $ids) . ')'; + $db->sql_query($sql); - case 'theme': - $sql_from = STYLES_THEME_TABLE; - break; - } + // Deactivate styles + $sql = 'UPDATE ' . STYLES_TABLE . ' + SET style_active = 0 + WHERE style_id IN (' . implode(', ', $ids) . ')'; + $db->sql_query($sql); - $sql = "SELECT * - FROM $sql_from - WHERE {$mode}_id = $style_id"; - $result = $db->sql_query($sql); - $style_row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); + // Purge cache + $cache->destroy('sql', STYLES_TABLE); - if (!$style_row) + // Show styles list + $this->frontend(); + } + + /** + * Show style details + */ + function action_details() + { + global $user, $config, $db, $request, $template, $cache; + + $id = $request->variable('id', 0); + if (!$id) { - trigger_error($user->lang['NO_' . $l_type] . adm_back_link($this->u_action), E_USER_WARNING); + trigger_error($user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING); } - - $style_row['style_default'] = ($mode == 'style' && $config['default_style'] == $style_id) ? 1 : 0; - - if ($update) + + // Get all styles + $styles = $this->get_styles(); + usort($styles, 'acp_styles::sort_styles'); + + // Find current style + $style = false; + foreach ($styles as $row) { - $name = utf8_normalize_nfc(request_var('name', '', true)); - $copyright = utf8_normalize_nfc(request_var('copyright', '', true)); - - $template_id = request_var('template_id', 0); - $theme_id = request_var('theme_id', 0); - - $style_active = request_var('style_active', 0); - $style_default = request_var('style_default', 0); - - // If the admin selected the style to be the default style, but forgot to activate it... we will do it for him - if ($style_default) - { - $style_active = 1; - } - - $sql = "SELECT {$mode}_id, {$mode}_name - FROM $sql_from - WHERE {$mode}_id <> $style_id - AND LOWER({$mode}_name) = '" . $db->sql_escape(strtolower($name)) . "'"; - $result = $db->sql_query($sql); - $conflict = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - if ($mode == 'style' && (!$template_id || !$theme_id)) + if ($row['style_id'] == $id) { - $error[] = $user->lang['STYLE_ERR_NO_IDS']; + $style = $row; + break; } + } - if ($mode == 'style' && $style_row['style_active'] && !$style_active && $config['default_style'] == $style_id) + if ($style === false) + { + trigger_error($user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING); + } + + // Find all available parent styles + $list = $this->find_possible_parents($styles, $id); + + // Change data + if ($request->variable('update', false)) + { + $update = array( + 'style_name' => trim($request->variable('style_name', $style['style_name'])), + 'style_parent_id' => $request->variable('style_parent', (int) $style['style_parent_id']), + 'style_active' => $request->variable('style_active', (int) $style['style_active']), + ); + $update_action = $this->u_action . '&action=details&id=' . $id; + + // Check style name + if ($update['style_name'] != $style['style_name']) { - $error[] = $user->lang['DEACTIVATE_DEFAULT']; + if (!strlen($update['style_name'])) + { + trigger_error($user->lang['STYLE_ERR_STYLE_NAME'] . adm_back_link($update_action), E_USER_WARNING); + } + foreach ($styles as $row) + { + if ($row['style_name'] == $update['style_name']) + { + trigger_error($user->lang['STYLE_ERR_NAME_EXIST'] . adm_back_link($update_action), E_USER_WARNING); + } + } } - - if (!$name || $conflict) + else { - $error[] = $user->lang[$l_type . '_ERR_STYLE_NAME']; + unset($update['style_name']); } - - if (!sizeof($error)) + + // Check parent style id + if ($update['style_parent_id'] != $style['style_parent_id']) { - // Check length settings - if (utf8_strlen($name) > 30) + if ($update['style_parent_id'] != 0) { - $error[] = $user->lang[$l_type . '_ERR_NAME_LONG']; + $found = false; + foreach ($list as $row) + { + if ($row['style_id'] == $update['style_parent_id']) + { + $found = true; + $update['style_parent_tree'] = ($row['style_parent_tree'] != '' ? $row['style_parent_tree'] . '/' : '') . $row['style_path']; + break; + } + } + if (!$found) + { + trigger_error($user->lang['STYLE_ERR_INVALID_PARENT'] . adm_back_link($update_action), E_USER_WARNING); + } } - - if (utf8_strlen($copyright) > 60) + else { - $error[] = $user->lang[$l_type . '_ERR_COPY_LONG']; + $update['style_parent_tree'] = ''; } } - } - - if ($update && sizeof($error)) - { - $style_row = array_merge($style_row, array( - 'template_id' => $template_id, - 'theme_id' => $theme_id, - 'style_active' => $style_active, - $mode . '_name' => $name, - $mode . '_copyright' => $copyright) - ); - } - - // User has submitted form and no errors have occurred - if ($update && !sizeof($error)) - { - $sql_ary = array( - $mode . '_name' => $name, - $mode . '_copyright' => $copyright - ); - - switch ($mode) + else { - case 'style': - - $sql_ary += array( - 'template_id' => (int) $template_id, - 'theme_id' => (int) $theme_id, - 'style_active' => (int) $style_active, - ); - break; - - case 'theme': - break; - - case 'template': - break; + unset($update['style_parent_id']); } - - if (sizeof($sql_ary)) + + // Check style_active + if ($update['style_active'] != $style['style_active']) { - $sql = "UPDATE $sql_from - SET " . $db->sql_build_array('UPDATE', $sql_ary) . " - WHERE {$mode}_id = $style_id"; - $db->sql_query($sql); - - // Making this the default style? - if ($mode == 'style' && $style_default) + if (!$update['style_active'] && $config['default_style'] == $style['style_id']) { - set_config('default_style', $style_id); + trigger_error($user->lang['DEACTIVATE_DEFAULT'] . adm_back_link($update_action), E_USER_WARNING); } } - - $cache->destroy('sql', STYLES_TABLE); - - add_log('admin', 'LOG_' . $l_type . '_EDIT_DETAILS', $name); - if (sizeof($error)) + else { - trigger_error(implode('
    ', $error) . adm_back_link($this->u_action), E_USER_WARNING); + unset($update['style_active']); } - else + + // Update data + if (count($update)) { - trigger_error($user->lang[$l_type . '_DETAILS_UPDATED'] . adm_back_link($this->u_action)); + $sql = 'UPDATE ' . STYLES_TABLE . ' + SET ' . $db->sql_build_array('UPDATE', $update) . " + WHERE style_id = $id"; + $db->sql_query($sql); + + $style = array_merge($style, $update); + + if (isset($update['style_parent_id'])) + { + // Update styles tree + $styles = $this->get_styles(); + if ($this->update_styles_tree(&$styles, $style)) + { + // Something was changed in styles tree, purge all cache + $cache->purge(); + } + } + add_log('admin', 'LOG_STYLE_EDIT_DETAILS', $style['style_name']); } - } - - if ($mode == 'style') - { - foreach ($element_ary as $element => $table) + + // Update default style + $default = $request->variable('style_default', 0); + if ($default) { - $sql = "SELECT {$element}_id, {$element}_name - FROM $table - ORDER BY {$element}_id ASC"; - $result = $db->sql_query($sql); - - ${$element . '_options'} = ''; - while ($row = $db->sql_fetchrow($result)) + if (!$style['style_active']) { - $selected = ($row[$element . '_id'] == $style_row[$element . '_id']) ? ' selected="selected"' : ''; - ${$element . '_options'} .= ''; + trigger_error($user->lang['STYLE_DEFAULT_CHANGE_INACTIVE'] . adm_back_link($update_action), E_USER_WARNING); } - $db->sql_freeresult($result); + set_config('default_style', $id); + $cache->purge(); } + + // Show styles list + $this->frontend(); + return; } - - if ($mode == 'template') + + // Show parent styles + foreach ($list as $row) { - $super = array(); - if (isset($style_row[$mode . '_inherits_id']) && $style_row['template_inherits_id']) - { - $super = $this->get_super($mode, $style_row['template_id']); - } + $template->assign_block_vars('parent_styles', array( + 'STYLE_ID' => $row['style_id'], + 'STYLE_NAME' => htmlspecialchars($row['style_name']), + 'LEVEL' => $row['level'], + 'SPACER' => str_repeat('  ', $row['level']), + ) + ); } - - $this->page_title = 'EDIT_DETAILS_' . $l_type; - + + // Show style details $template->assign_vars(array( - 'S_DETAILS' => true, - 'S_ERROR_MSG' => (sizeof($error)) ? true : false, - 'S_STYLE' => ($mode == 'style') ? true : false, - 'S_TEMPLATE' => ($mode == 'template') ? true : false, - 'S_THEME' => ($mode == 'theme') ? true : false, - 'S_STYLE_ACTIVE' => (isset($style_row['style_active'])) ? $style_row['style_active'] : 0, - 'S_STYLE_DEFAULT' => (isset($style_row['style_default'])) ? $style_row['style_default'] : 0, - 'S_SUPERTEMPLATE' => (isset($style_row[$mode . '_inherits_id']) && $style_row[$mode . '_inherits_id']) ? $super['template_name'] : 0, - - 'S_TEMPLATE_OPTIONS' => ($mode == 'style') ? $template_options : '', - 'S_THEME_OPTIONS' => ($mode == 'style') ? $theme_options : '', - - 'U_ACTION' => $this->u_action . '&action=details&id=' . $style_id, - 'U_BACK' => $this->u_action, - - 'L_TITLE' => $user->lang[$this->page_title], - 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'], - 'L_NAME' => $user->lang[$l_type . '_NAME'], - - 'ERROR_MSG' => (sizeof($error)) ? implode('
    ', $error) : '', - 'NAME' => $style_row[$mode . '_name'], - 'COPYRIGHT' => $style_row[$mode . '_copyright'], + 'S_STYLE_DETAILS' => true, + 'STYLE_ID' => $style['style_id'], + 'STYLE_NAME' => htmlspecialchars($style['style_name']), + 'STYLE_PATH' => htmlspecialchars($style['style_path']), + 'STYLE_COPYRIGHT' => strip_tags($style['style_copyright']), + 'STYLE_PARENT' => $style['style_parent_id'], + 'S_STYLE_ACTIVE' => $style['style_active'], + 'S_STYLE_DEFAULT' => ($style['style_id'] == $config['default_style']) ) ); } /** - * Load css file contents + * List installed styles */ - function load_css_file($path, $filename) + function show_installed() { - global $phpbb_root_path; + global $user, $template; - $file = "{$phpbb_root_path}styles/$path/theme/$filename"; + // Get all installed styles + $styles = $this->get_styles(); - if (file_exists($file) && ($content = file_get_contents($file))) - { - $content = trim($content); - } - else + if (!count($styles)) { - $content = ''; + trigger_error($user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING); } - if (defined('DEBUG')) - { - $content = "/* BEGIN @include $filename */ \n $content \n /* END @include $filename */ \n"; - } - - return $content; - } + + usort($styles, 'acp_styles::sort_styles'); - /** - * Returns a string containing the value that should be used for the theme_data column in the theme database table. - * Includes contents of files loaded via @import - * - * @param array $theme_row is an associative array containing the theme's current database entry - * @param mixed $stylesheet can either be the new content for the stylesheet or false to load from the standard file - * @param string $root_path should only be used in case you want to use a different root path than "{$phpbb_root_path}styles/{$theme_row['theme_path']}" - * - * @return string Stylesheet data for theme_data column in the theme table - */ - function db_theme_data($theme_row, $stylesheet = false, $root_path = '') - { - global $phpbb_root_path; - - if (!$root_path) + // Get users + $users = $this->get_users(); + + // Add users counter to rows + foreach ($styles as &$style) { - $root_path = $phpbb_root_path . 'styles/' . $theme_row['theme_path']; + $style['_users'] = isset($users[$style['style_id']]) ? $users[$style['style_id']] : 0; } + + // Set up styles list variables + // Addons should increase this number and update template variable + $this->styles_list_cols = 4; + $template->assign_var('STYLES_LIST_COLS', $this->styles_list_cols); - if (!$stylesheet) + // Show styles list + $this->show_styles_list(&$styles, 0, 0); + + // Show styles with invalid inherits_id + foreach ($styles as $style) { - $stylesheet = ''; - if (file_exists($root_path . '/theme/stylesheet.css')) + if (empty($style['_shown'])) { - $stylesheet = file_get_contents($root_path . '/theme/stylesheet.css'); + $style['_note'] = sprintf($user->lang['REQUIRES_STYLE'], htmlspecialchars($style['style_parent_tree'])); + $this->list_style($style, 0); } } - // Match CSS imports - $matches = array(); - preg_match_all('/@import url\((["\'])(.*)\1\);/i', $stylesheet, $matches); + // Add buttons + $template->assign_block_vars('extra_actions', array( + 'ACTION_NAME' => 'activate', + 'L_ACTION' => $user->lang['STYLE_ACTIVATE'], + ) + ); - // remove commented stylesheets (very simple parser, allows only whitespace - // around an @import statement) - preg_match_all('#/\*\s*@import url\((["\'])(.*)\1\);\s\*/#i', $stylesheet, $commented); - $matches[2] = array_diff($matches[2], $commented[2]); + $template->assign_block_vars('extra_actions', array( + 'ACTION_NAME' => 'deactivate', + 'L_ACTION' => $user->lang['STYLE_DEACTIVATE'], + ) + ); - if (sizeof($matches)) + if (isset($this->style_counters) && $this->style_counters['total'] > 1) { - foreach ($matches[0] as $idx => $match) - { - if (isset($matches[2][$idx])) - { - $stylesheet = str_replace($match, acp_styles::load_css_file($theme_row['theme_path'], $matches[2][$idx]), $stylesheet); - } - } + $template->assign_block_vars('extra_actions', array( + 'ACTION_NAME' => 'delete', + 'L_ACTION' => $user->lang['DELETE'], + ) + ); } - - // adjust paths - return str_replace('./', 'styles/' . $theme_row['theme_path'] . '/theme/', $stylesheet); } /** - * Returns an array containing all template filenames for one template that are currently cached. - * - * @param string $template_path contains the name of the template's folder in /styles/ - * - * @return array of filenames that exist in /styles/$template_path/template/ (without extension!) + * Show list of styles that can be installed */ - function template_cache_filelist($template_path) + function show_available() { - global $phpbb_root_path, $phpEx, $user; - - $cache_prefix = 'tpl_' . str_replace('_', '-', $template_path); - - if (!($dp = @opendir("{$phpbb_root_path}cache"))) + global $user, $template; + + // Get list of styles + $styles = $this->find_available(true); + + // Show styles + if (empty($styles)) { - trigger_error($user->lang['TEMPLATE_ERR_CACHE_READ'] . adm_back_link($this->u_action), E_USER_WARNING); + trigger_error($user->lang['NO_UNINSTALLED_STYLE'] . adm_back_link($this->u_action), E_USER_NOTICE); } + + usort($styles, 'acp_styles::sort_styles'); - $file_ary = array(); - while ($file = readdir($dp)) + $this->styles_list_cols = 3; + $template->assign_vars(array( + 'STYLES_LIST_COLS' => $this->styles_list_cols, + 'STYLES_LIST_HIDE_COUNT' => true + ) + ); + + // Show styles + foreach ($styles as &$style) { - if ($file[0] == '.') + // Check if style has a parent style in styles list + $has_parent = false; + if ($style['_inherit_name'] != '') { - continue; - } - - if (is_file($phpbb_root_path . 'cache/' . $file) && (strpos($file, $cache_prefix) === 0)) - { - $file_ary[] = str_replace('.', '/', preg_replace('#^' . preg_quote($cache_prefix, '#') . '_(.*?)\.html\.' . $phpEx . '$#i', '\1', $file)); + foreach ($styles as $parent_style) + { + if ($parent_style['style_name'] == $style['_inherit_name'] && empty($parent_style['_shown'])) + { + // Show parent style first + $has_parent = true; + } + } } - } - closedir($dp); - - return $file_ary; - } - - /** - * Destroys cached versions of template files - * - * @param array $template_row contains the template's row in the STYLES_TEMPLATE_TABLE database table - * @param mixed $file_ary is optional and may contain an array of template file names which should be refreshed in the cache. - * The file names should be the original template file names and not the cache file names. - */ - function clear_template_cache($template_row, $file_ary = false) - { - global $phpbb_root_path, $phpEx, $user; - - $cache_prefix = 'tpl_' . str_replace('_', '-', $template_row['template_path']); - - if (!$file_ary || !is_array($file_ary)) - { - $file_ary = $this->template_cache_filelist($template_row['template_path']); - $log_file_list = $user->lang['ALL_FILES']; - } - else - { - $log_file_list = implode(', ', $file_ary); - } - - foreach ($file_ary as $file) - { - $file = str_replace('/', '.', $file); - - $file = "{$phpbb_root_path}cache/{$cache_prefix}_$file.html.$phpEx"; - if (file_exists($file) && is_file($file)) + if (!$has_parent) { - @unlink($file); + $this->list_style(&$style, 0); + $this->show_available_child_styles(&$styles, $style['style_name'], 1); } } - unset($file_ary); - - add_log('admin', 'LOG_TEMPLATE_CACHE_CLEARED', $template_row['template_name'], $log_file_list); - } - - /** - * Install Style/Template/Theme - */ - function install($mode) - { - global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template; - - $l_type = strtoupper($mode); - - $error = $installcfg = $style_row = array(); - $root_path = $cfg_file = ''; - $element_ary = array('template' => STYLES_TEMPLATE_TABLE, 'theme' => STYLES_THEME_TABLE); - - $install_path = request_var('path', ''); - $update = (isset($_POST['update'])) ? true : false; - - // Installing, obtain cfg file contents - if ($install_path) + + // Show styles that do not have parent style in styles list + foreach ($styles as $style) { - $root_path = $phpbb_root_path . 'styles/' . $install_path . '/'; - $cfg_file = ($mode == 'style') ? "$root_path$mode.cfg" : "$root_path$mode/$mode.cfg"; - - if (!file_exists($cfg_file)) - { - $error[] = $user->lang[$l_type . '_ERR_NOT_' . $l_type]; - } - else + if (empty($style['_shown'])) { - $installcfg = parse_cfg_file($cfg_file); + $this->list_style(&$style, 0); } } - - // Installing - if (sizeof($installcfg)) + + // Add button + if (isset($this->style_counters) && $this->style_counters['caninstall'] > 0) { - $name = $installcfg['name']; - $copyright = $installcfg['copyright']; - $version = $installcfg['version']; - - $style_row = array( - $mode . '_id' => 0, - $mode . '_name' => '', - $mode . '_copyright' => '' + $template->assign_block_vars('extra_actions', array( + 'ACTION_NAME' => 'install', + 'L_ACTION' => $user->lang['INSTALL_STYLES'], + ) ); - - switch ($mode) - { - case 'style': - - $style_row = array( - 'style_id' => 0, - 'style_name' => $installcfg['name'], - 'style_copyright' => $installcfg['copyright'] - ); - - $reqd_template = (isset($installcfg['required_template'])) ? $installcfg['required_template'] : false; - $reqd_theme = (isset($installcfg['required_theme'])) ? $installcfg['required_theme'] : false; - - // Check to see if each element is already installed, if it is grab the id - foreach ($element_ary as $element => $table) - { - $style_row = array_merge($style_row, array( - $element . '_id' => 0, - $element . '_name' => '', - $element . '_copyright' => '') - ); - - $this->test_installed($element, $error, (${'reqd_' . $element}) ? $phpbb_root_path . 'styles/' . $reqd_template . '/' : $root_path, ${'reqd_' . $element}, $style_row[$element . '_id'], $style_row[$element . '_name'], $style_row[$element . '_copyright']); - - if (!$style_row[$element . '_name']) - { - $style_row[$element . '_name'] = $reqd_template; - } - - // Merge other information to installcfg... if present - $cfg_file = $phpbb_root_path . 'styles/' . $install_path . '/' . $element . '/' . $element . '.cfg'; - - if (file_exists($cfg_file)) - { - $cfg_contents = parse_cfg_file($cfg_file); - - // Merge only specific things. We may need them later. - foreach (array('inherit_from') as $key) - { - if (!empty($cfg_contents[$key]) && !isset($installcfg[$key])) - { - $installcfg[$key] = $cfg_contents[$key]; - } - } - } - } - - break; - - case 'template': - $this->test_installed('template', $error, $root_path, false, $style_row['template_id'], $style_row['template_name'], $style_row['template_copyright']); - break; - - case 'theme': - $this->test_installed('theme', $error, $root_path, false, $style_row['theme_id'], $style_row['theme_name'], $style_row['theme_copyright']); - break; - } - } - else - { - trigger_error($user->lang['NO_' . $l_type] . adm_back_link($this->u_action), E_USER_WARNING); - } - - $style_row['style_active'] = request_var('style_active', 1); - $style_row['style_default'] = request_var('style_default', 0); - - // User has submitted form and no errors have occurred - if ($update && !sizeof($error)) - { - if ($mode == 'style') - { - foreach ($element_ary as $element => $table) - { - ${$element . '_root_path'} = (${'reqd_' . $element}) ? $phpbb_root_path . 'styles/' . ${'reqd_' . $element} . '/' : false; - ${$element . '_path'} = (${'reqd_' . $element}) ? ${'reqd_' . $element} : false; - } - $this->install_style($error, 'install', $root_path, $style_row['style_id'], $style_row['style_name'], $install_path, $style_row['style_copyright'], $style_row['style_active'], $style_row['style_default'], $style_row, $template_root_path, $template_path, $theme_root_path, $theme_path); - } - else - { - $this->install_element($mode, $error, 'install', $root_path, $style_row[$mode . '_id'], $style_row[$mode . '_name'], $install_path, $style_row[$mode . '_copyright']); - } - - if (!sizeof($error)) - { - $cache->destroy('sql', STYLES_TABLE); - - trigger_error($user->lang[$l_type . '_ADDED'] . adm_back_link($this->u_action)); - } } - - $this->page_title = 'INSTALL_' . $l_type; - - $template->assign_vars(array( - 'S_DETAILS' => true, - 'S_INSTALL' => true, - 'S_ERROR_MSG' => (sizeof($error)) ? true : false, - 'S_LOCATION' => (isset($installcfg['inherit_from']) && $installcfg['inherit_from']) ? false : true, - 'S_STYLE' => ($mode == 'style') ? true : false, - 'S_TEMPLATE' => ($mode == 'template') ? true : false, - 'S_SUPERTEMPLATE' => (isset($installcfg['inherit_from'])) ? $installcfg['inherit_from'] : '', - 'S_THEME' => ($mode == 'theme') ? true : false, - - 'S_STYLE_ACTIVE' => (isset($style_row['style_active'])) ? $style_row['style_active'] : 0, - 'S_STYLE_DEFAULT' => (isset($style_row['style_default'])) ? $style_row['style_default'] : 0, - - 'U_ACTION' => $this->u_action . "&action=install&path=" . urlencode($install_path), - 'U_BACK' => $this->u_action, - - 'L_TITLE' => $user->lang[$this->page_title], - 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'], - 'L_NAME' => $user->lang[$l_type . '_NAME'], - - 'ERROR_MSG' => (sizeof($error)) ? implode('
    ', $error) : '', - 'NAME' => $style_row[$mode . '_name'], - 'COPYRIGHT' => $style_row[$mode . '_copyright'], - 'TEMPLATE_NAME' => ($mode == 'style') ? $style_row['template_name'] : '', - 'THEME_NAME' => ($mode == 'style') ? $style_row['theme_name'] : '') - ); } - + /** - * Add new style + * Find styles available for installation + * + * @param bool $all if true, function will return all installable styles. if false, function will return only styles that can be installed + * @returns array list of styles */ - function add($mode) + function find_available($all) { - global $phpbb_root_path, $phpEx, $config, $db, $cache, $user, $template; - - $l_type = strtoupper($mode); - $element_ary = array('template' => STYLES_TEMPLATE_TABLE, 'theme' => STYLES_THEME_TABLE); - $error = array(); - - $style_row = array( - $mode . '_name' => utf8_normalize_nfc(request_var('name', '', true)), - $mode . '_copyright' => utf8_normalize_nfc(request_var('copyright', '', true)), - 'template_id' => 0, - 'theme_id' => 0, - 'style_active' => request_var('style_active', 1), - 'style_default' => request_var('style_default', 0), - ); + global $user; - $basis = request_var('basis', 0); - $update = (isset($_POST['update'])) ? true : false; + // Get list of installed styles + $installed = $this->get_styles(); - if ($basis) + $installed_dirs = array(); + $installed_names = array(); + foreach ($installed as $style) { - switch ($mode) - { - case 'style': - $sql_select = 'template_id, theme_id'; - $sql_from = STYLES_TABLE; - break; - - case 'template': - $sql_select = 'template_id'; - $sql_from = STYLES_TEMPLATE_TABLE; - break; - - case 'theme': - $sql_select = 'theme_id'; - $sql_from = STYLES_THEME_TABLE; - break; - } - - $sql = "SELECT $sql_select - FROM $sql_from - WHERE {$mode}_id = $basis"; - $result = $db->sql_query($sql); - $row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - if (!$row) + $installed_dirs[] = $style['style_path']; + $installed_names[$style['style_name']] = array( + 'path' => $style['style_path'], + 'id' => $style['style_id'], + 'parent' => $style['style_parent_id'], + 'tree' => (strlen($style['style_parent_tree']) ? $style['style_parent_tree'] . '/' : '') . $style['style_path'], + ); + } + + // Get list of directories + $dirs = $this->find_style_dirs(); + + // Find styles that can be installed + $styles = array(); + foreach ($dirs as $dir) + { + if (in_array($dir, $installed_dirs)) { - $error[] = $user->lang['NO_' . $l_type]; + // Style is already installed + continue; } - - if (!sizeof($error)) + $cfg = $this->read_style_cfg($dir); + if ($cfg === false) { - $style_row['template_id'] = (isset($row['template_id'])) ? $row['template_id'] : $style_row['template_id']; - $style_row['theme_id'] = (isset($row['theme_id'])) ? $row['theme_id'] : $style_row['theme_id']; + // Invalid style.cfg + continue; } - } - - if ($update) - { - $style_row['template_id'] = request_var('template_id', $style_row['template_id']); - $style_row['theme_id'] = request_var('theme_id', $style_row['theme_id']); - if ($mode == 'style' && (!$style_row['template_id'] || !$style_row['theme_id'])) - { - $error[] = $user->lang['STYLE_ERR_NO_IDS']; - } - } + // Style should be available for installation + $parent = $cfg['parent']; + $style = array( + 'style_id' => 0, + 'style_name' => $cfg['name'], + 'style_copyright' => $cfg['copyright'], + 'style_active' => 0, + 'style_path' => $dir, + 'bbcode_bitfield' => $cfg['template_bitfield'], + 'style_parent_id' => 0, + 'style_parent_tree' => '', + // Extra values for styles list + // All extra variable start with _ so they won't be confused with data that can be added to styles table + '_inherit_name' => $parent, + '_available' => true, + '_note' => '', + ); - // User has submitted form and no errors have occurred - if ($update && !sizeof($error)) - { - if ($mode == 'style') + // Check style inheritance + if ($parent != '') { - $style_row['style_id'] = 0; - - $this->install_style($error, 'add', '', $style_row['style_id'], $style_row['style_name'], '', $style_row['style_copyright'], $style_row['style_active'], $style_row['style_default'], $style_row); + if (isset($installed_names[$parent])) + { + // Parent style is installed + $row = $installed_names[$parent]; + $style['style_parent_id'] = $row['id']; + $style['style_parent_tree'] = $row['tree']; + } + else + { + // Parent style is not installed yet + $style['_available'] = false; + $style['_note'] = sprintf($user->lang['REQUIRES_STYLE'], htmlspecialchars($parent)); + } } - - if (!sizeof($error)) + + if ($all || $style['_available']) { - $cache->destroy('sql', STYLES_TABLE); - - trigger_error($user->lang[$l_type . '_ADDED'] . adm_back_link($this->u_action)); + $styles[] = $style; } } - if ($mode == 'style') + return $styles; + } + + /** + * Show styles list + * + * @param array $styles styles list + * @param int $parent parent style id + * @param int $level style inheritance level + */ + function show_styles_list($styles, $parent, $level) + { + foreach ($styles as &$style) { - foreach ($element_ary as $element => $table) + if (empty($style['_shown']) && $style['style_parent_id'] == $parent) { - $sql = "SELECT {$element}_id, {$element}_name - FROM $table - ORDER BY {$element}_id ASC"; - $result = $db->sql_query($sql); - - ${$element . '_options'} = ''; - while ($row = $db->sql_fetchrow($result)) - { - $selected = ($row[$element . '_id'] == $style_row[$element . '_id']) ? ' selected="selected"' : ''; - ${$element . '_options'} .= ''; - } - $db->sql_freeresult($result); + $this->list_style(&$style, $level); + $this->show_styles_list(&$styles, $style['style_id'], $level + 1); } } - - $this->page_title = 'ADD_' . $l_type; - - $template->assign_vars(array( - 'S_DETAILS' => true, - 'S_ADD' => true, - 'S_ERROR_MSG' => (sizeof($error)) ? true : false, - 'S_STYLE' => ($mode == 'style') ? true : false, - 'S_TEMPLATE' => ($mode == 'template') ? true : false, - 'S_THEME' => ($mode == 'theme') ? true : false, - 'S_BASIS' => ($basis) ? true : false, - - 'S_STYLE_ACTIVE' => (isset($style_row['style_active'])) ? $style_row['style_active'] : 0, - 'S_STYLE_DEFAULT' => (isset($style_row['style_default'])) ? $style_row['style_default'] : 0, - 'S_TEMPLATE_OPTIONS' => ($mode == 'style') ? $template_options : '', - 'S_THEME_OPTIONS' => ($mode == 'style') ? $theme_options : '', - - 'U_ACTION' => $this->u_action . '&action=add&basis=' . $basis, - 'U_BACK' => $this->u_action, - - 'L_TITLE' => $user->lang[$this->page_title], - 'L_EXPLAIN' => $user->lang[$this->page_title . '_EXPLAIN'], - 'L_NAME' => $user->lang[$l_type . '_NAME'], - - 'ERROR_MSG' => (sizeof($error)) ? implode('
    ', $error) : '', - 'NAME' => $style_row[$mode . '_name'], - 'COPYRIGHT' => $style_row[$mode . '_copyright']) - ); - } - + /** - - $reqd_template = (isset($installcfg['required_template'])) ? $installcfg['required_template'] : false; - $reqd_theme = (isset($installcfg['required_theme'])) ? $installcfg['required_theme'] : false; - - // Check to see if each element is already installed, if it is grab the id - foreach ($element_ary as $element => $table) - { - $style_row = array_merge($style_row, array( - $element . '_id' => 0, - $element . '_name' => '', - $element . '_copyright' => '') - ); - - $this->test_installed($element, $error, $root_path, ${'reqd_' . $element}, $style_row[$element . '_id'], $style_row[$element . '_name'], $style_row[$element . '_copyright']); - * Is this element installed? If not, grab its cfg details + * Show available styles tree + * + * @param array $styles Styles list, passed as reference + * @param string $name Name of parent style + * @param string $level Styles tree level */ - function test_installed($element, &$error, $root_path, $reqd_name, &$id, &$name, &$copyright) + function show_available_child_styles($styles, $name, $level) { - global $db, $user; - - switch ($element) - { - case 'template': - $sql_from = STYLES_TEMPLATE_TABLE; - break; - - case 'theme': - $sql_from = STYLES_THEME_TABLE; - break; - } - - $l_element = strtoupper($element); - - $chk_name = ($reqd_name !== false) ? $reqd_name : $name; - - $sql = "SELECT {$element}_id, {$element}_name - FROM $sql_from - WHERE {$element}_name = '" . $db->sql_escape($chk_name) . "'"; - $result = $db->sql_query($sql); - - if ($row = $db->sql_fetchrow($result)) - { - $name = $row[$element . '_name']; - $id = $row[$element . '_id']; - } - else + foreach ($styles as &$style) { - if (!($cfg = @file("$root_path$element/$element.cfg"))) + if (empty($style['_shown']) && $style['_inherit_name'] == $name) { - $error[] = sprintf($user->lang['REQUIRES_' . $l_element], $reqd_name); - return false; + $this->list_style(&$style, $level); + $this->show_available_child_styles(&$styles, $style['style_name'], $level + 1); } - - $cfg = parse_cfg_file("$root_path$element/$element.cfg", $cfg); - - $name = $cfg['name']; - $copyright = $cfg['copyright']; - $id = 0; - - unset($cfg); } - $db->sql_freeresult($result); } - + /** - * Install/Add style + * Update styles tree + * + * @param array $styles Styles list, passed as reference + * @param array $style Current style, false if root + * @returns true if something was updated, false if not */ - function install_style(&$error, $action, $root_path, &$id, $name, $path, $copyright, $active, $default, &$style_row, $template_root_path = false, $template_path = false, $theme_root_path = false, $theme_path = false) + function update_styles_tree($styles, $style = false) { - global $config, $db, $user; - - $element_ary = array('template', 'theme'); - - if (!$name) + $parent_id = ($style === false) ? 0 : $style['style_id']; + $parent_tree = ($style === false) ? '' : ($style['style_parent_tree'] == '' ? '' : $style['style_parent_tree']) . $style['style_path']; + $update = false; + $updated = false; + foreach ($styles as &$row) { - $error[] = $user->lang['STYLE_ERR_STYLE_NAME']; + if ($row['style_parent_id'] == $parent_id) + { + if ($row['style_parent_tree'] != $parent_tree) + { + $row['style_parent_tree'] = $parent_tree; + $update = true; + } + $updated |= $this->update_styles_tree(&$styles, $row); + } } - - // Check length settings - if (utf8_strlen($name) > 30) + if ($update) { - $error[] = $user->lang['STYLE_ERR_NAME_LONG']; + global $db; + $sql = 'UPDATE ' . STYLES_TABLE . " + SET style_parent_tree = '" . $db->sql_escape($parent_tree) . "' + WHERE style_parent_id = {$parent_id}"; + $db->sql_query($sql); + $updated = true; } - - if (utf8_strlen($copyright) > 60) - { - $error[] = $user->lang['STYLE_ERR_COPY_LONG']; + return $updated; + } + + /** + * Find all possible parent styles for style + * + * @param array $styles list of styles + * @param int $id id of style + * @param int $parent current parent style id + * @param int $level current tree level + * @returns array of style ids, names and levels + */ + function find_possible_parents($styles, $id = -1, $parent = 0, $level = 0) + { + $results = array(); + foreach ($styles as $style) + { + if ($style['style_id'] != $id && $style['style_parent_id'] == $parent) + { + $results[] = array( + 'style_id' => $style['style_id'], + 'style_name' => $style['style_name'], + 'style_path' => $style['style_path'], + 'style_parent_id' => $style['style_parent_id'], + 'style_parent_tree' => $style['style_parent_tree'], + 'level' => $level + ); + $results = array_merge($results, $this->find_possible_parents($styles, $id, $style['style_id'], $level + 1)); + } } + return $results; + } + + /** + * Show item in styles list + * + * @param array $style style row + * @param array $level style inheritance level + */ + function list_style($style, $level) + { + global $template, $config, $db, $user, $phpbb_root_path, $phpEx; + + // Mark row as shown + if (!empty($style['_shown'])) return; + $style['_shown'] = true; + + // Generate template variables + $actions = array(); + $row = array( + // Style data + 'STYLE_ID' => $style['style_id'], + 'STYLE_NAME' => htmlspecialchars($style['style_name']), + 'STYLE_PATH' => htmlspecialchars($style['style_path']), + 'STYLE_COPYRIGHT' => strip_tags($style['style_copyright']), + 'STYLE_ACTIVE' => $style['style_active'], + + // Additional data + 'DEFAULT' => ($style['style_id'] && $style['style_id'] == $config['default_style']), + 'USERS' => $style['_users'], + 'LEVEL' => $level, + 'PADDING' => (4 + 16 * $level), + 'SHOW_COPYRIGHT' => ($style['style_id']) ? false : true, + 'STYLE_PATH_FULL' => htmlspecialchars($this->styles_path_absolute . '/' . $style['style_path']) . '/', + + // Comment to show below style + 'COMMENT' => (isset($style['_note'])) ? $style['_note'] : '', + + // The following variables should be used by hooks to add custom HTML code + 'EXTRA' => '', + 'EXTRA_OPTIONS' => '' + ); + + // Status specific data + if ($style['style_id']) + { + // Style is installed + + // Details + $actions[] = array( + 'U_ACTION' => $this->u_action . '&action=details&id=' . $style['style_id'], + 'L_ACTION' => $user->lang['DETAILS'] + ); - // Check if the name already exist - $sql = 'SELECT style_id - FROM ' . STYLES_TABLE . " - WHERE style_name = '" . $db->sql_escape($name) . "'"; - $result = $db->sql_query($sql); - $row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); + // Activate + $actions[] = array( + 'U_ACTION' => $this->u_action . '&action=' . ($style['style_active'] ? 'de' : '') . 'activate&id=' . $style['style_id'], + 'L_ACTION' => $user->lang['STYLE_' . ($style['style_active'] ? 'DE' : '') . 'ACTIVATE'] + ); - if ($row) - { - $error[] = $user->lang['STYLE_ERR_NAME_EXIST']; - } +/* // Export + $actions[] = array( + 'U_ACTION' => $this->u_action . '&action=export&id=' . $style['style_id'], + 'L_ACTION' => $user->lang['EXPORT'] + ); */ - if (sizeof($error)) - { - return false; + // Delete + $actions[] = array( + 'U_ACTION' => $this->u_action . '&action=delete&id=' . $style['style_id'], + 'L_ACTION' => $user->lang['DELETE'] + ); + + // Preview + $actions[] = array( + 'U_ACTION' => append_sid("{$phpbb_root_path}index.$phpEx", 'style=' . $style['style_id']), + 'L_ACTION' => $user->lang['PREVIEW'] + ); } - - foreach ($element_ary as $element) + else { - // Zero id value ... need to install element ... run usual checks - // and do the install if necessary - if (!$style_row[$element . '_id']) + // Style is not installed + if (empty($style['_available'])) + { + $actions[] = array( + 'HTML' => $user->lang['CANNOT_BE_INSTALLED'] + ); + } + else { - $this->install_element($element, $error, $action, (${$element . '_root_path'}) ? ${$element . '_root_path'} : $root_path, $style_row[$element . '_id'], $style_row[$element . '_name'], (${$element . '_path'}) ? ${$element . '_path'} : $path, $style_row[$element . '_copyright']); + $actions[] = array( + 'U_ACTION' => $this->u_action . '&action=install&dir=' . urlencode($style['style_path']), + 'L_ACTION' => $user->lang['INSTALL_STYLE'] + ); } } - - if (!$style_row['template_id'] || !$style_row['theme_id']) + + // todo: add hook + + // Assign template variables + $template->assign_block_vars('styles_list', $row); + foreach($actions as $action) { - $error[] = $user->lang['STYLE_ERR_NO_IDS']; + $template->assign_block_vars('styles_list.actions', $action); } - - if (sizeof($error)) + + // Increase counters + $counter = ($style['style_id']) ? ($style['style_active'] ? 'active' : 'inactive') : (empty($style['_available']) ? 'cannotinstall' : 'caninstall'); + if (!isset($this->style_counters)) { - return false; + $this->style_counters = array( + 'total' => 0, + 'active' => 0, + 'inactive' => 0, + 'caninstall' => 0, + 'cannotinstall' => 0 + ); } - - $db->sql_transaction('begin'); - - $sql_ary = array( - 'style_name' => $name, - 'style_copyright' => $copyright, - 'style_active' => (int) $active, - 'template_id' => (int) $style_row['template_id'], - 'theme_id' => (int) $style_row['theme_id'], + $this->style_counters[$counter] ++; + $this->style_counters['total'] ++; + } + + /** + * Show welcome message + * + * @param string $title main title + * @param string $description page description + */ + function welcome_message($title, $description) + { + global $user, $template; + $template->assign_vars(array( + 'L_TITLE' => (isset($user->lang[$title])) ? $user->lang[$title] : $title, + 'L_EXPLAIN' => (isset($user->lang[$description])) ? $user->lang[$description] : $description + ) ); - - $sql = 'INSERT INTO ' . STYLES_TABLE . ' - ' . $db->sql_build_array('INSERT', $sql_ary); - $db->sql_query($sql); - - $id = $db->sql_nextid(); - - if ($default) - { - $sql = 'UPDATE ' . USERS_TABLE . " - SET user_style = $id - WHERE user_style = " . $config['default_style']; - $db->sql_query($sql); - - set_config('default_style', $id); - } - - $db->sql_transaction('commit'); - - add_log('admin', 'LOG_STYLE_ADD', $name); } - + /** - * Install/add an element, doing various checks as we go + * Find all directories that have styles + * + * @returns array of directory names */ - function install_element($mode, &$error, $action, $root_path, &$id, $name, $path, $copyright) + function find_style_dirs() { - global $phpbb_root_path, $db, $user; + $styles = array(); - // we parse the cfg here (again) - $cfg_data = parse_cfg_file("$root_path$mode/$mode.cfg"); - - switch ($mode) + $dp = @opendir($this->styles_path); + if ($dp) { - case 'template': - $sql_from = STYLES_TEMPLATE_TABLE; - break; - - case 'theme': - $sql_from = STYLES_THEME_TABLE; - break; - } - - $l_type = strtoupper($mode); + while (($file = readdir($dp)) !== false) + { + $dir = $this->styles_path . $file; + if ($file[0] == '.' || !is_dir($dir)) + { + continue; + } - if (!$name) - { - $error[] = $user->lang[$l_type . '_ERR_STYLE_NAME']; + if (file_exists("{$dir}/style.cfg")) + { + $styles[] = $file; + } + } + closedir($dp); } - // Check length settings - if (utf8_strlen($name) > 30) + return $styles; + } + + /** + * Sort styles + */ + function sort_styles($style1, $style2) + { + if ($style1['style_active'] != $style2['style_active']) { - $error[] = $user->lang[$l_type . '_ERR_NAME_LONG']; + return ($style1['style_active']) ? -1 : 1; } - - if (utf8_strlen($copyright) > 60) + if (isset($style1['_available']) && $style1['_available'] != $style2['_available']) { - $error[] = $user->lang[$l_type . '_ERR_COPY_LONG']; + return ($style1['_available']) ? -1 : 1; } - - // Check if the name already exist - $sql = "SELECT {$mode}_id - FROM $sql_from - WHERE {$mode}_name = '" . $db->sql_escape($name) . "'"; - $result = $db->sql_query($sql); - $row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - - if ($row) + return strcasecmp(isset($style1['style_name']) ? $style1['style_name'] : $style1['name'], isset($style2['style_name']) ? $style2['style_name'] : $style2['name']); + } + + /** + * Read style configuration file + * + * @param string $dir style directory + * @returns array of style data + * @returns false on error + */ + function read_style_cfg($dir) + { + static $required = array('name', 'version', 'copyright'); + $cfg = parse_cfg_file($this->styles_path . $dir . '/style.cfg'); + + // Check if it is a valid file + foreach ($required as $key) { - // If it exist, we just use the style on installation - if ($action == 'install') + if (!isset($cfg[$key])) { - $id = $row[$mode . '_id']; return false; } - - $error[] = $user->lang[$l_type . '_ERR_NAME_EXIST']; - } - - if (isset($cfg_data['inherit_from']) && $cfg_data['inherit_from']) - { - if ($mode === 'template') - { - $select_bf = ', bbcode_bitfield'; - } - else - { - $select_bf = ''; - } - - $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path $select_bf - FROM $sql_from - WHERE {$mode}_name = '" . $db->sql_escape($cfg_data['inherit_from']) . "' - AND {$mode}_inherits_id = 0"; - $result = $db->sql_query($sql); - $row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); - if (!$row) - { - $error[] = sprintf($user->lang[$l_type . '_ERR_REQUIRED_OR_INCOMPLETE'], $cfg_data['inherit_from']); - } - else - { - $inherit_id = $row["{$mode}_id"]; - $inherit_path = $row["{$mode}_path"]; - $inherit_bf = ($mode === 'template') ? $row["bbcode_bitfield"] : false; - } } - else + + // Check data + if (!isset($cfg['parent']) || !is_string($cfg['parent']) || $cfg['parent'] == $cfg['name']) { - $inherit_id = 0; - $inherit_path = ''; - $inherit_bf = false; + $cfg['parent'] = ''; } - - if (sizeof($error)) + if (!isset($cfg['template_bitfield'])) { - return false; + $cfg['template_bitfield'] = $this->default_bitfield(); } - - $sql_ary = array( - $mode . '_name' => $name, - $mode . '_copyright' => $copyright, - $mode . '_path' => $path, - ); - - switch ($mode) + + return $cfg; + } + + /** + * Install style + * + * @param $style style data + * @returns int style id + */ + function install_style($style) + { + global $db; + + // Generate row + $sql_ary = array(); + foreach ($style as $key => $value) { - case 'template': - // We check if the template author defined a different bitfield - if (!empty($cfg_data['template_bitfield'])) - { - $sql_ary['bbcode_bitfield'] = $cfg_data['template_bitfield']; - } - else if ($inherit_bf) - { - $sql_ary['bbcode_bitfield'] = $inherit_bf; - } - else - { - $sql_ary['bbcode_bitfield'] = $this->template_bitfield; - } - - if (isset($cfg_data['inherit_from']) && $cfg_data['inherit_from']) - { - $sql_ary += array( - 'template_inherits_id' => $inherit_id, - 'template_inherit_path' => $inherit_path, - ); - } - break; - - case 'theme': - break; + if ($key != 'style_id' && substr($key, 0, 1) != '_') + { + $sql_ary[$key] = $value; + } } - + + // Add to database $db->sql_transaction('begin'); - $sql = "INSERT INTO $sql_from - " . $db->sql_build_array('INSERT', $sql_ary); + $sql = 'INSERT INTO ' . STYLES_TABLE . ' + ' . $db->sql_build_array('INSERT', $sql_ary); $db->sql_query($sql); $id = $db->sql_nextid(); $db->sql_transaction('commit'); - add_log('admin', 'LOG_' . $l_type . '_ADD_FS', $name); + add_log('admin', 'LOG_STYLE_ADD', $sql_ary['style_name']); + + return $id; } /** - * Checks downwards dependencies + * Lists all styles * - * @access public - * @param string $mode The element type to check - only template is supported - * @param int $id The template id - * @returns false if no component inherits, array with name, path and id for each subtemplate otherwise + * @returns array of rows with styles data */ - function check_inheritance($mode, $id) + function get_styles() { global $db; + + $sql = 'SELECT * + FROM ' . STYLES_TABLE; + $result = $db->sql_query($sql); - $l_type = strtoupper($mode); + $rows = $db->sql_fetchrowset($result); + $db->sql_freeresult($result); - switch ($mode) - { - case 'template': - $sql_from = STYLES_TEMPLATE_TABLE; - break; + return $rows; + } - case 'theme': - $sql_from = STYLES_THEME_TABLE; - break; - } + /** + * Count users for each style + * + * @returns array of styles in following format: [style_id] = number of users + */ + function get_users() + { + global $db; - $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path - FROM $sql_from - WHERE {$mode}_inherits_id = " . (int) $id; + $sql = 'SELECT user_style, COUNT(user_style) AS style_count + FROM ' . USERS_TABLE . ' + GROUP BY user_style'; $result = $db->sql_query($sql); - $names = array(); + $style_count = array(); while ($row = $db->sql_fetchrow($result)) { - - $names[$row["{$mode}_id"]] = array( - "{$mode}_id" => $row["{$mode}_id"], - "{$mode}_name" => $row["{$mode}_name"], - "{$mode}_path" => $row["{$mode}_path"], - ); + $style_count[$row['user_style']] = $row['style_count']; } $db->sql_freeresult($result); + + return $style_count; + } + + /** + * Delete style + * + * @param array $style Style data + * @returns true on success, error message on error + */ + function delete_style($style) + { + global $db, $user; + + $id = $style['style_id']; + $path = $style['style_path']; + + // Check if style has child styles + $sql = 'SELECT style_id + FROM ' . STYLES_TABLE . ' + WHERE style_parent_id = ' . $id . " OR style_parent_tree = '" . $db->sql_escape($path) . "'"; + $result = $db->sql_query($sql); + + $conflict = $db->sql_fetchrow($result); + $db->sql_freeresult($result); - if (sizeof($names)) + if ($conflict !== false) { - return $names; + return sprintf($user->lang['STYLE_DELETE_DEPENDENT'], $style['style_name']); } - else + + // Change default style for users + $sql = 'UPDATE ' . USERS_TABLE . ' + SET user_style = 0 + WHERE user_style = ' . $id; + $db->sql_query($sql); + + // Delete style + $sql = 'DELETE FROM ' . STYLES_TABLE . ' + WHERE style_id = ' . $id; + $db->sql_query($sql); + return true; + } + + /** + * Delete all files in style directory + * + * @param string $path Style directory + * @param string $dir Directory to remove inside style's directory + * @returns true on success, false on error + */ + function delete_style_files($path, $dir = '') + { + $dirname = $this->styles_path . $path . $dir; + $result = true; + + $dp = @opendir($dirname); + + if ($dp) + { + while (($file = readdir($dp)) !== false) + { + if ($file == '.' || $file == '..') + { + continue; + } + $filename = $dirname . '/' . $file; + if (is_dir($filename)) + { + if (!$this->delete_style_files($path, $dir . '/' . $file)) + { + $result = false; + } + } + else + { + if (!@unlink($filename)) + { + $result = false; + } + } + } + closedir($dp); + } + if (!@rmdir($dirname)) { return false; } + + return $result; } - + /** - * Checks upwards dependencies + * Get list of items from posted data * - * @access public - * @param string $mode The element type to check - only template is supported - * @param int $id The template id - * @returns false if the component does not inherit, array with name, path and id otherwise + * @param string $name Variable name + * @param $default Default value for array: string or number + * @param bool $error If true, error will be triggered if list is empty + * @returns array of items */ - function get_super($mode, $id) + function request_vars($name, $default, $error = false) { - global $db; + global $request, $user; - $l_type = strtoupper($mode); + $item = $request->variable($name, $default); + $items = $request->variable($name . 's', array($default)); - switch ($mode) + if (count($items) == 1 && $items[0] == $default) { - case 'template': - $sql_from = STYLES_TEMPLATE_TABLE; - break; - - case 'theme': - $sql_from = STYLES_THEME_TABLE; - break; + $items = array(); } - $sql = "SELECT {$mode}_inherits_id - FROM $sql_from - WHERE {$mode}_id = " . (int) $id; - $result = $db->sql_query_limit($sql, 1); - - if ($row = $db->sql_fetchrow($result)) + if ($item != $default && !count($items)) { - $db->sql_freeresult($result); + $items[] = $item; } - else + + if ($error && !count($items)) { - return false; + trigger_error($user->lang['NO_MATCHING_STYLES_FOUND'] . adm_back_link($this->u_action), E_USER_WARNING); } - $super_id = $row["{$mode}_inherits_id"]; - - $sql = "SELECT {$mode}_id, {$mode}_name, {$mode}_path - FROM $sql_from - WHERE {$mode}_id = " . (int) $super_id; + return $items; + } - $result = $db->sql_query_limit($sql, 1); - if ($row = $db->sql_fetchrow($result)) + /** + * Generates hardcoded bitfield + * + * @returns bitfield string + */ + function default_bitfield() + { + static $value; + if(isset($value)) { - $db->sql_freeresult($result); - return $row; + return $value; } - - return false; + + // Hardcoded template bitfield to add for new templates + $bitfield = new bitfield(); + $bitfield->set(0); + $bitfield->set(1); + $bitfield->set(2); + $bitfield->set(3); + $bitfield->set(4); + $bitfield->set(8); + $bitfield->set(9); + $bitfield->set(11); + $bitfield->set(12); + $value = $bitfield->get_base64(); + return $value; } + } diff --git a/phpBB/includes/acp/info/acp_styles.php b/phpBB/includes/acp/info/acp_styles.php index 221371c4cb..3137c4781b 100644 --- a/phpBB/includes/acp/info/acp_styles.php +++ b/phpBB/includes/acp/info/acp_styles.php @@ -17,11 +17,11 @@ class acp_styles_info return array( 'filename' => 'acp_styles', 'title' => 'ACP_CAT_STYLES', - 'version' => '1.0.0', + 'version' => '2.0.0', 'modes' => array( 'style' => array('title' => 'ACP_STYLES', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_MANAGEMENT')), - 'template' => array('title' => 'ACP_TEMPLATES', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_COMPONENTS')), - 'theme' => array('title' => 'ACP_THEMES', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_COMPONENTS')), + 'install' => array('title' => 'ACP_STYLES_INSTALL', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_MANAGEMENT')), + 'cache' => array('title' => 'ACP_STYLES_CACHE', 'auth' => 'acl_a_styles', 'cat' => array('ACP_STYLE_MANAGEMENT')), ), ); } -- cgit v1.2.1 From 39944a08b9ea031dfc156f61ad0d8f4c594882e5 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 15 Mar 2012 00:20:11 +0200 Subject: [feature/merging-style-components] New acp_styles template New acp_styles.html, completely rewritten PHPBB3-10632 --- phpBB/adm/style/acp_styles.html | 478 +++++++++++----------------------------- 1 file changed, 123 insertions(+), 355 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_styles.html b/phpBB/adm/style/acp_styles.html index dc89aa247a..b09cbafc95 100644 --- a/phpBB/adm/style/acp_styles.html +++ b/phpBB/adm/style/acp_styles.html @@ -2,399 +2,167 @@ - - - « {L_BACK} - -

    {L_TITLE}

    - -

    {L_EXPLAIN}

    - - - -
    - {L_TITLE} -
    -
    -
    {NAME}
    -
    -
    -

    {L_REPLACE_EXPLAIN}
    -
    -
    - -
    -
    -

    {L_REPLACE_TEMPLATE_EXPLAIN}
    -
    -
    -
    -

    {L_REPLACE_THEME_EXPLAIN}
    -
    -
    + + + +
    +

    {MESSAGE_TITLE}

    +

    {MESSAGE_TEXT}

    + + -

    - - {S_FORM_TOKEN} -

    -
    - - - + {S_HIDDEN_FIELDS} - « {L_BACK} +
    +   + +
    -

    {L_EDIT}

    +
    + + + -

    {L_EDIT_EXPLAIN}

    +

    {L_TITLE}

    -

    {L_SELECTED}: {SELECTED_TEMPLATE}

    +

    {L_EXPLAIN}

    -
    + +{S_HIDDEN_FIELDS} +{S_FORM_TOKEN} - + +
    - {L_SELECT}
    -
    -
    +
    +
    - {S_FORM_TOKEN} -
    - - - - - - -
    - -
    - {L_EDITOR} - -
    -
    -
    {TEMPLATE_FILE}
    -
    - -
    -
    -
    -
    - -
    - -
    - {L_SUBMIT} - {S_HIDDEN_FIELDS} - {S_FORM_TOKEN} - -
    - - - - - - « {L_BACK} - -

    {L_TEMPLATE_CACHE}

    - -

    {L_TEMPLATE_CACHE_EXPLAIN}

    - -
    -
    - {L_TEMPLATE_CACHE} - -
  • - +
    {L_QUICK_MOD}:
    {L_NO_TOPICS_QUEUE}{L_UNAPPROVED_POSTS_ZERO_TOTAL}{L_NO_TOPICS_QUEUE}{L_NO_POSTS_QUEUE}
    - - - - - - - - - - - - - - - - - - - - - - - - -
    {L_CACHE_FILENAME}{L_CACHE_FILESIZE}{L_CACHE_CACHED}{L_CACHE_MODIFIED}{L_MARK}
    {file.FILENAME_PATH}{file.FILESIZE}{file.CACHED}{file.MODIFIED}
    {L_TEMPLATE_CACHE_EMPTY}
    - -

    - {L_MARK_ALL} :: {L_UNMARK_ALL}
    - {S_FORM_TOKEN} - -

    - - - - - - « {L_BACK} - -

    {L_TITLE}

    - -

    {L_EXPLAIN}

    - - -
    -

    {L_WARNING}

    -

    {ERROR_MSG}

    -
    - - -
    - -
    - {L_TITLE}
    -
    -
    {NAME}
    +
    +
    {STYLE_PATH}
    +
    +
    +
    +
    {STYLE_COPYRIGHT}
    - -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -
    -

    {L_DOWNLOAD_STORE_EXPLAIN}
    -
    -
    +
    +
    -
    -
    {FORMAT_BUTTONS}
    +
    +
    +
    + +
    +
    +
    +
    +
    + +
    -

    - {S_FORM_TOKEN} +

    + {L_SUBMIT} -

    + {L_BACK} + {S_FORM_TOKEN}
    + - -
    - - - -

    {L_TITLE}

    - -

    {L_EXPLAIN}

    - - - + - - - - - + + + + {STYLES_LIST_EXTRA} + - - - - - - - - - - - - - - - + + + class="row-inactive"> + + + + - - + + + + + {styles_list.EXTRA} + - - - - - - - - - - - - colspan="2">{uninstalled.NAME}
    {L_COPYRIGHT}: {uninstalled.COPYRIGHT} -
    - - +
    {L_NAME}{L_STYLE_USED_BY}{L_OPTIONS}{L_ACTIONS}{L_STYLE_NAME}{L_STYLE_USED_BY}{L_ACTIONS} 
    {L_INSTALLED}
    {L_INACTIVE_STYLES}
    {installed.NAME} *{installed.STYLE_COUNT}
    - {installed.S_OPTIONS} - - - {installed.L_STYLE_ACT_DEACT} | + + + + + + {styles_list.STYLE_NAME} +
    {styles_list.STYLE_COPYRIGHT}
    + + {styles_list.STYLE_NAME} - {installed.S_ACTIONS} - - | {L_PREVIEW} + +
    {styles_list.COMMENT}
    + + +
    {L_STYLE_PATH} {styles_list.STYLE_PATH_FULL}
    + +
    {styles_list.USERS} + + | + + {styles_list.actions.L_ACTION} + + {styles_list.actions.HTML} + + + + + + +   + + +
    {L_UNINSTALLED}
    {L_NO_UNINSTALLED}
    {L_INSTALL}
    + - -
    - -
    - {L_CREATE} - {L_CREATE}: {L_FROM} -
    - -
    - - - - - « {L_BACK} - -

    {L_TITLE}

    - -

    {L_EXPLAIN}

    - - -
    -

    {L_WARNING}

    -

    {ERROR_MSG}

    -
    - - -
    - -
    - {L_TITLE} -
    -
    -
    {NAME}
    -
    -
    -
    -
    {COPYRIGHT}
    -
    - -
    -
    -
    {S_SUPERTEMPLATE}
    -
    - - -
    -
    -
    {TEMPLATE_NAME}
    -
    -
    -
    -
    {THEME_NAME}
    -
    - - -
    - -
    - {L_OPTIONS} -
    -
    -
    -
    -
    - -
    -
    -
    -
    -
    - - + +
    + + +
    + -
    - {L_SUBMIT} - - {S_FORM_TOKEN} + +
    + + {extra_links.L_ACTION} +
    + - + -- cgit v1.2.1 From 6f7d095e3f4b09847c5963646b2f4a817d68ba39 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Sun, 18 Apr 2010 22:11:04 +0100 Subject: [feature/new-tz-handling] Wrapper around DateTime for new date time handling. Wrapped PHP's DateTime with some extensions for supporting phpBB's relative date formats and provided the DateTime::getTimestamp() method to PHP < 5.3. PHPBB3-9558 --- phpBB/includes/datetime.php | 160 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 160 insertions(+) create mode 100644 phpBB/includes/datetime.php (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php new file mode 100644 index 0000000000..b1e95e58a3 --- /dev/null +++ b/phpBB/includes/datetime.php @@ -0,0 +1,160 @@ +_user = $user ? $user : $GLOBALS['user']; + + $timezone = (!$timezone && $this->_user->tz instanceof DateTimeZone) ? $this->_user->tz : $timezone; + + parent::__construct($time, $timezone); + } + + /** + * Returns a UNIX timestamp representation of the date time. + * + * @return int UNIX timestamp + */ + public function getTimestamp() + { + static $compat; + + if (!isset($compat)) + { + $compat = !method_exists('DateTime', 'getTimestamp'); + } + + return !$compat ? parent::getTimestamp() : (int) parent::format('U'); + } + + /** + * Formats the current date time into the specified format + * + * @param string $format Optional format to use for output, defaults to users chosen format + * @param boolean $force_absolute Force output of a non relative date + * @return string Formatted date time + */ + public function format($format = '', $force_absolute = false) + { + $format = $format ? $format : $this->_user->date_format; + $relative = (strpos($format, self::RELATIVE_WRAPPER) !== false && !$force_absolute); + $now = new self('now', $this->_user->tz, $this->_user); + $delta = $now->getTimestamp() - $this->getTimestamp(); + + if ($relative) + { + if ($delta <= 3600 && ($delta >= -5 || (($now->getTimestamp() / 60) % 60) == (($this->getTimestamp() / 60) % 60)) && isset($this->_user->lang['datetime']['AGO'])) + { + return $this->_user->lang(array('datetime', 'AGO'), max(0, (int) floor($delta / 60))); + } + else + { + $midnight = clone $now; + $midnight->setTime(0, 0, 0); + + $midnight = $midnight->getTimestamp(); + $gmepoch = $this->getTimestamp(); + + if (!($gmepoch < $midnight - 86400 || $gmepoch > $midnight + 172800)) + { + $day = false; + + if ($gmepoch > $midnight + 86400) + { + $day = 'TOMORROW'; + } + else if ($gmepoch > $midnight) + { + $day = 'TODAY'; + } + else if ($gmepoch > $midnight - 86400) + { + $day = 'YESTERDAY'; + } + + if ($day !== false) + { + $format = self::_format_cache($format, $this->_user); + + return str_replace(self::RELATIVE_WRAPPER . self::RELATIVE_WRAPPER, $this->_user->lang['datetime'][$day], strtr(parent::format($format['format_short']), $format['lang'])); + } + } + } + } + + $format = self::_format_cache($format, $this->_user); + + return strtr(parent::format($format['format_long']), $format['lang']); + } + + /** + * Pre-processes the specified date format + * + * @param string $format Output format + * @param user $user User object to use for localisation + * @return array Processed date format + */ + static protected function _format_cache($format, $user) + { + $lang = $user->lang_name; + + if (!isset(self::$format_cache[$lang])) + { + self::$format_cache[$lang] = array(); + + if (!isset(self::$format_cache[$lang][$format])) + { + // Is the user requesting a friendly date format (i.e. 'Today 12:42')? + self::$format_cache[$lang][$format] = array( + 'is_short' => strpos($format, self::RELATIVE_WRAPPER) !== false, + 'format_short' => substr($format, 0, strpos($format, self::RELATIVE_WRAPPER)) . self::RELATIVE_WRAPPER . self::RELATIVE_WRAPPER . substr(strrchr($format, self::RELATIVE_WRAPPER), 1), + 'format_long' => str_replace(self::RELATIVE_WRAPPER, '', $format), + 'lang' => $user->lang['datetime'], + ); + + // Short representation of month in format? Some languages use different terms for the long and short format of May + if ((strpos($format, '\M') === false && strpos($format, 'M') !== false) || (strpos($format, '\r') === false && strpos($format, 'r') !== false)) + { + self::$format_cache[$lang][$format]['lang']['May'] = $user->lang['datetime']['May_short']; + } + } + } + + return self::$format_cache[$lang][$format]; + } +} -- cgit v1.2.1 From e8b60fc3d8b483fda50c715e59b73861cd3ced9e Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Sun, 18 Apr 2010 22:26:33 +0100 Subject: [feature/new-tz-handling] Use phpbb_datetime rather than phpbb_DateTime. PHPBB3-9558 --- phpBB/includes/datetime.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index b1e95e58a3..d14693faa3 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -11,7 +11,7 @@ * phpBB custom extensions to the PHP DateTime class * This handles the relative formats phpBB employs */ -class phpbb_DateTime extends DateTime +class phpbb_datetime extends DateTime { /** * String used to wrap the date segment which should be replaced by today/tomorrow/yesterday @@ -29,7 +29,7 @@ class phpbb_DateTime extends DateTime static protected $format_cache = array(); /** - * Constructs a new instance of phpbb_DateTime, expanded to include an argument to inject + * Constructs a new instance of phpbb_datetime, expanded to include an argument to inject * the user context and modify the timezone to the users selected timezone if one is not set. * * @param string $time String in a format accepted by strtotime(). -- cgit v1.2.1 From a5c3ff376911f2f25595f1a540c7a16395dac67d Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Tue, 20 Apr 2010 19:30:05 +0100 Subject: [feature/new-tz-handling] Renamed old variables and removed extra conditional. PHPBB3-9558 --- phpBB/includes/datetime.php | 43 +++++++++++++++++++------------------------ 1 file changed, 19 insertions(+), 24 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index d14693faa3..92aef88599 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -87,32 +87,27 @@ class phpbb_datetime extends DateTime $midnight = clone $now; $midnight->setTime(0, 0, 0); - $midnight = $midnight->getTimestamp(); - $gmepoch = $this->getTimestamp(); + $midnight = $midnight->getTimestamp(); + $timestamp = $this->getTimestamp(); - if (!($gmepoch < $midnight - 86400 || $gmepoch > $midnight + 172800)) + if ($timestamp > $midnight + 86400) { - $day = false; - - if ($gmepoch > $midnight + 86400) - { - $day = 'TOMORROW'; - } - else if ($gmepoch > $midnight) - { - $day = 'TODAY'; - } - else if ($gmepoch > $midnight - 86400) - { - $day = 'YESTERDAY'; - } - - if ($day !== false) - { - $format = self::_format_cache($format, $this->_user); - - return str_replace(self::RELATIVE_WRAPPER . self::RELATIVE_WRAPPER, $this->_user->lang['datetime'][$day], strtr(parent::format($format['format_short']), $format['lang'])); - } + $day = 'TOMORROW'; + } + else if ($timestamp > $midnight) + { + $day = 'TODAY'; + } + else if ($timestamp > $midnight - 86400) + { + $day = 'YESTERDAY'; + } + + if ($day !== false) + { + $format = self::_format_cache($format, $this->_user); + + return str_replace(self::RELATIVE_WRAPPER . self::RELATIVE_WRAPPER, $this->_user->lang['datetime'][$day], strtr(parent::format($format['format_short']), $format['lang'])); } } } -- cgit v1.2.1 From 3559d2062480d5c3a0e94dae7388f9f1e5918ea7 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Tue, 20 Apr 2010 19:43:49 +0100 Subject: [feature/new-tz-handling] Update user methods to use new date processing class. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit user::setup() now stores a DateTimeZone object in user::$timezone representing the users timezone. For backwards compatibility a numeric value in user/board_timezone will be converted into one of the legacy Etc/GMT±X timezones. This will be used until the user updates his/her timezone in the UCP. user::format_date() is now basically a legacy wrapper that transforms a UTC UNIX timestamp into a formatted localised date using phpbb_datetime::format(). PHPBB3-9558 --- phpBB/includes/session.php | 87 +++++++++++++--------------------------------- 1 file changed, 24 insertions(+), 63 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 497aaf1141..ba9136b568 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1574,20 +1574,26 @@ class user extends session { global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache; + // @todo Move this to a better location + if (!class_exists('phpbb_datetime')) + { + global $phpbb_root_path, $phpEx; + + require "{$phpbb_root_path}includes/datetime.$phpEx"; + } + if ($this->data['user_id'] != ANONYMOUS) { $this->lang_name = (file_exists($this->lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']); $this->date_format = $this->data['user_dateformat']; - $this->timezone = $this->data['user_timezone'] * 3600; - $this->dst = $this->data['user_dst'] * 3600; + $this->timezone = $this->data['user_timezone']; } else { $this->lang_name = basename($config['default_lang']); $this->date_format = $config['default_dateformat']; - $this->timezone = $config['board_timezone'] * 3600; - $this->dst = $config['board_dst'] * 3600; + $this->timezone = $config['board_timezone']; /** * If a guest user is surfing, we try to guess his/her language first by obtaining the browser language @@ -1626,6 +1632,14 @@ class user extends session */ } + if (is_numeric($this->timezone)) + { + // Might still be numeric by chance + $this->timezone = sprintf('Etc/GMT%+d', ($this->timezone + ($this->data['user_id'] != ANONYMOUS ? $this->data['user_dst'] : $config['board_dst']))); + } + + $this->timezone = new DateTimeZone($this->timezone); + // We include common language file here to not load it every time a custom language file is included $lang = &$this->lang; @@ -2072,70 +2086,17 @@ class user extends session */ function format_date($gmepoch, $format = false, $forcedate = false) { - static $midnight; - static $date_cache; + static $utc; - $format = (!$format) ? $this->date_format : $format; - $now = time(); - $delta = $now - $gmepoch; - - if (!isset($date_cache[$format])) + if (!isset($utc)) { - // Is the user requesting a friendly date format (i.e. 'Today 12:42')? - $date_cache[$format] = array( - 'is_short' => strpos($format, '|'), - 'format_short' => substr($format, 0, strpos($format, '|')) . '||' . substr(strrchr($format, '|'), 1), - 'format_long' => str_replace('|', '', $format), - 'lang' => $this->lang['datetime'], - ); - - // Short representation of month in format? Some languages use different terms for the long and short format of May - if ((strpos($format, '\M') === false && strpos($format, 'M') !== false) || (strpos($format, '\r') === false && strpos($format, 'r') !== false)) - { - $date_cache[$format]['lang']['May'] = $this->lang['datetime']['May_short']; - } + $utc = new DateTimeZone('UTC'); } - // Zone offset - $zone_offset = $this->timezone + $this->dst; - - // Show date <= 1 hour ago as 'xx min ago' but not greater than 60 seconds in the future - // A small tolerence is given for times in the future but in the same minute are displayed as '< than a minute ago' - if ($delta <= 3600 && $delta > -60 && ($delta >= -5 || (($now / 60) % 60) == (($gmepoch / 60) % 60)) && $date_cache[$format]['is_short'] !== false && !$forcedate && isset($this->lang['datetime']['AGO'])) - { - return $this->lang(array('datetime', 'AGO'), max(0, (int) floor($delta / 60))); - } - - if (!$midnight) - { - list($d, $m, $y) = explode(' ', gmdate('j n Y', time() + $zone_offset)); - $midnight = gmmktime(0, 0, 0, $m, $d, $y) - $zone_offset; - } - - if ($date_cache[$format]['is_short'] !== false && !$forcedate && !($gmepoch < $midnight - 86400 || $gmepoch > $midnight + 172800)) - { - $day = false; - - if ($gmepoch > $midnight + 86400) - { - $day = 'TOMORROW'; - } - else if ($gmepoch > $midnight) - { - $day = 'TODAY'; - } - else if ($gmepoch > $midnight - 86400) - { - $day = 'YESTERDAY'; - } - - if ($day !== false) - { - return str_replace('||', $this->lang['datetime'][$day], strtr(@gmdate($date_cache[$format]['format_short'], $gmepoch + $zone_offset), $date_cache[$format]['lang'])); - } - } + $time = new phpbb_DateTime("@$gmepoch", $utc, $this); + $time->setTimezone($this->tz); - return strtr(@gmdate($date_cache[$format]['format_long'], $gmepoch + $zone_offset), $date_cache[$format]['lang']); + return $time->format($format, $forcedate); } /** -- cgit v1.2.1 From b2a812e36bc90d01f21da469823f4e759294b770 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Tue, 20 Apr 2010 21:01:20 +0100 Subject: [feature/new-tz-handling] Correct capitalisation of phpbb_datetime. PHPBB3-9558 --- phpBB/includes/session.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index ba9136b568..d8204e41f6 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -2093,7 +2093,7 @@ class user extends session $utc = new DateTimeZone('UTC'); } - $time = new phpbb_DateTime("@$gmepoch", $utc, $this); + $time = new phpbb_datetime("@$gmepoch", $utc, $this); $time->setTimezone($this->tz); return $time->format($format, $forcedate); -- cgit v1.2.1 From 9e1812a0ca728aee69df9ec5b86ea21756d3b1cc Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 21:31:41 +0100 Subject: [feature/new-tz-handling] Remove old user::$dst property PHPBB3-9558 --- phpBB/includes/session.php | 1 - 1 file changed, 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index d8204e41f6..fe690a1a9a 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1529,7 +1529,6 @@ class user extends session var $theme = array(); var $date_format; var $timezone; - var $dst; var $lang_name = false; var $lang_id = false; -- cgit v1.2.1 From 6a783b843b596c46738d76f2db5d539d8f68a815 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 22:17:40 +0100 Subject: [feature/new-tz-handling] Replace user::$timezone with user::$tz. user::$tz will store the new DateTimeZone object representing the users timezone instead of the existing user::$timezone and user::$dst combination. PHPBB3-9558 --- phpBB/includes/session.php | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index fe690a1a9a..2352e6394a 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1528,7 +1528,14 @@ class user extends session var $help = array(); var $theme = array(); var $date_format; - var $timezone; + + /** + * Users current timezone + * + * @var DateTimeZone Timezone of the user + * @since 3.1 + */ + public $tz; var $lang_name = false; var $lang_id = false; @@ -1586,13 +1593,13 @@ class user extends session $this->lang_name = (file_exists($this->lang_path . $this->data['user_lang'] . "/common.$phpEx")) ? $this->data['user_lang'] : basename($config['default_lang']); $this->date_format = $this->data['user_dateformat']; - $this->timezone = $this->data['user_timezone']; + $this->tz = $this->data['user_timezone']; } else { $this->lang_name = basename($config['default_lang']); $this->date_format = $config['default_dateformat']; - $this->timezone = $config['board_timezone']; + $this->tz = $config['board_timezone']; /** * If a guest user is surfing, we try to guess his/her language first by obtaining the browser language @@ -1631,13 +1638,13 @@ class user extends session */ } - if (is_numeric($this->timezone)) + if (is_numeric($this->tz)) { // Might still be numeric by chance - $this->timezone = sprintf('Etc/GMT%+d', ($this->timezone + ($this->data['user_id'] != ANONYMOUS ? $this->data['user_dst'] : $config['board_dst']))); + $this->tz = sprintf('Etc/GMT%+d', ($this->tz + ($this->data['user_id'] != ANONYMOUS ? $this->data['user_dst'] : $config['board_dst']))); } - $this->timezone = new DateTimeZone($this->timezone); + $this->tz = new DateTimeZone($this->tz); // We include common language file here to not load it every time a custom language file is included $lang = &$this->lang; -- cgit v1.2.1 From 74be23a098ec222cf3f3d14d6b6df236c58e8c01 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 22:20:08 +0100 Subject: [feature/new-tz-handling] Added a user::create_datetime() method. New method which handles instantiating new phpbb_datetime objects in the context of the current user. PHPBB3-9558 --- phpBB/includes/session.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index 2352e6394a..e91606878a 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -2105,6 +2105,21 @@ class user extends session return $time->format($format, $forcedate); } + /** + * Create a phpbb_datetime object in the context of the current user + * + * @since 3.1 + * @param string $time String in a format accepted by strtotime(). + * @param DateTimeZone $timezone Time zone of the time. + * @return phpbb_datetime Date time object linked to the current users locale + */ + public function create_datetime($time, DateTimeZone $timezone = null) + { + $timezone = $timezone ? $timezone : $this->tz; + + return new phpbb_datetime($time, $timezone, $this); + } + /** * Get language id currently used by the user */ -- cgit v1.2.1 From 2e7d9ec805a8f2088ceebf22dbc97b89a72f76d0 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 23:46:20 +0100 Subject: [feature/new-tz-handling] Fixed bug with signature of user::create_datetime(). First argument to user::create_datetime() should be optional. PHPBB3-9558 --- phpBB/includes/session.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index e91606878a..cf2efd2960 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -2113,7 +2113,7 @@ class user extends session * @param DateTimeZone $timezone Time zone of the time. * @return phpbb_datetime Date time object linked to the current users locale */ - public function create_datetime($time, DateTimeZone $timezone = null) + public function create_datetime($time = 'now', DateTimeZone $timezone = null) { $timezone = $timezone ? $timezone : $this->tz; -- cgit v1.2.1 From 522f65d079c61e9ea7f718b67e37a9e58968b0f0 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 22:21:40 +0100 Subject: [feature/new-tz-handling] Correct typo in member comment. PHPBB3-9558 --- phpBB/includes/datetime.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index 92aef88599..3a7fc04105 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -24,7 +24,7 @@ class phpbb_datetime extends DateTime protected $_user; /** - * @var array Date formats are preprocessed by phpBB, to save constact recalculation they are cached. + * @var array Date formats are preprocessed by phpBB, to save constant recalculation they are cached. */ static protected $format_cache = array(); -- cgit v1.2.1 From c521ef1591022e69fe952ec23e6614ae36dee2e2 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 22:22:38 +0100 Subject: [feature/new-tz-handling] Comment and optimise phpbb_datetime::format(). - Added comments explaining the complex time computations for rendering relative date times. - Replaced some repeated method invokations with variables. PHPBB3-9558 --- phpBB/includes/datetime.php | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index 3a7fc04105..577081e40b 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -74,11 +74,18 @@ class phpbb_datetime extends DateTime $format = $format ? $format : $this->_user->date_format; $relative = (strpos($format, self::RELATIVE_WRAPPER) !== false && !$force_absolute); $now = new self('now', $this->_user->tz, $this->_user); - $delta = $now->getTimestamp() - $this->getTimestamp(); + + $timestamp = $this->getTimestamp(); + $now_ts = $now->getTimeStamp(); + + $delta = $now_ts - $timestamp; if ($relative) { - if ($delta <= 3600 && ($delta >= -5 || (($now->getTimestamp() / 60) % 60) == (($this->getTimestamp() / 60) % 60)) && isset($this->_user->lang['datetime']['AGO'])) + // Check the delta is less than or equal to 1 hour + // and the delta is either greater than -5 seconds or timestamp and current time are of the same minute (they must be in the same hour already) + // finally check that relative dates are supported by the language pack + if ($delta <= 3600 && ($delta >= -5 || (($now_ts / 60) % 60) == (($timestamp / 60) % 60)) && isset($this->_user->lang['datetime']['AGO'])) { return $this->_user->lang(array('datetime', 'AGO'), max(0, (int) floor($delta / 60))); } @@ -88,7 +95,6 @@ class phpbb_datetime extends DateTime $midnight->setTime(0, 0, 0); $midnight = $midnight->getTimestamp(); - $timestamp = $this->getTimestamp(); if ($timestamp > $midnight + 86400) { @@ -107,6 +113,7 @@ class phpbb_datetime extends DateTime { $format = self::_format_cache($format, $this->_user); + // Format using the short formatting and finally swap out the relative token placeholder with the correct value return str_replace(self::RELATIVE_WRAPPER . self::RELATIVE_WRAPPER, $this->_user->lang['datetime'][$day], strtr(parent::format($format['format_short']), $format['lang'])); } } -- cgit v1.2.1 From dba89a534120d48d0ba901aedd69f962536bf36d Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 22:24:43 +0100 Subject: [feature/new-tz-handling] Added phpbb_datetime::__toString(). New phpbb_datetime::__toString() magic method that formats the datetime according to the users default settings. PHPBB3-9558 --- phpBB/includes/datetime.php | 10 ++++++++++ 1 file changed, 10 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index 577081e40b..8763697c78 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -124,6 +124,16 @@ class phpbb_datetime extends DateTime return strtr(parent::format($format['format_long']), $format['lang']); } + /** + * Magic method to convert DateTime object to string + * + * @return Formatted date time, according to the users default settings. + */ + public function __toString() + { + return $this->format(); + } + /** * Pre-processes the specified date format * -- cgit v1.2.1 From f085735ef812a57790699a6d789cbab22f882328 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 22:25:52 +0100 Subject: [feature/new-tz-handling] Explained name of phpbb_datetime::getTimestamp() phpbb_datetime::getTimestamp() exists purely to support PHP 5.2 which does not implement the method. PHPBB3-9558 --- phpBB/includes/datetime.php | 1 + 1 file changed, 1 insertion(+) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index 8763697c78..12d04d5ca6 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -48,6 +48,7 @@ class phpbb_datetime extends DateTime /** * Returns a UNIX timestamp representation of the date time. * + * @internal This method is for backwards compatibility with 5.2, hence why it doesn't use our method naming standards. * @return int UNIX timestamp */ public function getTimestamp() -- cgit v1.2.1 From 8fe46175aff1d9275b7337a8ced8060ff850d153 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 22:29:36 +0100 Subject: [feature/new-tz-handling] Fix undefined variable. PHPBB3-9558 --- phpBB/includes/datetime.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index 12d04d5ca6..25da6401d7 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -97,6 +97,8 @@ class phpbb_datetime extends DateTime $midnight = $midnight->getTimestamp(); + $day = false; + if ($timestamp > $midnight + 86400) { $day = 'TOMORROW'; -- cgit v1.2.1 From 5dd7916c496b76ab2e1e28b804069dde63f7dbf0 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 22:47:34 +0100 Subject: [feature/new-tz-handling] Check the is_short flag stored inside the format array. Reuse the existing check store in the format array to determine if the date time format supports relative formatting. PHPBB3-9558 --- phpBB/includes/datetime.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index 25da6401d7..ecb3dfcf17 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -73,7 +73,8 @@ class phpbb_datetime extends DateTime public function format($format = '', $force_absolute = false) { $format = $format ? $format : $this->_user->date_format; - $relative = (strpos($format, self::RELATIVE_WRAPPER) !== false && !$force_absolute); + $format = self::_format_cache($format, $this->_user); + $relative = ($format['is_short'] && !$force_absolute); $now = new self('now', $this->_user->tz, $this->_user); $timestamp = $this->getTimestamp(); @@ -114,8 +115,6 @@ class phpbb_datetime extends DateTime if ($day !== false) { - $format = self::_format_cache($format, $this->_user); - // Format using the short formatting and finally swap out the relative token placeholder with the correct value return str_replace(self::RELATIVE_WRAPPER . self::RELATIVE_WRAPPER, $this->_user->lang['datetime'][$day], strtr(parent::format($format['format_short']), $format['lang'])); } -- cgit v1.2.1 From e9fe9ea5185679e9950e330c949cc2577bfea21d Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 22:52:04 +0100 Subject: [feature/new-tz-handling] Fix bug from 3.0 formatting future dates. Future dates can get formatted as 'less than a minute ago' if they occur in the future on the same minute as the current minute. PHPBB3-9558 PHPBB3-9712 --- phpBB/includes/datetime.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index ecb3dfcf17..2276d36413 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -85,9 +85,10 @@ class phpbb_datetime extends DateTime if ($relative) { // Check the delta is less than or equal to 1 hour + // and the delta not more than a minute in the past // and the delta is either greater than -5 seconds or timestamp and current time are of the same minute (they must be in the same hour already) // finally check that relative dates are supported by the language pack - if ($delta <= 3600 && ($delta >= -5 || (($now_ts / 60) % 60) == (($timestamp / 60) % 60)) && isset($this->_user->lang['datetime']['AGO'])) + if ($delta <= 3600 && $delta > -60 && ($delta >= -5 || (($now_ts / 60) % 60) == (($timestamp / 60) % 60)) && isset($this->_user->lang['datetime']['AGO'])) { return $this->_user->lang(array('datetime', 'AGO'), max(0, (int) floor($delta / 60))); } -- cgit v1.2.1 From 6e1278655ff3f250b4f1e09aa8674bae8d86287a Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 22:57:43 +0100 Subject: [feature/new-tz-handling] Removed line that was missed in cc312d8. PHPBB3-9558 --- phpBB/includes/datetime.php | 2 -- 1 file changed, 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index 2276d36413..22b7f871fd 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -122,8 +122,6 @@ class phpbb_datetime extends DateTime } } - $format = self::_format_cache($format, $this->_user); - return strtr(parent::format($format['format_long']), $format['lang']); } -- cgit v1.2.1 From af789040b8880f908df0a26d5239d07d77c34124 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 23:23:11 +0100 Subject: [feature/new-tz-handling] Modify database schemas. - Dropped the user_dst column which is no longer required. - Modified the user_timezone column to take a string, max length 100. PHPBB3-9558 --- phpBB/develop/create_schema_files.php | 3 +-- phpBB/install/schemas/firebird_schema.sql | 3 +-- phpBB/install/schemas/mssql_schema.sql | 3 +-- phpBB/install/schemas/mysql_40_schema.sql | 3 +-- phpBB/install/schemas/mysql_41_schema.sql | 3 +-- phpBB/install/schemas/oracle_schema.sql | 3 +-- phpBB/install/schemas/postgres_schema.sql | 3 +-- phpBB/install/schemas/sqlite_schema.sql | 3 +-- 8 files changed, 8 insertions(+), 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php index 1735bffef5..f16675385b 100644 --- a/phpBB/develop/create_schema_files.php +++ b/phpBB/develop/create_schema_files.php @@ -1823,8 +1823,7 @@ function get_schema_struct() 'user_inactive_time' => array('TIMESTAMP', 0), 'user_posts' => array('UINT', 0), 'user_lang' => array('VCHAR:30', ''), - 'user_timezone' => array('DECIMAL', 0), - 'user_dst' => array('BOOL', 0), + 'user_timezone' => array('VCHAR:100', 'UTC'), 'user_dateformat' => array('VCHAR_UNI:30', 'd M Y H:i'), 'user_style' => array('UINT', 0), 'user_rank' => array('UINT', 0), diff --git a/phpBB/install/schemas/firebird_schema.sql b/phpBB/install/schemas/firebird_schema.sql index daeba45864..f4b1c624d7 100644 --- a/phpBB/install/schemas/firebird_schema.sql +++ b/phpBB/install/schemas/firebird_schema.sql @@ -1290,8 +1290,7 @@ CREATE TABLE phpbb_users ( user_inactive_time INTEGER DEFAULT 0 NOT NULL, user_posts INTEGER DEFAULT 0 NOT NULL, user_lang VARCHAR(30) CHARACTER SET NONE DEFAULT '' NOT NULL, - user_timezone DOUBLE PRECISION DEFAULT 0 NOT NULL, - user_dst INTEGER DEFAULT 0 NOT NULL, + user_timezone VARCHAR(100) CHARACTER SET NONE DEFAULT 'UTC' NOT NULL, user_dateformat VARCHAR(30) CHARACTER SET UTF8 DEFAULT 'd M Y H:i' NOT NULL COLLATE UNICODE, user_style INTEGER DEFAULT 0 NOT NULL, user_rank INTEGER DEFAULT 0 NOT NULL, diff --git a/phpBB/install/schemas/mssql_schema.sql b/phpBB/install/schemas/mssql_schema.sql index 736917fdcb..fc1afcbbff 100644 --- a/phpBB/install/schemas/mssql_schema.sql +++ b/phpBB/install/schemas/mssql_schema.sql @@ -1576,8 +1576,7 @@ CREATE TABLE [phpbb_users] ( [user_inactive_time] [int] DEFAULT (0) NOT NULL , [user_posts] [int] DEFAULT (0) NOT NULL , [user_lang] [varchar] (30) DEFAULT ('') NOT NULL , - [user_timezone] [float] DEFAULT (0) NOT NULL , - [user_dst] [int] DEFAULT (0) NOT NULL , + [user_timezone] [varchar] (100) DEFAULT ('UTC') NOT NULL , [user_dateformat] [varchar] (30) DEFAULT ('d M Y H:i') NOT NULL , [user_style] [int] DEFAULT (0) NOT NULL , [user_rank] [int] DEFAULT (0) NOT NULL , diff --git a/phpBB/install/schemas/mysql_40_schema.sql b/phpBB/install/schemas/mysql_40_schema.sql index 97c378621b..76b9294987 100644 --- a/phpBB/install/schemas/mysql_40_schema.sql +++ b/phpBB/install/schemas/mysql_40_schema.sql @@ -914,8 +914,7 @@ CREATE TABLE phpbb_users ( user_inactive_time int(11) UNSIGNED DEFAULT '0' NOT NULL, user_posts mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, user_lang varbinary(30) DEFAULT '' NOT NULL, - user_timezone decimal(5,2) DEFAULT '0' NOT NULL, - user_dst tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, + user_timezone varbinary(100) DEFAULT 'UTC' NOT NULL, user_dateformat varbinary(90) DEFAULT 'd M Y H:i' NOT NULL, user_style mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, user_rank mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, diff --git a/phpBB/install/schemas/mysql_41_schema.sql b/phpBB/install/schemas/mysql_41_schema.sql index 9615905625..30fb7a8623 100644 --- a/phpBB/install/schemas/mysql_41_schema.sql +++ b/phpBB/install/schemas/mysql_41_schema.sql @@ -914,8 +914,7 @@ CREATE TABLE phpbb_users ( user_inactive_time int(11) UNSIGNED DEFAULT '0' NOT NULL, user_posts mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, user_lang varchar(30) DEFAULT '' NOT NULL, - user_timezone decimal(5,2) DEFAULT '0' NOT NULL, - user_dst tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, + user_timezone varchar(100) DEFAULT 'UTC' NOT NULL, user_dateformat varchar(30) DEFAULT 'd M Y H:i' NOT NULL, user_style mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, user_rank mediumint(8) UNSIGNED DEFAULT '0' NOT NULL, diff --git a/phpBB/install/schemas/oracle_schema.sql b/phpBB/install/schemas/oracle_schema.sql index 5d60d2a19e..a4b8686948 100644 --- a/phpBB/install/schemas/oracle_schema.sql +++ b/phpBB/install/schemas/oracle_schema.sql @@ -1702,8 +1702,7 @@ CREATE TABLE phpbb_users ( user_inactive_time number(11) DEFAULT '0' NOT NULL, user_posts number(8) DEFAULT '0' NOT NULL, user_lang varchar2(30) DEFAULT '' , - user_timezone number(5, 2) DEFAULT '0' NOT NULL, - user_dst number(1) DEFAULT '0' NOT NULL, + user_timezone varchar2(100) DEFAULT 'UTC' NOT NULL, user_dateformat varchar2(90) DEFAULT 'd M Y H:i' NOT NULL, user_style number(8) DEFAULT '0' NOT NULL, user_rank number(8) DEFAULT '0' NOT NULL, diff --git a/phpBB/install/schemas/postgres_schema.sql b/phpBB/install/schemas/postgres_schema.sql index d7377ac2e6..7138c818ff 100644 --- a/phpBB/install/schemas/postgres_schema.sql +++ b/phpBB/install/schemas/postgres_schema.sql @@ -1172,8 +1172,7 @@ CREATE TABLE phpbb_users ( user_inactive_time INT4 DEFAULT '0' NOT NULL CHECK (user_inactive_time >= 0), user_posts INT4 DEFAULT '0' NOT NULL CHECK (user_posts >= 0), user_lang varchar(30) DEFAULT '' NOT NULL, - user_timezone decimal(5,2) DEFAULT '0' NOT NULL, - user_dst INT2 DEFAULT '0' NOT NULL CHECK (user_dst >= 0), + user_timezone varchar(100) DEFAULT 'UTC' NOT NULL, user_dateformat varchar(30) DEFAULT 'd M Y H:i' NOT NULL, user_style INT4 DEFAULT '0' NOT NULL CHECK (user_style >= 0), user_rank INT4 DEFAULT '0' NOT NULL CHECK (user_rank >= 0), diff --git a/phpBB/install/schemas/sqlite_schema.sql b/phpBB/install/schemas/sqlite_schema.sql index 257937275c..5066ac97df 100644 --- a/phpBB/install/schemas/sqlite_schema.sql +++ b/phpBB/install/schemas/sqlite_schema.sql @@ -886,8 +886,7 @@ CREATE TABLE phpbb_users ( user_inactive_time INTEGER UNSIGNED NOT NULL DEFAULT '0', user_posts INTEGER UNSIGNED NOT NULL DEFAULT '0', user_lang varchar(30) NOT NULL DEFAULT '', - user_timezone decimal(5,2) NOT NULL DEFAULT '0', - user_dst INTEGER UNSIGNED NOT NULL DEFAULT '0', + user_timezone varchar(100) NOT NULL DEFAULT 'UTC', user_dateformat varchar(30) NOT NULL DEFAULT 'd M Y H:i', user_style INTEGER UNSIGNED NOT NULL DEFAULT '0', user_rank INTEGER UNSIGNED NOT NULL DEFAULT '0', -- cgit v1.2.1 From 1665434853fb09e70337d23955e1c9a5f3f0d19d Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Wed, 7 Jul 2010 23:42:54 +0100 Subject: [feature/new-tz-handling] Remove code using legacy timezone properties. Code accessing the legacy user::$timezone and user::$dst properties has been removed and replaced with code utilising user::create_datetime(). Changed by Oleg: in viewtopic, memberlist and index use getTimestamp() + getOffset(). We show members that have birthdays on the specified date. getTimestamp() returns the current date in UTC. We add getOffset() to obtain the current local time in the viewing user's timezone. Then we find members having birthday on this date. Changed by Oleg again: Take leap year status out of the datetime object we have, this seems like it should work as one would expect. PHPBB3-9558 --- phpBB/feed.php | 2 +- phpBB/includes/functions_profile_fields.php | 9 ++++++--- phpBB/index.php | 5 +++-- phpBB/memberlist.php | 3 ++- phpBB/viewtopic.php | 3 ++- 5 files changed, 14 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/feed.php b/phpBB/feed.php index b8c0c370f9..d7092d6758 100644 --- a/phpBB/feed.php +++ b/phpBB/feed.php @@ -255,7 +255,7 @@ function feed_format_date($time) { global $user; - $zone_offset = (int) $user->timezone + (int) $user->dst; + $zone_offset = $user->create_datetime()->getOffset(); $sign = ($zone_offset < 0) ? '-' : '+'; $time_offset = abs($zone_offset); diff --git a/phpBB/includes/functions_profile_fields.php b/phpBB/includes/functions_profile_fields.php index ec29a1732d..aacfa82c54 100644 --- a/phpBB/includes/functions_profile_fields.php +++ b/phpBB/includes/functions_profile_fields.php @@ -555,9 +555,12 @@ class custom_profile else if ($day && $month && $year) { global $user; - // Date should display as the same date for every user regardless of timezone, so remove offset - // to compensate for the offset added by user::format_date() - return $user->format_date(gmmktime(0, 0, 0, $month, $day, $year) - ($user->timezone + $user->dst), $user->lang['DATE_FORMAT'], true); + // Date should display as the same date for every user regardless of timezone + + return $user->create_datetime() + ->setDate($year, $month, $day) + ->setTime(0, 0, 0) + ->format($user->lang['DATE_FORMAT'], true); } return $value; diff --git a/phpBB/index.php b/phpBB/index.php index 182efbc7e0..ccefd9833c 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -84,11 +84,12 @@ $legend = implode(', ', $legend); $birthday_list = array(); if ($config['load_birthdays'] && $config['allow_birthdays'] && $auth->acl_gets('u_viewprofile', 'a_user', 'a_useradd', 'a_userdel')) { - $now = phpbb_gmgetdate(time() + $user->timezone + $user->dst); + $time = $user->create_datetime(); + $now = phpbb_gmgetdate($time->getTimestamp() + $time->getOffset()); // Display birthdays of 29th february on 28th february in non-leap-years $leap_year_birthdays = ''; - if ($now['mday'] == 28 && $now['mon'] == 2 && !$user->format_date(time(), 'L')) + if ($now['mday'] == 28 && $now['mon'] == 2 && !$time->format('L')) { $leap_year_birthdays = " OR user_birthday LIKE '" . $db->sql_escape(sprintf('%2d-%2d-', 29, 2)) . "%'"; } diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index 556db2fa5d..ea8a6fc44b 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -1684,7 +1684,8 @@ function show_profile($data, $user_notes_enabled = false, $warn_user_enabled = f if ($bday_year) { - $now = phpbb_gmgetdate(time() + $user->timezone + $user->dst); + $now = $user->create_datetime(); + $now = phpbb_gmgetdate($now->getTimestamp() + $now->getOffset()); $diff = $now['mon'] - $bday_month; if ($diff == 0) diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index e78ba73cd7..782f02fd4b 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -965,7 +965,8 @@ $sql_ary = array( $sql = $db->sql_build_query('SELECT', $sql_ary); $result = $db->sql_query($sql); -$now = phpbb_gmgetdate(time() + $user->timezone + $user->dst); +$now = $user->create_datetime(); +$now = phpbb_gmgetdate($now->getTimestamp() + $now->getOffset()); // Posts are stored in the $rowset array while $attach_list, $user_cache // and the global bbcode_bitfield are built -- cgit v1.2.1 From 0f320a6c48d63154bba45c2937adeee79165816c Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Thu, 8 Jul 2010 21:56:51 +0100 Subject: [feature/new-tz-handling] Update tz_select() to use the PHP timezone database. tz_select() now uses the PHP timezone database to generate the timezone selection box, it tries to use a translated language string otherwise falls back to a label produced from the timezone identifier. I've done this so new timezones are available immediately without a new language pack. PHPBB3-9558 --- phpBB/includes/functions.php | 31 ++++++++++++++++++++++++------- 1 file changed, 24 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 9e2e57dd5e..fb8ea93e32 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1071,28 +1071,45 @@ function style_select($default = '', $all = false) /** * Pick a timezone +* @todo Possible HTML escaping */ function tz_select($default = '', $truncate = false) { global $user; + static $timezones; + + if (!isset($timezones)) + { + $timezones = DateTimeZone::listIdentifiers(); + + sort($timezones); + } + $tz_select = ''; - foreach ($user->lang['tz_zones'] as $offset => $zone) + + foreach ($timezones as $timezone) { - if ($truncate) + if (isset($user->lang['timezones'][$timezone])) { - $zone_trunc = truncate_string($zone, 50, 255, false, '...'); + $title = $label = $user->lang['timezones'][$timezone]; } else { - $zone_trunc = $zone; + // No label, we'll figure one out + // @todo rtl languages? + $bits = explode('/', strtolower(str_replace('_', ' ', $timezone))); + + $title = $label = ucwords(implode(' - ', $bits)); } - if (is_numeric($offset)) + if ($truncate) { - $selected = ($offset == $default) ? ' selected="selected"' : ''; - $tz_select .= ''; + $label = truncate_string($label, 50, 255, false, '...'); } + + $selected = ($timezone === $default) ? ' selected="selected"' : ''; + $tz_select .= ''; } return $tz_select; -- cgit v1.2.1 From 190b019fa28f59c018554916e33446d93efb7311 Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Thu, 8 Jul 2010 22:09:24 +0100 Subject: [feature/new-tz-handling] Remove case mangling, the identifiers are correct. PHPBB3-9558 --- phpBB/includes/functions.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index fb8ea93e32..69bfe3e090 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1098,9 +1098,9 @@ function tz_select($default = '', $truncate = false) { // No label, we'll figure one out // @todo rtl languages? - $bits = explode('/', strtolower(str_replace('_', ' ', $timezone))); + $bits = explode('/', str_replace('_', ' ', $timezone)); - $title = $label = ucwords(implode(' - ', $bits)); + $title = $label = implode(' - ', $bits); } if ($truncate) -- cgit v1.2.1 From f17664a00c9fa3b80a887bde2cdb2424a5d5567a Mon Sep 17 00:00:00 2001 From: Chris Smith Date: Fri, 9 Jul 2010 20:39:30 +0100 Subject: [feature/new-tz-handling] Correct a bug preventing multiple formats working. PHPBB3-9558 --- phpBB/includes/datetime.php | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/datetime.php b/phpBB/includes/datetime.php index 22b7f871fd..15e3c8b0b7 100644 --- a/phpBB/includes/datetime.php +++ b/phpBB/includes/datetime.php @@ -149,22 +149,22 @@ class phpbb_datetime extends DateTime if (!isset(self::$format_cache[$lang])) { self::$format_cache[$lang] = array(); + } - if (!isset(self::$format_cache[$lang][$format])) + if (!isset(self::$format_cache[$lang][$format])) + { + // Is the user requesting a friendly date format (i.e. 'Today 12:42')? + self::$format_cache[$lang][$format] = array( + 'is_short' => strpos($format, self::RELATIVE_WRAPPER) !== false, + 'format_short' => substr($format, 0, strpos($format, self::RELATIVE_WRAPPER)) . self::RELATIVE_WRAPPER . self::RELATIVE_WRAPPER . substr(strrchr($format, self::RELATIVE_WRAPPER), 1), + 'format_long' => str_replace(self::RELATIVE_WRAPPER, '', $format), + 'lang' => $user->lang['datetime'], + ); + + // Short representation of month in format? Some languages use different terms for the long and short format of May + if ((strpos($format, '\M') === false && strpos($format, 'M') !== false) || (strpos($format, '\r') === false && strpos($format, 'r') !== false)) { - // Is the user requesting a friendly date format (i.e. 'Today 12:42')? - self::$format_cache[$lang][$format] = array( - 'is_short' => strpos($format, self::RELATIVE_WRAPPER) !== false, - 'format_short' => substr($format, 0, strpos($format, self::RELATIVE_WRAPPER)) . self::RELATIVE_WRAPPER . self::RELATIVE_WRAPPER . substr(strrchr($format, self::RELATIVE_WRAPPER), 1), - 'format_long' => str_replace(self::RELATIVE_WRAPPER, '', $format), - 'lang' => $user->lang['datetime'], - ); - - // Short representation of month in format? Some languages use different terms for the long and short format of May - if ((strpos($format, '\M') === false && strpos($format, 'M') !== false) || (strpos($format, '\r') === false && strpos($format, 'r') !== false)) - { - self::$format_cache[$lang][$format]['lang']['May'] = $user->lang['datetime']['May_short']; - } + self::$format_cache[$lang][$format]['lang']['May'] = $user->lang['datetime']['May_short']; } } -- cgit v1.2.1 From bb461c8daa97358e8bcce923a21eba0abd6ea3dc Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 10 Mar 2011 19:14:53 -0500 Subject: [feature/new-tz-handling] Sort timezones in selector by offset. Since the list of timezones is very long, and users are likely to know their current offset but not necessarily which city that is nearby is in the timezone database, sort the list of timezones by offset. UTC is specially handled to show up before other GMT+0 timezones. PHPBB3-9558 --- phpBB/feed.php | 10 +------ phpBB/includes/functions.php | 71 +++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 71 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/feed.php b/phpBB/feed.php index d7092d6758..025904e682 100644 --- a/phpBB/feed.php +++ b/phpBB/feed.php @@ -256,15 +256,7 @@ function feed_format_date($time) global $user; $zone_offset = $user->create_datetime()->getOffset(); - - $sign = ($zone_offset < 0) ? '-' : '+'; - $time_offset = abs($zone_offset); - - $offset_seconds = $time_offset % 3600; - $offset_minutes = $offset_seconds / 60; - $offset_hours = ($time_offset - $offset_seconds) / 3600; - - $offset_string = sprintf("%s%02d:%02d", $sign, $offset_hours, $offset_minutes); + $offset_string = phpbb_format_timezone_offset($zone_offset); } return gmdate("Y-m-d\TH:i:s", $time + $zone_offset) . $offset_string; diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 69bfe3e090..31a191b513 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1069,6 +1069,65 @@ function style_select($default = '', $all = false) return $style_options; } +function phpbb_format_timezone_offset($tz_offset) +{ + $sign = ($tz_offset < 0) ? '-' : '+'; + $time_offset = abs($tz_offset); + + $offset_seconds = $time_offset % 3600; + $offset_minutes = $offset_seconds / 60; + $offset_hours = ($time_offset - $offset_seconds) / 3600; + + $offset_string = sprintf("%s%02d:%02d", $sign, $offset_hours, $offset_minutes); + return $offset_string; +} + +// Compares two time zone labels. +// Arranges them in increasing order by timezone offset. +// Places UTC before other timezones in the same offset. +function tz_select_compare($a, $b) +{ + $a_sign = $a[3]; + $b_sign = $b[3]; + if ($a_sign != $b_sign) + { + return $a_sign == '-' ? -1 : 1; + } + + $a_offset = substr($a, 4, 5); + $b_offset = substr($b, 4, 5); + if ($a_offset == $b_offset) + { + $a_name = substr($a, 12); + $b_name = substr($b, 12); + if ($a_name == $b_name) + { + return 0; + } else if ($a_name == 'UTC') + { + return -1; + } else if ($b_name == 'UTC') + { + return 1; + } + else + { + return $a_name < $b_name ? -1 : 1; + } + } + else + { + if ($a_sign == '-') + { + return $a_offset > $b_offset ? -1 : 1; + } + else + { + return $a_offset < $b_offset ? -1 : 1; + } + } +} + /** * Pick a timezone * @todo Possible HTML escaping @@ -1083,7 +1142,17 @@ function tz_select($default = '', $truncate = false) { $timezones = DateTimeZone::listIdentifiers(); - sort($timezones); + foreach ($timezones as &$timezone) + { + $tz = new DateTimeZone($timezone); + $dt = new phpbb_datetime('now', $tz); + $offset = $dt->getOffset(); + $offset_string = phpbb_format_timezone_offset($offset); + $timezone = 'GMT' . $offset_string . ' - ' . $timezone; + } + unset($timezone); + + usort($timezones, 'tz_select_compare'); } $tz_select = ''; -- cgit v1.2.1 From da8009603d05acdccaff15cd610353d85c365220 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 15 Mar 2011 07:45:43 -0400 Subject: [feature/new-tz-handling] Preselect a timezone in registration. Use Javascript to obtain client's timezone offset and select the first timezone in our list with that offset. Changes for prosilver only. The javascript file should be shared between styles. PHPBB3-9558 --- phpBB/language/en/ucp.php | 1 + phpBB/styles/prosilver/template/timezone.js | 54 ++++++++++++++++++++++ .../prosilver/template/ucp_prefs_personal.html | 10 +++- phpBB/styles/prosilver/template/ucp_register.html | 10 +++- 4 files changed, 73 insertions(+), 2 deletions(-) create mode 100644 phpBB/styles/prosilver/template/timezone.js (limited to 'phpBB') diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index c8ffbf31c0..9cbca4b740 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -399,6 +399,7 @@ $lang = array_merge($lang, array( 'SIGNATURE_EXPLAIN' => 'This is a block of text that can be added to posts you make. There is a %d character limit.', 'SIGNATURE_PREVIEW' => 'Your signature will appear like this in posts', 'SIGNATURE_TOO_LONG' => 'Your signature is too long.', + 'SELECT_TIMEZONE' => 'Select timezone', 'SORT' => 'Sort', 'SORT_COMMENT' => 'File comment', 'SORT_DOWNLOADS' => 'Downloads', diff --git a/phpBB/styles/prosilver/template/timezone.js b/phpBB/styles/prosilver/template/timezone.js new file mode 100644 index 0000000000..5d07b1d3ad --- /dev/null +++ b/phpBB/styles/prosilver/template/timezone.js @@ -0,0 +1,54 @@ +function phpbb_preselect_tz_select() +{ + var selector = document.getElementsByClassName('tz_select')[0]; + if (selector.value) + { + return; + } + // The offset returned here is in minutes and negated. + // http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp + var offset = (new Date()).getTimezoneOffset(); + if (offset < 0) + { + var sign = '+'; + offset = -offset; + } + else + { + var sign = '-'; + } + var minutes = offset % 60; + var hours = (offset - minutes) / 60; + if (hours < 10) + { + hours = '0' + hours.toString(); + } + else + { + hours = hours.toString(); + } + if (minutes < 10) + { + minutes = '0' + minutes.toString(); + } + else + { + minutes = minutes.toString(); + } + var prefix = 'GMT' + sign + hours + ':' + minutes; + var prefix_length = prefix.length; + for (var i = 0; i < selector.options.length; ++i) + { + var option = selector.options[i]; + if (option.value.substring(0, prefix_length) == prefix) + { + // Firefox scrolls the selector only to put the option into view; + // for negative-offset timezones, this means the first timezone + // of a particular offset will be the bottom one, and selected, + // with all other timezones not visible. Not much can be done + // about that here unfortunately. + option.selected = true; + break; + } + } +} diff --git a/phpBB/styles/prosilver/template/ucp_prefs_personal.html b/phpBB/styles/prosilver/template/ucp_prefs_personal.html index 635f321469..eae37b8021 100644 --- a/phpBB/styles/prosilver/template/ucp_prefs_personal.html +++ b/phpBB/styles/prosilver/template/ucp_prefs_personal.html @@ -75,7 +75,12 @@
    -
    +
    + +
    @@ -141,4 +146,7 @@ // ]]> + + + diff --git a/phpBB/styles/prosilver/template/ucp_register.html b/phpBB/styles/prosilver/template/ucp_register.html index dd0e5ad02a..542a860f23 100644 --- a/phpBB/styles/prosilver/template/ucp_register.html +++ b/phpBB/styles/prosilver/template/ucp_register.html @@ -59,7 +59,12 @@
    -
    +
    + +
    @@ -110,4 +115,7 @@
    + + + -- cgit v1.2.1 From 56a7038aa57a1ec473196e01f68b7c8a1d0a89b6 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 15 Mar 2011 07:56:21 -0400 Subject: [feature/new-tz-handling] Removed DST options from templates. PHPBB3-9558 --- phpBB/adm/style/acp_users_prefs.html | 5 ----- phpBB/styles/prosilver/template/ucp_prefs_personal.html | 7 ------- phpBB/styles/subsilver2/template/ucp_prefs_personal.html | 4 ---- 3 files changed, 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_prefs.html b/phpBB/adm/style/acp_users_prefs.html index a519447b2f..90db62984e 100644 --- a/phpBB/adm/style/acp_users_prefs.html +++ b/phpBB/adm/style/acp_users_prefs.html @@ -56,11 +56,6 @@
    -
    -
    -
    -
    -

    {L_BOARD_DATE_FORMAT_EXPLAIN}
    diff --git a/phpBB/styles/prosilver/template/ucp_prefs_personal.html b/phpBB/styles/prosilver/template/ucp_prefs_personal.html index eae37b8021..267a3b8c2f 100644 --- a/phpBB/styles/prosilver/template/ucp_prefs_personal.html +++ b/phpBB/styles/prosilver/template/ucp_prefs_personal.html @@ -82,13 +82,6 @@
    -
    -
    -
    - - -
    -

    {L_BOARD_DATE_FORMAT_EXPLAIN}
    diff --git a/phpBB/styles/subsilver2/template/ucp_prefs_personal.html b/phpBB/styles/subsilver2/template/ucp_prefs_personal.html index 8e4b04fc10..357e1fe100 100644 --- a/phpBB/styles/subsilver2/template/ucp_prefs_personal.html +++ b/phpBB/styles/subsilver2/template/ucp_prefs_personal.html @@ -77,10 +77,6 @@ - - {L_BOARD_DST}: - checked="checked" /> {L_YES}   checked="checked" /> {L_NO} - {L_BOARD_DATE_FORMAT}:
    {L_BOARD_DATE_FORMAT_EXPLAIN} -- cgit v1.2.1 From e8e5d2b2c000e8a91897b4044c6a3005f60b86ab Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 15 Mar 2011 17:37:15 -0400 Subject: [feature/new-tz-handling] Removed DST and numeric timezone-related language. PHPBB3-9558 --- phpBB/language/en/acp/board.php | 1 - phpBB/language/en/common.php | 87 ----------------------------------------- phpBB/language/en/help_faq.php | 2 +- phpBB/language/en/ucp.php | 1 - 4 files changed, 1 insertion(+), 90 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php index ff516a8146..0be4c0df6d 100644 --- a/phpBB/language/en/acp/board.php +++ b/phpBB/language/en/acp/board.php @@ -49,7 +49,6 @@ $lang = array_merge($lang, array( 'OVERRIDE_STYLE_EXPLAIN' => 'Replaces user’s style with the default.', 'SITE_DESC' => 'Site description', 'SITE_NAME' => 'Site name', - 'SYSTEM_DST' => 'Enable Summer Time/DST', 'SYSTEM_TIMEZONE' => 'Guest timezone', 'SYSTEM_TIMEZONE_EXPLAIN' => 'Timezone to use for displaying times to users who are not logged in (guests, bots). Logged in users set their timezone during registration and can change it in their user control panel.', 'WARNINGS_EXPIRE' => 'Warning duration', diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 44a63a6acb..bcb08a8b73 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -786,93 +786,6 @@ $lang = array_merge($lang, array( 'Dec' => 'Dec', ), - 'tz' => array( - '-12' => 'UTC - 12 hours', - '-11' => 'UTC - 11 hours', - '-10' => 'UTC - 10 hours', - '-9.5' => 'UTC - 9:30 hours', - '-9' => 'UTC - 9 hours', - '-8' => 'UTC - 8 hours', - '-7' => 'UTC - 7 hours', - '-6' => 'UTC - 6 hours', - '-5' => 'UTC - 5 hours', - '-4.5' => 'UTC - 4:30 hours', - '-4' => 'UTC - 4 hours', - '-3.5' => 'UTC - 3:30 hours', - '-3' => 'UTC - 3 hours', - '-2' => 'UTC - 2 hours', - '-1' => 'UTC - 1 hour', - '0' => 'UTC', - '1' => 'UTC + 1 hour', - '2' => 'UTC + 2 hours', - '3' => 'UTC + 3 hours', - '3.5' => 'UTC + 3:30 hours', - '4' => 'UTC + 4 hours', - '4.5' => 'UTC + 4:30 hours', - '5' => 'UTC + 5 hours', - '5.5' => 'UTC + 5:30 hours', - '5.75' => 'UTC + 5:45 hours', - '6' => 'UTC + 6 hours', - '6.5' => 'UTC + 6:30 hours', - '7' => 'UTC + 7 hours', - '8' => 'UTC + 8 hours', - '8.75' => 'UTC + 8:45 hours', - '9' => 'UTC + 9 hours', - '9.5' => 'UTC + 9:30 hours', - '10' => 'UTC + 10 hours', - '10.5' => 'UTC + 10:30 hours', - '11' => 'UTC + 11 hours', - '11.5' => 'UTC + 11:30 hours', - '12' => 'UTC + 12 hours', - '12.75' => 'UTC + 12:45 hours', - '13' => 'UTC + 13 hours', - '14' => 'UTC + 14 hours', - 'dst' => '[ DST ]', - ), - - 'tz_zones' => array( - '-12' => '[UTC - 12] Baker Island Time', - '-11' => '[UTC - 11] Niue Time, Samoa Standard Time', - '-10' => '[UTC - 10] Hawaii-Aleutian Standard Time, Cook Island Time', - '-9.5' => '[UTC - 9:30] Marquesas Islands Time', - '-9' => '[UTC - 9] Alaska Standard Time, Gambier Island Time', - '-8' => '[UTC - 8] Pacific Standard Time', - '-7' => '[UTC - 7] Mountain Standard Time', - '-6' => '[UTC - 6] Central Standard Time', - '-5' => '[UTC - 5] Eastern Standard Time', - '-4.5' => '[UTC - 4:30] Venezuelan Standard Time', - '-4' => '[UTC - 4] Atlantic Standard Time', - '-3.5' => '[UTC - 3:30] Newfoundland Standard Time', - '-3' => '[UTC - 3] Amazon Standard Time, Central Greenland Time', - '-2' => '[UTC - 2] Fernando de Noronha Time, South Georgia & the South Sandwich Islands Time', - '-1' => '[UTC - 1] Azores Standard Time, Cape Verde Time, Eastern Greenland Time', - '0' => '[UTC] Western European Time, Greenwich Mean Time', - '1' => '[UTC + 1] Central European Time, West African Time', - '2' => '[UTC + 2] Eastern European Time, Central African Time', - '3' => '[UTC + 3] Moscow Standard Time, Eastern African Time', - '3.5' => '[UTC + 3:30] Iran Standard Time', - '4' => '[UTC + 4] Gulf Standard Time, Samara Standard Time', - '4.5' => '[UTC + 4:30] Afghanistan Time', - '5' => '[UTC + 5] Pakistan Standard Time, Yekaterinburg Standard Time', - '5.5' => '[UTC + 5:30] Indian Standard Time, Sri Lanka Time', - '5.75' => '[UTC + 5:45] Nepal Time', - '6' => '[UTC + 6] Bangladesh Time, Bhutan Time, Novosibirsk Standard Time', - '6.5' => '[UTC + 6:30] Cocos Islands Time, Myanmar Time', - '7' => '[UTC + 7] Indochina Time, Krasnoyarsk Standard Time', - '8' => '[UTC + 8] Chinese Standard Time, Australian Western Standard Time, Irkutsk Standard Time', - '8.75' => '[UTC + 8:45] Southeastern Western Australia Standard Time', - '9' => '[UTC + 9] Japan Standard Time, Korea Standard Time, Chita Standard Time', - '9.5' => '[UTC + 9:30] Australian Central Standard Time', - '10' => '[UTC + 10] Australian Eastern Standard Time, Vladivostok Standard Time', - '10.5' => '[UTC + 10:30] Lord Howe Standard Time', - '11' => '[UTC + 11] Solomon Island Time, Magadan Standard Time', - '11.5' => '[UTC + 11:30] Norfolk Island Time', - '12' => '[UTC + 12] New Zealand Time, Fiji Time, Kamchatka Standard Time', - '12.75' => '[UTC + 12:45] Chatham Islands Time', - '13' => '[UTC + 13] Tonga Time, Phoenix Islands Time', - '14' => '[UTC + 14] Line Island Time', - ), - // The value is only an example and will get replaced by the current time on view 'dateformats' => array( 'd M Y, H:i' => '01 Jan 2007, 13:37', diff --git a/phpBB/language/en/help_faq.php b/phpBB/language/en/help_faq.php index 6ca9589913..5f9af2d721 100644 --- a/phpBB/language/en/help_faq.php +++ b/phpBB/language/en/help_faq.php @@ -88,7 +88,7 @@ $help = array( ), array( 0 => 'I changed the timezone and the time is still wrong!', - 1 => 'If you are sure you have set the timezone and Summer Time/DST correctly and the time is still incorrect, then the time stored on the server clock is incorrect. Please notify an administrator to correct the problem.' + 1 => 'If you are sure you have set the timezone correctly and the time is still incorrect, then the time stored on the server clock is incorrect. Please notify an administrator to correct the problem.' ), array( 0 => 'My language is not in the list!', diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 9cbca4b740..3925005968 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -103,7 +103,6 @@ $lang = array_merge($lang, array( 'BIRTHDAY_EXPLAIN' => 'Setting a year will list your age when it is your birthday.', 'BOARD_DATE_FORMAT' => 'My date format', 'BOARD_DATE_FORMAT_EXPLAIN' => 'The syntax used is identical to the PHP date() function.', - 'BOARD_DST' => 'Summer Time/DST is in effect', 'BOARD_LANGUAGE' => 'My language', 'BOARD_STYLE' => 'My board style', 'BOARD_TIMEZONE' => 'My timezone', -- cgit v1.2.1 From b672fc7ae113c0e01f1d7ce4ffae3eb26e57b586 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Tue, 26 Apr 2011 22:11:45 -0400 Subject: [feature/new-tz-handling] Started on database updater changes. The changes are tricky since we need to drop user_dst column from users table, but we need it during the data migration process to properly calculate effective timezones for all users. The change here converts user_timezone to vchar and computes timezone identifiers from the offsets. It uses database-specific functions for building SQL conditionals and concatenations which need to be implemented, probably in a separate ticket. As a result the current code is not functional. PHPBB3-9558 --- phpBB/install/database_update.php | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index fa0fba9dc7..9d550cf938 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -1090,6 +1090,9 @@ function database_update_info() GROUPS_TABLE => array( 'group_legend' => array('UINT', 0), ), + USERS_TABLE => array( + 'user_timezone' => array('VCHAR:100', ''), + ), ), 'drop_columns' => array( STYLES_TABLE => array( @@ -2352,6 +2355,25 @@ function change_database_data(&$no_updates, $version) set_config('teampage_memberships', '1'); } + // Update timezones + // user_dst is 0 if not in dst and 1 if in dst; + // this happens to be exactly the correction that should be added to the timezone offset + // to obtain dst offset. + // Parenthesize here because we operate on this value later. + $active_offset = '(user_timezone + user_dst)'; + // Now we have a tricky problem of forcing the plus sign into the expression. + // Build it via a conditional since there cannot be a portable printf equivalent in databases. + // Note that active offset is not an absolute value here - it is an expression that will + // be evaluated by the database during query execution. + // We don't print - here because it will come from active offset. + $sign = $db->conditional_sql("$active_offset < 0", '', '+'); + // Use database-specific escaping because strings are quoted differently by different databases. + $new_value = $db->concatenate_sql($db->sql_escape('GMT'), $sign, $active_offset); + $sql = 'UPDATE ' . USERS_TABLE . ' + SET user_timezone = ' . $new_value; + _sql($sql, $errored, $error_ary); + // After we have calculated the timezones we can delete user_dst column from user table. + $no_updates = false; break; } -- cgit v1.2.1 From 3997ffac2a2e6f422dcd5cd5bd076edee6fa91dd Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 15 Mar 2012 13:13:21 +0200 Subject: [feature/merging-style-components] Creating style class Creating phpbb_style class, changing template initialization to style initialization PHPBB3-10632 --- phpBB/common.php | 6 +-- phpBB/includes/bbcode.php | 9 ++-- phpBB/includes/functions_messenger.php | 6 +-- phpBB/includes/style/style.php | 89 ++++++++++++++++++++++++++++++++++ phpBB/install/index.php | 5 +- 5 files changed, 101 insertions(+), 14 deletions(-) create mode 100644 phpBB/includes/style/style.php (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index a38a986280..dd49b29528 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -120,9 +120,9 @@ set_config_count(null, null, null, $config); // load extensions $phpbb_extension_manager = new phpbb_extension_manager($db, EXT_TABLE, $phpbb_root_path, ".$phpEx", $cache->get_driver()); -$phpbb_style_locator = new phpbb_style_locator(); -$phpbb_style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); -$template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_locator, $phpbb_style_path_provider); +// Initialize style +$style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $phpbb_extension_manager); +$template = $style->template; // Add own hook handler require($phpbb_root_path . 'includes/hooks/index.' . $phpEx); diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php index 61271545bd..3831cb03ad 100644 --- a/phpBB/includes/bbcode.php +++ b/phpBB/includes/bbcode.php @@ -132,12 +132,11 @@ class bbcode { $this->template_bitfield = new bitfield($user->theme['bbcode_bitfield']); - $template_locator = new phpbb_style_locator(); - $template_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); - $template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $template_locator, $template_path_provider); + $style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $phpbb_extension_manager); + $template = $style->template; $template->set_template(); - $template_locator->set_filenames(array('bbcode.html' => 'bbcode.html')); - $this->template_filename = $template_locator->get_source_file_for_handle('bbcode.html'); + $template->set_filenames(array('bbcode.html' => 'bbcode.html')); + $this->template_filename = $style->locator->get_source_file_for_handle('bbcode.html'); } $bbcode_ids = $rowset = $sql = array(); diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index 1fb5f15879..4e1ec160af 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -208,10 +208,9 @@ class messenger // tpl_msg now holds a template object we can use to parse the template file if (!isset($this->tpl_msg[$template_lang . $template_file])) { - $template_locator = new phpbb_style_locator(); - $template_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); - $this->tpl_msg[$template_lang . $template_file] = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $template_locator, $template_path_provider); + $this->tpl_msg[$template_lang . $template_file] = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $phpbb_extension_manager); $tpl = &$this->tpl_msg[$template_lang . $template_file]; + $tpl = $tpl->template; $fallback_template_path = false; @@ -237,6 +236,7 @@ class messenger } $this->tpl_obj = &$this->tpl_msg[$template_lang . $template_file]; + $this->tpl_obj = $this->tpl_obj->template; $this->vars = &$this->tpl_obj->_rootref; $this->tpl_msg = ''; diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php new file mode 100644 index 0000000000..217a70e237 --- /dev/null +++ b/phpBB/includes/style/style.php @@ -0,0 +1,89 @@ +phpbb_root_path = $phpbb_root_path; + $this->phpEx = $phpEx; + $this->config = $config; + $this->user = $user; + $this->locator = new phpbb_style_locator(); + $this->provider = new phpbb_style_path_provider(); + if ($phpbb_extension_manager !== false) + { + $this->provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, $this->provider); + } + $this->template = new phpbb_style_template($this->phpbb_root_path, $this->phpEx, $this->config, $this->user, $this->locator, $this->provider); + } +} diff --git a/phpBB/install/index.php b/phpBB/install/index.php index 9b0dde1009..7c6dd10d03 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -201,9 +201,8 @@ $config = new phpbb_config(array( 'load_tplcompile' => '1' )); -$phpbb_style_locator = new phpbb_style_locator(); -$phpbb_style_path_provider = new phpbb_style_path_provider(); -$template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_locator, $phpbb_style_path_provider); +$style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, false); +$template = $style->template; $template->set_ext_dir_prefix('adm/'); $template->set_custom_template('../adm/style', 'admin'); $template->assign_var('T_ASSETS_PATH', '../assets'); -- cgit v1.2.1 From c83f386c923fdb0e2823e7f742561a44a6f0f6ed Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 15 Mar 2012 13:41:23 +0200 Subject: [feature/merging-style-components] Changing $style to $style_id Changing $style to $style_id in user::setup to avoid conflict with new global style variable PHPBB3-10632 --- phpBB/includes/session.php | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index cd6f17154a..f2956243e2 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1568,7 +1568,7 @@ class user extends session /** * Setup basic user-specific items (style, language, ...) */ - function setup($lang_set = false, $style = false) + function setup($lang_set = false, $style_id = false) { global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache; @@ -1643,36 +1643,36 @@ class user extends session { global $SID, $_EXTRA_URL; - $style = $style_request; - $SID .= '&style=' . $style; - $_EXTRA_URL = array('style=' . $style); + $style_id = $style_request; + $SID .= '&style=' . $style_id; + $_EXTRA_URL = array('style=' . $style_id); } else { // Set up style - $style = ($style) ? $style : ((!$config['override_user_style']) ? $this->data['user_style'] : $config['default_style']); + $style_id = ($style_id) ? $style_id : ((!$config['override_user_style']) ? $this->data['user_style'] : $config['default_style']); } $sql = 'SELECT * FROM ' . STYLES_TABLE . " s - WHERE s.style_id = $style"; + WHERE s.style_id = $style_id"; $result = $db->sql_query($sql, 3600); $this->theme = $db->sql_fetchrow($result); $db->sql_freeresult($result); // User has wrong style - if (!$this->theme && $style == $this->data['user_style']) + if (!$this->theme && $style_id == $this->data['user_style']) { - $style = $this->data['user_style'] = $config['default_style']; + $style_id = $this->data['user_style'] = $config['default_style']; $sql = 'UPDATE ' . USERS_TABLE . " - SET user_style = $style + SET user_style = $style_id WHERE user_id = {$this->data['user_id']}"; $db->sql_query($sql); $sql = 'SELECT * FROM ' . STYLES_TABLE . " s - WHERE s.style_id = $style"; + WHERE s.style_id = $style_id"; $result = $db->sql_query($sql, 3600); $this->theme = $db->sql_fetchrow($result); $db->sql_freeresult($result); -- cgit v1.2.1 From 8b7c2c3c6516fd4eb606054ca3822d8a7f977282 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 15 Mar 2012 16:33:13 +0200 Subject: [feature/merging-style-components] Renaming style locator Renaming style locator to style resource locator PHPBB3-10632 --- phpBB/includes/style/locator.php | 214 ------------------------------ phpBB/includes/style/resource_locator.php | 214 ++++++++++++++++++++++++++++++ phpBB/includes/style/style.php | 2 +- phpBB/includes/style/template.php | 6 +- 4 files changed, 218 insertions(+), 218 deletions(-) delete mode 100644 phpBB/includes/style/locator.php create mode 100644 phpBB/includes/style/resource_locator.php (limited to 'phpBB') diff --git a/phpBB/includes/style/locator.php b/phpBB/includes/style/locator.php deleted file mode 100644 index 2d0bcce924..0000000000 --- a/phpBB/includes/style/locator.php +++ /dev/null @@ -1,214 +0,0 @@ -main_root_id = array_search($template, $this->roots, true); - } - - /** - * Sets the list of template paths - * - * These paths will be searched for template files in the provided order. - * Paths may be outside of phpBB, but templates loaded from these paths - * will still be cached. - * - * @param array $template_paths An array of paths to template directories - * @return null - */ - public function set_paths($template_paths) - { - $this->roots = array(); - $this->files = array(); - $this->filenames = array(); - $this->main_root_id = 0; - - foreach ($template_paths as $path) - { - // Make sure $path has no ending slash - if (substr($path, -1) === '/') - { - $path = substr($path, 0, -1); - } - $this->roots[] = $path; - } - } - - /** - * Sets the template filenames for handles. $filename_array - * should be a hash of handle => filename pairs. - * - * @param array $filname_array Should be a hash of handle => filename pairs. - */ - public function set_filenames(array $filename_array) - { - foreach ($filename_array as $handle => $filename) - { - if (empty($filename)) - { - trigger_error("template locator: set_filenames: Empty filename specified for $handle", E_USER_ERROR); - } - - $this->filename[$handle] = $filename; - - foreach ($this->roots as $root_index => $root) - { - $this->files[$root_index][$handle] = $root . '/' . $filename; - } - } - } - - /** - * Determines the filename for a template handle. - * - * The filename comes from array used in a set_filenames call, - * which should have been performed prior to invoking this function. - * Return value is a file basename (without path). - * - * @param $handle string Template handle - * @return string Filename corresponding to the template handle - */ - public function get_filename_for_handle($handle) - { - if (!isset($this->filename[$handle])) - { - trigger_error("template locator: get_filename_for_handle: No file specified for handle $handle", E_USER_ERROR); - } - return $this->filename[$handle]; - } - - /** - * Determines the source file path for a template handle without - * regard for template inheritance. - * - * This function returns the path in "primary" template directory - * corresponding to the given template handle. That path may or - * may not actually exist on the filesystem. Because this function - * does not perform stat calls to determine whether the path it - * returns actually exists, it is faster than get_source_file_for_handle. - * - * Use get_source_file_for_handle to obtain the actual path that is - * guaranteed to exist (which might come from the parent/fallback - * template directory if template inheritance is used). - * - * This function will trigger an error if the handle was never - * associated with a template file via set_filenames. - * - * @param $handle string Template handle - * @return string Path to source file path in primary template directory - */ - public function get_virtual_source_file_for_handle($handle) - { - // If we don't have a file assigned to this handle, die. - if (!isset($this->files[$this->main_root_id][$handle])) - { - trigger_error("template locator: No file specified for handle $handle", E_USER_ERROR); - } - - $source_file = $this->files[$this->main_root_id][$handle]; - return $source_file; - } - - /** - * Determines the source file path for a template handle, accounting - * for template inheritance and verifying that the path exists. - * - * This function returns the actual path that may be compiled for - * the specified template handle. It will trigger an error if - * the template handle was never associated with a template path - * via set_filenames or if the template file does not exist on the - * filesystem. - * - * Use get_virtual_source_file_for_handle to just resolve a template - * handle to a path without any filesystem or inheritance checks. - * - * @param string $handle Template handle (i.e. "friendly" template name) - * @return string Source file path - */ - public function get_source_file_for_handle($handle) - { - // If we don't have a file assigned to this handle, die. - if (!isset($this->files[$this->main_root_id][$handle])) - { - trigger_error("template locator: No file specified for handle $handle", E_USER_ERROR); - } - - // locate a source file that exists - $source_file = $this->files[0][$handle]; - $tried = $source_file; - for ($i = 1, $n = count($this->roots); $i < $n && !file_exists($source_file); $i++) - { - $source_file = $this->files[$i][$handle]; - $tried .= ', ' . $source_file; - } - - // search failed - if (!file_exists($source_file)) - { - trigger_error("template locator: File for handle $handle does not exist. Could not find: $tried", E_USER_ERROR); - } - - return $source_file; - } -} diff --git a/phpBB/includes/style/resource_locator.php b/phpBB/includes/style/resource_locator.php new file mode 100644 index 0000000000..f36768fcd3 --- /dev/null +++ b/phpBB/includes/style/resource_locator.php @@ -0,0 +1,214 @@ +main_root_id = array_search($template, $this->roots, true); + } + + /** + * Sets the list of template paths + * + * These paths will be searched for template files in the provided order. + * Paths may be outside of phpBB, but templates loaded from these paths + * will still be cached. + * + * @param array $template_paths An array of paths to template directories + * @return null + */ + public function set_paths($template_paths) + { + $this->roots = array(); + $this->files = array(); + $this->filenames = array(); + $this->main_root_id = 0; + + foreach ($template_paths as $path) + { + // Make sure $path has no ending slash + if (substr($path, -1) === '/') + { + $path = substr($path, 0, -1); + } + $this->roots[] = $path; + } + } + + /** + * Sets the template filenames for handles. $filename_array + * should be a hash of handle => filename pairs. + * + * @param array $filname_array Should be a hash of handle => filename pairs. + */ + public function set_filenames(array $filename_array) + { + foreach ($filename_array as $handle => $filename) + { + if (empty($filename)) + { + trigger_error("template locator: set_filenames: Empty filename specified for $handle", E_USER_ERROR); + } + + $this->filename[$handle] = $filename; + + foreach ($this->roots as $root_index => $root) + { + $this->files[$root_index][$handle] = $root . '/' . $filename; + } + } + } + + /** + * Determines the filename for a template handle. + * + * The filename comes from array used in a set_filenames call, + * which should have been performed prior to invoking this function. + * Return value is a file basename (without path). + * + * @param $handle string Template handle + * @return string Filename corresponding to the template handle + */ + public function get_filename_for_handle($handle) + { + if (!isset($this->filename[$handle])) + { + trigger_error("template locator: get_filename_for_handle: No file specified for handle $handle", E_USER_ERROR); + } + return $this->filename[$handle]; + } + + /** + * Determines the source file path for a template handle without + * regard for template inheritance. + * + * This function returns the path in "primary" template directory + * corresponding to the given template handle. That path may or + * may not actually exist on the filesystem. Because this function + * does not perform stat calls to determine whether the path it + * returns actually exists, it is faster than get_source_file_for_handle. + * + * Use get_source_file_for_handle to obtain the actual path that is + * guaranteed to exist (which might come from the parent/fallback + * template directory if template inheritance is used). + * + * This function will trigger an error if the handle was never + * associated with a template file via set_filenames. + * + * @param $handle string Template handle + * @return string Path to source file path in primary template directory + */ + public function get_virtual_source_file_for_handle($handle) + { + // If we don't have a file assigned to this handle, die. + if (!isset($this->files[$this->main_root_id][$handle])) + { + trigger_error("template locator: No file specified for handle $handle", E_USER_ERROR); + } + + $source_file = $this->files[$this->main_root_id][$handle]; + return $source_file; + } + + /** + * Determines the source file path for a template handle, accounting + * for template inheritance and verifying that the path exists. + * + * This function returns the actual path that may be compiled for + * the specified template handle. It will trigger an error if + * the template handle was never associated with a template path + * via set_filenames or if the template file does not exist on the + * filesystem. + * + * Use get_virtual_source_file_for_handle to just resolve a template + * handle to a path without any filesystem or inheritance checks. + * + * @param string $handle Template handle (i.e. "friendly" template name) + * @return string Source file path + */ + public function get_source_file_for_handle($handle) + { + // If we don't have a file assigned to this handle, die. + if (!isset($this->files[$this->main_root_id][$handle])) + { + trigger_error("template locator: No file specified for handle $handle", E_USER_ERROR); + } + + // locate a source file that exists + $source_file = $this->files[0][$handle]; + $tried = $source_file; + for ($i = 1, $n = count($this->roots); $i < $n && !file_exists($source_file); $i++) + { + $source_file = $this->files[$i][$handle]; + $tried .= ', ' . $source_file; + } + + // search failed + if (!file_exists($source_file)) + { + trigger_error("template locator: File for handle $handle does not exist. Could not find: $tried", E_USER_ERROR); + } + + return $source_file; + } +} diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php index 217a70e237..b134b4f76f 100644 --- a/phpBB/includes/style/style.php +++ b/phpBB/includes/style/style.php @@ -78,7 +78,7 @@ class phpbb_style $this->phpEx = $phpEx; $this->config = $config; $this->user = $user; - $this->locator = new phpbb_style_locator(); + $this->locator = new phpbb_style_resource_locator(); $this->provider = new phpbb_style_path_provider(); if ($phpbb_extension_manager !== false) { diff --git a/phpBB/includes/style/template.php b/phpBB/includes/style/template.php index 02fa0bd250..076b9e05ea 100644 --- a/phpBB/includes/style/template.php +++ b/phpBB/includes/style/template.php @@ -64,7 +64,7 @@ class phpbb_style_template /** * Template locator - * @var phpbb_style_locator + * @var phpbb_style_resource_locator */ private $locator; @@ -79,10 +79,10 @@ class phpbb_style_template * * @param string $phpbb_root_path phpBB root path * @param user $user current user - * @param phpbb_style_locator $locator template locator + * @param phpbb_style_resource_locator $locator template locator * @param phpbb_style_path_provider $provider template path provider */ - public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_style_locator $locator, phpbb_style_path_provider_interface $provider) + public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_style_resource_locator $locator, phpbb_style_path_provider_interface $provider) { $this->phpbb_root_path = $phpbb_root_path; $this->phpEx = $phpEx; -- cgit v1.2.1 From 9915ed52551b9b11e2cfcadabcb758ab05c6db6b Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 15 Mar 2012 16:07:14 +0100 Subject: =?UTF-8?q?[ticket/8743]=20Include=20poster=C2=B4s=20name=20in=20m?= =?UTF-8?q?ail=20notifications?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PHPBB3-8743 --- phpBB/includes/functions_posting.php | 6 ++++-- phpBB/language/en/email/forum_notify.txt | 2 +- phpBB/language/en/email/newtopic_notify.txt | 2 +- phpBB/language/en/email/topic_notify.txt | 2 +- 4 files changed, 7 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 77d92e26e2..be3aa844fe 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -1160,7 +1160,7 @@ function topic_review($topic_id, $forum_id, $mode = 'topic_review', $cur_post_id /** * User Notification */ -function user_notification($mode, $subject, $topic_title, $forum_name, $forum_id, $topic_id, $post_id) +function user_notification($mode, $subject, $topic_title, $forum_name, $forum_id, $topic_id, $post_id, $author_name = '') { global $db, $user, $config, $phpbb_root_path, $phpEx, $auth; @@ -1323,6 +1323,7 @@ function user_notification($mode, $subject, $topic_title, $forum_name, $forum_id 'USERNAME' => htmlspecialchars_decode($addr['name']), 'TOPIC_TITLE' => htmlspecialchars_decode($topic_title), 'FORUM_NAME' => htmlspecialchars_decode($forum_name), + 'AUTHOR_NAME' => htmlspecialchars_decode($author_name), 'U_FORUM' => generate_board_url() . "/viewforum.$phpEx?f=$forum_id", 'U_TOPIC' => generate_board_url() . "/viewtopic.$phpEx?f=$forum_id&t=$topic_id", @@ -2585,7 +2586,8 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u // Send Notifications if (($mode == 'reply' || $mode == 'quote' || $mode == 'post') && $post_approval) { - user_notification($mode, $subject, $data['topic_title'], $data['forum_name'], $data['forum_id'], $data['topic_id'], $data['post_id']); + $username = ($username) ? $username : $user->data['username']; + user_notification($mode, $subject, $data['topic_title'], $data['forum_name'], $data['forum_id'], $data['topic_id'], $data['post_id'], $username); } $params = $add_anchor = ''; diff --git a/phpBB/language/en/email/forum_notify.txt b/phpBB/language/en/email/forum_notify.txt index fae5a83885..490780a0a6 100644 --- a/phpBB/language/en/email/forum_notify.txt +++ b/phpBB/language/en/email/forum_notify.txt @@ -2,7 +2,7 @@ Subject: Forum post notification - "{FORUM_NAME}" Hello {USERNAME}, -You are receiving this notification because you are watching the forum, "{FORUM_NAME}" at "{SITENAME}". This forum has received a new reply to the topic "{TOPIC_TITLE}" since your last visit. You can use the following link to view the last unread reply, no more notifications will be sent until you visit the topic. +You are receiving this notification because you are watching the forum, "{FORUM_NAME}" at "{SITENAME}". This forum has received a new reply to the topic "{TOPIC_TITLE}" by {AUTHOR_NAME} since your last visit. You can use the following link to view the last unread reply, no more notifications will be sent until you visit the topic. {U_NEWEST_POST} diff --git a/phpBB/language/en/email/newtopic_notify.txt b/phpBB/language/en/email/newtopic_notify.txt index 529bbf0f8f..eda1370938 100644 --- a/phpBB/language/en/email/newtopic_notify.txt +++ b/phpBB/language/en/email/newtopic_notify.txt @@ -2,7 +2,7 @@ Subject: New topic notification - "{FORUM_NAME}" Hello {USERNAME}, -You are receiving this notification because you are watching the forum, "{FORUM_NAME}" at "{SITENAME}". This forum has received a new topic since your last visit, "{TOPIC_TITLE}". You can use the following link to view the forum, no more notifications will be sent until you visit the forum. +You are receiving this notification because you are watching the forum, "{FORUM_NAME}" at "{SITENAME}". This forum has received a new topic by {AUTHOR_NAME} since your last visit, "{TOPIC_TITLE}". You can use the following link to view the forum, no more notifications will be sent until you visit the forum. {U_FORUM} diff --git a/phpBB/language/en/email/topic_notify.txt b/phpBB/language/en/email/topic_notify.txt index 99587b28e0..fcfbcc2abd 100644 --- a/phpBB/language/en/email/topic_notify.txt +++ b/phpBB/language/en/email/topic_notify.txt @@ -2,7 +2,7 @@ Subject: Topic reply notification - "{TOPIC_TITLE}" Hello {USERNAME}, -You are receiving this notification because you are watching the topic, "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply since your last visit. You can use the following link to view the replies made, no more notifications will be sent until you visit the topic. +You are receiving this notification because you are watching the topic, "{TOPIC_TITLE}" at "{SITENAME}". This topic has received a reply by {AUTHOR_NAME} since your last visit. You can use the following link to view the replies made, no more notifications will be sent until you visit the topic. If you want to view the newest post made since your last visit, click the following link: {U_NEWEST_POST} -- cgit v1.2.1 From c692e0d92da55944414d5f50accefdd96c2e31ee Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 15 Mar 2012 21:04:27 +0200 Subject: [feature/merging-style-components] Changing path provider Changing set_templates() to set_style() and removing second parameter, changing get_main_template_path() to get_main_style_path(), removing template_root_for_style(), updating docblocks PHPBB3-10632 --- phpBB/includes/style/extension_path_provider.php | 45 ++++++++---------- phpBB/includes/style/path_provider.php | 60 +++++++----------------- phpBB/includes/style/path_provider_interface.php | 23 ++++----- 3 files changed, 45 insertions(+), 83 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/extension_path_provider.php b/phpBB/includes/style/extension_path_provider.php index 05dc5661f6..1fb6580ce1 100644 --- a/phpBB/includes/style/extension_path_provider.php +++ b/phpBB/includes/style/extension_path_provider.php @@ -16,26 +16,26 @@ if (!defined('IN_PHPBB')) } /** -* Provides a template locator with core template paths and extension template paths +* Provides a style resource locator with core style paths and extension style paths * -* Finds installed template paths and makes them available to the locator. +* Finds installed style paths and makes them available to the resource locator. * * @package phpBB3 */ class phpbb_style_extension_path_provider extends phpbb_extension_provider implements phpbb_style_path_provider_interface { /** - * Optional prefix for template paths searched within extensions. + * Optional prefix for style paths searched within extensions. * * Empty by default. Relative to the extension directory. As an example, it - * could be adm/ for admin templates. + * could be adm/ for admin style. * * @var string */ protected $ext_dir_prefix = ''; /** - * A provider of paths to be searched for templates + * A provider of paths to be searched for styles * @var phpbb_style_path_provider */ protected $base_path_provider; @@ -54,11 +54,11 @@ class phpbb_style_extension_path_provider extends phpbb_extension_provider imple } /** - * Sets a prefix for template paths searched within extensions. + * Sets a prefix for style paths searched within extensions. * * The prefix is inserted between the extension's path e.g. ext/foo/ and - * the looked up template path, e.g. styles/bar/template/some.html. So it - * should not have a leading slash, but should have a trailing slash. + * the looked up style path, e.g. styles/bar/. So it should not have a + * leading slash, but should have a trailing slash. * * @param string $ext_dir_prefix The prefix including trailing slash * @return null @@ -69,13 +69,13 @@ class phpbb_style_extension_path_provider extends phpbb_extension_provider imple } /** - * Finds template paths using the extension manager + * Finds style paths using the extension manager * - * Locates a path (e.g. styles/prosilver/template/) in all active extensions. - * Then appends the core template paths based in the current working + * Locates a path (e.g. styles/prosilver/) in all active extensions. + * Then appends the core style paths based in the current working * directory. * - * @return array List of template paths + * @return array List of style paths */ public function find() { @@ -102,29 +102,24 @@ class phpbb_style_extension_path_provider extends phpbb_extension_provider imple } /** - * Overwrites the current template names and paths + * Overwrites the current style paths * - * @param array $templates An associative map from template names to paths. - * The first element is the main template. - * If the path is false, it will be generated from - * the supplied name. - * @param string $style_root_path The root directory for styles identified - * by name only. + * @param array $styles An array of style paths. The first element is the main style. * @return null */ - public function set_templates(array $templates, $style_root_path) + public function set_styles(array $styles) { - $this->base_path_provider->set_templates($templates, $style_root_path); + $this->base_path_provider->set_styles($styles); $this->items = null; } /** - * Retrieves the path to the main template passed into set_templates() + * Retrieves the path to the main style passed into set_styles() * - * @return string Main template path + * @return string Main style path */ - public function get_main_template_path() + public function get_main_style_path() { - return $this->base_path_provider->get_main_template_path(); + return $this->base_path_provider->get_main_style_path(); } } diff --git a/phpBB/includes/style/path_provider.php b/phpBB/includes/style/path_provider.php index 649797df41..c229af92ba 100644 --- a/phpBB/includes/style/path_provider.php +++ b/phpBB/includes/style/path_provider.php @@ -16,15 +16,15 @@ if (!defined('IN_PHPBB')) } /** -* Provides a template locator with paths +* Provides a style resource locator with paths * -* Finds installed template paths and makes them available to the locator. +* Finds installed style paths and makes them available to the resource locator. * * @package phpBB3 */ class phpbb_style_path_provider implements IteratorAggregate, phpbb_style_path_provider_interface { - protected $main_template_name = ''; + protected $main_style_name = ''; protected $paths = array(); /** @@ -38,62 +38,34 @@ class phpbb_style_path_provider implements IteratorAggregate, phpbb_style_path_p } /** - * Overwrites the current template names and paths + * Overwrites the current style paths * - * The first element of the passed templates map, is considered the main - * template and can be retrieved through get_main_template_path(). + * The first element of the passed styles map, is considered the main + * style and can be retrieved through get_main_style_path(). * - * @param array $templates An associative map from template names to paths. - * The first element is the main template. - * If the path is false, it will be generated from - * the supplied name. - * @param string $style_root_path The root directory for styles identified - * by name only. + * @param array $styles An array of style paths. The first element is the main style. * @return null */ - public function set_templates(array $templates, $style_root_path) + public function set_styles(array $styles) { - $this->paths = array(); - - foreach ($templates as $name => $path) - { - if (!$path) - { - $path = $style_root_path . $this->template_root_for_style($name); - } - - $this->paths[] = $path; - } - - $this->main_template_path = $this->paths[0]; - } - - /** - * Retrieves the path to the main template passed into set_templates() - * - * @return string Main template path - */ - public function get_main_template_path() - { - return $this->main_template_path; + $this->paths = $styles; + $this->main_style_path = $this->paths[0]; } /** - * Converts a style name to relative (to board root or extension) path to - * the style's template files. + * Retrieves the path to the main style passed into set_styles() * - * @param $style_name string Style name - * @return string Path to style template files + * @return string Main style path */ - private function template_root_for_style($style_name) + public function get_main_style_path() { - return 'styles/' . $style_name . '/template'; + return $this->main_style_path; } /** - * Retrieve an iterator over all template paths + * Retrieve an iterator over all style paths * - * @return ArrayIterator An iterator for the array of template paths + * @return ArrayIterator An iterator for the array of style paths */ public function getIterator() { diff --git a/phpBB/includes/style/path_provider_interface.php b/phpBB/includes/style/path_provider_interface.php index e65c037dcc..7ae94e17f4 100644 --- a/phpBB/includes/style/path_provider_interface.php +++ b/phpBB/includes/style/path_provider_interface.php @@ -16,16 +16,16 @@ if (!defined('IN_PHPBB')) } /** -* Provides a template locator with paths +* Provides a style resource locator with paths * -* Finds installed template paths and makes them available to the locator. +* Finds installed style paths and makes them available to the resource locator. * * @package phpBB3 */ interface phpbb_style_path_provider_interface extends Traversable { /** - * Defines a prefix to use for template paths in extensions + * Defines a prefix to use for style paths in extensions * * @param string $ext_dir_prefix The prefix including trailing slash * @return null @@ -33,22 +33,17 @@ interface phpbb_style_path_provider_interface extends Traversable public function set_ext_dir_prefix($ext_dir_prefix); /** - * Overwrites the current template names and paths + * Overwrites the current style paths * - * @param array $templates An associative map from template names to paths. - * The first element is the main template. - * If the path is false, it will be generated from - * the supplied name. - * @param string $style_root_path The root directory for styles identified - * by name only. + * @param array $styles An array of style paths. The first element is the main style. * @return null */ - public function set_templates(array $templates, $style_root_path); + public function set_styles(array $styles); /** - * Retrieves the path to the main template passed into set_templates() + * Retrieves the path to the main style passed into set_styles() * - * @return string Main template path + * @return string Main style path */ - public function get_main_template_path(); + public function get_main_style_path(); } -- cgit v1.2.1 From 0b2abe5250ebe6c75473a8d9f9be2aeb13855565 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 15 Mar 2012 21:06:24 +0200 Subject: [feature/merging-style-components] Changing resource locator Changing "template" to "style" in all functions that deal with styles, changing error messages, updating docblocks PHPBB3-10632 --- phpBB/includes/style/resource_locator.php | 67 ++++++++++++++++++------------- 1 file changed, 40 insertions(+), 27 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/resource_locator.php b/phpBB/includes/style/resource_locator.php index f36768fcd3..af261534c3 100644 --- a/phpBB/includes/style/resource_locator.php +++ b/phpBB/includes/style/resource_locator.php @@ -17,28 +17,41 @@ if (!defined('IN_PHPBB')) /** -* Template locator. Maintains mapping from template handles to source paths. +* Style resource locator. +* Maintains mapping from template handles to source template file paths. +* Locates style files: resources (such as .js and .css files) and templates. * -* Template locator is aware of template inheritance, and can return actual -* filesystem paths (i.e., the "primary" template or the "parent" template) +* Style resource locator is aware of styles tree, and can return actual +* filesystem paths (i.e., the "child" style or the "parent" styles) * depending on what files exist. * +* Root paths stored in locator are paths to style directories. Templates are +* stored in subdirectory that $template_path points to. +* * @package phpBB3 */ class phpbb_style_resource_locator { /** - * Paths to directories that templates are stored in. + * Paths to style directories. * @var array */ private $roots = array(); /** - * Index of the main template in the roots array + * Index of the main style in the roots array. * @var int */ private $main_root_id = 0; + /** + * Location of templates directory within style directories. + * Must have trailing slash. Empty if templates are stored in root + * style directory, such as admin control panel templates. + * @var string + */ + public $template_path = 'template/'; + /** * Map from root index to handles to source template file paths. * Normally it only contains paths for handles that are used @@ -57,34 +70,34 @@ class phpbb_style_resource_locator private $filenames = array(); /** - * Set main template location (must have been added through set_paths first). + * Set main style location (must have been added through set_paths first). * - * @param string $template_path Path to template directory + * @param string $style_path Path to style directory * @return null */ - public function set_main_template($template) + public function set_main_style($style_path) { - $this->main_root_id = array_search($template, $this->roots, true); + $this->main_root_id = array_search($style_path, $this->roots, true); } /** - * Sets the list of template paths + * Sets the list of style paths * - * These paths will be searched for template files in the provided order. + * These paths will be searched for style files in the provided order. * Paths may be outside of phpBB, but templates loaded from these paths * will still be cached. * - * @param array $template_paths An array of paths to template directories + * @param array $style_paths An array of paths to style directories * @return null */ - public function set_paths($template_paths) + public function set_paths($style_paths) { $this->roots = array(); $this->files = array(); $this->filenames = array(); $this->main_root_id = 0; - foreach ($template_paths as $path) + foreach ($style_paths as $path) { // Make sure $path has no ending slash if (substr($path, -1) === '/') @@ -107,14 +120,14 @@ class phpbb_style_resource_locator { if (empty($filename)) { - trigger_error("template locator: set_filenames: Empty filename specified for $handle", E_USER_ERROR); + trigger_error("style resource locator: set_filenames: Empty filename specified for $handle", E_USER_ERROR); } $this->filename[$handle] = $filename; foreach ($this->roots as $root_index => $root) { - $this->files[$root_index][$handle] = $root . '/' . $filename; + $this->files[$root_index][$handle] = $root . '/' . $this->template_path . $filename; } } } @@ -133,37 +146,37 @@ class phpbb_style_resource_locator { if (!isset($this->filename[$handle])) { - trigger_error("template locator: get_filename_for_handle: No file specified for handle $handle", E_USER_ERROR); + trigger_error("style resource locator: get_filename_for_handle: No file specified for handle $handle", E_USER_ERROR); } return $this->filename[$handle]; } /** * Determines the source file path for a template handle without - * regard for template inheritance. + * regard for styles tree. * - * This function returns the path in "primary" template directory + * This function returns the path in "primary" style directory * corresponding to the given template handle. That path may or * may not actually exist on the filesystem. Because this function * does not perform stat calls to determine whether the path it * returns actually exists, it is faster than get_source_file_for_handle. * * Use get_source_file_for_handle to obtain the actual path that is - * guaranteed to exist (which might come from the parent/fallback - * template directory if template inheritance is used). + * guaranteed to exist (which might come from the parent style + * directory if primary style has parent styles). * * This function will trigger an error if the handle was never * associated with a template file via set_filenames. * * @param $handle string Template handle - * @return string Path to source file path in primary template directory + * @return string Path to source file path in primary style directory */ public function get_virtual_source_file_for_handle($handle) { // If we don't have a file assigned to this handle, die. if (!isset($this->files[$this->main_root_id][$handle])) { - trigger_error("template locator: No file specified for handle $handle", E_USER_ERROR); + trigger_error("style resource locator: No file specified for handle $handle", E_USER_ERROR); } $source_file = $this->files[$this->main_root_id][$handle]; @@ -172,7 +185,7 @@ class phpbb_style_resource_locator /** * Determines the source file path for a template handle, accounting - * for template inheritance and verifying that the path exists. + * for styles tree and verifying that the path exists. * * This function returns the actual path that may be compiled for * the specified template handle. It will trigger an error if @@ -181,7 +194,7 @@ class phpbb_style_resource_locator * filesystem. * * Use get_virtual_source_file_for_handle to just resolve a template - * handle to a path without any filesystem or inheritance checks. + * handle to a path without any filesystem or styles tree checks. * * @param string $handle Template handle (i.e. "friendly" template name) * @return string Source file path @@ -191,7 +204,7 @@ class phpbb_style_resource_locator // If we don't have a file assigned to this handle, die. if (!isset($this->files[$this->main_root_id][$handle])) { - trigger_error("template locator: No file specified for handle $handle", E_USER_ERROR); + trigger_error("style resource locator: No file specified for handle $handle", E_USER_ERROR); } // locate a source file that exists @@ -206,7 +219,7 @@ class phpbb_style_resource_locator // search failed if (!file_exists($source_file)) { - trigger_error("template locator: File for handle $handle does not exist. Could not find: $tried", E_USER_ERROR); + trigger_error("style resource locator: File for handle $handle does not exist. Could not find: $tried", E_USER_ERROR); } return $source_file; -- cgit v1.2.1 From 5b149e93b91ab1cb09e2e9c8c3c00312973c1c5e Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 15 Mar 2012 21:08:41 +0200 Subject: [feature/merging-style-components] Changing template class Removing functions that are now handled by phpbb_style class, allowing to write $context, updating docblocks PHPBB3-10632 --- phpBB/includes/style/template.php | 76 ++++++--------------------------------- 1 file changed, 11 insertions(+), 65 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/template.php b/phpBB/includes/style/template.php index 076b9e05ea..21a2e821dd 100644 --- a/phpBB/includes/style/template.php +++ b/phpBB/includes/style/template.php @@ -35,7 +35,7 @@ class phpbb_style_template * @var phpbb_style_template_context Template context. * Stores template data used during template rendering. */ - private $context; + public $context; /** * @var string Path of the cache directory for the template @@ -63,7 +63,7 @@ class phpbb_style_template private $user; /** - * Template locator + * Style resource locator * @var phpbb_style_resource_locator */ private $locator; @@ -74,13 +74,19 @@ class phpbb_style_template */ private $provider; + /** + * Location of templates directory within style directories + * @var string + */ + public $template_path = 'template/'; + /** * Constructor. * * @param string $phpbb_root_path phpBB root path * @param user $user current user - * @param phpbb_style_resource_locator $locator template locator - * @param phpbb_style_path_provider $provider template path provider + * @param phpbb_style_resource_locator $locator style resource locator + * @param phpbb_style_path_provider $provider style path provider */ public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_style_resource_locator $locator, phpbb_style_path_provider_interface $provider) { @@ -89,70 +95,10 @@ class phpbb_style_template $this->config = $config; $this->user = $user; $this->locator = $locator; + $this->template_path = $this->locator->template_path; $this->provider = $provider; } - /** - * Set template location based on (current) user's chosen style. - */ - public function set_template() - { - $template_name = $this->user->theme['style_path']; - $fallback_name = ($this->user->theme['style_parent_id']) ? array_reverse(explode('/', $this->user->theme['style_parent_tree'])) : false; - - return $this->set_custom_template(false, $template_name, false, $fallback_name); - } - - /** - * Defines a prefix to use for template paths in extensions - * - * @param string $ext_dir_prefix The prefix including trailing slash - * @return null - */ - public function set_ext_dir_prefix($ext_dir_prefix) - { - $this->provider->set_ext_dir_prefix($ext_dir_prefix); - } - - /** - * Set custom template location (able to use directory outside of phpBB). - * - * Note: Templates are still compiled to phpBB's cache directory. - * - * @param string $template_path Path to template directory - * @param string $template_name Name of template - * @param string or array $fallback_template_path Path to fallback template - * @param string or array $fallback_template_name Name of fallback template - */ - public function set_custom_template($template_path, $template_name, $fallback_template_path = false, $fallback_template_name = false) - { - $templates = array($template_name => $template_path); - - if (is_string($fallback_template_name)) - { - $templates[$fallback_template_name] = $fallback_template_path; - } - if (is_array($fallback_template_name)) - { - $i = 0; - foreach ($fallback_template_name as $fallback_template_name_item) - { - $templates[$fallback_template_name_item] = is_array($fallback_template_path) ? $fallback_template_path[$i] : $fallback_template_path; - $i ++; - } - } - - $this->provider->set_templates($templates, $this->phpbb_root_path); - $this->locator->set_paths($this->provider); - $this->locator->set_main_template($this->provider->get_main_template_path()); - - $this->cachepath = $this->phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $template_name) . '_'; - - $this->context = new phpbb_style_template_context(); - - return true; - } - /** * Sets the template filenames for handles. * -- cgit v1.2.1 From 1ce4d4c4fc482f33fd061c4f718b4f8c3656dbdb Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 15 Mar 2012 21:09:49 +0200 Subject: [feature/merging-style-components] Changing style class Moving functions that deal with styles from template to style class, updating docblocks PHPBB3-10632 --- phpBB/includes/style/style.php | 75 +++++++++++++++++++++++++++++++++++++++--- 1 file changed, 70 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php index b134b4f76f..5dee0a138c 100644 --- a/phpBB/includes/style/style.php +++ b/phpBB/includes/style/style.php @@ -27,11 +27,6 @@ class phpbb_style */ public $template; - /** - * @var string Path of the cache directory for the template - */ - public $cachepath = ''; - /** * @var string phpBB root path */ @@ -86,4 +81,74 @@ class phpbb_style } $this->template = new phpbb_style_template($this->phpbb_root_path, $this->phpEx, $this->config, $this->user, $this->locator, $this->provider); } + + /** + * Set style location based on (current) user's chosen style. + */ + public function set_style() + { + $style_name = $this->user->theme['style_path']; + $style_dirs = ($this->user->theme['style_parent_id']) ? array_reverse(explode('/', $this->user->theme['style_parent_tree'])) : array(); + $paths = array($this->get_style_path($style_name)); + foreach ($style_dirs as $dir) + { + $paths[] = $this->get_style_path($dir); + } + + return $this->set_custom_style($style_name, $paths); + } + + /** + * Set custom style location (able to use directory outside of phpBB). + * + * Note: Templates are still compiled to phpBB's cache directory. + * + * @param string $name Name of style, used for cache prefix. Examples: "admin", "prosilver" + * @param array or string $paths Array of style paths, relative to current root directory + * @param string $template_path Path to templates, relative to style directory. False if path should not be changed. + */ + public function set_custom_style($name, $paths, $template_path = false) + { + if (is_string($paths)) + { + $paths = array($paths); + } + + $this->provider->set_styles($paths); + $this->locator->set_paths($this->provider); + $this->locator->set_main_style($this->provider->get_main_style_path()); + + $this->template->cachepath = $this->phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $name) . '_'; + + $this->template->context = new phpbb_style_template_context(); + + if ($template_path !== false) + { + $this->template->template_path = $this->locator->template_path = $template_path; + } + + return true; + } + + /** + * Get location of style directory for specific style_path + * + * @param string $path Style path, such as "prosilver" + * @return string Path to style directory, relative to current path + */ + public function get_style_path($path) + { + return $this->phpbb_root_path . 'styles/' . $path; + } + + /** + * Defines a prefix to use for style paths in extensions + * + * @param string $ext_dir_prefix The prefix including trailing slash + * @return null + */ + public function set_ext_dir_prefix($ext_dir_prefix) + { + $this->provider->set_ext_dir_prefix($ext_dir_prefix); + } } -- cgit v1.2.1 From fd96f97dc3c659e1d2e9b58420d652ad79387fbf Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Thu, 15 Mar 2012 21:11:34 +0200 Subject: [feature/merging-style-components] Updating style initialization Changing template initialization to style initialization. PHPBB3-10632 --- phpBB/adm/index.php | 6 +++--- phpBB/includes/bbcode.php | 2 +- phpBB/includes/functions_messenger.php | 8 ++++---- phpBB/includes/session.php | 4 ++-- phpBB/install/index.php | 4 ++-- phpBB/install/install_update.php | 4 ++-- 6 files changed, 14 insertions(+), 14 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/index.php b/phpBB/adm/index.php index e7168b210b..91894e5aec 100644 --- a/phpBB/adm/index.php +++ b/phpBB/adm/index.php @@ -50,9 +50,9 @@ $file_uploads = (@ini_get('file_uploads') == '1' || strtolower(@ini_get('file_up $module_id = request_var('i', ''); $mode = request_var('mode', ''); -// Set custom template for admin area -$template->set_ext_dir_prefix('adm/'); -$template->set_custom_template($phpbb_admin_path . 'style', 'admin'); +// Set custom style for admin area +$style->set_ext_dir_prefix('adm/'); +$style->set_custom_style('admin', $phpbb_admin_path . 'style', ''); $template->assign_var('T_ASSETS_PATH', $phpbb_root_path . 'assets'); $template->assign_var('T_TEMPLATE_PATH', $phpbb_admin_path . 'style'); diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php index 3831cb03ad..5e3bfed5ec 100644 --- a/phpBB/includes/bbcode.php +++ b/phpBB/includes/bbcode.php @@ -133,8 +133,8 @@ class bbcode $this->template_bitfield = new bitfield($user->theme['bbcode_bitfield']); $style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $phpbb_extension_manager); + $style->set_style(); $template = $style->template; - $template->set_template(); $template->set_filenames(array('bbcode.html' => 'bbcode.html')); $this->template_filename = $style->locator->get_source_file_for_handle('bbcode.html'); } diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index 4e1ec160af..a5e7ad75ca 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -201,7 +201,7 @@ class messenger { // fall back to board default language if the user's language is // missing $template_file. If this does not exist either, - // $tpl->set_custom_template will do a trigger_error + // $tpl->set_filenames will do a trigger_error $template_lang = basename($config['default_lang']); } @@ -209,8 +209,8 @@ class messenger if (!isset($this->tpl_msg[$template_lang . $template_file])) { $this->tpl_msg[$template_lang . $template_file] = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $phpbb_extension_manager); - $tpl = &$this->tpl_msg[$template_lang . $template_file]; - $tpl = $tpl->template; + $stl = &$this->tpl_msg[$template_lang . $template_file]; + $tpl = $stl->template; $fallback_template_path = false; @@ -228,7 +228,7 @@ class messenger } } - $tpl->set_custom_template($template_path, $template_lang . '_email', $fallback_template_path); + $stl->set_custom_style($template_lang . '_email', array($template_path, $fallback_template_path), ''); $tpl->set_filenames(array( 'body' => $template_file . '.txt', diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index f2956243e2..2fd2efe9b2 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -1570,7 +1570,7 @@ class user extends session */ function setup($lang_set = false, $style_id = false) { - global $db, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache; + global $db, $style, $template, $config, $auth, $phpEx, $phpbb_root_path, $cache; if ($this->data['user_id'] != ANONYMOUS) { @@ -1704,7 +1704,7 @@ class user extends session } } - $template->set_template(); + $style->set_style(); $this->img_lang = $this->lang_name; diff --git a/phpBB/install/index.php b/phpBB/install/index.php index 7c6dd10d03..1f013df72b 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -202,9 +202,9 @@ $config = new phpbb_config(array( )); $style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, false); +$style->set_ext_dir_prefix('adm/'); +$style->set_custom_style('admin', '../adm/style', ''); $template = $style->template; -$template->set_ext_dir_prefix('adm/'); -$template->set_custom_template('../adm/style', 'admin'); $template->assign_var('T_ASSETS_PATH', '../assets'); $template->assign_var('T_TEMPLATE_PATH', '../adm/style'); diff --git a/phpBB/install/install_update.php b/phpBB/install/install_update.php index aba692aa62..dcf01e5cc8 100644 --- a/phpBB/install/install_update.php +++ b/phpBB/install/install_update.php @@ -71,7 +71,7 @@ class install_update extends module function main($mode, $sub) { - global $template, $phpEx, $phpbb_root_path, $user, $db, $config, $cache, $auth, $language; + global $style, $template, $phpEx, $phpbb_root_path, $user, $db, $config, $cache, $auth, $language; global $request; $this->tpl_name = 'install_update'; @@ -131,7 +131,7 @@ class install_update extends module } // Set custom template again. ;) - $template->set_custom_template('../adm/style', 'admin'); + $style->set_custom_style('admin', '../adm/style', ''); $template->assign_vars(array( 'S_USER_LANG' => $user->lang['USER_LANG'], -- cgit v1.2.1 From 71afba0dedd2fcc4e478e191acc23277df8209c9 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 15 Mar 2012 22:46:06 -0400 Subject: [task/php54] Refactor error_reporting call slightly. Separate error level assignment into a variable in this commit so that the only difference between Olympus and Ascraeus is the addition of logic altering $level. PHPBB3-10615 --- phpBB/includes/startup.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/startup.php b/phpBB/includes/startup.php index bbe2f127f1..178fb30435 100644 --- a/phpBB/includes/startup.php +++ b/phpBB/includes/startup.php @@ -19,7 +19,8 @@ if (!defined('E_DEPRECATED')) { define('E_DEPRECATED', 8192); } -error_reporting(E_ALL & ~E_NOTICE & ~E_DEPRECATED); +$level = E_ALL & ~E_NOTICE & ~E_DEPRECATED; +error_reporting($level); /* * Remove variables created by register_globals from the global scope -- cgit v1.2.1 From 5efdbfa5e4e3c00c08167cdfff912ee4937f4fd2 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 15 Mar 2012 22:47:42 -0400 Subject: [task/php54] Disable E_STRICT in Olympus when running on PHP 5.4. We cannot use static in Olympus because it must be PHP 4 compatible. Therefore disable E_STRICT for Olympus. This commit should be reverted for Ascraeus. PHPBB3-10615 --- phpBB/includes/startup.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/startup.php b/phpBB/includes/startup.php index 178fb30435..cf216a65db 100644 --- a/phpBB/includes/startup.php +++ b/phpBB/includes/startup.php @@ -20,6 +20,21 @@ if (!defined('E_DEPRECATED')) define('E_DEPRECATED', 8192); } $level = E_ALL & ~E_NOTICE & ~E_DEPRECATED; +if (version_compare(PHP_VERSION, '5.4.0-dev', '>=')) +{ + // PHP 5.4 adds E_STRICT to E_ALL. + // Our utf8 normalizer triggers E_STRICT output on PHP 5.4. + // Unfortunately it cannot be made E_STRICT-clean while + // continuing to work on PHP 4. + // Therefore, in phpBB 3.0.x we disable E_STRICT on PHP 5.4+, + // while phpBB 3.1 will fix utf8 normalizer. + // E_STRICT is defined starting with PHP 5 + if (!defined('E_STRICT')) + { + define('E_STRICT', 2048); + } + $level &= ~E_STRICT; +} error_reporting($level); /* -- cgit v1.2.1 From ccdd176b72250be2e8f72bd13147679a5f2a263b Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Fri, 16 Mar 2012 04:56:41 -0400 Subject: [task/php54-ascraeus] Bring p_master#module_auth into PHP 5 era. Split module_auth into a static and a non-static version. Call the static version statically and the non-static version non-statically. PHPBB3-10615 --- phpBB/includes/acp/acp_users.php | 2 +- phpBB/includes/functions_module.php | 22 +++++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 97f4b1b5fd..cf6716c322 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -128,7 +128,7 @@ class acp_users $dropdown_modes = array(); while ($row = $db->sql_fetchrow($result)) { - if (!$this->p_master->module_auth($row['module_auth'])) + if (!$this->p_master->module_auth_self($row['module_auth'])) { continue; } diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php index db7defdc48..1c1bc42a11 100644 --- a/phpBB/includes/functions_module.php +++ b/phpBB/includes/functions_module.php @@ -128,7 +128,7 @@ class p_master foreach ($this->module_cache['modules'] as $key => $row) { // Not allowed to view module? - if (!$this->module_auth($row['module_auth'])) + if (!$this->module_auth_self($row['module_auth'])) { unset($this->module_cache['modules'][$key]); continue; @@ -315,9 +315,23 @@ class p_master } /** - * Check module authorisation + * Check module authorisation. + * + * This is a non-static version that uses $this->acl_forum_id + * for the forum id. + */ + function module_auth_self($module_auth) + { + return self::module_auth($module_auth, $this->acl_forum_id); + } + + /** + * Check module authorisation. + * + * This is a static version, it must be given $forum_id. + * See also module_auth_self. */ - function module_auth($module_auth, $forum_id = false) + static function module_auth($module_auth, $forum_id) { global $auth, $config; global $request; @@ -365,8 +379,6 @@ class p_master // Make sure $id seperation is working fine $module_auth = str_replace(' , ', ',', $module_auth); - $forum_id = ($forum_id === false) ? $this->acl_forum_id : $forum_id; - $is_auth = false; eval('$is_auth = (int) (' . preg_replace(array('#acl_([a-z0-9_]+)(,\$id)?#', '#\$id#', '#aclf_([a-z0-9_]+)#', '#cfg_([a-z0-9_]+)#', '#request_([a-zA-Z0-9_]+)#'), array('(int) $auth->acl_get(\'\\1\'\\2)', '(int) $forum_id', '(int) $auth->acl_getf_global(\'\\1\')', '(int) $config[\'\\1\']', '$request->variable(\'\\1\', false)'), $module_auth) . ');'); -- cgit v1.2.1 From 9a07f5287c91549dc989615f0cf6dc1fd8f82e5f Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sun, 4 Mar 2012 10:32:06 +0000 Subject: [ticket/10510] Moved quick-mod tools into a loop. PHPBB3-10510 --- .../styles/prosilver/template/viewtopic_body.html | 16 +--- .../styles/subsilver2/template/viewtopic_body.html | 16 +--- phpBB/viewtopic.php | 106 ++++++++++++++++++--- 3 files changed, 99 insertions(+), 39 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html index 674f8b1ff4..320d6cb97d 100644 --- a/phpBB/styles/prosilver/template/viewtopic_body.html +++ b/phpBB/styles/prosilver/template/viewtopic_body.html @@ -259,19 +259,9 @@
    {S_FORM_TOKEN} diff --git a/phpBB/styles/subsilver2/template/viewtopic_body.html b/phpBB/styles/subsilver2/template/viewtopic_body.html index a431d51c79..f696254249 100644 --- a/phpBB/styles/subsilver2/template/viewtopic_body.html +++ b/phpBB/styles/subsilver2/template/viewtopic_body.html @@ -352,19 +352,9 @@
    {L_QUICK_MOD}:
    diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 450ebfeda8..12a611ce6f 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -517,6 +517,99 @@ gen_forum_auth_level('topic', $forum_id, $topic_data['forum_status']); // Quick mod tools $allow_change_type = ($auth->acl_get('m_', $forum_id) || ($user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'])) ? true : false; +if ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'] && $topic_data['topic_status'] == ITEM_UNLOCKED)) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => (($topic_data['topic_status'] == ITEM_UNLOCKED) ? 'lock' : 'unlock'), + 'TITLE' => $user->lang[(($topic_data['topic_status'] == ITEM_UNLOCKED) ? 'LOCK' : 'UNLOCK') . '_TOPIC'] + )); +} + +if ($auth->acl_get('m_delete', $forum_id)) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'delete_topic', + 'TITLE' => $user->lang['DELETE_TOPIC'] + )); +} + +if ($auth->acl_get('m_move', $forum_id) && $topic_data['topic_status'] != ITEM_MOVED) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'move', + 'TITLE' => $user->lang['MOVE_TOPIC'] + )); +} + +if ($auth->acl_get('m_split', $forum_id)) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'split', + 'TITLE' => $user->lang['SPLIT_TOPIC'] + )); +} + +if ($auth->acl_get('m_merge', $forum_id)) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'merge', + 'TITLE' => $user->lang['MERGE_POSTS'] + )); + + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'merge_topic', + 'TITLE' => $user->lang['MERGE_TOPIC'] + )); +} + +if ($auth->acl_get('m_move', $forum_id)) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'fork', + 'TITLE' => $user->lang['FORK_TOPIC'] + )); +} + +if ($allow_change_type && $auth->acl_gets('f_sticky', 'f_announce', $forum_id) && $topic_data['topic_type'] != POST_NORMAL) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'make_normal', + 'TITLE' => $user->lang['MAKE_NORMAL'] + )); +} + +if ($allow_change_type && $auth->acl_get('f_sticky', $forum_id) && $topic_data['topic_type'] != POST_STICKY) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'make_sticky', + 'TITLE' => $user->lang['MAKE_STICKY'] + )); +} + +if ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_ANNOUNCE) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'make_announce', + 'TITLE' => $user->lang['MAKE_ANNOUNCE'] + )); +} + +if ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_GLOBAL) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'make_global', + 'TITLE' => $user->lang['MAKE_GLOBAL'] + )); +} + +if ($auth->acl_get('m_', $forum_id)) +{ + $template->assign_block_vars('quickmod', array( + 'VALUE' => 'topic_logs', + 'TITLE' => $user->lang['VIEW_TOPIC_LOGS'] + )); +} + // If we've got a hightlight set pass it on to pagination. $pagination = generate_pagination(append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . ((strlen($u_sort_param)) ? "&$u_sort_param" : '') . (($highlight_match) ? "&hilit=$highlight" : '')), $total_posts, $config['posts_per_page'], $start); @@ -603,19 +696,6 @@ $template->assign_vars(array( 'S_SELECT_SORT_DAYS' => $s_limit_days, 'S_SINGLE_MODERATOR' => (!empty($forum_moderators[$forum_id]) && sizeof($forum_moderators[$forum_id]) > 1) ? false : true, 'S_TOPIC_ACTION' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start")), - 'S_TOPIC_MOD_LOCK' => ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'] && $topic_data['topic_status'] == ITEM_UNLOCKED)) ? (($topic_data['topic_status'] == ITEM_UNLOCKED) ? 'lock' : 'unlock') : '', - 'S_TOPIC_MOD_DELETE' => ($auth->acl_get('m_delete', $forum_id)) ? true : false, - 'S_TOPIC_MOD_MOVE' => ($auth->acl_get('m_move', $forum_id) && $topic_data['topic_status'] != ITEM_MOVED) ? true : false, - 'S_TOPIC_MOD_SPLIT' => ($auth->acl_get('m_split', $forum_id)) ? true : false, - 'S_TOPIC_MOD_MERGE' => ($auth->acl_get('m_merge', $forum_id)) ? true : false, - 'S_TOPIC_MOD_MERGE_TOPIC' => ($auth->acl_get('m_merge', $forum_id)) ? true : false, - 'S_TOPIC_MOD_FORK' => ($auth->acl_get('m_move', $forum_id)) ? true : false, - 'S_TOPIC_MOD_MAKE_NORMAL' => ($allow_change_type && $auth->acl_gets('f_sticky', 'f_announce', $forum_id) && $topic_data['topic_type'] != POST_NORMAL) ? true : false, - 'S_TOPIC_MOD_MAKE_STICKY' => ($allow_change_type && $auth->acl_get('f_sticky', $forum_id) && $topic_data['topic_type'] != POST_STICKY) ? true : false, - 'S_TOPIC_MOD_MAKE_ANNOUNCE' => ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_ANNOUNCE) ? true : false, - 'S_TOPIC_MOD_MAKE_GLOBAL' => ($allow_change_type && $auth->acl_get('f_announce', $forum_id) && $topic_data['topic_type'] != POST_GLOBAL) ? true : false, - 'S_TOPIC_MOD_TOPIC_LOGS' => ($auth->acl_get('m_', $forum_id)), - 'S_MOD_ACTION' => append_sid("{$phpbb_root_path}mcp.$phpEx", "f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start") . "&quickmod=1&redirect=" . urlencode(str_replace('&', '&', $viewtopic_url)), true, $user->session_id), 'S_VIEWTOPIC' => true, -- cgit v1.2.1 From c52e99fdbb4854f57ab8e4c6ad1fe06c4944a492 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Thu, 8 Mar 2012 18:41:22 +0000 Subject: [ticket/10510] Fixed a bug where quickmod tools weren't being displayed. It was referring to some template variables that were removed in a previous commit. Changed! PHPBB3-10510 --- phpBB/styles/prosilver/template/viewtopic_body.html | 2 +- phpBB/styles/subsilver2/template/viewtopic_body.html | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html index 320d6cb97d..59e464d22e 100644 --- a/phpBB/styles/prosilver/template/viewtopic_body.html +++ b/phpBB/styles/prosilver/template/viewtopic_body.html @@ -254,7 +254,7 @@ - +
    diff --git a/phpBB/styles/subsilver2/template/viewtopic_body.html b/phpBB/styles/subsilver2/template/viewtopic_body.html index f696254249..2c5351b926 100644 --- a/phpBB/styles/subsilver2/template/viewtopic_body.html +++ b/phpBB/styles/subsilver2/template/viewtopic_body.html @@ -348,7 +348,7 @@ - +
    - + {L_QUICK_MOD}:
    + {REPORTED_IMG}
    {topic_review_row.MESSAGE}
    -- cgit v1.2.1 From 6f5c0dddfcd2a1b56fe1e8cf783f48ecfc8561e9 Mon Sep 17 00:00:00 2001 From: Bruno Ais Date: Tue, 14 Feb 2012 07:58:30 +0000 Subject: [feature/save-post-on-report] Bug fix table name There was a bug in the previous commit. I changed the name of the colon of the table and forgot to update the database_update.php now it's fixed. PHPBB3-10600 --- phpBB/install/database_update.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 0a2c3998c4..7240e899a6 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -1089,7 +1089,7 @@ function database_update_info() 'field_show_on_pm' => array('BOOL', 0), ), REPORTS_TABLE => array( - 'reported_post' => array('TEXT', ''), + 'reported_text' => array('TEXT', ''), ), ), 'change_columns' => array( -- cgit v1.2.1 From 18373035c3299e80b2c075cfc3d475c89af3cc73 Mon Sep 17 00:00:00 2001 From: Bruno Ais Date: Wed, 15 Feb 2012 22:03:32 +0000 Subject: [feature/save-post-on-report] Changed the name of the column The name of the column was changed from reported_post AND reported_text to reported_post_text. This change was made by request PHPBB3-10600 --- phpBB/develop/create_schema_files.php | 2 +- phpBB/includes/mcp/mcp_reports.php | 4 ++-- phpBB/install/database_update.php | 2 +- phpBB/install/schemas/firebird_schema.sql | 2 +- phpBB/install/schemas/mssql_schema.sql | 2 +- phpBB/install/schemas/mysql_40_schema.sql | 2 +- phpBB/install/schemas/mysql_41_schema.sql | 2 +- phpBB/install/schemas/oracle_schema.sql | 2 +- phpBB/install/schemas/postgres_schema.sql | 2 +- phpBB/install/schemas/sqlite_schema.sql | 2 +- phpBB/report.php | 10 +++++----- 11 files changed, 16 insertions(+), 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php index a4738df5bf..987c9152d4 100644 --- a/phpBB/develop/create_schema_files.php +++ b/phpBB/develop/create_schema_files.php @@ -1528,7 +1528,7 @@ function get_schema_struct() 'report_closed' => array('BOOL', 0), 'report_time' => array('TIMESTAMP', 0), 'report_text' => array('MTEXT_UNI', ''), - 'reported_post' => array('MTEXT_UNI', ''), + 'reported_post_text' => array('MTEXT_UNI', ''), ), 'PRIMARY_KEY' => 'report_id', 'KEYS' => array( diff --git a/phpBB/includes/mcp/mcp_reports.php b/phpBB/includes/mcp/mcp_reports.php index c848175c79..b4756b2600 100644 --- a/phpBB/includes/mcp/mcp_reports.php +++ b/phpBB/includes/mcp/mcp_reports.php @@ -71,7 +71,7 @@ class mcp_reports // closed reports are accessed by report id $report_id = request_var('r', 0); - $sql = 'SELECT r.post_id, r.user_id, r.report_id, r.report_closed, report_time, r.report_text, r.reported_text, rr.reason_title, rr.reason_description, u.username, u.username_clean, u.user_colour + $sql = 'SELECT r.post_id, r.user_id, r.report_id, r.report_closed, report_time, r.report_text, r.reported_post_text, rr.reason_title, rr.reason_description, u.username, u.username_clean, u.user_colour FROM ' . REPORTS_TABLE . ' r, ' . REPORTS_REASONS_TABLE . ' rr, ' . USERS_TABLE . ' u WHERE ' . (($report_id) ? 'r.report_id = ' . $report_id : "r.post_id = $post_id") . ' AND rr.reason_id = r.reason_id @@ -226,7 +226,7 @@ class mcp_reports 'REPORTER_NAME' => get_username_string('username', $report['user_id'], $report['username'], $report['user_colour']), 'U_VIEW_REPORTER_PROFILE' => get_username_string('profile', $report['user_id'], $report['username'], $report['user_colour']), - 'POST_PREVIEW' => $report['reported_text'], + 'POST_PREVIEW' => $report['reported_post_text'], 'POST_SUBJECT' => ($post_info['post_subject']) ? $post_info['post_subject'] : $user->lang['NO_SUBJECT'], 'POST_DATE' => $user->format_date($post_info['post_time']), 'POST_IP' => $post_info['poster_ip'], diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 7240e899a6..2fdbd16e4a 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -1089,7 +1089,7 @@ function database_update_info() 'field_show_on_pm' => array('BOOL', 0), ), REPORTS_TABLE => array( - 'reported_text' => array('TEXT', ''), + 'reported_post_text' => array('TEXT', ''), ), ), 'change_columns' => array( diff --git a/phpBB/install/schemas/firebird_schema.sql b/phpBB/install/schemas/firebird_schema.sql index 518f1bcd4f..b88ed0a64a 100644 --- a/phpBB/install/schemas/firebird_schema.sql +++ b/phpBB/install/schemas/firebird_schema.sql @@ -910,7 +910,7 @@ CREATE TABLE phpbb_reports ( report_closed INTEGER DEFAULT 0 NOT NULL, report_time INTEGER DEFAULT 0 NOT NULL, report_text BLOB SUB_TYPE TEXT CHARACTER SET UTF8 DEFAULT '' NOT NULL, - reported_post BLOB SUB_TYPE TEXT CHARACTER SET UTF8 DEFAULT '' NOT NULL + reported_post_text BLOB SUB_TYPE TEXT CHARACTER SET UTF8 DEFAULT '' NOT NULL );; ALTER TABLE phpbb_reports ADD PRIMARY KEY (report_id);; diff --git a/phpBB/install/schemas/mssql_schema.sql b/phpBB/install/schemas/mssql_schema.sql index 526ce0f65b..a0399756e9 100644 --- a/phpBB/install/schemas/mssql_schema.sql +++ b/phpBB/install/schemas/mssql_schema.sql @@ -1109,7 +1109,7 @@ CREATE TABLE [phpbb_reports] ( [report_closed] [int] DEFAULT (0) NOT NULL , [report_time] [int] DEFAULT (0) NOT NULL , [report_text] [text] DEFAULT ('') NOT NULL , - [reported_post] [text] DEFAULT ('') NOT NULL + [reported_post_text] [text] DEFAULT ('') NOT NULL ) ON [PRIMARY] TEXTIMAGE_ON [PRIMARY] GO diff --git a/phpBB/install/schemas/mysql_40_schema.sql b/phpBB/install/schemas/mysql_40_schema.sql index 22276b0d1f..69648c6b14 100644 --- a/phpBB/install/schemas/mysql_40_schema.sql +++ b/phpBB/install/schemas/mysql_40_schema.sql @@ -647,7 +647,7 @@ CREATE TABLE phpbb_reports ( report_closed tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, report_time int(11) UNSIGNED DEFAULT '0' NOT NULL, report_text mediumblob NOT NULL, - reported_post mediumblob NOT NULL, + reported_post_text mediumblob NOT NULL, PRIMARY KEY (report_id), KEY post_id (post_id), KEY pm_id (pm_id) diff --git a/phpBB/install/schemas/mysql_41_schema.sql b/phpBB/install/schemas/mysql_41_schema.sql index 7513b4518d..9b32ee19c6 100644 --- a/phpBB/install/schemas/mysql_41_schema.sql +++ b/phpBB/install/schemas/mysql_41_schema.sql @@ -647,7 +647,7 @@ CREATE TABLE phpbb_reports ( report_closed tinyint(1) UNSIGNED DEFAULT '0' NOT NULL, report_time int(11) UNSIGNED DEFAULT '0' NOT NULL, report_text mediumtext NOT NULL, - reported_post mediumtext NOT NULL, + reported_post_text mediumtext NOT NULL, PRIMARY KEY (report_id), KEY post_id (post_id), KEY pm_id (pm_id) diff --git a/phpBB/install/schemas/oracle_schema.sql b/phpBB/install/schemas/oracle_schema.sql index 3982686c0d..032c8633dd 100644 --- a/phpBB/install/schemas/oracle_schema.sql +++ b/phpBB/install/schemas/oracle_schema.sql @@ -1214,7 +1214,7 @@ CREATE TABLE phpbb_reports ( report_closed number(1) DEFAULT '0' NOT NULL, report_time number(11) DEFAULT '0' NOT NULL, report_text clob DEFAULT '' , - reported_post clob DEFAULT '' , + reported_post_text clob DEFAULT '' , CONSTRAINT pk_phpbb_reports PRIMARY KEY (report_id) ) / diff --git a/phpBB/install/schemas/postgres_schema.sql b/phpBB/install/schemas/postgres_schema.sql index 69685e45aa..f482920776 100644 --- a/phpBB/install/schemas/postgres_schema.sql +++ b/phpBB/install/schemas/postgres_schema.sql @@ -853,7 +853,7 @@ CREATE TABLE phpbb_reports ( report_closed INT2 DEFAULT '0' NOT NULL CHECK (report_closed >= 0), report_time INT4 DEFAULT '0' NOT NULL CHECK (report_time >= 0), report_text TEXT DEFAULT '' NOT NULL, - reported_post TEXT DEFAULT '' NOT NULL, + reported_post_text TEXT DEFAULT '' NOT NULL, PRIMARY KEY (report_id) ); diff --git a/phpBB/install/schemas/sqlite_schema.sql b/phpBB/install/schemas/sqlite_schema.sql index 3916493bea..56468bcdd9 100644 --- a/phpBB/install/schemas/sqlite_schema.sql +++ b/phpBB/install/schemas/sqlite_schema.sql @@ -628,7 +628,7 @@ CREATE TABLE phpbb_reports ( report_closed INTEGER UNSIGNED NOT NULL DEFAULT '0', report_time INTEGER UNSIGNED NOT NULL DEFAULT '0', report_text mediumtext(16777215) NOT NULL DEFAULT '', - reported_post mediumtext(16777215) NOT NULL DEFAULT '' + reported_post_text mediumtext(16777215) NOT NULL DEFAULT '' ); CREATE INDEX phpbb_reports_post_id ON phpbb_reports (post_id); diff --git a/phpBB/report.php b/phpBB/report.php index ab4de68cea..29b46a6211 100644 --- a/phpBB/report.php +++ b/phpBB/report.php @@ -71,9 +71,9 @@ if ($post_id) trigger_error('POST_NOT_EXIST'); } - $forum_id = (int) $report_data['forum_id']; - $topic_id = (int) $report_data['topic_id']; - $reported_text = $report_data['post_text']; + $forum_id = (int) $report_data['forum_id']; + $topic_id = (int) $report_data['topic_id']; + $reported_post_text = $report_data['post_text']; $sql = 'SELECT * FROM ' . FORUMS_TABLE . ' @@ -132,7 +132,7 @@ else trigger_error($message); } - $reported_text = $report_data['message_text']; + $reported_post_text = $report_data['message_text']; } // Submit report? @@ -159,7 +159,7 @@ if ($submit && $reason_id) 'report_closed' => 0, 'report_time' => (int) time(), 'report_text' => (string) $report_text, - 'reported_text' => $reported_text, + 'reported_post_text' => $reported_post_text, ); $sql = 'INSERT INTO ' . REPORTS_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary); -- cgit v1.2.1 From 165a2d1aa879f1fc65448721da5f6d143aff91fe Mon Sep 17 00:00:00 2001 From: Bruno Ais Date: Thu, 8 Mar 2012 09:16:36 +0000 Subject: [feature/save-post-on-report] Change the column type of reported text What ever it said. I changed the type of data in the column reported_post_text to match what was requested by p PHPBB3-10600 --- phpBB/install/database_update.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 2fdbd16e4a..8a7ec1004e 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -1089,7 +1089,7 @@ function database_update_info() 'field_show_on_pm' => array('BOOL', 0), ), REPORTS_TABLE => array( - 'reported_post_text' => array('TEXT', ''), + 'reported_post_text' => array('MTEXT_UNI', ''), ), ), 'change_columns' => array( -- cgit v1.2.1 From 28c6b95100014bc9237c50c16e6b69a96102e7c6 Mon Sep 17 00:00:00 2001 From: Bruno Ais Date: Thu, 8 Mar 2012 22:04:56 +0000 Subject: [feature/save-post-on-report] bbcode_nl2br missing. New lines were missing in the reported_post_text. By adding the bbcode_nl2br() became as it is supposed to. PHPBB3-10600 --- phpBB/includes/mcp/mcp_reports.php | 7 ++++--- phpBB/styles/prosilver/template/posting_topic_review.html | 2 +- 2 files changed, 5 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/mcp/mcp_reports.php b/phpBB/includes/mcp/mcp_reports.php index b4756b2600..69c6a4cfff 100644 --- a/phpBB/includes/mcp/mcp_reports.php +++ b/phpBB/includes/mcp/mcp_reports.php @@ -116,8 +116,9 @@ class mcp_reports $template->assign_vars(array( 'S_TOPIC_REVIEW' => true, 'S_BBCODE_ALLOWED' => $post_info['enable_bbcode'], - 'TOPIC_TITLE' => $post_info['topic_title']) - ); + 'TOPIC_TITLE' => $post_info['topic_title'], + 'REPORTED_POST_ID' => $post_id, + )); } $topic_tracking_info = $extensions = $attachments = array(); @@ -226,7 +227,7 @@ class mcp_reports 'REPORTER_NAME' => get_username_string('username', $report['user_id'], $report['username'], $report['user_colour']), 'U_VIEW_REPORTER_PROFILE' => get_username_string('profile', $report['user_id'], $report['username'], $report['user_colour']), - 'POST_PREVIEW' => $report['reported_post_text'], + 'POST_PREVIEW' => bbcode_nl2br($report['reported_post_text']), 'POST_SUBJECT' => ($post_info['post_subject']) ? $post_info['post_subject'] : $user->lang['NO_SUBJECT'], 'POST_DATE' => $user->format_date($post_info['post_time']), 'POST_IP' => $post_info['poster_ip'], diff --git a/phpBB/styles/prosilver/template/posting_topic_review.html b/phpBB/styles/prosilver/template/posting_topic_review.html index a022048c34..1c4b67044d 100644 --- a/phpBB/styles/prosilver/template/posting_topic_review.html +++ b/phpBB/styles/prosilver/template/posting_topic_review.html @@ -17,7 +17,7 @@
    {topic_review_row.L_IGNORE_POST} -
    +
    -- cgit v1.2.1 From 3a044b4b3ef6b5a7c27ea357bc3b7d7dd101a262 Mon Sep 17 00:00:00 2001 From: Bruno Ais Date: Fri, 9 Mar 2012 15:56:43 +0000 Subject: [feature/save-post-on-report] Changed mark in subsilver2 to look like viewtopic As cyberalien requested. This was changed to match better the idea behind what was made in prosilver to subsilver2. PHPBB3-10600 --- phpBB/styles/subsilver2/template/posting_topic_review.html | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/posting_topic_review.html b/phpBB/styles/subsilver2/template/posting_topic_review.html index 92f71c2307..cbd6746a8a 100644 --- a/phpBB/styles/subsilver2/template/posting_topic_review.html +++ b/phpBB/styles/subsilver2/template/posting_topic_review.html @@ -51,7 +51,13 @@
    - {REPORTED_IMG} + + + + {REPORTED_IMG} + +
    +
    {topic_review_row.MESSAGE}
    -- cgit v1.2.1 From a0131b45f56847f7e5c44a6db66cd7359967585f Mon Sep 17 00:00:00 2001 From: David King Date: Wed, 8 Feb 2012 00:08:17 -0500 Subject: [ticket/10586] Extension front controller Handle extension front pages PHPBB3-10586 --- phpBB/includes/extension/controller_interface.php | 31 ++++++++++++++++++ phpBB/includes/extension/manager.php | 22 +++++++++++++ phpBB/index.php | 39 +++++++++++++++++++++++ phpBB/language/en/common.php | 4 +++ 4 files changed, 96 insertions(+) create mode 100644 phpBB/includes/extension/controller_interface.php (limited to 'phpBB') diff --git a/phpBB/includes/extension/controller_interface.php b/phpBB/includes/extension/controller_interface.php new file mode 100644 index 0000000000..bcc8972db4 --- /dev/null +++ b/phpBB/includes/extension/controller_interface.php @@ -0,0 +1,31 @@ +phpbb_root_path . "ext/$name/"); + } + + /** + * Check to see if a given extension is enabled + * + * @param string $name Extension name to check + * @return bool Depending on whether or not the extension is enabled + */ + public function enabled($name) + { + return isset($this->extensions[$name]) && $this->extensions[$name]['ext_active']; + } /** * Instantiates a phpbb_extension_finder. diff --git a/phpBB/index.php b/phpBB/index.php index f1243bb336..a206ed4d37 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -24,6 +24,45 @@ $user->session_begin(); $auth->acl($user->data); $user->setup('viewforum'); +// If given an extension, look for a front controller +if ($ext = $request->variable('ext', '')) +{ + // The class to load + $class = "phpbb_ext_{$ext}_controller"; + + // Make sure the specified extension is enabled + // and that it has a controller class + if (!$phpbb_extension_manager->available($ext)) + { + send_status_line(404, 'Not Found'); + trigger_error($user->lang('EXTENSION_DOES_NOT_EXIST', $ext)); + } + else if (!$phpbb_extension_manager->enabled($ext)) + { + send_status_line(404, 'Not Found'); + trigger_error($user->lang('EXTENSION_DISABLED', $ext)); + } + else if (!file_exists("{$phpbb_root_path}ext/$ext/controller.$phpEx") || !class_exists($class)) + { + send_status_line(404, 'Not Found'); + trigger_error($user->lang('EXTENSION_CONTROLLER_MISSING', $ext)); + } + + // Instantiate the extension controller + $controller = new $class; + + // But let's make sure it's actually a proper controller + if (!($controller instanceof phpbb_extension_controller_interface)) + { + send_status_line(500, 'Internal Server Error'); + trigger_error($user->lang('EXTENSION_CLASS_WRONG_TYPE', $class)); + } + + // Let's get it started... + $controller->handle(); + exit_handler(); +} + display_forums('', $config['load_moderators']); $order_legend = ($config['legend_sort_groupname']) ? 'group_name' : 'group_legend'; diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 7741ff8d1f..94edddc6f5 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -185,7 +185,11 @@ $lang = array_merge($lang, array( 'ERR_WRONG_PATH_TO_PHPBB' => 'The phpBB path specified appears to be invalid.', 'EXPAND_VIEW' => 'Expand view', 'EXTENSION' => 'Extension', + 'EXTENSION_CONTROLLER_MISSING' => 'The extension %s is missing a controller class and cannot be accessed through the front-end.', + 'EXTENSION_CLASS_WRONG_TYPE' => 'The extension controller class %s is not an instance of the phpbb_extension_controller_interface.', + 'EXTENSION_DISABLED' => 'The extension %s is not enabled.', 'EXTENSION_DISABLED_AFTER_POSTING' => 'The extension %s has been deactivated and can no longer be displayed.', + 'EXTENSION_DOES_NOT_EXIST' => 'The extension %s does not exist.', 'FAQ' => 'FAQ', 'FAQ_EXPLAIN' => 'Frequently Asked Questions', -- cgit v1.2.1 From 969c6d42e390fe05960d9dd3b97b230d4e7830a0 Mon Sep 17 00:00:00 2001 From: David King Date: Fri, 17 Feb 2012 14:21:28 -0500 Subject: [ticket/10586] Removed file_exists() check because class_exists() covers that. PHPBB3-10586 --- phpBB/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/index.php b/phpBB/index.php index a206ed4d37..575134f6b1 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -42,7 +42,7 @@ if ($ext = $request->variable('ext', '')) send_status_line(404, 'Not Found'); trigger_error($user->lang('EXTENSION_DISABLED', $ext)); } - else if (!file_exists("{$phpbb_root_path}ext/$ext/controller.$phpEx") || !class_exists($class)) + else if (!class_exists($class)) { send_status_line(404, 'Not Found'); trigger_error($user->lang('EXTENSION_CONTROLLER_MISSING', $ext)); -- cgit v1.2.1 From e45452d1b3d39220ebd9b20390b9cc23ef64d3dd Mon Sep 17 00:00:00 2001 From: David King Date: Sat, 18 Feb 2012 11:24:27 -0500 Subject: [ticket/10586] Sanitize periods from class names, use manager to get path. PHPBB3-10586 --- phpBB/includes/extension/manager.php | 2 +- phpBB/index.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index b94379141c..6f1c885ea9 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -437,7 +437,7 @@ class phpbb_extension_manager */ public function available($name) { - return file_exists($this->phpbb_root_path . "ext/$name/"); + return file_exists($this->get_extension_path($name, true)); } /** diff --git a/phpBB/index.php b/phpBB/index.php index 575134f6b1..e6a472ce31 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -28,7 +28,7 @@ $user->setup('viewforum'); if ($ext = $request->variable('ext', '')) { // The class to load - $class = "phpbb_ext_{$ext}_controller"; + $class = 'phpbb_ext_' . str_replace('/', '_', $name) . '_controller'; // Make sure the specified extension is enabled // and that it has a controller class -- cgit v1.2.1 From e5ce9646567e6b3441c21ab960f8a77f1281c72b Mon Sep 17 00:00:00 2001 From: David King Date: Sat, 18 Feb 2012 11:34:07 -0500 Subject: [ticket/10586] Copy/paste fail fixed PHPBB3-10586 --- phpBB/index.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/index.php b/phpBB/index.php index e6a472ce31..2500774f67 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -28,7 +28,7 @@ $user->setup('viewforum'); if ($ext = $request->variable('ext', '')) { // The class to load - $class = 'phpbb_ext_' . str_replace('/', '_', $name) . '_controller'; + $class = 'phpbb_ext_' . str_replace('/', '_', $ext) . '_controller'; // Make sure the specified extension is enabled // and that it has a controller class -- cgit v1.2.1 From 97d4f168f588288df071e4a8b107b9ffb8b0355f Mon Sep 17 00:00:00 2001 From: Richard Foote Date: Mon, 19 Mar 2012 15:08:28 -0400 Subject: [ticket/10675] Add disk full language string when posting attachments Add language string visible by admins only for when the disk does not have enough free space to upload attachments. PHPBB3-10675 --- phpBB/includes/functions_posting.php | 9 ++++++++- phpBB/language/en/posting.php | 1 + 2 files changed, 9 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index f920be9c4b..b40fd67927 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -497,7 +497,14 @@ function upload_attachment($form_name, $forum_id, $local = false, $local_storage { if ($free_space <= $file->get('filesize')) { - $filedata['error'][] = $user->lang['ATTACH_QUOTA_REACHED']; + if ($auth->acl_get('a_')) + { + $filedata['error'][] = $user->lang['ATTACH_DISK_FULL']; + } + else + { + $filedata['error'][] = $user->lang['ATTACH_QUOTA_REACHED']; + } $filedata['post_attach'] = false; $file->remove(); diff --git a/phpBB/language/en/posting.php b/phpBB/language/en/posting.php index f8d265dddd..dd0ba7fc6d 100644 --- a/phpBB/language/en/posting.php +++ b/phpBB/language/en/posting.php @@ -42,6 +42,7 @@ $lang = array_merge($lang, array( 'ADD_POLL' => 'Poll creation', 'ADD_POLL_EXPLAIN' => 'If you do not want to add a poll to your topic leave the fields blank.', 'ALREADY_DELETED' => 'Sorry but this message is already deleted.', + 'ATTACH_DISK_FULL' => 'There is not enough free disk space to post this attachment', 'ATTACH_QUOTA_REACHED' => 'Sorry, the board attachment quota has been reached.', 'ATTACH_SIG' => 'Attach a signature (signatures can be altered via the UCP)', -- cgit v1.2.1 From 70d88965c795a5e392605fe556df580773a505c3 Mon Sep 17 00:00:00 2001 From: Richard Foote Date: Mon, 19 Mar 2012 23:19:21 -0400 Subject: [ticket/10708] Check converted passwords for multi-byte characters Check for multi-byte characters in converted passwords. PHPBB3-10708 --- phpBB/includes/auth/auth_db.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/auth/auth_db.php b/phpBB/includes/auth/auth_db.php index c20196d019..1c6cdf7832 100644 --- a/phpBB/includes/auth/auth_db.php +++ b/phpBB/includes/auth/auth_db.php @@ -163,7 +163,7 @@ function login_db($username, $password, $ip = '', $browser = '', $forwarded_for $password_old_format = (!STRIP) ? addslashes($password_old_format) : $password_old_format; $password_new_format = ''; - set_var($password_new_format, stripslashes($password_old_format), 'string'); + set_var($password_new_format, stripslashes($password_old_format), 'string', true); if ($password == $password_new_format) { -- cgit v1.2.1 From 2005c339ff26bf189fb818f0e25d6c0954b9702a Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 20 Mar 2012 17:45:08 +0100 Subject: =?UTF-8?q?[ticket/10717]=20Fix=20profile=20field=20sample=20in=20?= =?UTF-8?q?prosilver=C2=B4s=20memberlist=5Fview.html?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit PHPBB3-10717 --- phpBB/styles/prosilver/template/memberlist_view.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/memberlist_view.html b/phpBB/styles/prosilver/template/memberlist_view.html index cfec07cff0..2758a7e6cc 100644 --- a/phpBB/styles/prosilver/template/memberlist_view.html +++ b/phpBB/styles/prosilver/template/memberlist_view.html @@ -69,7 +69,7 @@
    {L_JABBER}:
    {L_SEND_JABBER_MESSAGE}
    {L_JABBER}:
    {USER_JABBER}
    -
    {postrow.PROFILE_FIELD1_NAME}:
    {postrow.PROFILE_FIELD1_VALUE}
    +
    {PROFILE_FIELD1_NAME}:
    {PROFILE_FIELD1_VALUE}
    -- cgit v1.2.1 From b4b586ae10ce34d1c7d00d784fac7a51804eff3e Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Wed, 21 Mar 2012 13:09:39 +0100 Subject: [feature/event-dispatcher] Switch subscriber loader to EventDispatcherInterface Do not hardcode the implementation of EventDispatcher. PHPBB3-9550 --- phpBB/includes/event/extension_subscriber_loader.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/event/extension_subscriber_loader.php b/phpBB/includes/event/extension_subscriber_loader.php index 60e7fe2382..155846d53d 100644 --- a/phpBB/includes/event/extension_subscriber_loader.php +++ b/phpBB/includes/event/extension_subscriber_loader.php @@ -15,14 +15,14 @@ if (!defined('IN_PHPBB')) exit; } -use Symfony\Component\EventDispatcher\EventDispatcher; +use Symfony\Component\EventDispatcher\EventDispatcherInterface; class phpbb_event_extension_subscriber_loader { private $dispatcher; private $extension_manager; - public function __construct(EventDispatcher $dispatcher, phpbb_extension_manager $extension_manager) + public function __construct(EventDispatcherInterface $dispatcher, phpbb_extension_manager $extension_manager) { $this->dispatcher = $dispatcher; $this->extension_manager = $extension_manager; -- cgit v1.2.1 From baefbdb8825a37051a200203a0191d34caa12229 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Wed, 21 Mar 2012 13:15:45 +0100 Subject: [feature/event-dispatcher] Add phpbb_event_dispatcher_wrapper PHPBB3-9550 --- phpBB/common.php | 2 +- phpBB/includes/event/dispatcher_wrapper.php | 88 +++++++++++++++++++++++++++++ 2 files changed, 89 insertions(+), 1 deletion(-) create mode 100644 phpBB/includes/event/dispatcher_wrapper.php (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index 132b95c1fe..c7e66ef0d6 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -100,7 +100,7 @@ $phpbb_class_loader_ext->set_cache($cache->get_driver()); $phpbb_class_loader->set_cache($cache->get_driver()); // Instantiate some basic classes -$phpbb_dispatcher = new EventDispatcher(); +$phpbb_dispatcher = new phpbb_event_dispatcher_wrapper(new EventDispatcher()); $request = new phpbb_request(); $user = new user(); $auth = new auth(); diff --git a/phpBB/includes/event/dispatcher_wrapper.php b/phpBB/includes/event/dispatcher_wrapper.php new file mode 100644 index 0000000000..5f5d653c3c --- /dev/null +++ b/phpBB/includes/event/dispatcher_wrapper.php @@ -0,0 +1,88 @@ +trigger_event('core.index', compact($vars))); +* +* Apart from that it implements the EventDispatcherInterface +* and proxies all method calls to the member dispatcher. +*/ +class phpbb_event_dispatcher_wrapper implements EventDispatcherInterface +{ + private $dispatcher; + + public function __construct(EventDispatcherInterface $dispatcher) + { + $this->dispatcher = $dispatcher; + } + + public function dispatch($eventName, Event $event = null) + { + $this->dispatcher->dispatch($eventName, $event); + } + + public function addListener($eventName, $listener, $priority = 0) + { + $this->dispatcher->addListener($eventName, $listener, $priority); + } + + public function addSubscriber(EventSubscriberInterface $subscriber) + { + $this->dispatcher->addSubscriber($subscriber); + } + + public function removeListener($eventName, $listener) + { + $this->dispatcher->removeListener($eventName, $listener); + } + + public function removeSubscriber(EventSubscriberInterface $subscriber) + { + $this->dispatcher->removeSubscriber($subscriber); + } + + public function getListeners($eventName = null) + { + return $this->dispatcher->getListeners($eventName); + } + + public function hasListeners($eventName = null) + { + return $this->dispatcher->hasListeners($eventName); + } + + public function trigger_event($eventName, $data = array()) + { + $event = new phpbb_event_data($data); + $this->dispatch($eventName, $event); + return $event->get_data_filtered(array_keys($data)); + } +} -- cgit v1.2.1 From 92f771eb82b64bb35e0cd42534ddd0306a6aef68 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Thu, 22 Mar 2012 03:10:14 +0530 Subject: [ticket/10704] minor typo in a comment Make sure $id separation is working fine PHPBB3-10704 --- phpBB/includes/functions_module.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_module.php b/phpBB/includes/functions_module.php index db7defdc48..ae4f0f238e 100644 --- a/phpBB/includes/functions_module.php +++ b/phpBB/includes/functions_module.php @@ -362,7 +362,7 @@ class p_master $module_auth = implode(' ', $tokens); - // Make sure $id seperation is working fine + // Make sure $id separation is working fine $module_auth = str_replace(' , ', ',', $module_auth); $forum_id = ($forum_id === false) ? $this->acl_forum_id : $forum_id; -- cgit v1.2.1 From 5a9dd1994fc20aaebe3145540b630826d7333998 Mon Sep 17 00:00:00 2001 From: rxu Date: Thu, 22 Mar 2012 21:19:01 +0800 Subject: [ticket/10684] Adjust function and parameter name, minor changes. PHPBB3-10684 --- phpBB/includes/functions_posting.php | 4 ++-- phpBB/includes/functions_privmsgs.php | 4 ++-- phpBB/includes/functions_user.php | 10 +++++----- 3 files changed, 9 insertions(+), 9 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 073ce1ff4e..7f45b2da8c 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -1181,11 +1181,11 @@ function user_notification($mode, $subject, $topic_title, $forum_name, $forum_id $topic_title = censor_text($topic_title); // Exclude guests, current user and banned users from notifications - if (!function_exists('phpbb_get_banned_users_ids')) + if (!function_exists('phpbb_get_banned_user_ids')) { include($phpbb_root_path . 'includes/functions_user.' . $phpEx); } - $sql_ignore_users = phpbb_get_banned_users_ids(); + $sql_ignore_users = phpbb_get_banned_user_ids(); $sql_ignore_users[ANONYMOUS] = ANONYMOUS; $sql_ignore_users[$user->data['user_id']] = $user->data['user_id']; diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php index 4ea8f74153..447920cfd5 100644 --- a/phpBB/includes/functions_privmsgs.php +++ b/phpBB/includes/functions_privmsgs.php @@ -1630,11 +1630,11 @@ function pm_notification($mode, $author, $recipients, $subject, $message, $msg_i return; } - if (!function_exists('phpbb_get_banned_users_ids')) + if (!function_exists('phpbb_get_banned_user_ids')) { include($phpbb_root_path . 'includes/functions_user.' . $phpEx); } - $banned_users = phpbb_get_banned_users_ids(array_keys($recipients)); + $banned_users = phpbb_get_banned_user_ids(array_keys($recipients)); $recipients = array_diff(array_keys($recipients), $banned_users); if (!sizeof($recipients)) diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 8c42a5bb42..10fb57ea97 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -3588,24 +3588,24 @@ function remove_newly_registered($user_id, $user_data = false) } /** -* Get a list of banned users' ids, ignoring stale bans which were not cleaned yet. +* Gets user ids of currently banned registered users. * -* @param array $users_ids Array of users' ids to check for banning, +* @param array $user_ids Array of users' ids to check for banning, * leave empty to get complete list of banned ids * @return array Array of banned users' ids if any, empty array otherwise */ -function phpbb_get_banned_users_ids($users_ids = array()) +function phpbb_get_banned_user_ids($user_ids = array()) { global $db; - $sql_users_ids = (!empty($users_ids)) ? $db->sql_in_set('ban_userid', $users_ids) : 'ban_userid <> 0'; + $sql_user_ids = (!empty($user_ids)) ? $db->sql_in_set('ban_userid', $user_ids) : 'ban_userid <> 0'; // Get banned User ID's // Ignore stale bans which were not wiped yet $banned_ids_list = array(); $sql = 'SELECT ban_userid FROM ' . BANLIST_TABLE . " - WHERE $sql_users_ids + WHERE $sql_user_ids AND ban_exclude <> 1 AND (ban_end > " . time() . ' OR ban_end = 0)'; -- cgit v1.2.1 From 18c541dfee6ec7db0e04c939bc103cefe9dab9d7 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Fri, 23 Mar 2012 00:27:29 +0530 Subject: [ticket/10703] Added a condition to check if ext directory exists The existence of ext directory is checked, if not present a proper error message that file doesn't exist is printed out. No Fatal Error messages. PHPBB3-10703 --- phpBB/develop/extensions.php | 8 +++++++- phpBB/includes/extension/manager.php | 4 ++++ 2 files changed, 11 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/develop/extensions.php b/phpBB/develop/extensions.php index 2f7c3d1167..43621f3080 100644 --- a/phpBB/develop/extensions.php +++ b/phpBB/develop/extensions.php @@ -37,6 +37,13 @@ function list_extensions() global $phpbb_extension_manager; $phpbb_extension_manager->load_extensions(); + $all = array_keys($phpbb_extension_manager->all_available()); + + if (empty($all)) + { + echo "There were no extensions found.\n"; + exit(3); + } echo "Enabled:\n"; $enabled = array_keys($phpbb_extension_manager->all_enabled()); @@ -49,7 +56,6 @@ function list_extensions() echo "\n"; echo "Available:\n"; - $all = array_keys($phpbb_extension_manager->all_available()); $purged = array_diff($all, $enabled, $disabled); print_extensions($purged); } diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index c38f0df32e..dac0e5f947 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -352,6 +352,10 @@ class phpbb_extension_manager public function all_available() { $available = array(); + if (!is_dir($this->phpbb_root_path . 'ext/')) + { + return $available; + } $iterator = new RecursiveIteratorIterator( new RecursiveDirectoryIterator($this->phpbb_root_path . 'ext/'), -- cgit v1.2.1 From 400277c03624788e6a31f9aa4a15b883478f58cc Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 24 Mar 2012 15:45:18 +0100 Subject: [feature/event-dispatcher] Change phpbb_event_dispatcher to inheritance, tests PHPBB3-9550 --- phpBB/common.php | 2 +- phpBB/includes/event/dispatcher.php | 42 ++++++++++++++ phpBB/includes/event/dispatcher_wrapper.php | 88 ----------------------------- 3 files changed, 43 insertions(+), 89 deletions(-) create mode 100644 phpBB/includes/event/dispatcher.php delete mode 100644 phpBB/includes/event/dispatcher_wrapper.php (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index c7e66ef0d6..fafcb81feb 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -100,7 +100,7 @@ $phpbb_class_loader_ext->set_cache($cache->get_driver()); $phpbb_class_loader->set_cache($cache->get_driver()); // Instantiate some basic classes -$phpbb_dispatcher = new phpbb_event_dispatcher_wrapper(new EventDispatcher()); +$phpbb_dispatcher = new phpbb_event_dispatcher(); $request = new phpbb_request(); $user = new user(); $auth = new auth(); diff --git a/phpBB/includes/event/dispatcher.php b/phpBB/includes/event/dispatcher.php new file mode 100644 index 0000000000..2bf46b9b06 --- /dev/null +++ b/phpBB/includes/event/dispatcher.php @@ -0,0 +1,42 @@ +trigger_event('core.index', compact($vars))); +* +*/ +class phpbb_event_dispatcher extends EventDispatcher +{ + public function trigger_event($eventName, $data = array()) + { + $event = new phpbb_event_data($data); + $this->dispatch($eventName, $event); + return $event->get_data_filtered(array_keys($data)); + } +} diff --git a/phpBB/includes/event/dispatcher_wrapper.php b/phpBB/includes/event/dispatcher_wrapper.php deleted file mode 100644 index 5f5d653c3c..0000000000 --- a/phpBB/includes/event/dispatcher_wrapper.php +++ /dev/null @@ -1,88 +0,0 @@ -trigger_event('core.index', compact($vars))); -* -* Apart from that it implements the EventDispatcherInterface -* and proxies all method calls to the member dispatcher. -*/ -class phpbb_event_dispatcher_wrapper implements EventDispatcherInterface -{ - private $dispatcher; - - public function __construct(EventDispatcherInterface $dispatcher) - { - $this->dispatcher = $dispatcher; - } - - public function dispatch($eventName, Event $event = null) - { - $this->dispatcher->dispatch($eventName, $event); - } - - public function addListener($eventName, $listener, $priority = 0) - { - $this->dispatcher->addListener($eventName, $listener, $priority); - } - - public function addSubscriber(EventSubscriberInterface $subscriber) - { - $this->dispatcher->addSubscriber($subscriber); - } - - public function removeListener($eventName, $listener) - { - $this->dispatcher->removeListener($eventName, $listener); - } - - public function removeSubscriber(EventSubscriberInterface $subscriber) - { - $this->dispatcher->removeSubscriber($subscriber); - } - - public function getListeners($eventName = null) - { - return $this->dispatcher->getListeners($eventName); - } - - public function hasListeners($eventName = null) - { - return $this->dispatcher->hasListeners($eventName); - } - - public function trigger_event($eventName, $data = array()) - { - $event = new phpbb_event_data($data); - $this->dispatch($eventName, $event); - return $event->get_data_filtered(array_keys($data)); - } -} -- cgit v1.2.1 From 2768db44f557cd5db4b54a287ecb1d2fcbe94140 Mon Sep 17 00:00:00 2001 From: HTF Date: Sat, 24 Mar 2012 15:13:04 +0000 Subject: [ticket/10129] Remove apostrophes and plurals in ACP user management -> permissions language file as per ticket. PHPBB3-10129 --- phpBB/language/en/acp/common.php | 8 ++++---- phpBB/language/en/acp/permissions.php | 12 ++++++------ 2 files changed, 10 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/common.php b/phpBB/language/en/acp/common.php index 958b9c7598..e64ba3c371 100644 --- a/phpBB/language/en/acp/common.php +++ b/phpBB/language/en/acp/common.php @@ -96,10 +96,10 @@ $lang = array_merge($lang, array( 'ACP_GLOBAL_MODERATORS' => 'Global moderators', 'ACP_GLOBAL_PERMISSIONS' => 'Global permissions', 'ACP_GROUPS' => 'Groups', - 'ACP_GROUPS_FORUM_PERMISSIONS' => 'Groups’ forum permissions', + 'ACP_GROUPS_FORUM_PERMISSIONS' => 'Group forum permissions', 'ACP_GROUPS_MANAGE' => 'Manage groups', 'ACP_GROUPS_MANAGEMENT' => 'Group management', - 'ACP_GROUPS_PERMISSIONS' => 'Groups’ permissions', + 'ACP_GROUPS_PERMISSIONS' => 'Group permissions', 'ACP_ICONS' => 'Topic icons', 'ACP_ICONS_SMILIES' => 'Topic icons/smilies', @@ -172,9 +172,9 @@ $lang = array_merge($lang, array( 'ACP_THEMES' => 'Themes', 'ACP_UPDATE' => 'Updating', - 'ACP_USERS_FORUM_PERMISSIONS' => 'Users’ forum permissions', + 'ACP_USERS_FORUM_PERMISSIONS' => 'User forum permissions', 'ACP_USERS_LOGS' => 'User logs', - 'ACP_USERS_PERMISSIONS' => 'Users’ permissions', + 'ACP_USERS_PERMISSIONS' => 'User permissions', 'ACP_USER_ATTACH' => 'Attachments', 'ACP_USER_AVATAR' => 'Avatar', 'ACP_USER_FEEDBACK' => 'Feedback', diff --git a/phpBB/language/en/acp/permissions.php b/phpBB/language/en/acp/permissions.php index 016be51282..c0396cc247 100644 --- a/phpBB/language/en/acp/permissions.php +++ b/phpBB/language/en/acp/permissions.php @@ -40,10 +40,10 @@ $lang = array_merge($lang, array(

    Permissions are highly granular and grouped into four major sections, which are:

    Global Permissions

    -

    These are used to control access on a global level and apply to the entire bulletin board. They are further divided into Users’ Permissions, Groups’ Permissions, Administrators and Global Moderators.

    +

    These are used to control access on a global level and apply to the entire bulletin board. They are further divided into User Permissions, Group Permissions, Administrators and Global Moderators.

    Forum Based Permissions

    -

    These are used to control access on a per forum basis. They are further divided into Forum Permissions, Forum Moderators, Users’ Forum Permissions and Groups’ Forum Permissions.

    +

    These are used to control access on a per forum basis. They are further divided into Forum Permissions, Forum Moderators, User Forum Permissions and Group Forum Permissions.

    Permission Roles

    These are used to create different sets of permissions for the different permission types later being able to be assigned on a role-based basis. The default roles should cover the administration of bulletin boards large and small, though within each of the four divisions, you can add/edit/delete roles as you see fit.

    @@ -83,13 +83,13 @@ $lang = array_merge($lang, array( 'ACP_FORUM_PERMISSIONS_COPY_EXPLAIN' => 'Here you can copy forum permissions from one forum to one or more other forums.', 'ACP_GLOBAL_MODERATORS_EXPLAIN' => 'Here you can assign global moderator permissions to users or groups. These moderators are like ordinary moderators except they have access to every forum on your board.', 'ACP_GROUPS_FORUM_PERMISSIONS_EXPLAIN' => 'Here you can assign forum permissions to groups.', - 'ACP_GROUPS_PERMISSIONS_EXPLAIN' => 'Here you can assign global permissions to groups - user permissions, global moderator permissions and administrator permissions. User permissions include capabilities such as the use of avatars, sending private messages, et cetera; global moderator permissions such as approving posts, manage topics, manage bans, et cetera and lastly administrator permissions such as altering permissions, define custom BBCodes, manage forums, et cetera. Individual users permissions should only be changed in rare occasions, the preferred method is putting users in groups and assigning the group’s permissions.', + 'ACP_GROUPS_PERMISSIONS_EXPLAIN' => 'Here you can assign global permissions to groups - user permissions, global moderator permissions and administrator permissions. User permissions include capabilities such as the use of avatars, sending private messages, et cetera; global moderator permissions such as approving posts, manage topics, manage bans, et cetera and lastly administrator permissions such as altering permissions, define custom BBCodes, manage forums, et cetera. Individual user permissions should only be changed in rare occasions, the preferred method is putting users in groups and assigning the group permissions.', 'ACP_ADMIN_ROLES_EXPLAIN' => 'Here you are able to manage the roles for administrative permissions. Roles are effective permissions, if you change a role the items having this role assigned will change its permissions too.', 'ACP_FORUM_ROLES_EXPLAIN' => 'Here you are able to manage the roles for forum permissions. Roles are effective permissions, if you change a role the items having this role assigned will change its permissions too.', 'ACP_MOD_ROLES_EXPLAIN' => 'Here you are able to manage the roles for moderative permissions. Roles are effective permissions, if you change a role the items having this role assigned will change its permissions too.', 'ACP_USER_ROLES_EXPLAIN' => 'Here you are able to manage the roles for user permissions. Roles are effective permissions, if you change a role the items having this role assigned will change its permissions too.', 'ACP_USERS_FORUM_PERMISSIONS_EXPLAIN' => 'Here you can assign forum permissions to users.', - 'ACP_USERS_PERMISSIONS_EXPLAIN' => 'Here you can assign global permissions to users - user permissions, global moderator permissions and administrator permissions. User permissions include capabilities such as the use of avatars, sending private messages, et cetera; global moderator permissions such as approving posts, manage topics, manage bans, et cetera and lastly administrator permissions such as altering permissions, define custom BBCodes, manage forums, et cetera. To alter these settings for large numbers of users the Group permissions system is the preferred method. User’s permissions should only be changed in rare occasions, the preferred method is putting users in groups and assigning the group’s permissions.', + 'ACP_USERS_PERMISSIONS_EXPLAIN' => 'Here you can assign global permissions to users - user permissions, global moderator permissions and administrator permissions. User permissions include capabilities such as the use of avatars, sending private messages, et cetera; global moderator permissions such as approving posts, manage topics, manage bans, et cetera and lastly administrator permissions such as altering permissions, define custom BBCodes, manage forums, et cetera. To alter these settings for large numbers of users the Group permissions system is the preferred method. User permissions should only be changed in rare occasions, the preferred method is putting users in groups and assigning the group permissions.', 'ACP_VIEW_ADMIN_PERMISSIONS_EXPLAIN' => 'Here you can view the effective administrative permissions assigned to the selected users/groups.', 'ACP_VIEW_GLOBAL_MOD_PERMISSIONS_EXPLAIN' => 'Here you can view the global moderative permissions assigned to the selected users/groups.', 'ACP_VIEW_FORUM_PERMISSIONS_EXPLAIN' => 'Here you can view the forum permissions assigned to the selected users/groups and forums.', @@ -225,8 +225,8 @@ $lang = array_merge($lang, array( 'SELECT_TYPE' => 'Select type', 'SET_PERMISSIONS' => 'Set permissions', 'SET_ROLE_PERMISSIONS' => 'Set role permissions', - 'SET_USERS_PERMISSIONS' => 'Set users permissions', - 'SET_USERS_FORUM_PERMISSIONS' => 'Set users forum permissions', + 'SET_USERS_PERMISSIONS' => 'Set user permissions', + 'SET_USERS_FORUM_PERMISSIONS' => 'Set user forum permissions', 'TRACE_DEFAULT' => 'By default every permission is NO (unset). So the permission can be overwritten by other settings.', 'TRACE_FOR' => 'Trace for', -- cgit v1.2.1 From a44423baee5d0d5e0fd8899204a71e4a292dc6bf Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 24 Mar 2012 21:37:45 +0100 Subject: [feature/event-dispatcher] Change composer autoloading options Check if composer's generated autoloader is present, and if not give an error. PHPBB3-9550 --- phpBB/includes/startup.php | 32 +++++++++++++++++++++----------- 1 file changed, 21 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/startup.php b/phpBB/includes/startup.php index 9c4e1374ba..45eaff6fc7 100644 --- a/phpBB/includes/startup.php +++ b/phpBB/includes/startup.php @@ -149,22 +149,32 @@ if (function_exists('date_default_timezone_set') && function_exists('date_defaul // Autoloading of dependencies. // Three options are supported: -// 1. Specify PHPBB_AUTOLOAD=/path/to/autoload.php in the environment. -// This is useful for running CLI scripts and tests. +// 1. If dependencies are installed with Composer, Composer will create a +// vendor/.composer/autoload.php. If this file exists it will be +// automatically used by phpBB. This is the default mode that phpBB +// will use when shipped. +// 2. To disable composer autoloading, PHPBB_NO_AUTOLOAD can be specified. +// Additionally specify PHPBB_AUTOLOAD=/path/to/autoload.php in the +// environment. This is useful for running CLI scripts and tests. // /path/to/autoload.php should define and register class loaders // for all of phpBB's dependencies. -// 2. If dependencies are installed with Composer, Composer will create a -// vendor/.composer/autoload.php. If this file exists it will be -// automatically used by phpBB. -// 3. Failing that phpBB assumes that autoloading has been set up in -// some other way. This might be useful in cases when phpBB is integrated -// into a larger program. -if (getenv('PHPBB_AUTOLOAD')) +// 3. You can also set PHPBB_NO_AUTOLOAD without setting PHPBB_AUTOLOAD. +// In this case autoloading needs to be defined before running any phpBB +// script. This might be useful in cases when phpBB is integrated into a +// larger program. +if (getenv('PHPBB_NO_AUTOLOAD')) { - require(getenv('PHPBB_AUTOLOAD')); + if (getenv('PHPBB_AUTOLOAD')) + { + require(getenv('PHPBB_AUTOLOAD')); + } } -else if (file_exists($phpbb_root_path . 'vendor/.composer/autoload.php')) +else { + if (!file_exists($phpbb_root_path . 'vendor/.composer/autoload.php')) + { + trigger_error('You have not set up composer dependencies. See http://getcomposer.org/.', E_USER_ERROR); + } require($phpbb_root_path . 'vendor/.composer/autoload.php'); } -- cgit v1.2.1 From cfb8f01040ca9fded20d8f3dd4620cd7477d60fc Mon Sep 17 00:00:00 2001 From: David King Date: Sat, 24 Mar 2012 22:03:03 -0400 Subject: [ticket/10727] Do not hide Quick Reply with javascript on prosilver PHPBB3-10727 --- phpBB/language/en/viewtopic.php | 2 - .../prosilver/template/quickreply_editor.html | 59 +--------------------- 2 files changed, 1 insertion(+), 60 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/viewtopic.php b/phpBB/language/en/viewtopic.php index 2b20938afe..f47f8a076b 100644 --- a/phpBB/language/en/viewtopic.php +++ b/phpBB/language/en/viewtopic.php @@ -47,7 +47,6 @@ $lang = array_merge($lang, array( 'BUMP_TOPIC' => 'Bump topic', 'CODE' => 'Code', - 'COLLAPSE_QR' => 'Hide Quick Reply', 'DELETE_TOPIC' => 'Delete topic', 'DOWNLOAD_NOTICE' => 'You do not have the required permissions to view the files attached to this post.', @@ -97,7 +96,6 @@ $lang = array_merge($lang, array( 'REPLY_TO_TOPIC' => 'Reply to topic', 'RETURN_POST' => '%sReturn to the post%s', - 'SHOW_QR' => 'Quick Reply', 'SUBMIT_VOTE' => 'Submit vote', 'TOTAL_VOTES' => 'Total votes', diff --git a/phpBB/styles/prosilver/template/quickreply_editor.html b/phpBB/styles/prosilver/template/quickreply_editor.html index ea07c2e6d8..f61cc49c0b 100644 --- a/phpBB/styles/prosilver/template/quickreply_editor.html +++ b/phpBB/styles/prosilver/template/quickreply_editor.html @@ -1,51 +1,5 @@ - -
    -
    -

    {L_WARNINGS_ZERO_TOTAL}

    +

    {L_NO_WARNINGS}

    @@ -88,7 +88,7 @@
    -

    {L_WARNINGS_ZERO_TOTAL}

    +

    {L_NO_WARNINGS}

    diff --git a/phpBB/styles/prosilver/template/mcp_warn_list.html b/phpBB/styles/prosilver/template/mcp_warn_list.html index d9c0bce088..5e43903f11 100644 --- a/phpBB/styles/prosilver/template/mcp_warn_list.html +++ b/phpBB/styles/prosilver/template/mcp_warn_list.html @@ -53,7 +53,7 @@ -

    {L_WARNINGS_ZERO_TOTAL}

    +

    {L_NO_WARNINGS}

    -- cgit v1.2.1 From 56629d8e3c80cd490b8ec39d4fa102d0303f9a4b Mon Sep 17 00:00:00 2001 From: Bruno Ais Date: Thu, 29 Mar 2012 15:52:28 +0100 Subject: [ticket/10705] Change WARNINGS_ZERO_TOTAL in subsilver2 Located the L_WARNINGS_ZERO_TOTAL in subsilver2 and replaced it with L_NO_WARNINGS PHPBB3-10705 --- phpBB/styles/subsilver2/template/mcp_warn_front.html | 4 ++-- phpBB/styles/subsilver2/template/mcp_warn_list.html | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/mcp_warn_front.html b/phpBB/styles/subsilver2/template/mcp_warn_front.html index 417355d537..020a79f419 100644 --- a/phpBB/styles/subsilver2/template/mcp_warn_front.html +++ b/phpBB/styles/subsilver2/template/mcp_warn_front.html @@ -38,7 +38,7 @@
    {L_WARNINGS_ZERO_TOTAL}{L_NO_WARNINGS}
    @@ -64,7 +64,7 @@ - {L_WARNINGS_ZERO_TOTAL} + {L_NO_WARNINGS} diff --git a/phpBB/styles/subsilver2/template/mcp_warn_list.html b/phpBB/styles/subsilver2/template/mcp_warn_list.html index 6ed0b68bd5..0b0cfa8a45 100644 --- a/phpBB/styles/subsilver2/template/mcp_warn_list.html +++ b/phpBB/styles/subsilver2/template/mcp_warn_list.html @@ -21,7 +21,7 @@ - {L_WARNINGS_ZERO_TOTAL} + {L_NO_WARNINGS} -- cgit v1.2.1 From 7aef3eb7b3dae478fe90c5dfdb276b693c726272 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Thu, 29 Mar 2012 21:29:56 +0200 Subject: [feature/event-dispatcher] Braces CS fix PHPBB3-9550 --- phpBB/includes/event/extension_subscriber_loader.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/event/extension_subscriber_loader.php b/phpBB/includes/event/extension_subscriber_loader.php index 155846d53d..71b16b8371 100644 --- a/phpBB/includes/event/extension_subscriber_loader.php +++ b/phpBB/includes/event/extension_subscriber_loader.php @@ -37,7 +37,8 @@ class phpbb_event_extension_subscriber_loader ->core_path('event/') ->get_classes(); - foreach ($subscriber_classes as $class) { + foreach ($subscriber_classes as $class) + { $subscriber = new $class(); $this->dispatcher->addSubscriber($subscriber); } -- cgit v1.2.1 From ddf1a05ad018404f57472068cd533e121343e907 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Thu, 29 Mar 2012 21:09:02 +0100 Subject: [ticket/10510] Added docs to viewtopic quick mod tools array. PHPBB3-10510 --- phpBB/viewtopic.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'phpBB') diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index cf97196e31..8a95851b7e 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -518,6 +518,8 @@ gen_forum_auth_level('topic', $forum_id, $topic_data['forum_status']); $allow_change_type = ($auth->acl_get('m_', $forum_id) || ($user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'])) ? true : false; $quickmod_array = array( +// 'key' => array('LANG_KEY', $userHasPermissions), + 'lock' => array('LOCK_TOPIC', ($topic_data['topic_status'] == ITEM_UNLOCKED) && ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'] && $topic_data['topic_status'] == ITEM_UNLOCKED))), 'unlock' => array('UNLOCK_TOPIC', ($topic_data['topic_status'] != ITEM_UNLOCKED) && ($auth->acl_get('m_lock', $forum_id) || ($auth->acl_get('f_user_lock', $forum_id) && $user->data['is_registered'] && $user->data['user_id'] == $topic_data['topic_poster'] && $topic_data['topic_status'] == ITEM_UNLOCKED))), 'delete_topic' => array('DELETE_TOPIC', $auth->acl_get('m_delete', $forum_id)), -- cgit v1.2.1 From 0d6a5cb6ae29348a247c8f42e2046c8b84741aa5 Mon Sep 17 00:00:00 2001 From: Michael Cullum Date: Fri, 30 Mar 2012 11:02:48 +0100 Subject: [feature/event-dispatcher] Update core.page_header event Update it to the new correct format. PHPBB3-9550 --- phpBB/includes/functions.php | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index bd7ed71dcb..7a96dd3609 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4763,9 +4763,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 )); $vars = array('page_title', 'display_online_list', 'item_id', 'item'); - $event = new phpbb_event_data(compact($vars)); - $phpbb_dispatcher->dispatch('core.page_header', $event); - extract($event->get_data_filtered($vars)); + extract($phpbb_dispatcher->trigger_event('core.page_header', compact($vars))); // application/xhtml+xml not used because of IE header('Content-type: text/html; charset=UTF-8'); -- cgit v1.2.1 From 951e2c8d0c32e6c2bcae02e2f2ff8be35af35b36 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Fri, 30 Mar 2012 14:22:20 +0200 Subject: [feature/event-dispatcher] Fix copyright years PHPBB3-9550 --- phpBB/includes/event/data.php | 2 +- phpBB/includes/event/extension_subscriber_loader.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/event/data.php b/phpBB/includes/event/data.php index 47cb2d5a30..70718ff0ae 100644 --- a/phpBB/includes/event/data.php +++ b/phpBB/includes/event/data.php @@ -2,7 +2,7 @@ /** * * @package phpBB3 -* @copyright (c) 2011 phpBB Group +* @copyright (c) 2012 phpBB Group * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ diff --git a/phpBB/includes/event/extension_subscriber_loader.php b/phpBB/includes/event/extension_subscriber_loader.php index 71b16b8371..d933b943d7 100644 --- a/phpBB/includes/event/extension_subscriber_loader.php +++ b/phpBB/includes/event/extension_subscriber_loader.php @@ -2,7 +2,7 @@ /** * * @package phpBB3 -* @copyright (c) 2011 phpBB Group +* @copyright (c) 2012 phpBB Group * @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ -- cgit v1.2.1 From 506951e8aff98582ebc56fcda9ed0626497ade77 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Fri, 30 Mar 2012 16:13:16 +0300 Subject: [feature/merging-style-components] Changing acp_styles text Changing acp styles welcome message a little bit. PHPBB3-10632 --- phpBB/language/en/acp/styles.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/styles.php b/phpBB/language/en/acp/styles.php index fe7fae5808..8a4a8e7308 100644 --- a/phpBB/language/en/acp/styles.php +++ b/phpBB/language/en/acp/styles.php @@ -237,7 +237,7 @@ $lang = array_merge($lang, array( 'INHERITING_FROM' => 'Inherits from', 'INSTALL_STYLE' => 'Install style', 'INSTALL_STYLES' => 'Install styles', - 'INSTALL_STYLES_EXPLAIN' => 'Here you can install new styles.
    If you cannot find a specific style in list below, check if that style is already installed. If it is not installed, check if it was uploaded correctly.', + 'INSTALL_STYLES_EXPLAIN' => 'Here you can install new styles.
    If you cannot find a specific style in list below, check to make sure style is already installed. If it is not installed, check if it was uploaded correctly.', 'INSTALLED_STYLE' => 'Installed styles', 'INVALID_STYLE_ID' => 'Invalid style ID.', -- cgit v1.2.1 From d420ceb9c717b83ba29dde3734b563881051e51a Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Thu, 14 Jul 2011 13:33:42 +0100 Subject: [ticket/10270] Added JavaScript popups and basic AJAX functionality to PHP. This commit adds the phpbb object (JavaScript), and alert and confirm box methods. It also adds the first basic AJAX functionality, to deleting posts in viewtopic. PHPBB3-10270 --- phpBB/includes/functions.php | 53 ++++++++++++-- .../styles/prosilver/template/overall_footer.html | 3 + phpBB/styles/prosilver/theme/common.css | 30 +++++++- phpBB/styles/script.js | 80 ++++++++++++++++++++++ 4 files changed, 158 insertions(+), 8 deletions(-) create mode 100644 phpBB/styles/script.js (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 7a96dd3609..572986bb4b 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -2448,15 +2448,25 @@ function build_url($strip_vars = false) */ function meta_refresh($time, $url, $disable_cd_check = false) { - global $template; + global $template, $refresh_data; - $url = redirect($url, true, $disable_cd_check); - $url = str_replace('&', '&', $url); + if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') + { + $refresh_data = array( + 'time' => $time, + 'url' => str_replace('&', '&', $url) + ); + } + else + { + $url = redirect($url, true, $disable_cd_check); + $url = str_replace('&', '&', $url); - // For XHTML compatibility we change back & to & - $template->assign_vars(array( - 'META' => '') - ); + // For XHTML compatibility we change back & to & + $template->assign_vars(array( + 'META' => '') + ); + } return $url; } @@ -2699,6 +2709,21 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo WHERE user_id = " . $user->data['user_id']; $db->sql_query($sql); + + if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') + { + $u_action .= '&confirm_uid=' . $user->data['user_id'] . '&sess=' . $user->session_id . '&sid=' . $user->session_id; + echo json_encode(array( + 'MESSAGE_TITLE' => (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title], + 'MESSAGE_TEXT' => (!isset($user->lang[$title . '_CONFIRM'])) ? $title : $user->lang[$title . '_CONFIRM'], + + 'YES_VALUE' => $user->lang['YES'], + 'S_CONFIRM_ACTION' => str_replace('&', '&', $u_action), //inefficient, rewrite whole function + 'S_HIDDEN_FIELDS' => $hidden . $s_hidden_fields + )); + exit; + } + if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin']) { adm_page_footer(); @@ -3922,6 +3947,20 @@ function msg_handler($errno, $msg_text, $errfile, $errline) 'S_USER_NOTICE' => ($errno == E_USER_NOTICE) ? true : false) ); + if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') + { + global $refresh_data; + + echo json_encode(array( + 'MESSAGE_TITLE' => $msg_title, + 'MESSAGE_TEXT' => $msg_text, + 'S_USER_WARNING' => ($errno == E_USER_WARNING) ? true : false, + 'S_USER_NOTICE' => ($errno == E_USER_NOTICE) ? true : false, + 'REFRESH_DATA' => (!empty($refresh_data)) ? $refresh_data : null + )); + exit; + } + // We do not want the cron script to be called on error messages define('IN_CRON', true); diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index 4456d6b37d..0d2fd4d27a 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -24,6 +24,9 @@
    {DEBUG_OUTPUT}
    {L_ACP}
    + + +
    diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 27a55caf7a..5cf12be1ce 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -468,7 +468,7 @@ table.info tbody th { /* Misc layout styles ---------------------------------------- */ -/* column[1-2] styles are containers for two column layouts +/* column[1-2] styles are containers for two column layouts Also see tweaks.css */ .column1 { float: left; @@ -580,6 +580,34 @@ li.pagination { background: none 0 50% no-repeat; } +.row .pagination span a, li.pagination span a { + background-color: #FFFFFF; +} + +.row .pagination span a:hover, li.pagination span a:hover { + background-color: #d2d2d2; +} + +/* jQuery popups +---------------------------------------- */ +.jalert { + background-color: #FFFFFF; + border: 1px solid #999999; + display: none; + position: fixed; + top: 100px; + left: 35%; + width: 30%; + z-index: 50; + padding: 25px; + padding: 0 25px 20px 25px; +} + +.jalert p { + margin: 8px 0; + padding-bottom: 8px; +} + /* Miscellaneous styles ---------------------------------------- */ #forum-permissions { diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js new file mode 100644 index 0000000000..9be3efd4ce --- /dev/null +++ b/phpBB/styles/script.js @@ -0,0 +1,80 @@ +var phpbb = {}; + +/** + * Display a simple alert. + * + * @param string title Title of the message, eg "Information" + * @param string msg Message to display. Can be HTML. + */ +phpbb.alert = function(title, msg) { + var div = $('

    ' + title + '

    ' + msg + '

    '); + + $(document).bind('click', function(e) { + if ($(e.target).parents('.jalert').length) + { + return true; + } + div.hide(300, function() { + div.remove(); + }); + return false; + }); + + $('body').append(div); + div.show(300); +} + +/** + * Display a simple yes / no box to the user. + * + * @param string msg Message to display. Can be HTML. + * @param function callback Callback. + */ +phpbb.confirm = function(msg, callback) { + var div = $('

    ' + msg + '

    \ +  \ +
    '); + + $('body').append(div); + + $('.jalertbut').bind('click', function(event) { + div.hide(300, function() { + div.remove(); + }); + callback(this.value === 'Yes'); + return false; + }); + div.show(300); +} + + + +$('.delete-icon a').click(function() +{ + var pid = this.href.split('&p=')[1]; + var __self = this; + $.get(this.href, function(res) { + res = JSON.parse(res); + phpbb.confirm(res.MESSAGE_TEXT, function(del) { + if (del) + { + var p = res.S_CONFIRM_ACTION.split('?'); + p[1] += '&confirm=Yes' + $.post(p[0], p[1], function(res) { + res = JSON.parse(res); + phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT) + $(__self).parents('div #p' + pid).remove(); + + //if there is a refresh, check that it isn't to the same place + if (res.REFRESH_DATA && res.REFRESH_DATA.url.indexOf('t=') === -1) + { + setTimeout(function() { + window.location = res.REFRESH_DATA.url; + }, res.REFRESH_DATA.time * 1000); + } + }); + } + }); + }); + return false; +}); -- cgit v1.2.1 From e6401c081e2e7543db020d16271792d715571249 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Thu, 14 Jul 2011 14:41:24 +0100 Subject: [ticket/10271] Added phpbb.confirm_box (JavaScript). As well as adding the method, this commit also changes the previous commit so that deleting a post from viewtopic uses this method, too. This commit has also made some improvements to phpbb.alert and phpbb.confirm. PHPBB3-10271 --- phpBB/styles/script.js | 97 ++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 27 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 9be3efd4ce..ed10375cf1 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -5,11 +5,13 @@ var phpbb = {}; * * @param string title Title of the message, eg "Information" * @param string msg Message to display. Can be HTML. + * + * @return Returns the div created. */ phpbb.alert = function(title, msg) { var div = $('

    ' + title + '

    ' + msg + '

    '); - $(document).bind('click', function(e) { + $(document).one('click', function(e) { if ($(e.target).parents('.jalert').length) { return true; @@ -22,6 +24,7 @@ phpbb.alert = function(title, msg) { $('body').append(div); div.show(300); + return div; } /** @@ -29,6 +32,8 @@ phpbb.alert = function(title, msg) { * * @param string msg Message to display. Can be HTML. * @param function callback Callback. + * + * @return Returns the div created. */ phpbb.confirm = function(msg, callback) { var div = $('

    ' + msg + '

    \ @@ -45,36 +50,74 @@ phpbb.confirm = function(msg, callback) { return false; }); div.show(300); + return div; } - -$('.delete-icon a').click(function() +/** + * This function interacts via AJAX with phpBBs confirm_box function. + * + * @param string condition The element to capture. + * @param bool/function refresh If we are sent back a refresh, should it be + * acted upon? This can either be true / false / a function. + * @param function callback Callback. + */ +phpbb.confirm_box = function(condition, refresh, callback) { - var pid = this.href.split('&p=')[1]; - var __self = this; - $.get(this.href, function(res) { - res = JSON.parse(res); - phpbb.confirm(res.MESSAGE_TEXT, function(del) { - if (del) - { - var p = res.S_CONFIRM_ACTION.split('?'); - p[1] += '&confirm=Yes' - $.post(p[0], p[1], function(res) { - res = JSON.parse(res); - phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT) - $(__self).parents('div #p' + pid).remove(); + __self = this; + $(condition).click(function() { + var __self = this; + $.get(this.href, function(res) { + res = JSON.parse(res); + phpbb.confirm(res.MESSAGE_TEXT, function(del) { + if (del) + { + var p = res.S_CONFIRM_ACTION.split('?'); + p[1] += '&confirm=Yes'; + $.post(p[0], p[1], function(res) { + res = JSON.parse(res); + var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + callback(__self); - //if there is a refresh, check that it isn't to the same place - if (res.REFRESH_DATA && res.REFRESH_DATA.url.indexOf('t=') === -1) - { - setTimeout(function() { - window.location = res.REFRESH_DATA.url; - }, res.REFRESH_DATA.time * 1000); - } - }); - } + if (res.REFRESH_DATA) + { + if (typeof refresh === 'function') + { + refresh = refresh(res.REFRESH_DATA.url) + } + else if (typeof refresh !== 'boolean') + { + refresh = false; + } + + if (refresh) + { + setTimeout(function() { + window.location = res.REFRESH_DATA.url; + }, res.REFRESH_DATA.time * 1000); + } + else + { + setTimeout(function() { + div.hide(300, function() { + div.remove(); + }); + }, res.REFRESH_DATA.time * 1000); + } + } + }); + } + }); }); + return false; }); - return false; -}); +} + +var refresh = function(url) { + return (url.indexOf('t=') === -1); +} +var callback = function(el) { + var pid = el.href.split('&p=')[1]; + $(el).parents('div #p' + pid).remove(); +} +phpbb.confirm_box('.delete-icon a', refresh, callback); -- cgit v1.2.1 From 2556f5fcc2df1dc51ddd5a97859a7325809b7837 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Thu, 14 Jul 2011 14:57:45 +0100 Subject: [ticket/10272] AJAXified most links. This commit makes some significant changes to the phpbb.confirm_box function (namely, removing some duplicate code), and also manually adds most link to the phpBB AJAX functions. PHPBB3-10272 --- phpBB/styles/script.js | 101 +++++++++++++++++++++++++++++++++++++------------ 1 file changed, 76 insertions(+), 25 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index ed10375cf1..ee67768469 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -53,6 +53,39 @@ phpbb.confirm = function(msg, callback) { return div; } +/** + * Clearing up some duplicate code - don't use this. + */ +function handle_refresh(data, refresh, div) +{ + if (data) + { + if (typeof refresh === 'function') + { + refresh = refresh(data.url) + } + else if (typeof refresh !== 'boolean') + { + refresh = false; + } + + if (refresh) + { + setTimeout(function() { + window.location = data.url; + }, data.time * 1000); + } + else + { + setTimeout(function() { + div.hide(300, function() { + div.remove(); + }); + }, data.time * 1000); + } + } +} + /** * This function interacts via AJAX with phpBBs confirm_box function. @@ -77,34 +110,13 @@ phpbb.confirm_box = function(condition, refresh, callback) $.post(p[0], p[1], function(res) { res = JSON.parse(res); var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - callback(__self); - if (res.REFRESH_DATA) + if (typeof callback !== 'undefined') { - if (typeof refresh === 'function') - { - refresh = refresh(res.REFRESH_DATA.url) - } - else if (typeof refresh !== 'boolean') - { - refresh = false; - } - - if (refresh) - { - setTimeout(function() { - window.location = res.REFRESH_DATA.url; - }, res.REFRESH_DATA.time * 1000); - } - else - { - setTimeout(function() { - div.hide(300, function() { - div.remove(); - }); - }, res.REFRESH_DATA.time * 1000); - } + callback(__self); } + + handle_refresh(res.REFRESH_DATA, refresh, alert); }); } }); @@ -113,6 +125,26 @@ phpbb.confirm_box = function(condition, refresh, callback) }); } +/** + * Makes a link use AJAX instead of loading an entire page. + */ +phpbb.ajaxify = function(selector, refresh, callback) { + $(selector).click(function() { + var __self = this; + $.get(this.href, function(res) { + res = JSON.parse(res); + var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + if (typeof callback !== 'undefined') + { + callback(__self, res); + } + + handle_refresh(res.REFRESH_DATA, refresh, alert); + }); + return false; + }); +} + var refresh = function(url) { return (url.indexOf('t=') === -1); } @@ -121,3 +153,22 @@ var callback = function(el) { $(el).parents('div #p' + pid).remove(); } phpbb.confirm_box('.delete-icon a', refresh, callback); +phpbb.confirm_box('a[href$="ucp.php?mode=delete_cookies"]', true); + +phpbb.ajaxify('a[href*="&bookmark=1"]', false, function(el, res) { + var text = (res.MESSAGE_TEXT.indexOf('Removed') === -1); + text = (text) ? 'Remove from bookmarks' : 'Bookmark topic'; + $(el).text(el.title = text); +}); +phpbb.ajaxify('a[href*="&watch=topic"]', false, function(el, res) { + var text = (res.MESSAGE_TEXT.indexOf('no longer subscribed') === -1); + text = (text) ? 'Unsubscribe topic' : 'Subscribe topic'; + $(el).text(el.title = text); +}); +phpbb.ajaxify('a[href*="watch=forum"]', false, function(el, res) { + var text = (res.MESSAGE_TEXT.indexOf('no longer subscribed') === -1); + text = (text) ? 'Unsubscribe forum' : 'Subscribe forum'; + $(el).text(el.title = text); +}); +phpbb.ajaxify('a[href*="mode=bump"]'); +phpbb.ajaxify('a[href*="mark="]'); //captures topics and forums -- cgit v1.2.1 From c4aaf3ae5a2b0a720227a0eadcb62bea5671056a Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Thu, 14 Jul 2011 17:49:17 +0100 Subject: [feature/ajax] Cleaned up AJAX-related JavaScript. Mostly just added comments, but has cleaned up some actual code too. PHPBB3-10270 --- phpBB/styles/script.js | 25 ++++++++++++++----------- 1 file changed, 14 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index ee67768469..4e0566a9a5 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -1,7 +1,7 @@ var phpbb = {}; /** - * Display a simple alert. + * Display a simple alert similar to JSs native alert(). * * @param string title Title of the message, eg "Information" * @param string msg Message to display. Can be HTML. @@ -54,7 +54,7 @@ phpbb.confirm = function(msg, callback) { } /** - * Clearing up some duplicate code - don't use this. + * Works out what to do with the refresh. Don't use this. */ function handle_refresh(data, refresh, div) { @@ -97,7 +97,6 @@ function handle_refresh(data, refresh, div) */ phpbb.confirm_box = function(condition, refresh, callback) { - __self = this; $(condition).click(function() { var __self = this; $.get(this.href, function(res) { @@ -106,16 +105,13 @@ phpbb.confirm_box = function(condition, refresh, callback) if (del) { var p = res.S_CONFIRM_ACTION.split('?'); - p[1] += '&confirm=Yes'; - $.post(p[0], p[1], function(res) { + $.post(p[0], p[1] + '&confirm=Yes', function(res) { res = JSON.parse(res); var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - if (typeof callback !== 'undefined') { callback(__self); } - handle_refresh(res.REFRESH_DATA, refresh, alert); }); } @@ -127,6 +123,11 @@ phpbb.confirm_box = function(condition, refresh, callback) /** * Makes a link use AJAX instead of loading an entire page. + * + * @param string condition The element to capture. + * @param bool/function refresh If we are sent back a refresh, should it be + * acted upon? This can either be true / false / a function. + * @param function callback Callback. */ phpbb.ajaxify = function(selector, refresh, callback) { $(selector).click(function() { @@ -138,23 +139,25 @@ phpbb.ajaxify = function(selector, refresh, callback) { { callback(__self, res); } - handle_refresh(res.REFRESH_DATA, refresh, alert); }); return false; }); } + +//bind the confirm_boxes var refresh = function(url) { return (url.indexOf('t=') === -1); } -var callback = function(el) { +phpbb.confirm_box('.delete-icon a', refresh, function(el) { var pid = el.href.split('&p=')[1]; $(el).parents('div #p' + pid).remove(); -} -phpbb.confirm_box('.delete-icon a', refresh, callback); +}); phpbb.confirm_box('a[href$="ucp.php?mode=delete_cookies"]', true); + +//AJAXify some links phpbb.ajaxify('a[href*="&bookmark=1"]', false, function(el, res) { var text = (res.MESSAGE_TEXT.indexOf('Removed') === -1); text = (text) ? 'Remove from bookmarks' : 'Bookmark topic'; -- cgit v1.2.1 From 8a28456f759747fc34aaf9a6589102fcace3acb6 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sat, 16 Jul 2011 17:53:22 +0100 Subject: [ticket/10273] AJAXified approve / disapprove posts (in viewtopic). This commit AJAXifies the moderator approval functionality, and adds it to viewtopic instead of the MCP. This commit has involved some language changes, which may affect fallbacks. PHPBB3-10273 --- phpBB/language/en/common.php | 2 +- phpBB/language/en/viewtopic.php | 2 + .../styles/prosilver/template/viewtopic_body.html | 10 ++++- phpBB/styles/prosilver/theme/common.css | 4 ++ phpBB/styles/script.js | 51 ++++++++++++++++++++++ phpBB/viewtopic.php | 1 + 6 files changed, 68 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 94edddc6f5..19b801e585 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -476,7 +476,7 @@ $lang = array_merge($lang, array( 'POST_SUBJECT' => 'Post subject', 'POST_TIME' => 'Post time', 'POST_TOPIC' => 'Post a new topic', - 'POST_UNAPPROVED' => 'This post is waiting for approval', + 'POST_UNAPPROVED' => 'Post awaiting approval:', 'PREVIEW' => 'Preview', 'PREVIOUS' => 'Previous', // Used in pagination 'PREVIOUS_STEP' => 'Previous', diff --git a/phpBB/language/en/viewtopic.php b/phpBB/language/en/viewtopic.php index f47f8a076b..1460490672 100644 --- a/phpBB/language/en/viewtopic.php +++ b/phpBB/language/en/viewtopic.php @@ -35,6 +35,7 @@ if (empty($lang) || !is_array($lang)) // in a url you again do not need to specify an order e.g., 'Click %sHERE%s' is fine $lang = array_merge($lang, array( + 'APPROVE' => 'Approve', 'ATTACHMENT' => 'Attachment', 'ATTACHMENT_FUNCTIONALITY_DISABLED' => 'The attachments feature has been disabled.', @@ -49,6 +50,7 @@ $lang = array_merge($lang, array( 'CODE' => 'Code', 'DELETE_TOPIC' => 'Delete topic', + 'DISAPPROVE' => 'Disapprove', 'DOWNLOAD_NOTICE' => 'You do not have the required permissions to view the files attached to this post.', 'EDITED_TIMES_TOTAL' => array( diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html index 59e464d22e..5571ce07c4 100644 --- a/phpBB/styles/prosilver/template/viewtopic_body.html +++ b/phpBB/styles/prosilver/template/viewtopic_body.html @@ -135,10 +135,18 @@

    {postrow.MINI_POST_IMG}{postrow.MINI_POST_IMG}{L_POST_BY_AUTHOR} {postrow.POST_AUTHOR_FULL} » {postrow.POST_DATE}

    +

    - {UNAPPROVED_IMG} {L_POST_UNAPPROVED}
    + + {UNAPPROVED_IMG} {L_POST_UNAPPROVED}   +   + + + {S_FORM_TOKEN} +
    {REPORTED_IMG} {L_POST_REPORTED}

    +
    {postrow.MESSAGE}
    diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 5cf12be1ce..6b34bb1c3d 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -658,6 +658,10 @@ p.rules { p.rules img { vertical-align: middle; +} + +p.rules strong { + vertical-align: middle; padding-top: 5px; } diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 4e0566a9a5..b5dec2ca0a 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -86,6 +86,18 @@ function handle_refresh(data, refresh, div) } } +function parse_hidden(inputs) +{ + var end = []; + $(inputs).each(function() { + if (this.type === 'hidden') + { + end.push(this.name + '=' + this.value); + } + }); + return end.join('&'); +} + /** * This function interacts via AJAX with phpBBs confirm_box function. @@ -175,3 +187,42 @@ phpbb.ajaxify('a[href*="watch=forum"]', false, function(el, res) { }); phpbb.ajaxify('a[href*="mode=bump"]'); phpbb.ajaxify('a[href*="mark="]'); //captures topics and forums + + + +/** + * Forms have to be captured manually, as they're all different. + */ +$('input[name^="action"]').click(function(e) { + var __self = this; + var path = $(this).parents('form')[0].action.replace('&', '&'); + var action = (this.name === 'action[approve]') ? 'approve' : 'disapprove'; + var data = { + action: action, + post_id_list: [$(this).siblings('input[name="post_id_list[]"]')[0].value] + }; + $.post(path, data, function(res) { + res = JSON.parse(res); + phpbb.confirm(res.MESSAGE_TEXT, function(del) { + if (del) + { + path = res.S_CONFIRM_ACTION; + data = parse_hidden(res.S_HIDDEN_FIELDS); + $.post(path, data + '&confirm=Yes', function(res) { + console.log(res); + res = JSON.parse(res); + var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + + $(__self).parents((action === 'approve') ? '.rules' : '.post').remove(); + + setTimeout(function() { + alert.hide(300, function() { + alert.remove(); + }); + }, 5000); + }); + } + }); + }); + return false; +}); diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 8a95851b7e..1ce80568b6 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -1534,6 +1534,7 @@ for ($i = 0, $end = sizeof($post_list); $i < $end; ++$i) 'U_YIM' => $user_cache[$poster_id]['yim'], 'U_JABBER' => $user_cache[$poster_id]['jabber'], + 'U_APPROVE_ACTION' => append_sid("{$phpbb_root_path}mcp.$phpEx", "i=queue&p={$row['post_id']}&f=$forum_id"), 'U_REPORT' => ($auth->acl_get('f_report', $forum_id)) ? append_sid("{$phpbb_root_path}report.$phpEx", 'f=' . $forum_id . '&p=' . $row['post_id']) : '', 'U_MCP_REPORT' => ($auth->acl_get('m_report', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=reports&mode=report_details&f=' . $forum_id . '&p=' . $row['post_id'], true, $user->session_id) : '', 'U_MCP_APPROVE' => ($auth->acl_get('m_approve', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=queue&mode=approve_details&f=' . $forum_id . '&p=' . $row['post_id'], true, $user->session_id) : '', -- cgit v1.2.1 From 456e56144256f3d14d78b02b397d5f3838f0cfea Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sat, 16 Jul 2011 18:20:04 +0100 Subject: [ticket/10270] Cleaned up code and made popups fade. This commit cleans up some code - mostly, replacing all instances of __self with "that", and also replacing the parse_hidden function with jQuerys built in .serialize. It also adds animations to the popups. PHPBB3-10270 --- phpBB/styles/script.js | 42 +++++++++++++++--------------------------- 1 file changed, 15 insertions(+), 27 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index b5dec2ca0a..17934ed6ae 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -16,14 +16,14 @@ phpbb.alert = function(title, msg) { { return true; } - div.hide(300, function() { + div.animate({opacity: 0}, 300, function() { div.remove(); }); return false; }); $('body').append(div); - div.show(300); + div.css('opacity', 0).show().animate({opacity: 1}, 300); return div; } @@ -43,13 +43,13 @@ phpbb.confirm = function(msg, callback) { $('body').append(div); $('.jalertbut').bind('click', function(event) { - div.hide(300, function() { + div.animate({opacity: 0}, 300, function() { div.remove(); }); callback(this.value === 'Yes'); return false; }); - div.show(300); + div.css('opacity', 0).show().animate({opacity: 1}, 300); return div; } @@ -78,7 +78,7 @@ function handle_refresh(data, refresh, div) else { setTimeout(function() { - div.hide(300, function() { + div.animate({opacity: 0}, 300, function() { div.remove(); }); }, data.time * 1000); @@ -86,18 +86,6 @@ function handle_refresh(data, refresh, div) } } -function parse_hidden(inputs) -{ - var end = []; - $(inputs).each(function() { - if (this.type === 'hidden') - { - end.push(this.name + '=' + this.value); - } - }); - return end.join('&'); -} - /** * This function interacts via AJAX with phpBBs confirm_box function. @@ -110,19 +98,20 @@ function parse_hidden(inputs) phpbb.confirm_box = function(condition, refresh, callback) { $(condition).click(function() { - var __self = this; + var that = this; $.get(this.href, function(res) { res = JSON.parse(res); phpbb.confirm(res.MESSAGE_TEXT, function(del) { if (del) { - var p = res.S_CONFIRM_ACTION.split('?'); - $.post(p[0], p[1] + '&confirm=Yes', function(res) { + var path = res.S_CONFIRM_ACTION; + var data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); + $.post(path, data + '&confirm=Yes', function(res) { res = JSON.parse(res); var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); if (typeof callback !== 'undefined') { - callback(__self); + callback(that); } handle_refresh(res.REFRESH_DATA, refresh, alert); }); @@ -143,13 +132,13 @@ phpbb.confirm_box = function(condition, refresh, callback) */ phpbb.ajaxify = function(selector, refresh, callback) { $(selector).click(function() { - var __self = this; + var that = this; $.get(this.href, function(res) { res = JSON.parse(res); var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); if (typeof callback !== 'undefined') { - callback(__self, res); + callback(that, res); } handle_refresh(res.REFRESH_DATA, refresh, alert); }); @@ -194,7 +183,7 @@ phpbb.ajaxify('a[href*="mark="]'); //captures topics and forums * Forms have to be captured manually, as they're all different. */ $('input[name^="action"]').click(function(e) { - var __self = this; + var that = this; var path = $(this).parents('form')[0].action.replace('&', '&'); var action = (this.name === 'action[approve]') ? 'approve' : 'disapprove'; var data = { @@ -207,13 +196,12 @@ $('input[name^="action"]').click(function(e) { if (del) { path = res.S_CONFIRM_ACTION; - data = parse_hidden(res.S_HIDDEN_FIELDS); + data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); $.post(path, data + '&confirm=Yes', function(res) { - console.log(res); res = JSON.parse(res); var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - $(__self).parents((action === 'approve') ? '.rules' : '.post').remove(); + $(that).parents((action === 'approve') ? '.rules' : '.post').remove(); setTimeout(function() { alert.hide(300, function() { -- cgit v1.2.1 From f42f6f19028fab5b047baae0df5004a43e946a30 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sun, 17 Jul 2011 14:57:13 +0100 Subject: [ticket/10273] Added phpbb.ajaxify_form and converted accept / deny to it. Also made a few minor improvements to other JavaScript. PHPBB3-10273 --- .../styles/prosilver/template/viewtopic_body.html | 4 +- phpBB/styles/script.js | 125 +++++++++++++-------- 2 files changed, 80 insertions(+), 49 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html index 5571ce07c4..856ee6962c 100644 --- a/phpBB/styles/prosilver/template/viewtopic_body.html +++ b/phpBB/styles/prosilver/template/viewtopic_body.html @@ -139,8 +139,8 @@

    {UNAPPROVED_IMG} {L_POST_UNAPPROVED}   -   - +   + {S_FORM_TOKEN}
    diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 17934ed6ae..5d9b89e386 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -1,3 +1,26 @@ +/** + * Make some changes to the jQuery core. + */ +$.fn.hide = function() { + this.animate({opacity: 0}, 300, function() { + $(this).css('display', 'none') + .css('opacity', 1); + }); +} +$.fn.show = function() { + this.css('opacity', 0) + .css('display', 'block') + .animate({opacity: 1}, 300); +} + +$.fn.remove_old = $.fn.remove; +$.fn.remove = function() { + this.animate({opacity: 0}, 300, function() { + $(this).remove_old(); + }); +} + + var phpbb = {}; /** @@ -16,14 +39,12 @@ phpbb.alert = function(title, msg) { { return true; } - div.animate({opacity: 0}, 300, function() { - div.remove(); - }); + div.remove(); return false; }); $('body').append(div); - div.css('opacity', 0).show().animate({opacity: 1}, 300); + div.show(); return div; } @@ -37,19 +58,17 @@ phpbb.alert = function(title, msg) { */ phpbb.confirm = function(msg, callback) { var div = $('

    ' + msg + '

    \ -  \ -
    '); +  \ +
    '); $('body').append(div); $('.jalertbut').bind('click', function(event) { - div.animate({opacity: 0}, 300, function() { - div.remove(); - }); + div.remove(); callback(this.value === 'Yes'); return false; }); - div.css('opacity', 0).show().animate({opacity: 1}, 300); + div.show(); return div; } @@ -101,12 +120,13 @@ phpbb.confirm_box = function(condition, refresh, callback) var that = this; $.get(this.href, function(res) { res = JSON.parse(res); + console.log(res); phpbb.confirm(res.MESSAGE_TEXT, function(del) { if (del) { var path = res.S_CONFIRM_ACTION; var data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); - $.post(path, data + '&confirm=Yes', function(res) { + $.post(path, data + '&confirm=' + res.YES_VALUE, function(res) { res = JSON.parse(res); var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); if (typeof callback !== 'undefined') @@ -135,6 +155,7 @@ phpbb.ajaxify = function(selector, refresh, callback) { var that = this; $.get(this.href, function(res) { res = JSON.parse(res); + console.log(res); var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); if (typeof callback !== 'undefined') { @@ -146,6 +167,50 @@ phpbb.ajaxify = function(selector, refresh, callback) { }); } +/** + * AJAXifies a form. This will automatically get the action from the submit. + * + * @param string condition The element to capture. + * @param bool/function refresh If we are sent back a refresh, should it be + * acted upon? This can either be true / false / a function. + * @param function callback Callback. + */ +phpbb.ajaxify_form = function(selector, refresh, callback) +{ + $(selector + ' input:submit').click(function(e) { + var act = /action\[([a-z]+)\]/.exec(this.name), + data = decodeURI($(this).closest('form').serialize()), + path = $(this).closest('form').attr('action').replace('&', '&'), + that = this; + + if (act) + { + data += '&action=' + act[1]; + } + + $.post(path, data, function(res) { + res = JSON.parse(res); + phpbb.confirm(res.MESSAGE_TEXT, function(del) { + if (del) + { + path = res.S_CONFIRM_ACTION; + data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); + $.post(path, data + '&confirm=' + res.YES_VALUE, function(res) { + res = JSON.parse(res); + var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + if (typeof callback !== 'undefined') + { + callback(that, act[1]); + } + handle_refresh(res.REFRESH_DATA, refresh, alert); + }); + } + }); + }); + return false; + }); +} + //bind the confirm_boxes var refresh = function(url) { @@ -177,40 +242,6 @@ phpbb.ajaxify('a[href*="watch=forum"]', false, function(el, res) { phpbb.ajaxify('a[href*="mode=bump"]'); phpbb.ajaxify('a[href*="mark="]'); //captures topics and forums - - -/** - * Forms have to be captured manually, as they're all different. - */ -$('input[name^="action"]').click(function(e) { - var that = this; - var path = $(this).parents('form')[0].action.replace('&', '&'); - var action = (this.name === 'action[approve]') ? 'approve' : 'disapprove'; - var data = { - action: action, - post_id_list: [$(this).siblings('input[name="post_id_list[]"]')[0].value] - }; - $.post(path, data, function(res) { - res = JSON.parse(res); - phpbb.confirm(res.MESSAGE_TEXT, function(del) { - if (del) - { - path = res.S_CONFIRM_ACTION; - data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); - $.post(path, data + '&confirm=Yes', function(res) { - res = JSON.parse(res); - var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - - $(that).parents((action === 'approve') ? '.rules' : '.post').remove(); - - setTimeout(function() { - alert.hide(300, function() { - alert.remove(); - }); - }, 5000); - }); - } - }); - }); - return false; +phpbb.ajaxify_form('.mcp_approve', false, function(el, act) { + $(el).parents((act === 'approve') ? '.rules' : '.post').remove(); }); -- cgit v1.2.1 From fbad17f91202236d3b4ed5c1dacb844aaf2ddbff Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sun, 17 Jul 2011 15:27:58 +0100 Subject: [feature/ajax] Reduced duplicate code by merging all AJAX function into one. This commit merges phpbb.confirm_box, phpbb.ajaxify and phpbb.ajaxify_form into one function which automatically detects what is happening and calls the correct code accordingly. This has removed a lot of duplicate code and generally made the code cleaner. PHPBB3-10270 --- phpBB/styles/script.js | 202 ++++++++++++++++++++----------------------------- 1 file changed, 84 insertions(+), 118 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 5d9b89e386..e893b84bf8 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -75,72 +75,7 @@ phpbb.confirm = function(msg, callback) { /** * Works out what to do with the refresh. Don't use this. */ -function handle_refresh(data, refresh, div) -{ - if (data) - { - if (typeof refresh === 'function') - { - refresh = refresh(data.url) - } - else if (typeof refresh !== 'boolean') - { - refresh = false; - } - if (refresh) - { - setTimeout(function() { - window.location = data.url; - }, data.time * 1000); - } - else - { - setTimeout(function() { - div.animate({opacity: 0}, 300, function() { - div.remove(); - }); - }, data.time * 1000); - } - } -} - - -/** - * This function interacts via AJAX with phpBBs confirm_box function. - * - * @param string condition The element to capture. - * @param bool/function refresh If we are sent back a refresh, should it be - * acted upon? This can either be true / false / a function. - * @param function callback Callback. - */ -phpbb.confirm_box = function(condition, refresh, callback) -{ - $(condition).click(function() { - var that = this; - $.get(this.href, function(res) { - res = JSON.parse(res); - console.log(res); - phpbb.confirm(res.MESSAGE_TEXT, function(del) { - if (del) - { - var path = res.S_CONFIRM_ACTION; - var data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); - $.post(path, data + '&confirm=' + res.YES_VALUE, function(res) { - res = JSON.parse(res); - var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - if (typeof callback !== 'undefined') - { - callback(that); - } - handle_refresh(res.REFRESH_DATA, refresh, alert); - }); - } - }); - }); - return false; - }); -} /** * Makes a link use AJAX instead of loading an entire page. @@ -151,62 +86,92 @@ phpbb.confirm_box = function(condition, refresh, callback) * @param function callback Callback. */ phpbb.ajaxify = function(selector, refresh, callback) { - $(selector).click(function() { - var that = this; - $.get(this.href, function(res) { - res = JSON.parse(res); - console.log(res); - var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - if (typeof callback !== 'undefined') - { - callback(that, res); - } - handle_refresh(res.REFRESH_DATA, refresh, alert); - }); - return false; - }); -} -/** - * AJAXifies a form. This will automatically get the action from the submit. - * - * @param string condition The element to capture. - * @param bool/function refresh If we are sent back a refresh, should it be - * acted upon? This can either be true / false / a function. - * @param function callback Callback. - */ -phpbb.ajaxify_form = function(selector, refresh, callback) -{ - $(selector + ' input:submit').click(function(e) { - var act = /action\[([a-z]+)\]/.exec(this.name), - data = decodeURI($(this).closest('form').serialize()), - path = $(this).closest('form').attr('action').replace('&', '&'), - that = this; - - if (act) + //private function to handle refreshes + function handle_refresh(data, refresh, div) + { + if (!data) { - data += '&action=' + act[1]; + return; } - $.post(path, data, function(res) { + refresh = ((typeof refresh === 'function') ? refresh(data.url) : + (typeof refresh === 'boolean') && refresh); + + setTimeout(function() { + if (refresh) + { + window.location = data.url; + } + else + { + div.remove(); + } + }, data.time * 1000); + } + + var is_form = $(selector).is('form'); + $(selector + ((is_form) ? ' input:submit' : '')).click(function() { + var act, data, path, that = this; + function return_handler(res) + { res = JSON.parse(res); - phpbb.confirm(res.MESSAGE_TEXT, function(del) { - if (del) + + if (typeof res.S_CONFIRM_ACTION === 'undefined') + { + /** + * It is a standard link, no confirm_box required. + */ + var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + if (typeof callback !== 'undefined') { - path = res.S_CONFIRM_ACTION; - data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); - $.post(path, data + '&confirm=' + res.YES_VALUE, function(res) { - res = JSON.parse(res); - var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - if (typeof callback !== 'undefined') - { - callback(that, act[1]); - } - handle_refresh(res.REFRESH_DATA, refresh, alert); - }); + callback(that, res); } - }); - }); + handle_refresh(res.REFRESH_DATA, refresh, alert); + } + else + { + /** + * confirm_box - confirm with the user and send back + */ + phpbb.confirm(res.MESSAGE_TEXT, function(del) { + if (del) + { + data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); + path = res.S_CONFIRM_ACTION; + $.post(path, data + '&confirm=' + res.YES_VALUE, function(res) { + res = JSON.parse(res); + var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + if (typeof callback !== 'undefined') + { + callback(that, (is_form) ? act : null); + } + handle_refresh(res.REFRESH_DATA, refresh, alert); + }); + } + }); + } + } + + if (is_form) + { + act = /action\[([a-z]+)\]/.exec(this.name); + data = decodeURI($(this).closest('form').serialize()); + path = $(this).closest('form').attr('action').replace('&', '&'); + + if (act) + { + act = act[1] + data += '&action=' + act; + } + + $.post(path, data, return_handler); + } + else + { + $.get(this.href, return_handler); + } + return false; }); } @@ -216,20 +181,21 @@ phpbb.ajaxify_form = function(selector, refresh, callback) var refresh = function(url) { return (url.indexOf('t=') === -1); } -phpbb.confirm_box('.delete-icon a', refresh, function(el) { +phpbb.ajaxify('.delete-icon a', refresh, function(el) { var pid = el.href.split('&p=')[1]; $(el).parents('div #p' + pid).remove(); }); -phpbb.confirm_box('a[href$="ucp.php?mode=delete_cookies"]', true); +phpbb.ajaxify('a[href$="ucp.php?mode=delete_cookies"]', true); //AJAXify some links phpbb.ajaxify('a[href*="&bookmark=1"]', false, function(el, res) { + console.log(res); var text = (res.MESSAGE_TEXT.indexOf('Removed') === -1); text = (text) ? 'Remove from bookmarks' : 'Bookmark topic'; $(el).text(el.title = text); }); -phpbb.ajaxify('a[href*="&watch=topic"]', false, function(el, res) { +phpbb.ajaxify('a[href*="watch=topic"]', false, function(el, res) { var text = (res.MESSAGE_TEXT.indexOf('no longer subscribed') === -1); text = (text) ? 'Unsubscribe topic' : 'Subscribe topic'; $(el).text(el.title = text); @@ -242,6 +208,6 @@ phpbb.ajaxify('a[href*="watch=forum"]', false, function(el, res) { phpbb.ajaxify('a[href*="mode=bump"]'); phpbb.ajaxify('a[href*="mark="]'); //captures topics and forums -phpbb.ajaxify_form('.mcp_approve', false, function(el, act) { +phpbb.ajaxify('.mcp_approve', false, function(el, act) { $(el).parents((act === 'approve') ? '.rules' : '.post').remove(); }); -- cgit v1.2.1 From ac1b32c30772cd722c77694af83cb14b4581675f Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sun, 17 Jul 2011 15:36:54 +0100 Subject: [ticket/10270] Changed function names of jQuery modifications. The code was modifying the jQuery code before, now the functions have been renamed to unused function names. PHPBB3-10270 --- phpBB/styles/script.js | 24 +++++++++++------------- 1 file changed, 11 insertions(+), 13 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index e893b84bf8..959a41a643 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -1,22 +1,21 @@ /** * Make some changes to the jQuery core. */ -$.fn.hide = function() { +$.fn.hide_anim = function() { this.animate({opacity: 0}, 300, function() { $(this).css('display', 'none') .css('opacity', 1); }); } -$.fn.show = function() { +$.fn.show_anim = function() { this.css('opacity', 0) .css('display', 'block') .animate({opacity: 1}, 300); } -$.fn.remove_old = $.fn.remove; -$.fn.remove = function() { +$.fn.remove_anim = function() { this.animate({opacity: 0}, 300, function() { - $(this).remove_old(); + $(this).remove(); }); } @@ -39,12 +38,12 @@ phpbb.alert = function(title, msg) { { return true; } - div.remove(); + div.remove_anim(); return false; }); $('body').append(div); - div.show(); + div.show_anim(); return div; } @@ -64,11 +63,11 @@ phpbb.confirm = function(msg, callback) { $('body').append(div); $('.jalertbut').bind('click', function(event) { - div.remove(); + div.remove_anim(); callback(this.value === 'Yes'); return false; }); - div.show(); + div.show_anim(); return div; } @@ -105,7 +104,7 @@ phpbb.ajaxify = function(selector, refresh, callback) { } else { - div.remove(); + div.remove_anim(); } }, data.time * 1000); } @@ -183,14 +182,13 @@ var refresh = function(url) { } phpbb.ajaxify('.delete-icon a', refresh, function(el) { var pid = el.href.split('&p=')[1]; - $(el).parents('div #p' + pid).remove(); + $(el).parents('div #p' + pid).remove_anim(); }); phpbb.ajaxify('a[href$="ucp.php?mode=delete_cookies"]', true); //AJAXify some links phpbb.ajaxify('a[href*="&bookmark=1"]', false, function(el, res) { - console.log(res); var text = (res.MESSAGE_TEXT.indexOf('Removed') === -1); text = (text) ? 'Remove from bookmarks' : 'Bookmark topic'; $(el).text(el.title = text); @@ -209,5 +207,5 @@ phpbb.ajaxify('a[href*="mode=bump"]'); phpbb.ajaxify('a[href*="mark="]'); //captures topics and forums phpbb.ajaxify('.mcp_approve', false, function(el, act) { - $(el).parents((act === 'approve') ? '.rules' : '.post').remove(); + $(el).parents((act === 'approve') ? '.rules' : '.post').remove_anim(); }); -- cgit v1.2.1 From 2f2ec1096b6288c032e276c75c849bb1cc820674 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sun, 17 Jul 2011 15:56:27 +0100 Subject: [ticket/10272] Made some jQuery selectors more specific to avoid conflicts. Before, a link to any URL with, say, "mode=bump" in the title would have been prevented from acting normally. PHPBB3-10272 --- phpBB/styles/script.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 959a41a643..32b12bdd34 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -184,27 +184,27 @@ phpbb.ajaxify('.delete-icon a', refresh, function(el) { var pid = el.href.split('&p=')[1]; $(el).parents('div #p' + pid).remove_anim(); }); -phpbb.ajaxify('a[href$="ucp.php?mode=delete_cookies"]', true); +phpbb.ajaxify('#page-footer a[href$="ucp.php?mode=delete_cookies"]', true); //AJAXify some links -phpbb.ajaxify('a[href*="&bookmark=1"]', false, function(el, res) { +phpbb.ajaxify('#page-footer a[href*="&bookmark=1"]', false, function(el, res) { var text = (res.MESSAGE_TEXT.indexOf('Removed') === -1); text = (text) ? 'Remove from bookmarks' : 'Bookmark topic'; $(el).text(el.title = text); }); -phpbb.ajaxify('a[href*="watch=topic"]', false, function(el, res) { +phpbb.ajaxify('#page-footer a[href*="watch=topic"]', false, function(el, res) { var text = (res.MESSAGE_TEXT.indexOf('no longer subscribed') === -1); text = (text) ? 'Unsubscribe topic' : 'Subscribe topic'; $(el).text(el.title = text); }); -phpbb.ajaxify('a[href*="watch=forum"]', false, function(el, res) { +phpbb.ajaxify('#page-footer a[href*="watch=forum"]', false, function(el, res) { var text = (res.MESSAGE_TEXT.indexOf('no longer subscribed') === -1); text = (text) ? 'Unsubscribe forum' : 'Subscribe forum'; $(el).text(el.title = text); }); -phpbb.ajaxify('a[href*="mode=bump"]'); -phpbb.ajaxify('a[href*="mark="]'); //captures topics and forums +phpbb.ajaxify('#page-footer a[href*="mode=bump"]'); +phpbb.ajaxify('.rightside a[href*="mark="]'); //captures topics and forums phpbb.ajaxify('.mcp_approve', false, function(el, act) { $(el).parents((act === 'approve') ? '.rules' : '.post').remove_anim(); -- cgit v1.2.1 From 8fd86717e1320cb3160515fe786869c80e6771f9 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 20 Jul 2011 18:28:14 +0100 Subject: [ticket/10271] Added ability for exceptions to phpbb.ajaxify. Also made it easy for additional options to be added in the future. PHPBB3-10271 --- phpBB/styles/prosilver/template/viewtopic_body.html | 2 +- phpBB/styles/script.js | 17 +++++++++++++++-- 2 files changed, 16 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html index 856ee6962c..9e333cf5ec 100644 --- a/phpBB/styles/prosilver/template/viewtopic_body.html +++ b/phpBB/styles/prosilver/template/viewtopic_body.html @@ -263,7 +263,7 @@ -
    +
      -   +  
    diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index b73c392312..889db70f98 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -103,6 +103,11 @@ phpbb.ajaxify = function(options, refresh, callback) { $(selector).click(function() { var act, data, path, that = this; + if ($(this).data('ajax') == false) + { + return true; + } + function return_handler(res) { res = JSON.parse(res); @@ -157,7 +162,11 @@ phpbb.ajaxify = function(options, refresh, callback) { act = act[1] data += '&action=' + act; } - + else + { + data += '&' + this.name + '=' + this.value; + } + if (run_exception && options.exception($(this).parents('form'), act, data)) { return true; @@ -213,6 +222,10 @@ phpbb.add_ajax_callback('post_delete', function(el) { $(el).parents((act === 'approve') ? '.rules' : '.post').fadeOut(function() { $(this).remove(); }); +}).add_ajax_callback('qr-submit', function(el) { + $(el).parents('form').fadeOut(function() { + $(this).remove(); + }); }); -- cgit v1.2.1 From 7ccc18297af17dbc66fc5a28710af6970a17fb6e Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Mon, 25 Jul 2011 20:42:29 +0100 Subject: [ticket/10270] Makes page fade to dark on popup, and added $.querystring. PHPBB3-10270 --- phpBB/styles/prosilver/theme/common.css | 16 +++- phpBB/styles/script.js | 139 +++++++++++++++++++++++++++----- 2 files changed, 133 insertions(+), 22 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 6b34bb1c3d..a3d2c5660e 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -593,8 +593,8 @@ li.pagination { .jalert { background-color: #FFFFFF; border: 1px solid #999999; - display: none; position: fixed; + display: none; top: 100px; left: 35%; width: 30%; @@ -608,6 +608,20 @@ li.pagination { padding-bottom: 8px; } +#darkenwrapper { + display: none; +} + +#darken { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: #000000; + opacity: 0.5; +} + /* Miscellaneous styles ---------------------------------------- */ #forum-permissions { diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 889db70f98..0b2d372db7 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -1,5 +1,47 @@ +$.querystring = function(string) { + var end = {}, i; + + string = string.split('&'); + for (i = 0; i < string.length; i++) + { + end[string[i].split('=')[0]] = decodeURIComponent(string[i].split('=')[1]); + } + return end; +} + + var phpbb = {}; +var dark = $('
     
    '); +$('body').append(dark); + +var loading_alert = $('

    Loading

    Please wait.

    '); +$(dark).append(loading_alert); + + +/** + * Display a loading screen. + */ +phpbb.loading_alert = function() { + if (dark.is(':visible')) + { + loading_alert.fadeIn(); + } + else + { + loading_alert.show(); + dark.fadeIn(); + } + + setTimeout(function() { + if (loading_alert.is(':visible')) + { + phpbb.alert('Error', 'Error processing your request. Please try again.'); + } + }, 3000); + return loading_alert; +} + /** * Display a simple alert similar to JSs native alert(). * @@ -8,22 +50,48 @@ var phpbb = {}; * * @return Returns the div created. */ -phpbb.alert = function(title, msg) { +phpbb.alert = function(title, msg, fadedark) { var div = $('

    ' + title + '

    ' + msg + '

    '); - $(document).one('click', function(e) { - if ($(e.target).parents('.jalert').length) + $(div).bind('click', function(e) { + e.stopPropagation(); + return true; + }); + $(dark).one('click', function(e) { + if (typeof fadedark === 'undefined' || fadedark) { - return true; + dark.fadeOut(function() { + div.remove(); + }); + } + else + { + div.fadeOut(function() { + div.remove(); + }); } - div.fadeOut(function() { - div.remove(); - }); return false; }); - $('body').append(div); - div.fadeIn(); + if (loading_alert.is(':visible')) + { + loading_alert.fadeOut(function() { + $(dark).append(div); + div.fadeIn(); + }); + } + else if (dark.is(':visible')) + { + $(dark).append(div); + div.fadeIn(); + } + else + { + $(dark).append(div); + div.show(); + dark.fadeIn(); + } + return div; } @@ -35,21 +103,47 @@ phpbb.alert = function(title, msg) { * * @return Returns the div created. */ -phpbb.confirm = function(msg, callback) { +phpbb.confirm = function(msg, callback, fadedark) { var div = $('

    ' + msg + '

    \  \
    '); - - $('body').append(div); - - $('.jalertbut').bind('click', function(event) { - div.fadeOut(function() { - div.remove(); - }); + + div.find('.jalertbut').bind('click', function() { + if (typeof fadedark === 'undefined' || fadedark) + { + dark.fadeOut(function() { + div.remove(); + }); + } + else + { + div.fadeOut(function() { + div.remove(); + }); + } callback(this.value === 'Yes'); return false; }); - div.fadeIn(); + + if (loading_alert.is(':visible')) + { + loading_alert.fadeOut(function() { + $(dark).append(div); + div.fadeIn(); + }); + } + else if (dark.is(':visible')) + { + $(dark).append(div); + div.fadeIn(); + } + else + { + $(dark).append(div); + div.show(); + dark.fadeIn(); + } + return div; } @@ -82,7 +176,7 @@ phpbb.ajaxify = function(options, refresh, callback) { } else { - div.fadeOut(function() { + dark.fadeOut(function() { div.remove(); }); } @@ -135,6 +229,7 @@ phpbb.ajaxify = function(options, refresh, callback) { { data = $('' + res.S_HIDDEN_FIELDS + '').serialize(); path = res.S_CONFIRM_ACTION; + phpbb.loading_alert(); $.post(path, data + '&confirm=' + res.YES_VALUE, function(res) { res = JSON.parse(res); var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); @@ -146,7 +241,7 @@ phpbb.ajaxify = function(options, refresh, callback) { handle_refresh(res.REFRESH_DATA, refresh, alert); }); } - }); + }, false); } } @@ -171,6 +266,7 @@ phpbb.ajaxify = function(options, refresh, callback) { { return true; } + phpbb.loading_alert(); $.post(path, data, return_handler); } else @@ -179,6 +275,7 @@ phpbb.ajaxify = function(options, refresh, callback) { { return true; } + phpbb.loading_alert(); $.get(this.href, return_handler); } @@ -240,7 +337,7 @@ $('[data-ajax]').each(function() { phpbb.ajaxify({ selector: '#quickmodform', exception: function(el, act, data) { - var d = data.split('=')[1]; + var d = $.querystring(data).action; if (d == 'make_normal') { return !(el.find('select option[value="make_global"]').length); -- cgit v1.2.1 From 149daa0e4fbe5bf59a613caf850ecda083cc772a Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Tue, 26 Jul 2011 11:46:49 +0100 Subject: [feature/ajax] Added code to avoid conflicts with other libraries using $ PHPBB3-10270 --- phpBB/styles/script.js | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 0b2d372db7..66e99a6a63 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -1,3 +1,6 @@ +;(function($) { //avoid conflicts with other libraries + + $.querystring = function(string) { var end = {}, i; @@ -345,3 +348,6 @@ phpbb.ajaxify({ return !(d == 'lock' || d == 'unlock' || d == 'delete_topic' || d.slice(0, 5) == 'make_'); } }, true); + + +})(jQuery); //avoid conflicts with other libraries -- cgit v1.2.1 From e4ea4d1c579477389349a06190643391ea8740fc Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Tue, 26 Jul 2011 12:13:09 +0100 Subject: [ticket/10270] Fixed a bug where fadedark wouldn't go. If the confirm box was submitted as yes, then the fadedark would stay until it was clicked. This commit fixes that. PHPBB3-10270 --- phpBB/styles/script.js | 42 ++++++++++++++++-------------------------- 1 file changed, 16 insertions(+), 26 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 66e99a6a63..8c7324e39a 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -50,6 +50,8 @@ phpbb.loading_alert = function() { * * @param string title Title of the message, eg "Information" * @param string msg Message to display. Can be HTML. + * @param bool fadedark Remove the dark background when done? Defaults + * to yes. * * @return Returns the div created. */ @@ -61,18 +63,10 @@ phpbb.alert = function(title, msg, fadedark) { return true; }); $(dark).one('click', function(e) { - if (typeof fadedark === 'undefined' || fadedark) - { - dark.fadeOut(function() { - div.remove(); - }); - } - else - { - div.fadeOut(function() { - div.remove(); - }); - } + var fade = (typeof fadedark !== 'undefined' && !fadedark) ? div : dark; + fade.fadeOut(function() { + div.remove(); + }); return false; }); @@ -102,7 +96,10 @@ phpbb.alert = function(title, msg, fadedark) { * Display a simple yes / no box to the user. * * @param string msg Message to display. Can be HTML. - * @param function callback Callback. + * @param function callback Callback. Bool param, whether the user pressed + * yes or no (or whatever their language is). + * @param bool fadedark Remove the dark background when done? Defaults + * to yes. * * @return Returns the div created. */ @@ -112,19 +109,12 @@ phpbb.confirm = function(msg, callback, fadedark) { '); div.find('.jalertbut').bind('click', function() { - if (typeof fadedark === 'undefined' || fadedark) - { - dark.fadeOut(function() { - div.remove(); - }); - } - else - { - div.fadeOut(function() { - div.remove(); - }); - } - callback(this.value === 'Yes'); + var res = this.value === 'Yes'; + var fade = (typeof fadedark !== 'undefined' && !fadedark && res) ? div : dark; + fade.fadeOut(function() { + div.remove(); + }); + callback(res); return false; }); -- cgit v1.2.1 From 22c6953c116e24cbe278f0fe63aabaf950c843e3 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Tue, 26 Jul 2011 16:25:04 +0100 Subject: [feature/ajax] Fixed a small bug in the JavaScript. The bug meant that code outside of the function that ran on document ready would not be able to access the phpbb object. PHPBB3-10270 --- phpBB/styles/script.js | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 8c7324e39a..72e3c59e75 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -1,4 +1,6 @@ -;(function($) { //avoid conflicts with other libraries +var phpbb = {}; + +(function($) { //avoid conflicts with other libraries $.querystring = function(string) { @@ -13,8 +15,6 @@ $.querystring = function(string) { } -var phpbb = {}; - var dark = $('
     
    '); $('body').append(dark); -- cgit v1.2.1 From bb7a03f738c97dc225873691c459f2bf9e612ef6 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 27 Jul 2011 12:57:58 +0100 Subject: [ticket/10281] AJAXified reordering forums in the ACP. PHPBB3-10281 --- phpBB/adm/style/acp_forums.html | 18 +++++++++--------- phpBB/adm/style/overall_footer.html | 4 ++++ phpBB/includes/acp/acp_forums.php | 6 ++++++ phpBB/styles/script.js | 30 ++++++++++++++++++++++++++++++ 4 files changed, 49 insertions(+), 9 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_forums.html b/phpBB/adm/style/acp_forums.html index 447c0ce466..b2b3ad6d40 100644 --- a/phpBB/adm/style/acp_forums.html +++ b/phpBB/adm/style/acp_forums.html @@ -443,7 +443,7 @@ - + {forums.FOLDER_IMAGE}
    {forums.FORUM_IMAGE}
    @@ -453,17 +453,17 @@ - {ICON_MOVE_UP_DISABLED} - {ICON_MOVE_DOWN} + {ICON_MOVE_UP_DISABLED} + {ICON_MOVE_DOWN} - {ICON_MOVE_UP} - {ICON_MOVE_DOWN} + {ICON_MOVE_UP} + {ICON_MOVE_DOWN} - {ICON_MOVE_UP} - {ICON_MOVE_DOWN_DISABLED} + {ICON_MOVE_UP} + {ICON_MOVE_DOWN_DISABLED} - {ICON_MOVE_UP_DISABLED} - {ICON_MOVE_DOWN_DISABLED} + {ICON_MOVE_UP_DISABLED} + {ICON_MOVE_DOWN_DISABLED} {ICON_EDIT} diff --git a/phpBB/adm/style/overall_footer.html b/phpBB/adm/style/overall_footer.html index f05e9c56c5..3740122d9b 100644 --- a/phpBB/adm/style/overall_footer.html +++ b/phpBB/adm/style/overall_footer.html @@ -17,6 +17,10 @@
    {DEBUG_OUTPUT} + + + + diff --git a/phpBB/includes/acp/acp_forums.php b/phpBB/includes/acp/acp_forums.php index fad22fc285..d3e2dbd904 100644 --- a/phpBB/includes/acp/acp_forums.php +++ b/phpBB/includes/acp/acp_forums.php @@ -255,6 +255,12 @@ class acp_forums add_log('admin', 'LOG_FORUM_' . strtoupper($action), $row['forum_name'], $move_forum_name); $cache->destroy('sql', FORUMS_TABLE); } + + if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') + { + echo json_encode(array('success' => ($move_forum_name !== false))); + exit; + } break; diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 72e3c59e75..35c99464bd 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -316,6 +316,36 @@ phpbb.add_ajax_callback('post_delete', function(el) { $(el).parents('form').fadeOut(function() { $(this).remove(); }); +}).add_ajax_callback('forum_down', function(el) { + var tr = $(el).parents('tr'); + if (tr.is(':first-child')) + { + $(el).parents('span').siblings('.up').html('Move up'); + tr.next().find('.up').html('Move up'); + phpbb.ajaxify({selector: $(el).parents('span').siblings('.up').children('a')}, false, 'forum_up'); + } + tr.insertAfter(tr.next()); + if (tr.is(':last-child')) + { + $(el).html('Move down'); + tr.prev().find('.down').html('Move down'); + phpbb.ajaxify({selector: tr.prev().find('.down').children('a')}, false, 'forum_down'); + } +}).add_ajax_callback('forum_up', function(el) { + var tr = $(el).parents('tr'); + if (tr.is(':last-child')) + { + $(el).parents('span').siblings('.down').html('Move down'); + tr.prev().find('.down').html('Move down'); + phpbb.ajaxify({selector: $(el).parents('span').siblings('.down').children('a')}, false, 'forum_down'); + } + tr.insertBefore(tr.prev()); + if (tr.is(':first-child')) + { + $(el).html('Move up'); + tr.next().find('.up').html('Move up'); + phpbb.ajaxify({selector: tr.next().find('.up').children('a')}, false, 'forum_up'); + } }); -- cgit v1.2.1 From 59031fdc735a80502ea2cda3683a9276da5649cd Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Thu, 18 Aug 2011 18:34:09 +0100 Subject: [ticket/10272] AJAXified the add / remove friend / foe links. PHPBB3-10272 --- phpBB/styles/prosilver/template/memberlist_view.html | 8 ++++---- phpBB/styles/script.js | 7 ++++++- 2 files changed, 10 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/memberlist_view.html b/phpBB/styles/prosilver/template/memberlist_view.html index f10ec64975..d8bb92a731 100644 --- a/phpBB/styles/prosilver/template/memberlist_view.html +++ b/phpBB/styles/prosilver/template/memberlist_view.html @@ -35,15 +35,15 @@
    {custom_fields.PROFILE_FIELD_NAME}:
    {custom_fields.PROFILE_FIELD_VALUE}
    -
     
    {L_REMOVE_FRIEND}
    +
     
    {L_REMOVE_FRIEND}
    -
     
    {L_REMOVE_FOE}
    +
     
    {L_REMOVE_FOE}
    -
     
    {L_ADD_FRIEND}
    +
     
    {L_ADD_FRIEND}
    -
     
    {L_ADD_FOE}
    +
     
    {L_ADD_FOE}
    diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 35c99464bd..d17a2cdc10 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -346,7 +346,12 @@ phpbb.add_ajax_callback('post_delete', function(el) { tr.next().find('.up').html('Move up'); phpbb.ajaxify({selector: tr.next().find('.up').children('a')}, false, 'forum_up'); } -}); +}).add_ajax_callback('zebra', function(el, res) { + if (res.MESSAGE_TEXT.indexOf('successfully') !== -1) { + $('.zebra').html(res.MESSAGE_TEXT.split(' Date: Thu, 18 Aug 2011 19:02:18 +0100 Subject: [ticket/10270] Added keyboard shortcuts to confirm and alert boxes. PHPBB3-10270 --- phpBB/styles/script.js | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index d17a2cdc10..54248cc31c 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -69,6 +69,14 @@ phpbb.alert = function(title, msg, fadedark) { }); return false; }); + + $(document).bind('keydown', function(e) { + if (e.keyCode === 13 || e.keyCode === 27) { + $(dark).trigger('click'); + return false; + } + return true; + }); if (loading_alert.is(':visible')) { @@ -118,6 +126,17 @@ phpbb.confirm = function(msg, callback, fadedark) { return false; }); + $(document).bind('keydown', function(e) { + if (e.keyCode === 13) { + $('.jalertbut.button1').trigger('click'); + return false; + } else if (e.keyCode === 27) { + $('.jalertbut.button2').trigger('click'); + return false; + } + return true; + }); + if (loading_alert.is(':visible')) { loading_alert.fadeOut(function() { -- cgit v1.2.1 From 94172b54dd09b28e19b4b12933b3f96e498d264a Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Fri, 19 Aug 2011 09:38:57 +0100 Subject: [ticket/10271] Changed AJAX functions to $request->is_ajax(). PHPBB3-10271 --- phpBB/includes/acp/acp_forums.php | 4 ++-- phpBB/includes/functions.php | 12 ++++++------ 2 files changed, 8 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_forums.php b/phpBB/includes/acp/acp_forums.php index d3e2dbd904..cb410e361a 100644 --- a/phpBB/includes/acp/acp_forums.php +++ b/phpBB/includes/acp/acp_forums.php @@ -25,7 +25,7 @@ class acp_forums function main($id, $mode) { - global $db, $user, $auth, $template, $cache; + global $db, $user, $auth, $template, $cache, $request; global $config, $phpbb_admin_path, $phpbb_root_path, $phpEx; $user->add_lang('acp/forums'); @@ -256,7 +256,7 @@ class acp_forums $cache->destroy('sql', FORUMS_TABLE); } - if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') + if ($request->is_ajax()) { echo json_encode(array('success' => ($move_forum_name !== false))); exit; diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 572986bb4b..b126fcc709 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -2448,9 +2448,9 @@ function build_url($strip_vars = false) */ function meta_refresh($time, $url, $disable_cd_check = false) { - global $template, $refresh_data; + global $template, $refresh_data, $request; - if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') + if ($request->is_ajax()) { $refresh_data = array( 'time' => $time, @@ -2629,7 +2629,7 @@ function check_form_key($form_name, $timespan = false, $return_page = '', $trigg */ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_body.html', $u_action = '') { - global $user, $template, $db; + global $user, $template, $db, $request; global $phpEx, $phpbb_root_path, $request; if (isset($_POST['cancel'])) @@ -2710,7 +2710,7 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo $db->sql_query($sql); - if (isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') + if ($request->is_ajax()) { $u_action .= '&confirm_uid=' . $user->data['user_id'] . '&sess=' . $user->session_id . '&sid=' . $user->session_id; echo json_encode(array( @@ -3748,7 +3748,7 @@ function phpbb_checkdnsrr($host, $type = 'MX') */ function msg_handler($errno, $msg_text, $errfile, $errline) { - global $cache, $db, $auth, $template, $config, $user; + global $cache, $db, $auth, $template, $config, $user, $request; global $phpEx, $phpbb_root_path, $msg_title, $msg_long_text; // Do not display notices if we suppress them via @ @@ -3947,7 +3947,7 @@ function msg_handler($errno, $msg_text, $errfile, $errline) 'S_USER_NOTICE' => ($errno == E_USER_NOTICE) ? true : false) ); - if ($_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest') + if ($request->is_ajax()) { global $refresh_data; -- cgit v1.2.1 From dce38f44de04bd7a1f91f8e57f6d266bd5e1af86 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Fri, 19 Aug 2011 10:45:03 +0100 Subject: [ticket/10328] Added a JSON class. The JSON class adds a consistent way to send JSON to the client, making it perfect for AJAX (jQuery automatically parses it). PHPBB3-10328 --- phpBB/common.php | 1 + phpBB/includes/acp/acp_forums.php | 3 +- phpBB/includes/functions.php | 6 ++-- phpBB/includes/json.php | 59 +++++++++++++++++++++++++++++++++++++++ phpBB/styles/script.js | 3 -- 5 files changed, 63 insertions(+), 9 deletions(-) create mode 100644 phpBB/includes/json.php (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index 129f7e4881..2c90ccf76c 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -74,6 +74,7 @@ if (!empty($load_extensions) && function_exists('dl')) // Include files require($phpbb_root_path . 'includes/class_loader.' . $phpEx); +require($phpbb_root_path . 'includes/json.' . $phpEx); require($phpbb_root_path . 'includes/session.' . $phpEx); require($phpbb_root_path . 'includes/auth.' . $phpEx); diff --git a/phpBB/includes/acp/acp_forums.php b/phpBB/includes/acp/acp_forums.php index cb410e361a..6c05b1e108 100644 --- a/phpBB/includes/acp/acp_forums.php +++ b/phpBB/includes/acp/acp_forums.php @@ -258,8 +258,7 @@ class acp_forums if ($request->is_ajax()) { - echo json_encode(array('success' => ($move_forum_name !== false))); - exit; + JSON::send(array('success' => ($move_forum_name !== false))); } break; diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index b126fcc709..b9ca30279f 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -2713,7 +2713,7 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo if ($request->is_ajax()) { $u_action .= '&confirm_uid=' . $user->data['user_id'] . '&sess=' . $user->session_id . '&sid=' . $user->session_id; - echo json_encode(array( + JSON::send(array( 'MESSAGE_TITLE' => (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title], 'MESSAGE_TEXT' => (!isset($user->lang[$title . '_CONFIRM'])) ? $title : $user->lang[$title . '_CONFIRM'], @@ -2721,7 +2721,6 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo 'S_CONFIRM_ACTION' => str_replace('&', '&', $u_action), //inefficient, rewrite whole function 'S_HIDDEN_FIELDS' => $hidden . $s_hidden_fields )); - exit; } if (defined('IN_ADMIN') && isset($user->data['session_admin']) && $user->data['session_admin']) @@ -3951,14 +3950,13 @@ function msg_handler($errno, $msg_text, $errfile, $errline) { global $refresh_data; - echo json_encode(array( + JSON::send(array( 'MESSAGE_TITLE' => $msg_title, 'MESSAGE_TEXT' => $msg_text, 'S_USER_WARNING' => ($errno == E_USER_WARNING) ? true : false, 'S_USER_NOTICE' => ($errno == E_USER_NOTICE) ? true : false, 'REFRESH_DATA' => (!empty($refresh_data)) ? $refresh_data : null )); - exit; } // We do not want the cron script to be called on error messages diff --git a/phpBB/includes/json.php b/phpBB/includes/json.php new file mode 100644 index 0000000000..04472080d9 --- /dev/null +++ b/phpBB/includes/json.php @@ -0,0 +1,59 @@ + Date: Fri, 19 Aug 2011 17:39:35 +0100 Subject: [ticket/10270] Lengthened the timeout on the AJAX request error. It was at 3 seconds before, now it is at 5 seconds from when the popup has faded in. PHPBB3-10270 --- phpBB/styles/script.js | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 3ed12bfee8..04e768e21e 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -33,15 +33,16 @@ phpbb.loading_alert = function() { else { loading_alert.show(); - dark.fadeIn(); + dark.fadeIn(function() { + setTimeout(function() { + if (loading_alert.is(':visible')) + { + phpbb.alert('Error', 'Error processing your request. Please try again.'); + } + }, 5000); + }); } - - setTimeout(function() { - if (loading_alert.is(':visible')) - { - phpbb.alert('Error', 'Error processing your request. Please try again.'); - } - }, 3000); + return loading_alert; } -- cgit v1.2.1 From 082c5c5b328e10e3fa99beaff31c4bc28f73bbd0 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Fri, 19 Aug 2011 18:11:58 +0100 Subject: [ticket/10272] Zebra operations using AJAX are now less hacky. Before, they were splitting stuff by the
    , and now JSON::add() is being used. PHPBB3-10272 --- phpBB/includes/ucp/ucp_zebra.php | 4 ++++ phpBB/styles/script.js | 4 ++-- 2 files changed, 6 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_zebra.php b/phpBB/includes/ucp/ucp_zebra.php index 004f3b80aa..3f0e97b48a 100644 --- a/phpBB/includes/ucp/ucp_zebra.php +++ b/phpBB/includes/ucp/ucp_zebra.php @@ -201,6 +201,10 @@ class ucp_zebra if ($updated) { + JSON::add(array( + 'message' => $user->lang[$l_mode . '_UPDATED'], + 'success' => true + )); meta_refresh(3, $this->u_action); $message = $user->lang[$l_mode . '_UPDATED'] . '
    ' . implode('
    ', $error) . ((sizeof($error)) ? '
    ' : '') . '
    ' . sprintf($user->lang['RETURN_UCP'], '', ''); trigger_error($message); diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 04e768e21e..f1fe2b9a10 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -364,8 +364,8 @@ phpbb.add_ajax_callback('post_delete', function(el) { phpbb.ajaxify({selector: tr.next().find('.up').children('a')}, false, 'forum_up'); } }).add_ajax_callback('zebra', function(el, res) { - if (res.MESSAGE_TEXT.indexOf('successfully') !== -1) { - $('.zebra').html(res.MESSAGE_TEXT.split(' Date: Wed, 24 Aug 2011 11:31:17 +0100 Subject: [ticket/10271] Moved $.querystring to phpbb.parse_querystring. PHPBB3-10271 --- phpBB/styles/script.js | 31 ++++++++++++++++++------------- 1 file changed, 18 insertions(+), 13 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index f1fe2b9a10..ceaf92672c 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -3,18 +3,6 @@ var phpbb = {}; (function($) { //avoid conflicts with other libraries -$.querystring = function(string) { - var end = {}, i; - - string = string.split('&'); - for (i = 0; i < string.length; i++) - { - end[string[i].split('=')[0]] = decodeURIComponent(string[i].split('=')[1]); - } - return end; -} - - var dark = $('
     
    '); $('body').append(dark); @@ -160,6 +148,23 @@ phpbb.confirm = function(msg, callback, fadedark) { return div; } +/** + * Turn a querystring into an array. + * + * @argument string string The querystring to parse. + * @returns array The array created. + */ +phpbb.parse_querystring = function(string) { + var end = {}, i; + + string = string.split('&'); + for (i = 0; i < string.length; i++) + { + end[string[i].split('=')[0]] = decodeURIComponent(string[i].split('=')[1]); + } + return end; +} + /** * Makes a link use AJAX instead of loading an entire page. @@ -382,7 +387,7 @@ $('[data-ajax]').each(function() { phpbb.ajaxify({ selector: '#quickmodform', exception: function(el, act, data) { - var d = $.querystring(data).action; + var d = phpbb.parse_querystring(data).action; if (d == 'make_normal') { return !(el.find('select option[value="make_global"]').length); -- cgit v1.2.1 From 6efb9dd0b6e0119009d5b10d198722ba2b19f0e2 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 11:34:41 +0100 Subject: [ticket/10270] Added jQuery popup CSS to the ACP. It was missing previously, meaning that it displayed wrong and in the footer. PHPBB3-10270 --- phpBB/adm/style/admin.css | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) (limited to 'phpBB') diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css index ceda824e5a..70c06f2d62 100644 --- a/phpBB/adm/style/admin.css +++ b/phpBB/adm/style/admin.css @@ -1070,6 +1070,40 @@ input.disabled { color: #666666; } +/* jQuery popups +---------------------------------------- */ +.jalert { + background-color: #FFFFFF; + border: 1px solid #999999; + position: fixed; + display: none; + top: 100px; + left: 35%; + width: 30%; + z-index: 50; + padding: 25px; + padding: 0 25px 20px 25px; +} + +.jalert p { + margin: 8px 0; + padding-bottom: 8px; +} + +#darkenwrapper { + display: none; +} + +#darken { + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + background-color: #000000; + opacity: 0.5; +} + /* Pagination ---------------------------------------- */ .pagination { -- cgit v1.2.1 From 420de9c9a0a638135da147a498436dbe7abfd4bd Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 11:42:39 +0100 Subject: [ticket/10270] Moved some HTML from the JavaScript to overall_footer. PHPBB3-10270 --- phpBB/adm/style/overall_footer.html | 5 +++++ phpBB/language/en/common.php | 2 ++ phpBB/styles/prosilver/template/overall_footer.html | 5 +++++ phpBB/styles/script.js | 7 ++----- 4 files changed, 14 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/overall_footer.html b/phpBB/adm/style/overall_footer.html index 3740122d9b..625121f1bd 100644 --- a/phpBB/adm/style/overall_footer.html +++ b/phpBB/adm/style/overall_footer.html @@ -18,6 +18,11 @@ {DEBUG_OUTPUT} +
    +
     
    +

    {L_LOADING}

    {L_PLEASE_WAIT}

    +
    + diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 19b801e585..e8fff96e5a 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -314,6 +314,7 @@ $lang = array_merge($lang, array( 'LDAP_NO_SERVER_CONNECTION' => 'Could not connect to LDAP server.', 'LDAP_SEARCH_FAILED' => 'An error occured while searching the LDAP directory.', 'LEGEND' => 'Legend', + 'LOADING' => 'Loading', 'LOCATION' => 'Location', 'LOCK_POST' => 'Lock post', 'LOCK_POST_EXPLAIN' => 'Prevent editing', @@ -451,6 +452,7 @@ $lang = array_merge($lang, array( 2 => '%d pixels', ), 'PLAY_QUICKTIME_FILE' => 'Play Quicktime file', + 'PLEASE_WAIT' => 'Please wait.', 'PM' => 'PM', 'PM_REPORTED' => 'Click to view report', 'POSTING_MESSAGE' => 'Posting message in %s', diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index ffdb27be98..37caaf7cca 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -24,6 +24,11 @@
    {DEBUG_OUTPUT}
    {L_ACP} + +
    +
     
    +

    {L_LOADING}

    {L_PLEASE_WAIT}

    +
    diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index ceaf92672c..bf8c548df0 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -3,11 +3,8 @@ var phpbb = {}; (function($) { //avoid conflicts with other libraries -var dark = $('
     
    '); -$('body').append(dark); - -var loading_alert = $('

    Loading

    Please wait.

    '); -$(dark).append(loading_alert); +var dark = $('#darkenwrapper'), + loading_alert = $('#loadingalert'); /** -- cgit v1.2.1 From c92b30d66cbb2839369c04172eb5ae9bacd27a16 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 11:44:28 +0100 Subject: [feature/ajax] Changed JavaScript comments to follow coding guidelines. Also replaced a couple instances of "@return" with "@returns". PHPBB3-10270 --- phpBB/styles/script.js | 20 +++++++++----------- 1 file changed, 9 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index bf8c548df0..1b9262f585 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -1,6 +1,6 @@ var phpbb = {}; -(function($) { //avoid conflicts with other libraries +(function($) { // Avoid conflicts with other libraries var dark = $('#darkenwrapper'), @@ -9,6 +9,8 @@ var dark = $('#darkenwrapper'), /** * Display a loading screen. + * + * @returns object Returns loading_alert. */ phpbb.loading_alert = function() { if (dark.is(':visible')) @@ -39,7 +41,7 @@ phpbb.loading_alert = function() { * @param bool fadedark Remove the dark background when done? Defaults * to yes. * - * @return Returns the div created. + * @returns object Returns the div created. */ phpbb.alert = function(title, msg, fadedark) { var div = $('

    ' + title + '

    ' + msg + '

    '); @@ -95,7 +97,7 @@ phpbb.alert = function(title, msg, fadedark) { * @param bool fadedark Remove the dark background when done? Defaults * to yes. * - * @return Returns the div created. + * @returns object Returns the div created. */ phpbb.confirm = function(msg, callback, fadedark) { var div = $('

    ' + msg + '

    \ @@ -173,7 +175,7 @@ phpbb.parse_querystring = function(string) { */ phpbb.ajaxify = function(options, refresh, callback) { - //private function to handle refreshes + // Private function to handle refreshes function handle_refresh(data, refresh, div) { if (!data) @@ -221,9 +223,7 @@ phpbb.ajaxify = function(options, refresh, callback) { { if (typeof res.S_CONFIRM_ACTION === 'undefined') { - /** - * It is a standard link, no confirm_box required. - */ + // It is a standard link, no confirm_box required. var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); callback = phpbb.ajax_callbacks[callback]; if (typeof callback === 'function') @@ -234,9 +234,7 @@ phpbb.ajaxify = function(options, refresh, callback) { } else { - /** - * confirm_box - confirm with the user and send back - */ + // confirm_box - confirm with the user and send back phpbb.confirm(res.MESSAGE_TEXT, function(del) { if (del) { @@ -394,4 +392,4 @@ phpbb.ajaxify({ }, true); -})(jQuery); //avoid conflicts with other libraries +})(jQuery); // Avoid conflicts with other libraries -- cgit v1.2.1 From 7a933bdb5ad4a9bc4877a7d4d516fa0b21d9e4c0 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 12:25:54 +0100 Subject: [ticket/10328] Renamed the JSON class, also now using autoloading. It is no longer static, and uses autoloading. It has also been renamed from JSON to phpbb_json_response. PHPBB3-10328 --- phpBB/common.php | 1 - phpBB/includes/acp/acp_forums.php | 3 +- phpBB/includes/functions.php | 6 ++-- phpBB/includes/json.php | 59 --------------------------------------- phpBB/includes/json_response.php | 42 ++++++++++++++++++++++++++++ phpBB/includes/ucp/ucp_zebra.php | 24 ++++++++++++---- phpBB/styles/script.js | 2 +- 7 files changed, 67 insertions(+), 70 deletions(-) delete mode 100644 phpBB/includes/json.php create mode 100644 phpBB/includes/json_response.php (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index 2c90ccf76c..129f7e4881 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -74,7 +74,6 @@ if (!empty($load_extensions) && function_exists('dl')) // Include files require($phpbb_root_path . 'includes/class_loader.' . $phpEx); -require($phpbb_root_path . 'includes/json.' . $phpEx); require($phpbb_root_path . 'includes/session.' . $phpEx); require($phpbb_root_path . 'includes/auth.' . $phpEx); diff --git a/phpBB/includes/acp/acp_forums.php b/phpBB/includes/acp/acp_forums.php index 6c05b1e108..3a3b2021eb 100644 --- a/phpBB/includes/acp/acp_forums.php +++ b/phpBB/includes/acp/acp_forums.php @@ -258,7 +258,8 @@ class acp_forums if ($request->is_ajax()) { - JSON::send(array('success' => ($move_forum_name !== false))); + $json_response = new phpbb_json_response; + $json_response->send(array('success' => ($move_forum_name !== false))); } break; diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index b9ca30279f..afd901a296 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -2713,7 +2713,8 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo if ($request->is_ajax()) { $u_action .= '&confirm_uid=' . $user->data['user_id'] . '&sess=' . $user->session_id . '&sid=' . $user->session_id; - JSON::send(array( + $json_response = new phpbb_json_response; + $json_response->send(array( 'MESSAGE_TITLE' => (!isset($user->lang[$title])) ? $user->lang['CONFIRM'] : $user->lang[$title], 'MESSAGE_TEXT' => (!isset($user->lang[$title . '_CONFIRM'])) ? $title : $user->lang[$title . '_CONFIRM'], @@ -3950,7 +3951,8 @@ function msg_handler($errno, $msg_text, $errfile, $errline) { global $refresh_data; - JSON::send(array( + $json_response = new phpbb_json_response; + $json_response->send(array( 'MESSAGE_TITLE' => $msg_title, 'MESSAGE_TEXT' => $msg_text, 'S_USER_WARNING' => ($errno == E_USER_WARNING) ? true : false, diff --git a/phpBB/includes/json.php b/phpBB/includes/json.php deleted file mode 100644 index 04472080d9..0000000000 --- a/phpBB/includes/json.php +++ /dev/null @@ -1,59 +0,0 @@ -is_ajax()) { - JSON::add(array( - 'message' => $user->lang[$l_mode . '_UPDATED'], - 'success' => true + $message = ($updated) ? $user->lang[$l_mode . '_UPDATED'] : implode('
    ', $error); + + $json_response = new phpbb_json_response; + $json_response->send(array( + 'success' => $updated, + + 'MESSAGE_TITLE' => $user->lang['INFORMATION'], + 'MESSAGE_TEXT' => $message, + 'REFRESH_DATA' => array( + 'time' => 3, + 'url' => $this->u_action + ) )); + } + else if ($updated) + { meta_refresh(3, $this->u_action); $message = $user->lang[$l_mode . '_UPDATED'] . '
    ' . implode('
    ', $error) . ((sizeof($error)) ? '
    ' : '') . '
    ' . sprintf($user->lang['RETURN_UCP'], '', ''); trigger_error($message); diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 1b9262f585..8814d105e1 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -365,7 +365,7 @@ phpbb.add_ajax_callback('post_delete', function(el) { } }).add_ajax_callback('zebra', function(el, res) { if (res.success) { - $('.zebra').html(res.message); + $('.zebra').html(res.MESSAGE_TEXT); $($('.zebra').get(1)).remove(); } });; -- cgit v1.2.1 From 11112314f757f4a6c65852817fba0f1a2f4526d2 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 12:46:33 +0100 Subject: [ticket/10271] AJAXified various deletions in the ACP. The following places have had deletion AJAXified: * Smilies and icons * Word censors * BBCodes * Attachment groups * Groups * Admin / User / Moderator / Forum roles * Report / denial reasons * Module management * Custom profile fields PHPBB3-10271 --- phpBB/adm/style/acp_attachments.html | 2 +- phpBB/adm/style/acp_bbcodes.html | 2 +- phpBB/adm/style/acp_groups.html | 2 +- phpBB/adm/style/acp_icons.html | 2 +- phpBB/adm/style/acp_modules.html | 2 +- phpBB/adm/style/acp_permission_roles.html | 2 +- phpBB/adm/style/acp_profile.html | 4 ++-- phpBB/adm/style/acp_ranks.html | 2 +- phpBB/adm/style/acp_reasons.html | 2 +- phpBB/adm/style/acp_words.html | 2 +- phpBB/includes/acp/acp_bbcodes.php | 14 +++++++++++++- phpBB/includes/acp/acp_icons.php | 12 ++++++++++++ phpBB/includes/acp/acp_ranks.php | 14 +++++++++++++- phpBB/language/en/acp/posting.php | 1 + phpBB/styles/script.js | 3 +++ 15 files changed, 53 insertions(+), 13 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_attachments.html b/phpBB/adm/style/acp_attachments.html index 33ef8062a6..c2f8b34792 100644 --- a/phpBB/adm/style/acp_attachments.html +++ b/phpBB/adm/style/acp_attachments.html @@ -248,7 +248,7 @@
    » {L_ALLOWED_IN_PM_POST} {groups.CATEGORY} -  {ICON_EDIT}  {ICON_DELETE}  +  {ICON_EDIT}  {ICON_DELETE}  diff --git a/phpBB/adm/style/acp_bbcodes.html b/phpBB/adm/style/acp_bbcodes.html index b85e8eca81..5939af24ae 100644 --- a/phpBB/adm/style/acp_bbcodes.html +++ b/phpBB/adm/style/acp_bbcodes.html @@ -101,7 +101,7 @@ {bbcodes.BBCODE_TAG} - {ICON_EDIT} {ICON_DELETE} + {ICON_EDIT} {ICON_DELETE} diff --git a/phpBB/adm/style/acp_groups.html b/phpBB/adm/style/acp_groups.html index 158751623a..ed94fa985e 100644 --- a/phpBB/adm/style/acp_groups.html +++ b/phpBB/adm/style/acp_groups.html @@ -350,7 +350,7 @@ {groups.TOTAL_MEMBERS} {L_SETTINGS} {L_MEMBERS} - {L_DELETE}{L_DELETE} + {L_DELETE}{L_DELETE} diff --git a/phpBB/adm/style/acp_icons.html b/phpBB/adm/style/acp_icons.html index 85b5343666..a8864d42f7 100644 --- a/phpBB/adm/style/acp_icons.html +++ b/phpBB/adm/style/acp_icons.html @@ -245,7 +245,7 @@ {ICON_MOVE_UP_DISABLED}{ICON_MOVE_UP}  {ICON_MOVE_DOWN_DISABLED}{ICON_MOVE_DOWN} -  {ICON_EDIT} {ICON_DELETE} +  {ICON_EDIT} {ICON_DELETE} diff --git a/phpBB/adm/style/acp_modules.html b/phpBB/adm/style/acp_modules.html index 3f1c0bf50b..6c4645e80c 100644 --- a/phpBB/adm/style/acp_modules.html +++ b/phpBB/adm/style/acp_modules.html @@ -164,7 +164,7 @@ {ICON_MOVE_DOWN_DISABLED} {ICON_EDIT} - {ICON_DELETE} + {ICON_DELETE} diff --git a/phpBB/adm/style/acp_permission_roles.html b/phpBB/adm/style/acp_permission_roles.html index 658d8dd0c8..2ac77af25d 100644 --- a/phpBB/adm/style/acp_permission_roles.html +++ b/phpBB/adm/style/acp_permission_roles.html @@ -174,7 +174,7 @@ {ICON_MOVE_DOWN_DISABLED} {ICON_EDIT} - {ICON_DELETE} + {ICON_DELETE} diff --git a/phpBB/adm/style/acp_profile.html b/phpBB/adm/style/acp_profile.html index 0ac0d78a64..7804533d1a 100644 --- a/phpBB/adm/style/acp_profile.html +++ b/phpBB/adm/style/acp_profile.html @@ -195,7 +195,7 @@ {fields.FIELD_IDENT} {fields.FIELD_TYPE} - {fields.L_ACTIVATE_DEACTIVATE} | {L_TRANSLATE} + {fields.L_ACTIVATE_DEACTIVATE} | {L_TRANSLATE} @@ -213,7 +213,7 @@ {ICON_EDIT_DISABLED} - {ICON_DELETE} + {ICON_DELETE} diff --git a/phpBB/adm/style/acp_ranks.html b/phpBB/adm/style/acp_ranks.html index 2f77a256b1..7fb7da7095 100644 --- a/phpBB/adm/style/acp_ranks.html +++ b/phpBB/adm/style/acp_ranks.html @@ -80,7 +80,7 @@ {ranks.RANK_TITLE}  -   {ranks.RANK_TITLE}   -  {ranks.MIN_POSTS} - {ICON_EDIT} {ICON_DELETE} + {ICON_EDIT} {ICON_DELETE} diff --git a/phpBB/adm/style/acp_reasons.html b/phpBB/adm/style/acp_reasons.html index 522aec5930..7cf2cce4c9 100644 --- a/phpBB/adm/style/acp_reasons.html +++ b/phpBB/adm/style/acp_reasons.html @@ -99,7 +99,7 @@ {ICON_EDIT} - {ICON_DELETE} + {ICON_DELETE} {ICON_DELETE_DISABLED} diff --git a/phpBB/adm/style/acp_words.html b/phpBB/adm/style/acp_words.html index 113f58ef92..4acd75f933 100644 --- a/phpBB/adm/style/acp_words.html +++ b/phpBB/adm/style/acp_words.html @@ -60,7 +60,7 @@ {words.WORD} {words.REPLACEMENT} -  {ICON_EDIT}  {ICON_DELETE}  +  {ICON_EDIT}  {ICON_DELETE}  diff --git a/phpBB/includes/acp/acp_bbcodes.php b/phpBB/includes/acp/acp_bbcodes.php index a3822a982a..e537d7a8b9 100644 --- a/phpBB/includes/acp/acp_bbcodes.php +++ b/phpBB/includes/acp/acp_bbcodes.php @@ -24,7 +24,7 @@ class acp_bbcodes function main($id, $mode) { - global $db, $user, $auth, $template, $cache; + global $db, $user, $auth, $template, $cache, $request; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; $user->add_lang('acp/posting'); @@ -272,6 +272,18 @@ class acp_bbcodes $db->sql_query('DELETE FROM ' . BBCODES_TABLE . " WHERE bbcode_id = $bbcode_id"); $cache->destroy('sql', BBCODES_TABLE); add_log('admin', 'LOG_BBCODE_DELETE', $row['bbcode_tag']); + + if ($request->is_ajax()) + { + $json_response = new phpbb_json_response; + $json_response->send(array( + 'MESSAGE_TITLE' => $user->lang['INFORMATION'], + 'MESSAGE_TEXT' => $user->lang['BBCODE_DELETED'], + 'REFRESH_DATA' => array( + 'time' => 3 + ) + )); + } } else { diff --git a/phpBB/includes/acp/acp_icons.php b/phpBB/includes/acp/acp_icons.php index 49a092f16b..bfe17c5007 100644 --- a/phpBB/includes/acp/acp_icons.php +++ b/phpBB/includes/acp/acp_icons.php @@ -782,6 +782,18 @@ class acp_icons $cache->destroy('_icons'); $cache->destroy('sql', $table); + + if ($request->is_ajax()) + { + $json_response = new phpbb_json_response; + $json_response->send(array( + 'MESSAGE_TITLE' => $user->lang['INFORMATION'], + 'MESSAGE_TEXT' => $notice, + 'REFRESH_DATA' => array( + 'time' => 3 + ) + )); + } } else { diff --git a/phpBB/includes/acp/acp_ranks.php b/phpBB/includes/acp/acp_ranks.php index ec5a76df87..d9ed5b17f1 100644 --- a/phpBB/includes/acp/acp_ranks.php +++ b/phpBB/includes/acp/acp_ranks.php @@ -24,7 +24,7 @@ class acp_ranks function main($id, $mode) { - global $db, $user, $auth, $template, $cache; + global $db, $user, $auth, $template, $cache, $request; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; $user->add_lang('acp/posting'); @@ -122,6 +122,18 @@ class acp_ranks $cache->destroy('_ranks'); add_log('admin', 'LOG_RANK_REMOVED', $rank_title); + + if ($request->is_ajax()) + { + $json_response = new phpbb_json_response; + $json_response->send(array( + 'MESSAGE_TITLE' => $user->lang['INFORMATION'], + 'MESSAGE_TEXT' => $user->lang['RANK_REMOVED'], + 'REFRESH_DATA' => array( + 'time' => 3 + ) + )); + } } else { diff --git a/phpBB/language/en/acp/posting.php b/phpBB/language/en/acp/posting.php index 84cf640d1f..76d4869990 100644 --- a/phpBB/language/en/acp/posting.php +++ b/phpBB/language/en/acp/posting.php @@ -45,6 +45,7 @@ $lang = array_merge($lang, array( 'BBCODE_ADDED' => 'BBCode added successfully.', 'BBCODE_EDITED' => 'BBCode edited successfully.', + 'BBCODE_DELETED' => 'The BBCode has been removed successfully.', 'BBCODE_NOT_EXIST' => 'The BBCode you selected does not exist.', 'BBCODE_HELPLINE' => 'Help line', 'BBCODE_HELPLINE_EXPLAIN' => 'This field contains the mouse over text of the BBCode.', diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 8814d105e1..85dcdb25f5 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -363,6 +363,9 @@ phpbb.add_ajax_callback('post_delete', function(el) { tr.next().find('.up').html('Move up'); phpbb.ajaxify({selector: tr.next().find('.up').children('a')}, false, 'forum_up'); } +}).add_ajax_callback('row_delete', function(el) { + var tr = $(el).parents('tr'); + tr.remove(); }).add_ajax_callback('zebra', function(el, res) { if (res.success) { $('.zebra').html(res.MESSAGE_TEXT); -- cgit v1.2.1 From 1cb3b595ec70730429a9c8654b248fc6d50cf1b3 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 15:45:51 +0100 Subject: [ticket/10271] AJAXified the styles tab in the ACP. PHPBB3-10271 --- phpBB/adm/style/acp_styles.html | 2 +- phpBB/includes/acp/acp_styles.php | 17 +++++++++++++++-- phpBB/language/en/acp/styles.php | 2 ++ phpBB/styles/script.js | 22 ++++++++++++++++------ 4 files changed, 34 insertions(+), 9 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_styles.html b/phpBB/adm/style/acp_styles.html index dc89aa247a..dfc8def646 100644 --- a/phpBB/adm/style/acp_styles.html +++ b/phpBB/adm/style/acp_styles.html @@ -288,7 +288,7 @@ - {installed.L_STYLE_ACT_DEACT} | + {installed.L_STYLE_ACT_DEACT} | {installed.S_ACTIONS} diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php index 7b449d3b35..a241dd3d10 100644 --- a/phpBB/includes/acp/acp_styles.php +++ b/phpBB/includes/acp/acp_styles.php @@ -28,7 +28,7 @@ class acp_styles function main($id, $mode) { - global $db, $user, $auth, $template, $cache; + global $db, $user, $auth, $template, $cache, $request; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; // Hardcoded template bitfield to add for new templates @@ -185,6 +185,18 @@ inherit_from = {INHERIT_FROM} WHERE forum_style = ' . $style_id; $db->sql_query($sql); } + if ($request->is_ajax()) + { + $json_response = new phpbb_json_response; + $json_response->send(array( + 'text' => $user->lang['STYLE_' . (($action == 'activate') ? 'DE' : '') . 'ACTIVATE'], + 'MESSAGE_TITLE' => $user->lang['INFORMATION'], + 'MESSAGE_TEXT' => $user->lang['STYLE_' . strtoupper($action) . 'D'], + 'REFRESH_DATA' => array( + 'time' => 3 + ) + )); + } } else if ($action == 'deactivate') { @@ -335,7 +347,8 @@ inherit_from = {INHERIT_FROM} $s_actions = array(); foreach ($actions as $option) { - $s_actions[] = '' . $user->lang[strtoupper($option)] . ''; + $data_ajax = ($option == 'refresh') ? ' data-ajax="true"' : ''; + $s_actions[] = '' . $user->lang[strtoupper($option)] . ''; } $template->assign_block_vars('installed', array( diff --git a/phpBB/language/en/acp/styles.php b/phpBB/language/en/acp/styles.php index 59df82477e..3a96100947 100644 --- a/phpBB/language/en/acp/styles.php +++ b/phpBB/language/en/acp/styles.php @@ -295,9 +295,11 @@ $lang = array_merge($lang, array( 'SELECTED_THEME_FILE' => 'Selected theme file', 'STORE_FILESYSTEM' => 'Filesystem', 'STYLE_ACTIVATE' => 'Activate', + 'STYLE_ACTIVATED' => 'Style activated successfully', 'STYLE_ACTIVE' => 'Active', 'STYLE_ADDED' => 'Style added successfully.', 'STYLE_DEACTIVATE' => 'Deactivate', + 'STYLE_DEACTIVATED' => 'Style deactivated successfully', 'STYLE_DEFAULT' => 'Make default style', 'STYLE_DELETED' => 'Style deleted successfully.', 'STYLE_DETAILS_UPDATED' => 'Style edited successfully.', diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 85dcdb25f5..44b21906cc 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -225,10 +225,9 @@ phpbb.ajaxify = function(options, refresh, callback) { { // It is a standard link, no confirm_box required. var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - callback = phpbb.ajax_callbacks[callback]; - if (typeof callback === 'function') + if (typeof phpbb.ajax_callbacks[callback] === 'function') { - callback(that, (is_form) ? act : null); + phpbb.ajax_callbacks[callback](that, res, (is_form) ? act : null); } handle_refresh(res.REFRESH_DATA, refresh, alert); } @@ -243,10 +242,9 @@ phpbb.ajaxify = function(options, refresh, callback) { phpbb.loading_alert(); $.post(path, data + '&confirm=' + res.YES_VALUE, function(res) { var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - callback = phpbb.ajax_callbacks[callback]; - if (typeof callback === 'function') + if (typeof phpbb.ajax_callbacks[callback] === 'function') { - callback(that, res, (is_form) ? act : null); + phpbb.ajax_callbacks[callback](that, res, (is_form) ? act : null); } handle_refresh(res.REFRESH_DATA, refresh, alert); }); @@ -363,6 +361,18 @@ phpbb.add_ajax_callback('post_delete', function(el) { tr.next().find('.up').html('Move up'); phpbb.ajaxify({selector: tr.next().find('.up').children('a')}, false, 'forum_up'); } +}).add_ajax_callback('style_act_deact', function(el, res) { + $(el).text(res.text); + var new_href = $(el).attr('href'); + if (new_href.indexOf('deactivate') !== -1) + { + new_href = new_href.replace('deactivate', 'activate') + } + else + { + new_href = new_href.replace('activate', 'deactivate') + } + $(el).attr('href', new_href); }).add_ajax_callback('row_delete', function(el) { var tr = $(el).parents('tr'); tr.remove(); -- cgit v1.2.1 From 4ae74cd4b450ae4cca956f6f3e2371429f67deec Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 16:06:06 +0100 Subject: [ticket/10271] AJAXified buttons on acp_main. PHPBB3-10271 --- phpBB/adm/style/acp_main.html | 14 +++++++------- phpBB/includes/acp/acp_main.php | 38 ++++++++++++++++++++++++++++++++++++-- phpBB/language/en/acp/common.php | 7 +++++++ 3 files changed, 50 insertions(+), 9 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_main.html b/phpBB/adm/style/acp_main.html index 63ca3a1c79..d9f833d878 100644 --- a/phpBB/adm/style/acp_main.html +++ b/phpBB/adm/style/acp_main.html @@ -152,35 +152,35 @@
    {L_STATISTIC_RESYNC_OPTIONS} -
    +

     
    -
    +

     
    -
    +

    {L_RESYNC_STATS_EXPLAIN}
    -
    +

    {L_RESYNC_POSTCOUNTS_EXPLAIN}
    -
    +

    {L_RESYNC_POST_MARKING_EXPLAIN}
    @@ -188,7 +188,7 @@ -
    +

    {L_PURGE_SESSIONS_EXPLAIN}
    @@ -196,7 +196,7 @@ -
    +

    {L_PURGE_CACHE_EXPLAIN}
    diff --git a/phpBB/includes/acp/acp_main.php b/phpBB/includes/acp/acp_main.php index 4c9ee85982..144b225766 100644 --- a/phpBB/includes/acp/acp_main.php +++ b/phpBB/includes/acp/acp_main.php @@ -24,7 +24,7 @@ class acp_main function main($id, $mode) { - global $config, $db, $user, $auth, $template; + global $config, $db, $user, $auth, $template, $request; global $phpbb_root_path, $phpbb_admin_path, $phpEx; // Show restore permissions notice @@ -129,6 +129,11 @@ class acp_main set_config('record_online_users', 1, true); set_config('record_online_date', time(), true); add_log('admin', 'LOG_RESET_ONLINE'); + + if ($request->is_ajax()) + { + trigger_error('RESET_ONLINE_SUCCESS'); + } break; case 'stats': @@ -179,6 +184,11 @@ class acp_main update_last_username(); add_log('admin', 'LOG_RESYNC_STATS'); + + if ($request->is_ajax()) + { + trigger_error('RESYNC_STATS_SUCCESS'); + } break; case 'user': @@ -241,7 +251,11 @@ class acp_main } add_log('admin', 'LOG_RESYNC_POSTCOUNTS'); - + + if ($request->is_ajax()) + { + trigger_error('RESYNC_POSTCOUNTS_SUCCESS'); + } break; case 'date': @@ -252,6 +266,11 @@ class acp_main set_config('board_startdate', time() - 1); add_log('admin', 'LOG_RESET_DATE'); + + if ($request->is_ajax()) + { + trigger_error('RESET_DATE_SUCCESS'); + } break; case 'db_track': @@ -327,6 +346,11 @@ class acp_main } add_log('admin', 'LOG_RESYNC_POST_MARKING'); + + if ($request->is_ajax()) + { + trigger_error('RESYNC_POST_MARKING_SUCCESS'); + } break; case 'purge_cache': @@ -338,6 +362,11 @@ class acp_main cache_moderators(); add_log('admin', 'LOG_PURGE_CACHE'); + + if ($request->is_ajax()) + { + trigger_error('PURGE_CACHE_SUCCESS'); + } break; case 'purge_sessions': @@ -384,6 +413,11 @@ class acp_main $db->sql_query($sql); add_log('admin', 'LOG_PURGE_SESSIONS'); + + if ($request->is_ajax()) + { + trigger_error('PURGE_SESSIONS_SUCCESS'); + } break; } } diff --git a/phpBB/language/en/acp/common.php b/phpBB/language/en/acp/common.php index 242329a041..f96947b580 100644 --- a/phpBB/language/en/acp/common.php +++ b/phpBB/language/en/acp/common.php @@ -368,25 +368,32 @@ $lang = array_merge($lang, array( 'PURGE_CACHE' => 'Purge the cache', 'PURGE_CACHE_CONFIRM' => 'Are you sure you wish to purge the cache?', 'PURGE_CACHE_EXPLAIN' => 'Purge all cache related items, this includes any cached template files or queries.', + 'PURGE_CACHE_SUCCESS' => 'Cache successfully purged.', 'PURGE_SESSIONS' => 'Purge all sessions', 'PURGE_SESSIONS_CONFIRM' => 'Are you sure you wish to purge all sessions? This will log out all users.', 'PURGE_SESSIONS_EXPLAIN' => 'Purge all sessions. This will log out all users by truncating the session table.', + 'PURGE_SESSIONS_SUCCESS' => 'Sessions successfully purged.', 'RESET_DATE' => 'Reset board’s start date', 'RESET_DATE_CONFIRM' => 'Are you sure you wish to reset the board’s start date?', + 'RESET_DATE_SUCCESS' => 'Board’s start date reset', 'RESET_ONLINE' => 'Reset most users ever online', 'RESET_ONLINE_CONFIRM' => 'Are you sure you wish to reset the most users ever online counter?', + 'RESET_ONLINE_SUCCESS' => 'Most users ever online reset', 'RESYNC_FILES_STATS_CONFIRM' => 'Are you sure you wish to resynchronise files statistics?', 'RESYNC_POSTCOUNTS' => 'Resynchronise post counts', 'RESYNC_POSTCOUNTS_EXPLAIN' => 'Only existing posts will be taken into consideration. Pruned posts will not be counted.', 'RESYNC_POSTCOUNTS_CONFIRM' => 'Are you sure you wish to resynchronise post counts?', + 'RESYNC_POSTCOUNTS_SUCCESS' => 'Resynchronised post counts', 'RESYNC_POST_MARKING' => 'Resynchronise dotted topics', 'RESYNC_POST_MARKING_CONFIRM' => 'Are you sure you wish to resynchronise dotted topics?', 'RESYNC_POST_MARKING_EXPLAIN' => 'First unmarks all topics and then correctly marks topics that have seen any activity during the past six months.', + 'RESYNC_POST_MARKING_SUCCESS' => 'Resynchronised dotted topics', 'RESYNC_STATS' => 'Resynchronise statistics', 'RESYNC_STATS_CONFIRM' => 'Are you sure you wish to resynchronise statistics?', 'RESYNC_STATS_EXPLAIN' => 'Recalculates the total number of posts, topics, users and files.', + 'RESYNC_STATS_SUCCESS' => 'Resynchronised statistics', 'RUN' => 'Run now', 'STATISTIC' => 'Statistic', -- cgit v1.2.1 From fc7cb6a70b9e0422bf5658bb9f49de831be08718 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 16:25:54 +0100 Subject: [ticket/10270] Made the alert after an AJAX operation optional. PHPBB3-10270 --- phpBB/styles/script.js | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 44b21906cc..16d64319d9 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -224,7 +224,11 @@ phpbb.ajaxify = function(options, refresh, callback) { if (typeof res.S_CONFIRM_ACTION === 'undefined') { // It is a standard link, no confirm_box required. - var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + if (typeof res.MESSAGE_TITLE !== 'undefined') + { + var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + } + if (typeof phpbb.ajax_callbacks[callback] === 'function') { phpbb.ajax_callbacks[callback](that, res, (is_form) ? act : null); @@ -241,7 +245,11 @@ phpbb.ajaxify = function(options, refresh, callback) { path = res.S_CONFIRM_ACTION; phpbb.loading_alert(); $.post(path, data + '&confirm=' + res.YES_VALUE, function(res) { - var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + if (typeof res.MESSAGE_TITLE !== 'undefined') + { + var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + } + if (typeof phpbb.ajax_callbacks[callback] === 'function') { phpbb.ajax_callbacks[callback](that, res, (is_form) ? act : null); -- cgit v1.2.1 From e7e09f8da26abf0d4e625653d14d68774050a244 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 16:39:25 +0100 Subject: [ticket/10272] AJAXified the bots page in the ACP. PHPBB3-10272 --- phpBB/adm/style/acp_bots.html | 4 ++-- phpBB/includes/acp/acp_bots.php | 10 +++++++++- phpBB/styles/script.js | 8 ++++++++ 3 files changed, 19 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_bots.html b/phpBB/adm/style/acp_bots.html index 886005caa3..e0e9588364 100644 --- a/phpBB/adm/style/acp_bots.html +++ b/phpBB/adm/style/acp_bots.html @@ -76,9 +76,9 @@ {bots.BOT_NAME}  {bots.LAST_VISIT}  -  {bots.L_ACTIVATE_DEACTIVATE}  +  {bots.L_ACTIVATE_DEACTIVATE}   {L_EDIT}  -  {L_DELETE}  +  {L_DELETE}  diff --git a/phpBB/includes/acp/acp_bots.php b/phpBB/includes/acp/acp_bots.php index f080b3c9fb..b9dd6664f4 100644 --- a/phpBB/includes/acp/acp_bots.php +++ b/phpBB/includes/acp/acp_bots.php @@ -24,7 +24,7 @@ class acp_bots function main($id, $mode) { - global $config, $db, $user, $auth, $template, $cache; + global $config, $db, $user, $auth, $template, $cache, $request; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix; $action = request_var('action', ''); @@ -352,6 +352,14 @@ class acp_bots break; } + + if ($request->is_ajax() && ($action == 'activate' || $action == 'deactivate')) + { + $json_response = new phpbb_json_response; + $json_response->send(array( + 'text' => $user->lang['BOT_' . (($action == 'activate') ? 'DE' : '') . 'ACTIVATE'], + )); + } $s_options = ''; $_options = array('activate' => 'BOT_ACTIVATE', 'deactivate' => 'BOT_DEACTIVATE', 'delete' => 'DELETE'); diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 16d64319d9..59fe7cf8e2 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -228,6 +228,10 @@ phpbb.ajaxify = function(options, refresh, callback) { { var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); } + else + { + dark.fadeOut(); + } if (typeof phpbb.ajax_callbacks[callback] === 'function') { @@ -249,6 +253,10 @@ phpbb.ajaxify = function(options, refresh, callback) { { var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); } + else + { + dark.fadeOut(); + } if (typeof phpbb.ajax_callbacks[callback] === 'function') { -- cgit v1.2.1 From bcb824a9f2407523c84501ac1d4260bb27661ff1 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 16:59:05 +0100 Subject: [ticket/10272] Renamed AJAX callback "style_act_deact" to "act_deact". PHPBB3-10272 --- phpBB/adm/style/acp_bots.html | 2 +- phpBB/adm/style/acp_modules.html | 2 +- phpBB/adm/style/acp_profile.html | 2 +- phpBB/adm/style/acp_styles.html | 2 +- phpBB/styles/script.js | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_bots.html b/phpBB/adm/style/acp_bots.html index e0e9588364..3a5ef72acd 100644 --- a/phpBB/adm/style/acp_bots.html +++ b/phpBB/adm/style/acp_bots.html @@ -76,7 +76,7 @@ {bots.BOT_NAME}  {bots.LAST_VISIT}  -  {bots.L_ACTIVATE_DEACTIVATE}  +  {bots.L_ACTIVATE_DEACTIVATE}   {L_EDIT}   {L_DELETE}  diff --git a/phpBB/adm/style/acp_modules.html b/phpBB/adm/style/acp_modules.html index 6c4645e80c..380a037977 100644 --- a/phpBB/adm/style/acp_modules.html +++ b/phpBB/adm/style/acp_modules.html @@ -148,7 +148,7 @@ {modules.MODULE_IMAGE} {modules.MODULE_TITLE} [{L_HIDDEN_MODULE}] -  {L_DISABLE}{L_ENABLE}  +  {L_DISABLE}{L_ENABLE}  {ICON_MOVE_UP_DISABLED} diff --git a/phpBB/adm/style/acp_profile.html b/phpBB/adm/style/acp_profile.html index 7804533d1a..d0920774f1 100644 --- a/phpBB/adm/style/acp_profile.html +++ b/phpBB/adm/style/acp_profile.html @@ -195,7 +195,7 @@ {fields.FIELD_IDENT} {fields.FIELD_TYPE} - {fields.L_ACTIVATE_DEACTIVATE} | {L_TRANSLATE} + {fields.L_ACTIVATE_DEACTIVATE} | {L_TRANSLATE} diff --git a/phpBB/adm/style/acp_styles.html b/phpBB/adm/style/acp_styles.html index dfc8def646..0b98dea603 100644 --- a/phpBB/adm/style/acp_styles.html +++ b/phpBB/adm/style/acp_styles.html @@ -288,7 +288,7 @@ - {installed.L_STYLE_ACT_DEACT} | + {installed.L_STYLE_ACT_DEACT} | {installed.S_ACTIONS} diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 59fe7cf8e2..4630c4fed1 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -377,7 +377,7 @@ phpbb.add_ajax_callback('post_delete', function(el) { tr.next().find('.up').html('Move up'); phpbb.ajaxify({selector: tr.next().find('.up').children('a')}, false, 'forum_up'); } -}).add_ajax_callback('style_act_deact', function(el, res) { +}).add_ajax_callback('act_deact', function(el, res) { $(el).text(res.text); var new_href = $(el).attr('href'); if (new_href.indexOf('deactivate') !== -1) -- cgit v1.2.1 From f85faf435da19f877b7633e208ae103a3d954355 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 22:29:52 +0100 Subject: [ticket/10271] Cleaned up phpbb.ajaxify. Reduced a lot of duplicate code and made it more efficient. PHPBB3-10271 --- phpBB/styles/script.js | 70 ++++++++++++++++++-------------------------------- 1 file changed, 25 insertions(+), 45 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 4630c4fed1..4d7d6e1425 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -174,32 +174,6 @@ phpbb.parse_querystring = function(string) { * @param function callback Callback. */ phpbb.ajaxify = function(options, refresh, callback) { - - // Private function to handle refreshes - function handle_refresh(data, refresh, div) - { - if (!data) - { - return; - } - - refresh = ((typeof refresh === 'function') ? refresh(data.url) : - (typeof refresh === 'boolean') && refresh); - - setTimeout(function() { - if (refresh) - { - window.location = data.url; - } - else - { - dark.fadeOut(function() { - div.remove(); - }); - } - }, data.time * 1000); - } - var selector = (typeof options === 'string') ? options : options.selector; var is_form = $(selector).is('form'); if (is_form && typeof selector === 'object') @@ -237,7 +211,29 @@ phpbb.ajaxify = function(options, refresh, callback) { { phpbb.ajax_callbacks[callback](that, res, (is_form) ? act : null); } - handle_refresh(res.REFRESH_DATA, refresh, alert); + + if (res.REFRESH_DATA) + { + if (typeof refresh === 'function') + { + refresh = refresh(res.REFRESH_DATA.url); + } + else if (typeof refresh !== 'boolean') + { + refresh = false; + } + + setTimeout(function() { + if (refresh) + { + window.location = res.REFRESH_DATA.url; + } + + dark.fadeOut(function() { + alert.remove(); + }); + }, res.REFRESH_DATA.time * 1000); + } } else { @@ -245,25 +241,9 @@ phpbb.ajaxify = function(options, refresh, callback) { phpbb.confirm(res.MESSAGE_TEXT, function(del) { if (del) { - data = $('' + res.S_HIDDEN_FIELDS + '').serialize(); - path = res.S_CONFIRM_ACTION; phpbb.loading_alert(); - $.post(path, data + '&confirm=' + res.YES_VALUE, function(res) { - if (typeof res.MESSAGE_TITLE !== 'undefined') - { - var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - } - else - { - dark.fadeOut(); - } - - if (typeof phpbb.ajax_callbacks[callback] === 'function') - { - phpbb.ajax_callbacks[callback](that, res, (is_form) ? act : null); - } - handle_refresh(res.REFRESH_DATA, refresh, alert); - }); + data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); + $.post(res.S_CONFIRM_ACTION, data + '&confirm=' + res.YES_VALUE, return_handler); } }, false); } -- cgit v1.2.1 From 53201da98c7b9ca88d1b43f1b59b8d17208c2025 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 24 Aug 2011 22:53:26 +0100 Subject: [ticket/10270] Increased the speed of the animations. PHPBB3-10270 --- phpBB/styles/script.js | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 4d7d6e1425..0e885bceed 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -15,12 +15,12 @@ var dark = $('#darkenwrapper'), phpbb.loading_alert = function() { if (dark.is(':visible')) { - loading_alert.fadeIn(); + loading_alert.fadeIn(200); } else { loading_alert.show(); - dark.fadeIn(function() { + dark.fadeIn(200, function() { setTimeout(function() { if (loading_alert.is(':visible')) { @@ -52,7 +52,7 @@ phpbb.alert = function(title, msg, fadedark) { }); $(dark).one('click', function(e) { var fade = (typeof fadedark !== 'undefined' && !fadedark) ? div : dark; - fade.fadeOut(function() { + fade.fadeOut(200, function() { div.remove(); }); return false; @@ -68,21 +68,21 @@ phpbb.alert = function(title, msg, fadedark) { if (loading_alert.is(':visible')) { - loading_alert.fadeOut(function() { + loading_alert.fadeOut(200, function() { $(dark).append(div); - div.fadeIn(); + div.fadeIn(200); }); } else if (dark.is(':visible')) { $(dark).append(div); - div.fadeIn(); + div.fadeIn(200); } else { $(dark).append(div); div.show(); - dark.fadeIn(); + dark.fadeIn(200); } return div; @@ -107,7 +107,7 @@ phpbb.confirm = function(msg, callback, fadedark) { div.find('.jalertbut').bind('click', function() { var res = this.value === 'Yes'; var fade = (typeof fadedark !== 'undefined' && !fadedark && res) ? div : dark; - fade.fadeOut(function() { + fade.fadeOut(200, function() { div.remove(); }); callback(res); @@ -127,21 +127,21 @@ phpbb.confirm = function(msg, callback, fadedark) { if (loading_alert.is(':visible')) { - loading_alert.fadeOut(function() { + loading_alert.fadeOut(200, function() { $(dark).append(div); - div.fadeIn(); + div.fadeIn(200); }); } else if (dark.is(':visible')) { $(dark).append(div); - div.fadeIn(); + div.fadeIn(200); } else { $(dark).append(div); div.show(); - dark.fadeIn(); + dark.fadeIn(200); } return div; @@ -204,7 +204,7 @@ phpbb.ajaxify = function(options, refresh, callback) { } else { - dark.fadeOut(); + dark.fadeOut(200); } if (typeof phpbb.ajax_callbacks[callback] === 'function') @@ -229,7 +229,7 @@ phpbb.ajaxify = function(options, refresh, callback) { window.location = res.REFRESH_DATA.url; } - dark.fadeOut(function() { + dark.fadeOut(200, function() { alert.remove(); }); }, res.REFRESH_DATA.time * 1000); @@ -249,7 +249,7 @@ phpbb.ajaxify = function(options, refresh, callback) { } } - var run_exception = typeof options.exception === 'function'; + var run_exception = (typeof options.exception === 'function'); if (is_form) { act = /action\[([a-z]+)\]/.exec(this.name); -- cgit v1.2.1 From 431a78f34696707973f1c67f4417d6ee85713ee6 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sun, 11 Sep 2011 15:42:00 +0100 Subject: [ticket/10270] Got rid of the temporary jQuery for the AJAX changes. The jQuery library wasn't included before, so a temporary one was included. Now that igorws jQuery patch has been merged, the temporary library can be removed. PHPBB3-10270 --- phpBB/adm/style/overall_footer.html | 5 +---- phpBB/styles/prosilver/template/overall_footer.html | 4 +--- 2 files changed, 2 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/overall_footer.html b/phpBB/adm/style/overall_footer.html index 625121f1bd..ec3e6a30d3 100644 --- a/phpBB/adm/style/overall_footer.html +++ b/phpBB/adm/style/overall_footer.html @@ -22,15 +22,12 @@
     

    {L_LOADING}

    {L_PLEASE_WAIT}

    - - - - + diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index 37caaf7cca..20f6ee1f91 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -29,9 +29,6 @@
     

    {L_LOADING}

    {L_PLEASE_WAIT}

    - - - @@ -43,6 +40,7 @@ + -- cgit v1.2.1 From 8c0e72cd9e52c754bd6a851de73862b3c6485840 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sun, 11 Sep 2011 15:54:03 +0100 Subject: [ticket/10270] Sped up animations of popups. They were too slow and were hampering the user experience on boards with a fast connection such as local boards. PHPBB3-10270 --- phpBB/styles/script.js | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index 0e885bceed..cafb11c9e4 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -15,12 +15,12 @@ var dark = $('#darkenwrapper'), phpbb.loading_alert = function() { if (dark.is(':visible')) { - loading_alert.fadeIn(200); + loading_alert.fadeIn(100); } else { loading_alert.show(); - dark.fadeIn(200, function() { + dark.fadeIn(100, function() { setTimeout(function() { if (loading_alert.is(':visible')) { @@ -52,7 +52,7 @@ phpbb.alert = function(title, msg, fadedark) { }); $(dark).one('click', function(e) { var fade = (typeof fadedark !== 'undefined' && !fadedark) ? div : dark; - fade.fadeOut(200, function() { + fade.fadeOut(100, function() { div.remove(); }); return false; @@ -68,21 +68,21 @@ phpbb.alert = function(title, msg, fadedark) { if (loading_alert.is(':visible')) { - loading_alert.fadeOut(200, function() { + loading_alert.fadeOut(100, function() { $(dark).append(div); - div.fadeIn(200); + div.fadeIn(100); }); } else if (dark.is(':visible')) { $(dark).append(div); - div.fadeIn(200); + div.fadeIn(100); } else { $(dark).append(div); div.show(); - dark.fadeIn(200); + dark.fadeIn(100); } return div; @@ -107,7 +107,7 @@ phpbb.confirm = function(msg, callback, fadedark) { div.find('.jalertbut').bind('click', function() { var res = this.value === 'Yes'; var fade = (typeof fadedark !== 'undefined' && !fadedark && res) ? div : dark; - fade.fadeOut(200, function() { + fade.fadeOut(100, function() { div.remove(); }); callback(res); @@ -127,21 +127,21 @@ phpbb.confirm = function(msg, callback, fadedark) { if (loading_alert.is(':visible')) { - loading_alert.fadeOut(200, function() { + loading_alert.fadeOut(100, function() { $(dark).append(div); - div.fadeIn(200); + div.fadeIn(100); }); } else if (dark.is(':visible')) { $(dark).append(div); - div.fadeIn(200); + div.fadeIn(100); } else { $(dark).append(div); div.show(); - dark.fadeIn(200); + dark.fadeIn(100); } return div; @@ -204,7 +204,7 @@ phpbb.ajaxify = function(options, refresh, callback) { } else { - dark.fadeOut(200); + dark.fadeOut(100); } if (typeof phpbb.ajax_callbacks[callback] === 'function') @@ -229,7 +229,7 @@ phpbb.ajaxify = function(options, refresh, callback) { window.location = res.REFRESH_DATA.url; } - dark.fadeOut(200, function() { + dark.fadeOut(100, function() { alert.remove(); }); }, res.REFRESH_DATA.time * 1000); -- cgit v1.2.1 From dbb81fbd2bfadf52502f2200b0420953d98ffb56 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sat, 24 Sep 2011 16:35:46 +0100 Subject: [ticket/10328] Added capital to "Content-type" in phpbb_json_response. It was originally Content-type, but has been replaced with Content-Type, which is correct. PHPBB3-10328 --- phpBB/includes/json_response.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/json_response.php b/phpBB/includes/json_response.php index 95d02e3c0e..dfddea98f2 100644 --- a/phpBB/includes/json_response.php +++ b/phpBB/includes/json_response.php @@ -30,7 +30,7 @@ class phpbb_json_response */ public function send($data, $exit = true) { - header('Content-type: application/json'); + header('Content-Type: application/json'); echo json_encode($data); if ($exit) -- cgit v1.2.1 From 233c2d51cfc1ffc33b03f1ab73c016d07828bab4 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sat, 24 Sep 2011 16:42:22 +0100 Subject: [ticket/10270] Removed some unnecessary calls to $() in script.js. Sometimes, jQuery objects were being sent through the jQuery function again, wasting resources. PHPBB3-10270 --- phpBB/styles/script.js | 32 ++++++++++++++------------------ 1 file changed, 14 insertions(+), 18 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js index cafb11c9e4..dd9d2532cc 100644 --- a/phpBB/styles/script.js +++ b/phpBB/styles/script.js @@ -46,11 +46,11 @@ phpbb.loading_alert = function() { phpbb.alert = function(title, msg, fadedark) { var div = $('

    ' + title + '

    ' + msg + '

    '); - $(div).bind('click', function(e) { + div.bind('click', function(e) { e.stopPropagation(); return true; }); - $(dark).one('click', function(e) { + dark.one('click', function(e) { var fade = (typeof fadedark !== 'undefined' && !fadedark) ? div : dark; fade.fadeOut(100, function() { div.remove(); @@ -60,7 +60,7 @@ phpbb.alert = function(title, msg, fadedark) { $(document).bind('keydown', function(e) { if (e.keyCode === 13 || e.keyCode === 27) { - $(dark).trigger('click'); + dark.trigger('click'); return false; } return true; @@ -69,18 +69,18 @@ phpbb.alert = function(title, msg, fadedark) { if (loading_alert.is(':visible')) { loading_alert.fadeOut(100, function() { - $(dark).append(div); + dark.append(div); div.fadeIn(100); }); } else if (dark.is(':visible')) { - $(dark).append(div); + dark.append(div); div.fadeIn(100); } else { - $(dark).append(div); + dark.append(div); div.show(); dark.fadeIn(100); } @@ -128,18 +128,18 @@ phpbb.confirm = function(msg, callback, fadedark) { if (loading_alert.is(':visible')) { loading_alert.fadeOut(100, function() { - $(dark).append(div); + dark.append(div); div.fadeIn(100); }); } else if (dark.is(':visible')) { - $(dark).append(div); + dark.append(div); div.fadeIn(100); } else { - $(dark).append(div); + dark.append(div); div.show(); dark.fadeIn(100); } @@ -174,18 +174,14 @@ phpbb.parse_querystring = function(string) { * @param function callback Callback. */ phpbb.ajaxify = function(options, refresh, callback) { - var selector = (typeof options === 'string') ? options : options.selector; - var is_form = $(selector).is('form'); - if (is_form && typeof selector === 'object') + var selector = $((typeof options === 'string') ? options : options.selector); + var is_form = selector.is('form'); + if (is_form) { - selector = $(selector).find('input:submit'); - } - else if (is_form) - { - selector += ' input:submit'; + selector = selector.find('input:submit'); } - $(selector).click(function() { + selector.click(function() { var act, data, path, that = this; if ($(this).data('ajax') == false) -- cgit v1.2.1 From 818d98916873945d7e0e7bf2855e982496c7fe35 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sat, 24 Sep 2011 17:41:58 +0100 Subject: [feature/ajax] Moved script.js into a few different files. Seperated it into: assets/javascript/core.js, styles/prosilver/template/ajax.js and adm/style/ajax.js. PHPBB3-10270 --- phpBB/adm/style/ajax.js | 61 ++++ phpBB/adm/style/overall_footer.html | 3 +- phpBB/assets/javascript/core.js | 300 ++++++++++++++++ phpBB/styles/prosilver/template/ajax.js | 66 ++++ .../styles/prosilver/template/overall_footer.html | 3 +- phpBB/styles/script.js | 400 --------------------- 6 files changed, 431 insertions(+), 402 deletions(-) create mode 100644 phpBB/adm/style/ajax.js create mode 100644 phpBB/assets/javascript/core.js create mode 100644 phpBB/styles/prosilver/template/ajax.js delete mode 100644 phpBB/styles/script.js (limited to 'phpBB') diff --git a/phpBB/adm/style/ajax.js b/phpBB/adm/style/ajax.js new file mode 100644 index 0000000000..407ef92110 --- /dev/null +++ b/phpBB/adm/style/ajax.js @@ -0,0 +1,61 @@ +(function($) { // Avoid conflicts with other libraries + + + +phpbb.add_ajax_callback('forum_down', function(el) { + var tr = $(el).parents('tr'); + if (tr.is(':first-child')) + { + $(el).parents('span').siblings('.up').html('Move up'); + tr.next().find('.up').html('Move up'); + phpbb.ajaxify({selector: $(el).parents('span').siblings('.up').children('a')}, false, 'forum_up'); + } + tr.insertAfter(tr.next()); + if (tr.is(':last-child')) + { + $(el).html('Move down'); + tr.prev().find('.down').html('Move down'); + phpbb.ajaxify({selector: tr.prev().find('.down').children('a')}, false, 'forum_down'); + } +}).add_ajax_callback('forum_up', function(el) { + var tr = $(el).parents('tr'); + if (tr.is(':last-child')) + { + $(el).parents('span').siblings('.down').html('Move down'); + tr.prev().find('.down').html('Move down'); + phpbb.ajaxify({selector: $(el).parents('span').siblings('.down').children('a')}, false, 'forum_down'); + } + tr.insertBefore(tr.prev()); + if (tr.is(':first-child')) + { + $(el).html('Move up'); + tr.next().find('.up').html('Move up'); + phpbb.ajaxify({selector: tr.next().find('.up').children('a')}, false, 'forum_up'); + } +}).add_ajax_callback('act_deact', function(el, res) { + $(el).text(res.text); + var new_href = $(el).attr('href'); + if (new_href.indexOf('deactivate') !== -1) + { + new_href = new_href.replace('deactivate', 'activate') + } + else + { + new_href = new_href.replace('activate', 'deactivate') + } + $(el).attr('href', new_href); +}).add_ajax_callback('row_delete', function(el) { + var tr = $(el).parents('tr'); + tr.remove(); +}); + + + +$('[data-ajax]').each(function() { + var fn = ($(this).data('ajax') !== 'true') ? $(this).data('ajax') : null; + phpbb.ajaxify({selector: this}, $(this).data('refresh') !== undefined, fn); +}); + + + +})(jQuery); // Avoid conflicts with other libraries diff --git a/phpBB/adm/style/overall_footer.html b/phpBB/adm/style/overall_footer.html index ec3e6a30d3..b57f8261a3 100644 --- a/phpBB/adm/style/overall_footer.html +++ b/phpBB/adm/style/overall_footer.html @@ -27,7 +27,8 @@ - + + diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js new file mode 100644 index 0000000000..7337a7fbc0 --- /dev/null +++ b/phpBB/assets/javascript/core.js @@ -0,0 +1,300 @@ +var phpbb = {}; + +(function($) { // Avoid conflicts with other libraries + + + +var dark = $('#darkenwrapper'), + loading_alert = $('#loadingalert'); + + +/** + * Display a loading screen. + * + * @returns object Returns loading_alert. + */ +phpbb.loading_alert = function() { + if (dark.is(':visible')) + { + loading_alert.fadeIn(100); + } + else + { + loading_alert.show(); + dark.fadeIn(100, function() { + setTimeout(function() { + if (loading_alert.is(':visible')) + { + phpbb.alert('Error', 'Error processing your request. Please try again.'); + } + }, 5000); + }); + } + + return loading_alert; +} + +/** + * Display a simple alert similar to JSs native alert(). + * + * @param string title Title of the message, eg "Information" + * @param string msg Message to display. Can be HTML. + * @param bool fadedark Remove the dark background when done? Defaults + * to yes. + * + * @returns object Returns the div created. + */ +phpbb.alert = function(title, msg, fadedark) { + var div = $('

    ' + title + '

    ' + msg + '

    '); + + div.bind('click', function(e) { + e.stopPropagation(); + return true; + }); + dark.one('click', function(e) { + var fade = (typeof fadedark !== 'undefined' && !fadedark) ? div : dark; + fade.fadeOut(100, function() { + div.remove(); + }); + return false; + }); + + $(document).bind('keydown', function(e) { + if (e.keyCode === 13 || e.keyCode === 27) { + dark.trigger('click'); + return false; + } + return true; + }); + + if (loading_alert.is(':visible')) + { + loading_alert.fadeOut(100, function() { + dark.append(div); + div.fadeIn(100); + }); + } + else if (dark.is(':visible')) + { + dark.append(div); + div.fadeIn(100); + } + else + { + dark.append(div); + div.show(); + dark.fadeIn(100); + } + + return div; +} + +/** + * Display a simple yes / no box to the user. + * + * @param string msg Message to display. Can be HTML. + * @param function callback Callback. Bool param, whether the user pressed + * yes or no (or whatever their language is). + * @param bool fadedark Remove the dark background when done? Defaults + * to yes. + * + * @returns object Returns the div created. + */ +phpbb.confirm = function(msg, callback, fadedark) { + var div = $('

    ' + msg + '

    \ +  \ +
    '); + + div.find('.jalertbut').bind('click', function() { + var res = this.value === 'Yes'; + var fade = (typeof fadedark !== 'undefined' && !fadedark && res) ? div : dark; + fade.fadeOut(100, function() { + div.remove(); + }); + callback(res); + return false; + }); + + $(document).bind('keydown', function(e) { + if (e.keyCode === 13) { + $('.jalertbut.button1').trigger('click'); + return false; + } else if (e.keyCode === 27) { + $('.jalertbut.button2').trigger('click'); + return false; + } + return true; + }); + + if (loading_alert.is(':visible')) + { + loading_alert.fadeOut(100, function() { + dark.append(div); + div.fadeIn(100); + }); + } + else if (dark.is(':visible')) + { + dark.append(div); + div.fadeIn(100); + } + else + { + dark.append(div); + div.show(); + dark.fadeIn(100); + } + + return div; +} + +/** + * Turn a querystring into an array. + * + * @argument string string The querystring to parse. + * @returns array The array created. + */ +phpbb.parse_querystring = function(string) { + var end = {}, i; + + string = string.split('&'); + for (i = 0; i < string.length; i++) + { + end[string[i].split('=')[0]] = decodeURIComponent(string[i].split('=')[1]); + } + return end; +} + + +/** + * Makes a link use AJAX instead of loading an entire page. + * + * @param object options Options, if a string will be the selector. + * @param bool/function refresh If we are sent back a refresh, should it be + * acted upon? This can either be true / false / a function. + * @param function callback Callback. + */ +phpbb.ajaxify = function(options, refresh, callback) { + var selector = $((typeof options === 'string') ? options : options.selector); + var is_form = selector.is('form'); + if (is_form) + { + selector = selector.find('input:submit'); + } + + selector.click(function() { + var act, data, path, that = this; + + if ($(this).data('ajax') == false) + { + return true; + } + + function return_handler(res) + { + if (typeof res.S_CONFIRM_ACTION === 'undefined') + { + // It is a standard link, no confirm_box required. + if (typeof res.MESSAGE_TITLE !== 'undefined') + { + var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); + } + else + { + dark.fadeOut(100); + } + + if (typeof phpbb.ajax_callbacks[callback] === 'function') + { + phpbb.ajax_callbacks[callback](that, res, (is_form) ? act : null); + } + + if (res.REFRESH_DATA) + { + if (typeof refresh === 'function') + { + refresh = refresh(res.REFRESH_DATA.url); + } + else if (typeof refresh !== 'boolean') + { + refresh = false; + } + + setTimeout(function() { + if (refresh) + { + window.location = res.REFRESH_DATA.url; + } + + dark.fadeOut(100, function() { + alert.remove(); + }); + }, res.REFRESH_DATA.time * 1000); + } + } + else + { + // confirm_box - confirm with the user and send back + phpbb.confirm(res.MESSAGE_TEXT, function(del) { + if (del) + { + phpbb.loading_alert(); + data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); + $.post(res.S_CONFIRM_ACTION, data + '&confirm=' + res.YES_VALUE, return_handler); + } + }, false); + } + } + + var run_exception = (typeof options.exception === 'function'); + if (is_form) + { + act = /action\[([a-z]+)\]/.exec(this.name); + data = decodeURI($(this).closest('form').serialize()); + path = $(this).closest('form').attr('action').replace('&', '&'); + + if (act) + { + act = act[1] + data += '&action=' + act; + } + else + { + data += '&' + this.name + '=' + this.value; + } + + if (run_exception && options.exception($(this).parents('form'), act, data)) + { + return true; + } + phpbb.loading_alert(); + $.post(path, data, return_handler); + } + else + { + if (run_exception && options.exception($(this).parents('form'))) + { + return true; + } + phpbb.loading_alert(); + $.get(this.href, return_handler); + } + + return false; + }); + return this; +} + +phpbb.ajax_callbacks = {}; +phpbb.add_ajax_callback = function(id, callback) +{ + if (typeof callback === 'function') + { + phpbb.ajax_callbacks[id] = callback; + } + return this; +} + + + +})(jQuery); // Avoid conflicts with other libraries \ No newline at end of file diff --git a/phpBB/styles/prosilver/template/ajax.js b/phpBB/styles/prosilver/template/ajax.js new file mode 100644 index 0000000000..38233ad0e0 --- /dev/null +++ b/phpBB/styles/prosilver/template/ajax.js @@ -0,0 +1,66 @@ +(function($) { // Avoid conflicts with other libraries + + + +phpbb.add_ajax_callback('post_delete', function(el) { + if ($(this).data('refresh') === undefined) + { + var pid = el.href.split('&p=')[1]; + $(el).parents('div #p' + pid).fadeOut(function() { + $(this).remove(); + }); + } +}).add_ajax_callback('bookmark', function(el, res) { + var text = (res.MESSAGE_TEXT.indexOf('Removed') === -1); + text = (text) ? 'Remove from bookmarks' : 'Bookmark topic'; + $(el).text(el.title = text); +}).add_ajax_callback('topic_subscribe', function(el) { + $(el).text(el.title = 'Unsubscribe topic'); +}).add_ajax_callback('topic_unsubscribe', function(el) { + $(el).text(el.title = 'Subscribe forum'); +}).add_ajax_callback('forum_subscribe', function(el) { + $(el).text(el.title = 'Unsubscribe topic'); +}).add_ajax_callback('forum_unsubscribe', function(el) { + $(el).text(el.title = 'Subscribe forum'); +}).add_ajax_callback('post_approve', function(el, res, act) { + $(el).parents((act === 'approve') ? '.rules' : '.post').fadeOut(function() { + $(this).remove(); + }); +}).add_ajax_callback('qr-submit', function(el) { + $(el).parents('form').fadeOut(function() { + $(this).remove(); + }); +}).add_ajax_callback('row_delete', function(el) { + var tr = $(el).parents('tr'); + tr.remove(); +}).add_ajax_callback('zebra', function(el, res) { + if (res.success) { + $('.zebra').html(res.MESSAGE_TEXT); + $($('.zebra').get(1)).remove(); + } +});; + + + +$('[data-ajax]').each(function() { + var fn = ($(this).data('ajax') !== 'true') ? $(this).data('ajax') : null; + phpbb.ajaxify({selector: this}, $(this).data('refresh') !== undefined, fn); +}); + + + +phpbb.ajaxify({ + selector: '#quickmodform', + exception: function(el, act, data) { + var d = phpbb.parse_querystring(data).action; + if (d == 'make_normal') + { + return !(el.find('select option[value="make_global"]').length); + } + return !(d == 'lock' || d == 'unlock' || d == 'delete_topic' || d.slice(0, 5) == 'make_'); + } +}, true); + + + +})(jQuery); // Avoid conflicts with other libraries diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index 20f6ee1f91..a89cd7f04e 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -40,7 +40,8 @@ - + + diff --git a/phpBB/styles/script.js b/phpBB/styles/script.js deleted file mode 100644 index dd9d2532cc..0000000000 --- a/phpBB/styles/script.js +++ /dev/null @@ -1,400 +0,0 @@ -var phpbb = {}; - -(function($) { // Avoid conflicts with other libraries - - -var dark = $('#darkenwrapper'), - loading_alert = $('#loadingalert'); - - -/** - * Display a loading screen. - * - * @returns object Returns loading_alert. - */ -phpbb.loading_alert = function() { - if (dark.is(':visible')) - { - loading_alert.fadeIn(100); - } - else - { - loading_alert.show(); - dark.fadeIn(100, function() { - setTimeout(function() { - if (loading_alert.is(':visible')) - { - phpbb.alert('Error', 'Error processing your request. Please try again.'); - } - }, 5000); - }); - } - - return loading_alert; -} - -/** - * Display a simple alert similar to JSs native alert(). - * - * @param string title Title of the message, eg "Information" - * @param string msg Message to display. Can be HTML. - * @param bool fadedark Remove the dark background when done? Defaults - * to yes. - * - * @returns object Returns the div created. - */ -phpbb.alert = function(title, msg, fadedark) { - var div = $('

    ' + title + '

    ' + msg + '

    '); - - div.bind('click', function(e) { - e.stopPropagation(); - return true; - }); - dark.one('click', function(e) { - var fade = (typeof fadedark !== 'undefined' && !fadedark) ? div : dark; - fade.fadeOut(100, function() { - div.remove(); - }); - return false; - }); - - $(document).bind('keydown', function(e) { - if (e.keyCode === 13 || e.keyCode === 27) { - dark.trigger('click'); - return false; - } - return true; - }); - - if (loading_alert.is(':visible')) - { - loading_alert.fadeOut(100, function() { - dark.append(div); - div.fadeIn(100); - }); - } - else if (dark.is(':visible')) - { - dark.append(div); - div.fadeIn(100); - } - else - { - dark.append(div); - div.show(); - dark.fadeIn(100); - } - - return div; -} - -/** - * Display a simple yes / no box to the user. - * - * @param string msg Message to display. Can be HTML. - * @param function callback Callback. Bool param, whether the user pressed - * yes or no (or whatever their language is). - * @param bool fadedark Remove the dark background when done? Defaults - * to yes. - * - * @returns object Returns the div created. - */ -phpbb.confirm = function(msg, callback, fadedark) { - var div = $('

    ' + msg + '

    \ -  \ -
    '); - - div.find('.jalertbut').bind('click', function() { - var res = this.value === 'Yes'; - var fade = (typeof fadedark !== 'undefined' && !fadedark && res) ? div : dark; - fade.fadeOut(100, function() { - div.remove(); - }); - callback(res); - return false; - }); - - $(document).bind('keydown', function(e) { - if (e.keyCode === 13) { - $('.jalertbut.button1').trigger('click'); - return false; - } else if (e.keyCode === 27) { - $('.jalertbut.button2').trigger('click'); - return false; - } - return true; - }); - - if (loading_alert.is(':visible')) - { - loading_alert.fadeOut(100, function() { - dark.append(div); - div.fadeIn(100); - }); - } - else if (dark.is(':visible')) - { - dark.append(div); - div.fadeIn(100); - } - else - { - dark.append(div); - div.show(); - dark.fadeIn(100); - } - - return div; -} - -/** - * Turn a querystring into an array. - * - * @argument string string The querystring to parse. - * @returns array The array created. - */ -phpbb.parse_querystring = function(string) { - var end = {}, i; - - string = string.split('&'); - for (i = 0; i < string.length; i++) - { - end[string[i].split('=')[0]] = decodeURIComponent(string[i].split('=')[1]); - } - return end; -} - - -/** - * Makes a link use AJAX instead of loading an entire page. - * - * @param object options Options, if a string will be the selector. - * @param bool/function refresh If we are sent back a refresh, should it be - * acted upon? This can either be true / false / a function. - * @param function callback Callback. - */ -phpbb.ajaxify = function(options, refresh, callback) { - var selector = $((typeof options === 'string') ? options : options.selector); - var is_form = selector.is('form'); - if (is_form) - { - selector = selector.find('input:submit'); - } - - selector.click(function() { - var act, data, path, that = this; - - if ($(this).data('ajax') == false) - { - return true; - } - - function return_handler(res) - { - if (typeof res.S_CONFIRM_ACTION === 'undefined') - { - // It is a standard link, no confirm_box required. - if (typeof res.MESSAGE_TITLE !== 'undefined') - { - var alert = phpbb.alert(res.MESSAGE_TITLE, res.MESSAGE_TEXT); - } - else - { - dark.fadeOut(100); - } - - if (typeof phpbb.ajax_callbacks[callback] === 'function') - { - phpbb.ajax_callbacks[callback](that, res, (is_form) ? act : null); - } - - if (res.REFRESH_DATA) - { - if (typeof refresh === 'function') - { - refresh = refresh(res.REFRESH_DATA.url); - } - else if (typeof refresh !== 'boolean') - { - refresh = false; - } - - setTimeout(function() { - if (refresh) - { - window.location = res.REFRESH_DATA.url; - } - - dark.fadeOut(100, function() { - alert.remove(); - }); - }, res.REFRESH_DATA.time * 1000); - } - } - else - { - // confirm_box - confirm with the user and send back - phpbb.confirm(res.MESSAGE_TEXT, function(del) { - if (del) - { - phpbb.loading_alert(); - data = $('
    ' + res.S_HIDDEN_FIELDS + '
    ').serialize(); - $.post(res.S_CONFIRM_ACTION, data + '&confirm=' + res.YES_VALUE, return_handler); - } - }, false); - } - } - - var run_exception = (typeof options.exception === 'function'); - if (is_form) - { - act = /action\[([a-z]+)\]/.exec(this.name); - data = decodeURI($(this).closest('form').serialize()); - path = $(this).closest('form').attr('action').replace('&', '&'); - - if (act) - { - act = act[1] - data += '&action=' + act; - } - else - { - data += '&' + this.name + '=' + this.value; - } - - if (run_exception && options.exception($(this).parents('form'), act, data)) - { - return true; - } - phpbb.loading_alert(); - $.post(path, data, return_handler); - } - else - { - if (run_exception && options.exception($(this).parents('form'))) - { - return true; - } - phpbb.loading_alert(); - $.get(this.href, return_handler); - } - - return false; - }); - return this; -} - -phpbb.ajax_callbacks = {}; -phpbb.add_ajax_callback = function(id, callback) -{ - if (typeof callback === 'function') - { - phpbb.ajax_callbacks[id] = callback; - } - return this; -} - - -phpbb.add_ajax_callback('post_delete', function(el) { - if ($(this).data('refresh') === undefined) - { - var pid = el.href.split('&p=')[1]; - $(el).parents('div #p' + pid).fadeOut(function() { - $(this).remove(); - }); - } -}).add_ajax_callback('bookmark', function(el, res) { - var text = (res.MESSAGE_TEXT.indexOf('Removed') === -1); - text = (text) ? 'Remove from bookmarks' : 'Bookmark topic'; - $(el).text(el.title = text); -}).add_ajax_callback('topic_subscribe', function(el) { - $(el).text(el.title = 'Unsubscribe topic'); -}).add_ajax_callback('topic_unsubscribe', function(el) { - $(el).text(el.title = 'Subscribe forum'); -}).add_ajax_callback('forum_subscribe', function(el) { - $(el).text(el.title = 'Unsubscribe topic'); -}).add_ajax_callback('forum_unsubscribe', function(el) { - $(el).text(el.title = 'Subscribe forum'); -}).add_ajax_callback('post_approve', function(el, res, act) { - $(el).parents((act === 'approve') ? '.rules' : '.post').fadeOut(function() { - $(this).remove(); - }); -}).add_ajax_callback('qr-submit', function(el) { - $(el).parents('form').fadeOut(function() { - $(this).remove(); - }); -}).add_ajax_callback('forum_down', function(el) { - var tr = $(el).parents('tr'); - if (tr.is(':first-child')) - { - $(el).parents('span').siblings('.up').html('Move up'); - tr.next().find('.up').html('Move up'); - phpbb.ajaxify({selector: $(el).parents('span').siblings('.up').children('a')}, false, 'forum_up'); - } - tr.insertAfter(tr.next()); - if (tr.is(':last-child')) - { - $(el).html('Move down'); - tr.prev().find('.down').html('Move down'); - phpbb.ajaxify({selector: tr.prev().find('.down').children('a')}, false, 'forum_down'); - } -}).add_ajax_callback('forum_up', function(el) { - var tr = $(el).parents('tr'); - if (tr.is(':last-child')) - { - $(el).parents('span').siblings('.down').html('Move down'); - tr.prev().find('.down').html('Move down'); - phpbb.ajaxify({selector: $(el).parents('span').siblings('.down').children('a')}, false, 'forum_down'); - } - tr.insertBefore(tr.prev()); - if (tr.is(':first-child')) - { - $(el).html('Move up'); - tr.next().find('.up').html('Move up'); - phpbb.ajaxify({selector: tr.next().find('.up').children('a')}, false, 'forum_up'); - } -}).add_ajax_callback('act_deact', function(el, res) { - $(el).text(res.text); - var new_href = $(el).attr('href'); - if (new_href.indexOf('deactivate') !== -1) - { - new_href = new_href.replace('deactivate', 'activate') - } - else - { - new_href = new_href.replace('activate', 'deactivate') - } - $(el).attr('href', new_href); -}).add_ajax_callback('row_delete', function(el) { - var tr = $(el).parents('tr'); - tr.remove(); -}).add_ajax_callback('zebra', function(el, res) { - if (res.success) { - $('.zebra').html(res.MESSAGE_TEXT); - $($('.zebra').get(1)).remove(); - } -});; - - - -$('[data-ajax]').each(function() { - var fn = ($(this).data('ajax') !== 'true') ? $(this).data('ajax') : null; - phpbb.ajaxify({selector: this}, $(this).data('refresh') !== undefined, fn); -}); - - - -phpbb.ajaxify({ - selector: '#quickmodform', - exception: function(el, act, data) { - var d = phpbb.parse_querystring(data).action; - if (d == 'make_normal') - { - return !(el.find('select option[value="make_global"]').length); - } - return !(d == 'lock' || d == 'unlock' || d == 'delete_topic' || d.slice(0, 5) == 'make_'); - } -}, true); - - -})(jQuery); // Avoid conflicts with other libraries -- cgit v1.2.1 From 0e55b2393dffa269a724f3090469dad563217dff Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Sun, 25 Sep 2011 16:02:26 +0100 Subject: [ticket/10270] Removed all the inline language and HTML from the JS. PHPBB3-10270 --- phpBB/assets/javascript/core.js | 23 ++++++++++++++-------- phpBB/language/en/common.php | 2 ++ phpBB/styles/prosilver/template/ajax.js | 12 ----------- .../styles/prosilver/template/overall_footer.html | 13 +++++++++--- .../styles/prosilver/template/overall_header.html | 2 +- phpBB/viewtopic.php | 2 ++ 6 files changed, 30 insertions(+), 24 deletions(-) (limited to 'phpBB') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 7337a7fbc0..d685d28c81 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -25,7 +25,7 @@ phpbb.loading_alert = function() { setTimeout(function() { if (loading_alert.is(':visible')) { - phpbb.alert('Error', 'Error processing your request. Please try again.'); + phpbb.alert($('body').data('l-err'), $('body').data('l-err-processing-req')); } }, 5000); }); @@ -45,7 +45,9 @@ phpbb.loading_alert = function() { * @returns object Returns the div created. */ phpbb.alert = function(title, msg, fadedark) { - var div = $('

    ' + title + '

    ' + msg + '

    '); + var div = $('#jalert_alert'); + div.find('h3').html(title); + div.find('p').html(msg); div.bind('click', function(e) { e.stopPropagation(); @@ -54,7 +56,7 @@ phpbb.alert = function(title, msg, fadedark) { dark.one('click', function(e) { var fade = (typeof fadedark !== 'undefined' && !fadedark) ? div : dark; fade.fadeOut(100, function() { - div.remove(); + div.hide(); }); return false; }); @@ -101,15 +103,14 @@ phpbb.alert = function(title, msg, fadedark) { * @returns object Returns the div created. */ phpbb.confirm = function(msg, callback, fadedark) { - var div = $('

    ' + msg + '

    \ -  \ -
    '); + var div = $('#jalert_confirm'); + div.find('p').html(msg); div.find('.jalertbut').bind('click', function() { var res = this.value === 'Yes'; var fade = (typeof fadedark !== 'undefined' && !fadedark && res) ? div : dark; fade.fadeOut(100, function() { - div.remove(); + div.hide(); }); callback(res); return false; @@ -227,7 +228,7 @@ phpbb.ajaxify = function(options, refresh, callback) { } dark.fadeOut(100, function() { - alert.remove(); + alert.hide(); }); }, res.REFRESH_DATA.time * 1000); } @@ -296,5 +297,11 @@ phpbb.add_ajax_callback = function(id, callback) } +phpbb.add_ajax_callback('alt_text', function(el) { + var alt_text = $(el).data('alt-text'); + $(el).data('alt-text', $(el).text()); + $(el).text(el.title = alt_text); +}); + })(jQuery); // Avoid conflicts with other libraries \ No newline at end of file diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index e8fff96e5a..ff3d229915 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -179,10 +179,12 @@ $lang = array_merge($lang, array( 'ERR_CONNECTING_SERVER' => 'Error connecting to the server.', 'ERR_JAB_AUTH' => 'Could not authorise on Jabber server.', 'ERR_JAB_CONNECT' => 'Could not connect to Jabber server.', + 'ERR_PROCESSING_REQ' => 'There was an error processing your request. Please try again.', 'ERR_UNABLE_TO_LOGIN' => 'The specified username or password is incorrect.', 'ERR_UNWATCHING' => 'An error occured while trying to unsubscribe.', 'ERR_WATCHING' => 'An error occured while trying to subscribe.', 'ERR_WRONG_PATH_TO_PHPBB' => 'The phpBB path specified appears to be invalid.', + 'ERROR' => 'Error', 'EXPAND_VIEW' => 'Expand view', 'EXTENSION' => 'Extension', 'EXTENSION_CONTROLLER_MISSING' => 'The extension %s is missing a controller class and cannot be accessed through the front-end.', diff --git a/phpBB/styles/prosilver/template/ajax.js b/phpBB/styles/prosilver/template/ajax.js index 38233ad0e0..58b765779e 100644 --- a/phpBB/styles/prosilver/template/ajax.js +++ b/phpBB/styles/prosilver/template/ajax.js @@ -10,18 +10,6 @@ phpbb.add_ajax_callback('post_delete', function(el) { $(this).remove(); }); } -}).add_ajax_callback('bookmark', function(el, res) { - var text = (res.MESSAGE_TEXT.indexOf('Removed') === -1); - text = (text) ? 'Remove from bookmarks' : 'Bookmark topic'; - $(el).text(el.title = text); -}).add_ajax_callback('topic_subscribe', function(el) { - $(el).text(el.title = 'Unsubscribe topic'); -}).add_ajax_callback('topic_unsubscribe', function(el) { - $(el).text(el.title = 'Subscribe forum'); -}).add_ajax_callback('forum_subscribe', function(el) { - $(el).text(el.title = 'Unsubscribe topic'); -}).add_ajax_callback('forum_unsubscribe', function(el) { - $(el).text(el.title = 'Subscribe forum'); }).add_ajax_callback('post_approve', function(el, res, act) { $(el).parents((act === 'approve') ? '.rules' : '.post').fadeOut(function() { $(this).remove(); diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index a89cd7f04e..362f8bc1cc 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -8,9 +8,9 @@ - +
    -
    +
    • @@ -55,14 +55,14 @@
    -
    +
    -
    +
    {L_NO_FORUMS} -
    +
    diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index 1561bae26a..81736cc917 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -3,8 +3,8 @@ +
    -
    +
    • @@ -156,16 +156,16 @@
    -
    +
    -
    +
    {L_NO_TOPICS} -
    +
    -- cgit v1.2.1 From 259b86199be326e75080630f28407114aab7a56a Mon Sep 17 00:00:00 2001 From: Shibu Lijack Date: Sat, 31 Mar 2012 18:57:49 +0530 Subject: [ticket/10734] Fixed template files Removed unnecessary span from several other template files PHPBB3-10734 --- phpBB/styles/prosilver/template/faq_body.html | 4 ++-- phpBB/styles/prosilver/template/login_body.html | 8 ++++---- phpBB/styles/prosilver/template/login_forum.html | 4 ++-- phpBB/styles/prosilver/template/memberlist_body.html | 12 ++++++------ phpBB/styles/prosilver/template/memberlist_email.html | 8 ++++---- phpBB/styles/prosilver/template/memberlist_search.html | 4 ++-- phpBB/styles/prosilver/template/memberlist_view.html | 12 ++++++------ phpBB/styles/prosilver/template/message_body.html | 4 ++-- phpBB/styles/prosilver/template/search_results.html | 16 ++++++++-------- 9 files changed, 36 insertions(+), 36 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/faq_body.html b/phpBB/styles/prosilver/template/faq_body.html index 36d677a505..7aa32b66b9 100644 --- a/phpBB/styles/prosilver/template/faq_body.html +++ b/phpBB/styles/prosilver/template/faq_body.html @@ -4,7 +4,7 @@ diff --git a/phpBB/styles/prosilver/template/login_body.html b/phpBB/styles/prosilver/template/login_body.html index 03615398c1..a3a70e3333 100644 --- a/phpBB/styles/prosilver/template/login_body.html +++ b/phpBB/styles/prosilver/template/login_body.html @@ -8,7 +8,7 @@
    -
    +

    {LOGIN_EXPLAIN}{L_LOGIN}

    @@ -45,13 +45,13 @@
    -
    +
    -
    +

    {L_REGISTER}

    @@ -61,7 +61,7 @@

    {L_REGISTER}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/login_forum.html b/phpBB/styles/prosilver/template/login_forum.html index 569638411c..e66e531fcd 100644 --- a/phpBB/styles/prosilver/template/login_forum.html +++ b/phpBB/styles/prosilver/template/login_forum.html @@ -5,7 +5,7 @@ {S_FORM_TOKEN}
    -
    +

    {L_LOGIN_FORUM}

    @@ -27,7 +27,7 @@ {S_LOGIN_REDIRECT} -
    +
    diff --git a/phpBB/styles/prosilver/template/memberlist_body.html b/phpBB/styles/prosilver/template/memberlist_body.html index 504d1b80ef..f6f7bdc485 100644 --- a/phpBB/styles/prosilver/template/memberlist_body.html +++ b/phpBB/styles/prosilver/template/memberlist_body.html @@ -28,7 +28,7 @@

    {PAGE_TITLE}: {SEARCH_WORDS}

    -
    +
    -
    +
    -
    +
    @@ -77,11 +77,11 @@
    -
    +
    -
    +
    @@ -121,7 +121,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/memberlist_email.html b/phpBB/styles/prosilver/template/memberlist_email.html index 9759abb859..062d266252 100644 --- a/phpBB/styles/prosilver/template/memberlist_email.html +++ b/phpBB/styles/prosilver/template/memberlist_email.html @@ -5,7 +5,7 @@
    -
    +

    {ERROR_MESSAGE}

    @@ -46,17 +46,17 @@
    -
    +
    -
    +
    -
    +
    {S_FORM_TOKEN}
    diff --git a/phpBB/styles/prosilver/template/memberlist_search.html b/phpBB/styles/prosilver/template/memberlist_search.html index 9df648f644..8d2ccf044c 100644 --- a/phpBB/styles/prosilver/template/memberlist_search.html +++ b/phpBB/styles/prosilver/template/memberlist_search.html @@ -44,7 +44,7 @@ function insert_single(user)
    -
    +

    {L_FIND_USERNAME_EXPLAIN}

    @@ -118,7 +118,7 @@ function insert_single(user) {S_FORM_TOKEN} -
    +
    diff --git a/phpBB/styles/prosilver/template/memberlist_view.html b/phpBB/styles/prosilver/template/memberlist_view.html index d8bb92a731..b50e3a84ad 100644 --- a/phpBB/styles/prosilver/template/memberlist_view.html +++ b/phpBB/styles/prosilver/template/memberlist_view.html @@ -4,7 +4,7 @@
    -
    +
    @@ -49,11 +49,11 @@
    -
    +
    -
    +

    {L_CONTACT_USER} {USERNAME}

    @@ -94,18 +94,18 @@
    -
    +
    -
    +

    {L_SIGNATURE}

    {SIGNATURE}
    -
    +
    diff --git a/phpBB/styles/prosilver/template/message_body.html b/phpBB/styles/prosilver/template/message_body.html index 3a970769b7..645807cd89 100644 --- a/phpBB/styles/prosilver/template/message_body.html +++ b/phpBB/styles/prosilver/template/message_body.html @@ -5,11 +5,11 @@
    -
    +

    {MESSAGE_TITLE}

    {MESSAGE_TEXT}

    {L_RETURN_TO_SEARCH_ADV}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/search_results.html b/phpBB/styles/prosilver/template/search_results.html index 942d154d44..dbda076086 100644 --- a/phpBB/styles/prosilver/template/search_results.html +++ b/phpBB/styles/prosilver/template/search_results.html @@ -36,7 +36,7 @@
    -
    +
    • @@ -71,13 +71,13 @@
    -
    +
    -
    +
    {L_NO_SEARCH_RESULTS} -
    +
    @@ -85,7 +85,7 @@
    -
    +
    @@ -114,13 +114,13 @@ -
    +
    -
    +
    {L_NO_SEARCH_RESULTS} -
    +
    -- cgit v1.2.1 From d0e0f3e72b6d37b63c1e2eac7e1fb5a789a4dc43 Mon Sep 17 00:00:00 2001 From: Shibu Lijack Date: Sat, 31 Mar 2012 19:54:40 +0530 Subject: [ticket/10734] Fixed common.css Fixed padding. PHPBB3-10734 --- phpBB/styles/prosilver/theme/common.css | 16 +++++++++++++--- 1 file changed, 13 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 31015b28f9..6fd410029d 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -251,30 +251,35 @@ a#logo:hover { .headerbar { background: transparent none repeat-x 0 0; margin-bottom: 4px; - padding: 0 5px; + padding: 5px; } .navbar { padding: 0 10px; + background-color: #ebebeb; + padding: 5px 10px 5px 10px; } .forabg { background: transparent none repeat-x 0 0; margin-bottom: 4px; - padding: 0 5px; + padding: 5px; clear: both; } .forumbg { background: transparent none repeat-x 0 0; margin-bottom: 4px; - padding: 0 5px; + padding: 5px; clear: both; } .panel { margin-bottom: 4px; padding: 0 10px; + padding: 5px 10px; + background-color: #f3f3f3; + color: #3f3f3f; } .post { @@ -319,6 +324,11 @@ span.corners-bottom span { background-position: 100% 100%; } +span.clear { + background-image: none; + clear: both; +} + .headbg span.corners-bottom { margin-bottom: -1px; } -- cgit v1.2.1 From 05cbecb5581b0191ce9ba82b7966858595f81f85 Mon Sep 17 00:00:00 2001 From: Shibu Lijack Date: Sat, 31 Mar 2012 20:40:01 +0530 Subject: [ticket/10734] Removed unnecessary images Deleted the corner_left and corner_right images. PHPBB-10734 --- phpBB/styles/prosilver/theme/images/.DS_Store | Bin 0 -> 6148 bytes phpBB/styles/prosilver/theme/images/corners_left.gif | Bin 55 -> 0 bytes phpBB/styles/prosilver/theme/images/corners_left.png | Bin 195 -> 0 bytes phpBB/styles/prosilver/theme/images/corners_right.gif | Bin 56 -> 0 bytes phpBB/styles/prosilver/theme/images/corners_right.png | Bin 201 -> 0 bytes 5 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 phpBB/styles/prosilver/theme/images/.DS_Store delete mode 100644 phpBB/styles/prosilver/theme/images/corners_left.gif delete mode 100644 phpBB/styles/prosilver/theme/images/corners_left.png delete mode 100644 phpBB/styles/prosilver/theme/images/corners_right.gif delete mode 100644 phpBB/styles/prosilver/theme/images/corners_right.png (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/images/.DS_Store b/phpBB/styles/prosilver/theme/images/.DS_Store new file mode 100644 index 0000000000..5008ddfcf5 Binary files /dev/null and b/phpBB/styles/prosilver/theme/images/.DS_Store differ diff --git a/phpBB/styles/prosilver/theme/images/corners_left.gif b/phpBB/styles/prosilver/theme/images/corners_left.gif deleted file mode 100644 index 206e50368d..0000000000 Binary files a/phpBB/styles/prosilver/theme/images/corners_left.gif and /dev/null differ diff --git a/phpBB/styles/prosilver/theme/images/corners_left.png b/phpBB/styles/prosilver/theme/images/corners_left.png deleted file mode 100644 index 256bde3daa..0000000000 Binary files a/phpBB/styles/prosilver/theme/images/corners_left.png and /dev/null differ diff --git a/phpBB/styles/prosilver/theme/images/corners_right.gif b/phpBB/styles/prosilver/theme/images/corners_right.gif deleted file mode 100644 index 0ba66d50b2..0000000000 Binary files a/phpBB/styles/prosilver/theme/images/corners_right.gif and /dev/null differ diff --git a/phpBB/styles/prosilver/theme/images/corners_right.png b/phpBB/styles/prosilver/theme/images/corners_right.png deleted file mode 100644 index df41823b4c..0000000000 Binary files a/phpBB/styles/prosilver/theme/images/corners_right.png and /dev/null differ -- cgit v1.2.1 From 33a10f57f96d365bac2cd23764d23c76325d2c1b Mon Sep 17 00:00:00 2001 From: Shibu Lijack Date: Sat, 31 Mar 2012 22:21:18 +0530 Subject: [ticket/10734] Removed unwanted CSS hacks Removed -webkit and -moz as suggested by cyberalien. Removed unused style elements. PHPBB-10734 --- phpBB/styles/prosilver/theme/colours.css | 32 -------------------------------- 1 file changed, 32 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/colours.css b/phpBB/styles/prosilver/theme/colours.css index 11fa6932db..4f7bc12818 100644 --- a/phpBB/styles/prosilver/theme/colours.css +++ b/phpBB/styles/prosilver/theme/colours.css @@ -48,49 +48,33 @@ hr { background-image: url("./images/bg_header.gif"); color: #FFFFFF; border-radius: 7px; - -webkit-border-radius: 7px; - -moz-border-radius: 7px; } .navbar { background-color: #cadceb; border-radius: 7px; - -webkit-border-radius: 7px; - -moz-border-radius: 7px; - } .forabg { background-color: #0076b1; background-image: url("./images/bg_list.gif"); border-radius: 7px; - -webkit-border-radius: 7px; - -moz-border-radius: 7px; - } .forumbg { background-color: #12A3EB; background-image: url("./images/bg_header.gif"); border-radius: 7px; - -webkit-border-radius: 7px; - -moz-border-radius: 7px; - } .panel { background-color: #ECF1F3; color: #28313F; border-radius: 7px; - -webkit-border-radius: 7px; - -moz-border-radius: 7px; } .post { border-radius: 7px; - -webkit-border-radius: 7px; - -moz-border-radius: 7px; - } .post:target .content { @@ -113,22 +97,6 @@ hr { background-color: #E7E8EA; } -span.corners-top { - -} - -span.corners-top span { - -} - -span.corners-bottom { - -} - -span.corners-bottom span { - -} - /* Horizontal lists ----------------------------------------*/ -- cgit v1.2.1 From 8e2cbe39cdd7672638dbc0d6a0f65a7365db0d91 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 31 Mar 2012 04:06:52 +0200 Subject: [feature/dic] Convert common.php to Symfony2 DependencyInjection component PHPBB3-10739 --- phpBB/common.php | 43 +++++++++++----------- phpBB/composer.json | 5 ++- phpBB/composer.lock | 16 +++++++-- phpBB/config/parameters.yml | 11 ++++++ phpBB/config/services.yml | 87 +++++++++++++++++++++++++++++++++++++++++++++ 5 files changed, 138 insertions(+), 24 deletions(-) create mode 100644 phpBB/config/parameters.yml create mode 100644 phpBB/config/services.yml (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index b3b8d7e4f7..aa6115fe1c 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -15,6 +15,9 @@ if (!defined('IN_PHPBB')) exit; } +use Symfony\Component\Config\FileLocator; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; use Symfony\Component\EventDispatcher\EventDispatcher; require($phpbb_root_path . 'includes/startup.' . $phpEx); @@ -91,43 +94,41 @@ $phpbb_class_loader_ext->register(); $phpbb_class_loader = new phpbb_class_loader('phpbb_', $phpbb_root_path . 'includes/', ".$phpEx"); $phpbb_class_loader->register(); +$container = new ContainerBuilder(); +$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/config')); +$loader->load('parameters.yml'); +$loader->load('services.yml'); + +$container->setParameter('core.root_path', $phpbb_root_path); +$container->setParameter('core.php_ext', $phpEx); + // set up caching -$cache_factory = new phpbb_cache_factory($acm_type); -$cache = $cache_factory->get_service(); +$cache = $container->get('cache'); $phpbb_class_loader_ext->set_cache($cache->get_driver()); $phpbb_class_loader->set_cache($cache->get_driver()); // Instantiate some basic classes -$phpbb_dispatcher = new phpbb_event_dispatcher(); -$request = new phpbb_request(); -$user = new phpbb_user(); -$auth = new phpbb_auth(); -$db = new $sql_db(); +$phpbb_dispatcher = $container->get('dispatcher'); +$request = $container->get('request'); +$user = $container->get('user'); +$auth = $container->get('auth'); +$db = $container->get('dbal.conn'); // make sure request_var uses this request instance request_var('', 0, false, false, $request); // "dependency injection" for a function -// Connect to DB -$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, defined('PHPBB_DB_NEW_LINK') ? PHPBB_DB_NEW_LINK : false); - -// We do not need this any longer, unset for safety purposes -unset($dbpasswd); - // Grab global variables, re-cache if necessary -$config = new phpbb_config_db($db, $cache->get_driver(), CONFIG_TABLE); +$config = $container->get('config'); set_config(null, null, null, $config); set_config_count(null, null, null, $config); // load extensions -$phpbb_extension_manager = new phpbb_extension_manager($db, EXT_TABLE, $phpbb_root_path, ".$phpEx", $cache->get_driver()); +$phpbb_extension_manager = $container->get('ext.manager'); -// Initialize style -$phpbb_style_resource_locator = new phpbb_style_resource_locator(); -$phpbb_style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); -$template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator, $phpbb_style_path_provider); -$style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator, $phpbb_style_path_provider, $template); +$template = $container->get('template'); +$style = $container->get('style'); -$phpbb_subscriber_loader = new phpbb_event_extension_subscriber_loader($phpbb_dispatcher, $phpbb_extension_manager); +$phpbb_subscriber_loader = $container->get('event.subscriber_loader'); $phpbb_subscriber_loader->load(); // Add own hook handler diff --git a/phpBB/composer.json b/phpBB/composer.json index 1059b97f84..56fb2454d1 100644 --- a/phpBB/composer.json +++ b/phpBB/composer.json @@ -1,5 +1,8 @@ { "require": { - "symfony/event-dispatcher": "2.0.*" + "symfony/config": "2.0.*", + "symfony/dependency-injection": "2.0.*", + "symfony/event-dispatcher": "2.0.*", + "symfony/yaml": "2.0.*" } } diff --git a/phpBB/composer.lock b/phpBB/composer.lock index 062ad4b3aa..1707524da1 100644 --- a/phpBB/composer.lock +++ b/phpBB/composer.lock @@ -1,9 +1,21 @@ { - "hash": "9bada3748ec2933fe0864dcfafbcd671", + "hash": "b1e9c3bcfcee0c5630742abb3e49685f", "packages": [ + { + "package": "symfony/config", + "version": "v2.0.12" + }, + { + "package": "symfony/dependency-injection", + "version": "v2.0.12" + }, { "package": "symfony/event-dispatcher", - "version": "v2.0.10" + "version": "v2.0.12" + }, + { + "package": "symfony/yaml", + "version": "v2.0.12" } ], "aliases": [] diff --git a/phpBB/config/parameters.yml b/phpBB/config/parameters.yml new file mode 100644 index 0000000000..8a90c8e99d --- /dev/null +++ b/phpBB/config/parameters.yml @@ -0,0 +1,11 @@ +parameters: + cache.acm_type: file + dbal.driver: dbal_mysqli + dbal.dbhost: + dbal.dbuser: root + dbal.dbpasswd: + dbal.dbname: phpbb_dev + dbal.dbport: + dbal.new_link: false + tables.config: phpbb_config + tables.ext: phpbb_ext diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml new file mode 100644 index 0000000000..2bf8478f82 --- /dev/null +++ b/phpBB/config/services.yml @@ -0,0 +1,87 @@ +services: + cache_factory: + class: phpbb_cache_factory + arguments: + - %cache.acm_type% + + cache: + class: phpbb_cache_service + factory_service: cache_factory + factory_method: get_service + + cache.driver: + class: phpbb_cache_driver_interface + factory_service: cache + factory_method: get_driver + + dispatcher: + class: phpbb_event_dispatcher + + request: + class: phpbb_request + + user: + class: phpbb_user + + auth: + class: phpbb_auth + + dbal.conn: + class: %dbal.driver% + calls: + - [sql_connect, [%dbal.dbhost%, %dbal.dbuser%, %dbal.dbpasswd%, %dbal.dbname%, %dbal.dbport%, false, %dbal.new_link%]] + + config: + class: phpbb_config_db + arguments: + - @dbal.conn + - @cache.driver + - %tables.config% + + ext.manager: + class: phpbb_extension_manager + arguments: + - @dbal.conn + - %tables.ext% + - %core.root_path% + - .%core.php_ext% + - @cache.driver + + style.resource_locator: + class: phpbb_style_resource_locator + + style.path_provider_ext: + class: phpbb_style_extension_path_provider + arguments: + - @ext.manager + - @style.path_provider + + style.path_provider: + class: phpbb_style_path_provider + + template: + class: phpbb_style_template + arguments: + - %core.root_path% + - %core.php_ext% + - @config + - @user + - @style.resource_locator + - @style.path_provider_ext + + style: + class: phpbb_style + arguments: + - %core.root_path% + - %core.php_ext% + - @config + - @user + - @style.resource_locator + - @style.path_provider_ext + - @template + + event.subscriber_loader: + class: phpbb_event_extension_subscriber_loader + arguments: + - @dispatcher + - @ext.manager -- cgit v1.2.1 From b3f46b9565117940b79c7530a1c21336cd072073 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sat, 31 Mar 2012 21:20:18 +0300 Subject: [ticket/10735] Changing locator paths structure Changing locator paths to 2 dimensional array PHPBB3-10735 --- phpBB/includes/extension/finder.php | 18 +++++-- phpBB/includes/style/extension_path_provider.php | 36 ++++++------- phpBB/includes/style/path_provider.php | 16 +----- phpBB/includes/style/path_provider_interface.php | 7 --- phpBB/includes/style/resource_locator.php | 66 ++++++++++-------------- phpBB/includes/style/style.php | 4 +- 6 files changed, 62 insertions(+), 85 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/finder.php b/phpBB/includes/extension/finder.php index 23b9f1c658..87ca40917d 100644 --- a/phpBB/includes/extension/finder.php +++ b/phpBB/includes/extension/finder.php @@ -270,11 +270,12 @@ class phpbb_extension_finder * Finds all directories matching the configured options * * @param bool $cache Whether the result should be cached + * @param bool $extension_keys Whether the result should have extension name as array key * @return array An array of paths to found directories */ - public function get_directories($cache = true) + public function get_directories($cache = true, $extension_keys = false) { - return $this->find_with_root_path($cache, true); + return $this->find_with_root_path($cache, true, $extension_keys); } /** @@ -294,16 +295,25 @@ class phpbb_extension_finder * @param bool $cache Whether the result should be cached * @param bool $is_dir Directories will be returned when true, only files * otherwise + * @param bool $extension_keys If true, result will be associative array + * with extension name as key * @return array An array of paths to found items */ - protected function find_with_root_path($cache = true, $is_dir = false) + protected function find_with_root_path($cache = true, $is_dir = false, $extension_keys = false) { $items = $this->find($cache, $is_dir); $result = array(); foreach ($items as $item => $ext_name) { - $result[] = $this->phpbb_root_path . $item; + if ($extension_keys) + { + $result[$ext_name] = $this->phpbb_root_path . $item; + } + else + { + $result[] = $this->phpbb_root_path . $item; + } } return $result; diff --git a/phpBB/includes/style/extension_path_provider.php b/phpBB/includes/style/extension_path_provider.php index 1fb6580ce1..4eac300424 100644 --- a/phpBB/includes/style/extension_path_provider.php +++ b/phpBB/includes/style/extension_path_provider.php @@ -82,22 +82,26 @@ class phpbb_style_extension_path_provider extends phpbb_extension_provider imple $directories = array(); $finder = $this->extension_manager->get_finder(); - foreach ($this->base_path_provider as $path) + foreach ($this->base_path_provider as $key => $paths) { - if ($path && !phpbb_is_absolute($path)) + if ($key == 'style') { - $directories = array_merge($directories, $finder - ->directory('/' . $this->ext_dir_prefix . $path) - ->get_directories() - ); + foreach ($paths as $path) + { + $directories['style'][] = $path; + if ($path && !phpbb_is_absolute($path)) + { + $result = $finder->directory('/' . $this->ext_dir_prefix . $path) + ->get_directories(true, true); + foreach ($result as $ext => $ext_path) + { + $directories[$ext][] = $ext_path; + } + } + } } } - foreach ($this->base_path_provider as $path) - { - $directories[] = $path; - } - return $directories; } @@ -112,14 +116,4 @@ class phpbb_style_extension_path_provider extends phpbb_extension_provider imple $this->base_path_provider->set_styles($styles); $this->items = null; } - - /** - * Retrieves the path to the main style passed into set_styles() - * - * @return string Main style path - */ - public function get_main_style_path() - { - return $this->base_path_provider->get_main_style_path(); - } } diff --git a/phpBB/includes/style/path_provider.php b/phpBB/includes/style/path_provider.php index c229af92ba..731d682e88 100644 --- a/phpBB/includes/style/path_provider.php +++ b/phpBB/includes/style/path_provider.php @@ -24,7 +24,6 @@ if (!defined('IN_PHPBB')) */ class phpbb_style_path_provider implements IteratorAggregate, phpbb_style_path_provider_interface { - protected $main_style_name = ''; protected $paths = array(); /** @@ -41,25 +40,14 @@ class phpbb_style_path_provider implements IteratorAggregate, phpbb_style_path_p * Overwrites the current style paths * * The first element of the passed styles map, is considered the main - * style and can be retrieved through get_main_style_path(). + * style. * * @param array $styles An array of style paths. The first element is the main style. * @return null */ public function set_styles(array $styles) { - $this->paths = $styles; - $this->main_style_path = $this->paths[0]; - } - - /** - * Retrieves the path to the main style passed into set_styles() - * - * @return string Main style path - */ - public function get_main_style_path() - { - return $this->main_style_path; + $this->paths = array('style' => $styles); } /** diff --git a/phpBB/includes/style/path_provider_interface.php b/phpBB/includes/style/path_provider_interface.php index 7ae94e17f4..1a6153a4d3 100644 --- a/phpBB/includes/style/path_provider_interface.php +++ b/phpBB/includes/style/path_provider_interface.php @@ -39,11 +39,4 @@ interface phpbb_style_path_provider_interface extends Traversable * @return null */ public function set_styles(array $styles); - - /** - * Retrieves the path to the main style passed into set_styles() - * - * @return string Main style path - */ - public function get_main_style_path(); } diff --git a/phpBB/includes/style/resource_locator.php b/phpBB/includes/style/resource_locator.php index af261534c3..39505cedb5 100644 --- a/phpBB/includes/style/resource_locator.php +++ b/phpBB/includes/style/resource_locator.php @@ -38,12 +38,6 @@ class phpbb_style_resource_locator */ private $roots = array(); - /** - * Index of the main style in the roots array. - * @var int - */ - private $main_root_id = 0; - /** * Location of templates directory within style directories. * Must have trailing slash. Empty if templates are stored in root @@ -69,17 +63,6 @@ class phpbb_style_resource_locator */ private $filenames = array(); - /** - * Set main style location (must have been added through set_paths first). - * - * @param string $style_path Path to style directory - * @return null - */ - public function set_main_style($style_path) - { - $this->main_root_id = array_search($style_path, $this->roots, true); - } - /** * Sets the list of style paths * @@ -95,16 +78,18 @@ class phpbb_style_resource_locator $this->roots = array(); $this->files = array(); $this->filenames = array(); - $this->main_root_id = 0; - foreach ($style_paths as $path) + foreach ($style_paths as $key => $paths) { - // Make sure $path has no ending slash - if (substr($path, -1) === '/') + foreach ($paths as $path) { - $path = substr($path, 0, -1); + // Make sure $path has no ending slash + if (substr($path, -1) === '/') + { + $path = substr($path, 0, -1); + } + $this->roots[$key][] = $path; } - $this->roots[] = $path; } } @@ -125,9 +110,12 @@ class phpbb_style_resource_locator $this->filename[$handle] = $filename; - foreach ($this->roots as $root_index => $root) + foreach ($this->roots as $root_key => $root_paths) { - $this->files[$root_index][$handle] = $root . '/' . $this->template_path . $filename; + foreach ($root_paths as $root_index => $root) + { + $this->files[$root_key][$root_index][$handle] = $root . '/' . $this->template_path . $filename; + } } } } @@ -174,12 +162,12 @@ class phpbb_style_resource_locator public function get_virtual_source_file_for_handle($handle) { // If we don't have a file assigned to this handle, die. - if (!isset($this->files[$this->main_root_id][$handle])) + if (!isset($this->files['style'][0][$handle])) { trigger_error("style resource locator: No file specified for handle $handle", E_USER_ERROR); } - $source_file = $this->files[$this->main_root_id][$handle]; + $source_file = $this->files['style'][0][$handle]; return $source_file; } @@ -202,26 +190,28 @@ class phpbb_style_resource_locator public function get_source_file_for_handle($handle) { // If we don't have a file assigned to this handle, die. - if (!isset($this->files[$this->main_root_id][$handle])) + if (!isset($this->files['style'][0][$handle])) { trigger_error("style resource locator: No file specified for handle $handle", E_USER_ERROR); } // locate a source file that exists - $source_file = $this->files[0][$handle]; + $source_file = $this->files['style'][0][$handle]; $tried = $source_file; - for ($i = 1, $n = count($this->roots); $i < $n && !file_exists($source_file); $i++) + foreach ($this->roots as $root_key => $root_paths) { - $source_file = $this->files[$i][$handle]; - $tried .= ', ' . $source_file; + foreach ($root_paths as $root_index => $root) + { + $source_file = $this->files[$root_key][$root_index][$handle]; + if (file_exists($source_file)) + { + return $source_file; + } + $tried .= ', ' . $source_file; + } } // search failed - if (!file_exists($source_file)) - { - trigger_error("style resource locator: File for handle $handle does not exist. Could not find: $tried", E_USER_ERROR); - } - - return $source_file; + trigger_error("style resource locator: File for handle $handle does not exist. Could not find: $tried", E_USER_ERROR); } } diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php index 539a2642ee..dc1e71dff6 100644 --- a/phpBB/includes/style/style.php +++ b/phpBB/includes/style/style.php @@ -92,6 +92,9 @@ class phpbb_style $paths[] = $this->get_style_path($dir); } + // Add 'all' path, used as last fallback path by hooks and extensions + $paths[] = $this->get_style_path('all'); + return $this->set_custom_style($style_name, $paths); } @@ -113,7 +116,6 @@ class phpbb_style $this->provider->set_styles($paths); $this->locator->set_paths($this->provider); - $this->locator->set_main_style($this->provider->get_main_style_path()); $this->template->cachepath = $this->phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $name) . '_'; -- cgit v1.2.1 From b12f9a285546641415d9ea2dd9e3a3dba6527d1a Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 31 Mar 2012 20:21:26 +0200 Subject: [feature/dic] Remove cache factory, now handled by DIC PHPBB3-10739 --- phpBB/config/parameters.yml | 4 ++-- phpBB/config/services.yml | 15 +++++--------- phpBB/includes/cache/factory.php | 42 ---------------------------------------- 3 files changed, 7 insertions(+), 54 deletions(-) delete mode 100644 phpBB/includes/cache/factory.php (limited to 'phpBB') diff --git a/phpBB/config/parameters.yml b/phpBB/config/parameters.yml index 8a90c8e99d..da29ae8417 100644 --- a/phpBB/config/parameters.yml +++ b/phpBB/config/parameters.yml @@ -1,6 +1,6 @@ parameters: - cache.acm_type: file - dbal.driver: dbal_mysqli + cache.driver.class: phpbb_cache_driver_file + dbal.driver.class: dbal_mysqli dbal.dbhost: dbal.dbuser: root dbal.dbpasswd: diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index 2bf8478f82..09eb993ca6 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -1,18 +1,13 @@ services: - cache_factory: - class: phpbb_cache_factory - arguments: - - %cache.acm_type% - cache: class: phpbb_cache_service - factory_service: cache_factory - factory_method: get_service + arguments: + - @cache.driver cache.driver: class: phpbb_cache_driver_interface - factory_service: cache - factory_method: get_driver + arguments: + - %cache.driver.class% dispatcher: class: phpbb_event_dispatcher @@ -27,7 +22,7 @@ services: class: phpbb_auth dbal.conn: - class: %dbal.driver% + class: %dbal.driver.class% calls: - [sql_connect, [%dbal.dbhost%, %dbal.dbuser%, %dbal.dbpasswd%, %dbal.dbname%, %dbal.dbport%, false, %dbal.new_link%]] diff --git a/phpBB/includes/cache/factory.php b/phpBB/includes/cache/factory.php deleted file mode 100644 index 01c4d0b901..0000000000 --- a/phpBB/includes/cache/factory.php +++ /dev/null @@ -1,42 +0,0 @@ -acm_type = $acm_type; - } - - public function get_driver() - { - $class_name = 'phpbb_cache_driver_' . $this->acm_type; - return new $class_name(); - } - - public function get_service() - { - $driver = $this->get_driver(); - $service = new phpbb_cache_service($driver); - return $service; - } -} -- cgit v1.2.1 From 776160a7e35a1f82325b7acf573906310791c573 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 31 Mar 2012 20:23:33 +0200 Subject: [feature/dic] Fetch cache driver explicitly PHPBB3-10739 --- phpBB/common.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index aa6115fe1c..591969df74 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -104,8 +104,8 @@ $container->setParameter('core.php_ext', $phpEx); // set up caching $cache = $container->get('cache'); -$phpbb_class_loader_ext->set_cache($cache->get_driver()); -$phpbb_class_loader->set_cache($cache->get_driver()); +$phpbb_class_loader_ext->set_cache($container->get('cache.driver')); +$phpbb_class_loader->set_cache($container->get('cache.driver')); // Instantiate some basic classes $phpbb_dispatcher = $container->get('dispatcher'); -- cgit v1.2.1 From bca600877cbd92246949366238d365bbc3039d5a Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 31 Mar 2012 20:27:46 +0200 Subject: [feature/dic] Move cron manager into DIC PHPBB3-10739 --- phpBB/common.php | 2 +- phpBB/config/services.yml | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index 591969df74..0446b5c15e 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -142,5 +142,5 @@ foreach ($cache->obtain_hooks() as $hook) if (!$config['use_system_cron']) { - $cron = new phpbb_cron_manager(new phpbb_cron_task_provider($phpbb_extension_manager), $cache->get_driver()); + $cron = $container->get('cron.manager'); } diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index 09eb993ca6..85a230de52 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -80,3 +80,14 @@ services: arguments: - @dispatcher - @ext.manager + + cron.task_provider: + class: phpbb_cron_task_provider + arguments: + - @ext.manager + + cron.manager: + class: phpbb_cron_manager + arguments: + - @cron.task_provider + - @cache.driver -- cgit v1.2.1 From 873630f04e6502cc69e6b208f596414f240bc923 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 31 Mar 2012 20:45:33 +0200 Subject: [feature/dic] Move class loader into DIC PHPBB3-10739 --- phpBB/common.php | 17 ++++++++--------- phpBB/config/services.yml | 21 ++++++++++++++++++--- 2 files changed, 26 insertions(+), 12 deletions(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index 0446b5c15e..117dc2051e 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -88,12 +88,6 @@ require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); // Set PHP error handler to ours set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); -// Setup class loader first -$phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', $phpbb_root_path . 'ext/', ".$phpEx"); -$phpbb_class_loader_ext->register(); -$phpbb_class_loader = new phpbb_class_loader('phpbb_', $phpbb_root_path . 'includes/', ".$phpEx"); -$phpbb_class_loader->register(); - $container = new ContainerBuilder(); $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/config')); $loader->load('parameters.yml'); @@ -102,6 +96,12 @@ $loader->load('services.yml'); $container->setParameter('core.root_path', $phpbb_root_path); $container->setParameter('core.php_ext', $phpEx); +// Setup class loader first +$phpbb_class_loader_ext = $container->get('class_loader.ext'); +$phpbb_class_loader_ext->register(); +$phpbb_class_loader = $container->get('class_loader'); +$phpbb_class_loader->register(); + // set up caching $cache = $container->get('cache'); $phpbb_class_loader_ext->set_cache($container->get('cache.driver')); @@ -124,13 +124,12 @@ set_config_count(null, null, null, $config); // load extensions $phpbb_extension_manager = $container->get('ext.manager'); +$phpbb_subscriber_loader = $container->get('event.subscriber_loader'); +$phpbb_subscriber_loader->load(); $template = $container->get('template'); $style = $container->get('style'); -$phpbb_subscriber_loader = $container->get('event.subscriber_loader'); -$phpbb_subscriber_loader->load(); - // Add own hook handler require($phpbb_root_path . 'includes/hooks/index.' . $phpEx); $phpbb_hook = new phpbb_hook(array('exit_handler', 'phpbb_user_session_handler', 'append_sid', array('template', 'display'))); diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index 85a230de52..ef459f4903 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -1,13 +1,28 @@ services: + class_loader: + class: phpbb_class_loader + arguments: + - phpbb_ + - %core.root_path%includes/ + - .%core.php_ext% + + class_loader.ext: + class: phpbb_class_loader + arguments: + - phpbb_ext_ + - %core.root_path%ext/ + - .%core.php_ext% + cache: class: phpbb_cache_service arguments: - @cache.driver cache.driver: - class: phpbb_cache_driver_interface - arguments: - - %cache.driver.class% + class: %cache.driver.class% + + cache.driver.install: + class: phpbb_cache_driver_file dispatcher: class: phpbb_event_dispatcher -- cgit v1.2.1 From a7f61b91b7feec80cd9d544502aef937f036ae7c Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 31 Mar 2012 20:45:58 +0200 Subject: [feature/dic] Use DIC in download/file and install/index PHPBB3-10739 --- phpBB/download/file.php | 39 ++++++++++++++++++++++----------------- phpBB/install/index.php | 24 ++++++++++++++++-------- 2 files changed, 38 insertions(+), 25 deletions(-) (limited to 'phpBB') diff --git a/phpBB/download/file.php b/phpBB/download/file.php index c01b0789de..bc7042fbc8 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -14,7 +14,6 @@ define('IN_PHPBB', true); $phpbb_root_path = (defined('PHPBB_ROOT_PATH')) ? PHPBB_ROOT_PATH : './../'; $phpEx = substr(strrchr(__FILE__, '.'), 1); - // Thank you sun. if (isset($_SERVER['CONTENT_TYPE'])) { @@ -45,20 +44,27 @@ if (isset($_GET['avatar'])) require($phpbb_root_path . 'includes/functions_download' . '.' . $phpEx); require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); - $phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', $phpbb_root_path . 'ext/', ".$phpEx"); + $container = new ContainerBuilder(); + $loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../config')); + $loader->load('parameters.yml'); + $loader->load('services.yml'); + + $container->setParameter('core.root_path', $phpbb_root_path); + $container->setParameter('core.php_ext', $phpEx); + + $phpbb_class_loader_ext = $container->get('class_loader.ext'); $phpbb_class_loader_ext->register(); - $phpbb_class_loader = new phpbb_class_loader('phpbb_', $phpbb_root_path . 'includes/', ".$phpEx"); + $phpbb_class_loader = $container->get('class_loader'); $phpbb_class_loader->register(); // set up caching - $cache_factory = new phpbb_cache_factory($acm_type); - $cache = $cache_factory->get_service(); - $phpbb_class_loader_ext->set_cache($cache->get_driver()); - $phpbb_class_loader->set_cache($cache->get_driver()); + $cache = $container->get('cache'); + $phpbb_class_loader_ext->set_cache($container->get('cache.driver')); + $phpbb_class_loader->set_cache($container->get('cache.driver')); - $phpbb_dispatcher = new phpbb_event_dispatcher(); - $request = new phpbb_request(); - $db = new $sql_db(); + $phpbb_dispatcher = $container->get('dispatcher'); + $request = $container->get('request'); + $db = $container->get('dbal.conn'); // Connect to DB if (!@$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false, false)) @@ -69,19 +75,18 @@ if (isset($_GET['avatar'])) request_var('', 0, false, false, $request); - // worst-case default - $browser = strtolower($request->header('User-Agent', 'msie 6.0')); - - $config = new phpbb_config_db($db, $cache->get_driver(), CONFIG_TABLE); + $config = $container->get('config'); set_config(null, null, null, $config); set_config_count(null, null, null, $config); // load extensions - $phpbb_extension_manager = new phpbb_extension_manager($db, EXT_TABLE, $phpbb_root_path, ".$phpEx", $cache->get_driver()); - - $phpbb_subscriber_loader = new phpbb_event_extension_subscriber_loader($phpbb_dispatcher, $phpbb_extension_manager); + $phpbb_extension_manager = $container->get('ext.manager'); + $phpbb_subscriber_loader = $container->get('event.subscriber_loader'); $phpbb_subscriber_loader->load(); + // worst-case default + $browser = strtolower($request->header('User-Agent', 'msie 6.0')); + $filename = request_var('avatar', ''); $avatar_group = false; $exit = false; diff --git a/phpBB/install/index.php b/phpBB/install/index.php index 13ab30a9fa..36c10c3ca6 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -79,19 +79,27 @@ include($phpbb_root_path . 'includes/functions_admin.' . $phpEx); include($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); require($phpbb_root_path . 'includes/functions_install.' . $phpEx); -$phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', $phpbb_root_path . 'ext/', ".$phpEx"); +$container = new ContainerBuilder(); +$loader = new YamlFileLoader($container, new FileLocator(__DIR__.'/../config')); +$loader->load('parameters.yml'); +$loader->load('services.yml'); + +$container->setParameter('core.root_path', $phpbb_root_path); +$container->setParameter('core.php_ext', $phpEx); +$container->setAlias('cache.driver.install', 'cache.driver'); + +$phpbb_class_loader_ext = $container->get('class_loader.ext'); $phpbb_class_loader_ext->register(); -$phpbb_class_loader = new phpbb_class_loader('phpbb_', $phpbb_root_path . 'includes/', ".$phpEx"); +$phpbb_class_loader = $container->get('class_loader'); $phpbb_class_loader->register(); // set up caching -$cache_factory = new phpbb_cache_factory('file'); -$cache = $cache_factory->get_service(); -$phpbb_class_loader_ext->set_cache($cache->get_driver()); -$phpbb_class_loader->set_cache($cache->get_driver()); +$cache = $container->get('cache'); +$phpbb_class_loader_ext->set_cache($container->get('cache.driver')); +$phpbb_class_loader->set_cache($container->get('cache.driver')); -$phpbb_dispatcher = new phpbb_event_dispatcher(); -$request = new phpbb_request(); +$phpbb_dispatcher = $container->get('dispatcher'); +$request = $container->get('request'); // make sure request_var uses this request instance request_var('', 0, false, false, $request); // "dependency injection" for a function -- cgit v1.2.1 From 2ce73baeab35adc3515a04c1db38af62c98d5c93 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sat, 31 Mar 2012 22:07:04 +0300 Subject: [ticket/10733] Extending get_source_file_for_handle Extending resource locator's function get_source_file_for_handle to find all files. This modified function should be used by template events to locate all templates before compiling them. PHPBB3-10733 --- phpBB/includes/style/resource_locator.php | 31 +++++++++++++++++++++++++++---- 1 file changed, 27 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/resource_locator.php b/phpBB/includes/style/resource_locator.php index 39505cedb5..1b35752111 100644 --- a/phpBB/includes/style/resource_locator.php +++ b/phpBB/includes/style/resource_locator.php @@ -185,9 +185,12 @@ class phpbb_style_resource_locator * handle to a path without any filesystem or styles tree checks. * * @param string $handle Template handle (i.e. "friendly" template name) + * @param bool $find_all If true, each root path will be checked and function + * will return array of files instead of string and will not + * trigger a error if template does not exist * @return string Source file path */ - public function get_source_file_for_handle($handle) + public function get_source_file_for_handle($handle, $find_all = false) { // If we don't have a file assigned to this handle, die. if (!isset($this->files['style'][0][$handle])) @@ -198,20 +201,40 @@ class phpbb_style_resource_locator // locate a source file that exists $source_file = $this->files['style'][0][$handle]; $tried = $source_file; + $found = false; + $found_all = array(); foreach ($this->roots as $root_key => $root_paths) { foreach ($root_paths as $root_index => $root) { $source_file = $this->files[$root_key][$root_index][$handle]; + $tried .= ', ' . $source_file; if (file_exists($source_file)) { - return $source_file; + $found = true; + break; + } + } + if ($found) + { + if ($find_all) + { + $found_all[] = $source_file; + $found = false; + } + else + { + break; } - $tried .= ', ' . $source_file; } } // search failed - trigger_error("style resource locator: File for handle $handle does not exist. Could not find: $tried", E_USER_ERROR); + if (!$found && !$find_all) + { + trigger_error("style resource locator: File for handle $handle does not exist. Could not find: $tried", E_USER_ERROR); + } + + return ($find_all) ? $found_all : $source_file; } } -- cgit v1.2.1 From dc9ccc432cd0b24cf762f8285d8a90f52b8efe5b Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 31 Mar 2012 21:20:58 +0200 Subject: [feature/dic] Make use of calls to cut down on boilerplate PHPBB3-10739 --- phpBB/common.php | 7 +------ phpBB/config/services.yml | 8 ++++++++ phpBB/download/file.php | 7 +------ phpBB/install/index.php | 6 +----- 4 files changed, 11 insertions(+), 17 deletions(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index 117dc2051e..51478662d7 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -97,15 +97,11 @@ $container->setParameter('core.root_path', $phpbb_root_path); $container->setParameter('core.php_ext', $phpEx); // Setup class loader first -$phpbb_class_loader_ext = $container->get('class_loader.ext'); -$phpbb_class_loader_ext->register(); $phpbb_class_loader = $container->get('class_loader'); -$phpbb_class_loader->register(); +$phpbb_class_loader_ext = $container->get('class_loader.ext'); // set up caching $cache = $container->get('cache'); -$phpbb_class_loader_ext->set_cache($container->get('cache.driver')); -$phpbb_class_loader->set_cache($container->get('cache.driver')); // Instantiate some basic classes $phpbb_dispatcher = $container->get('dispatcher'); @@ -125,7 +121,6 @@ set_config_count(null, null, null, $config); // load extensions $phpbb_extension_manager = $container->get('ext.manager'); $phpbb_subscriber_loader = $container->get('event.subscriber_loader'); -$phpbb_subscriber_loader->load(); $template = $container->get('template'); $style = $container->get('style'); diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index ef459f4903..6f2ed8c7c3 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -5,6 +5,9 @@ services: - phpbb_ - %core.root_path%includes/ - .%core.php_ext% + calls: + - [register, []] + - [set_cache, [@cache.driver]] class_loader.ext: class: phpbb_class_loader @@ -12,6 +15,9 @@ services: - phpbb_ext_ - %core.root_path%ext/ - .%core.php_ext% + calls: + - [register, []] + - [set_cache, [@cache.driver]] cache: class: phpbb_cache_service @@ -95,6 +101,8 @@ services: arguments: - @dispatcher - @ext.manager + calls: + - [load, []] cron.task_provider: class: phpbb_cron_task_provider diff --git a/phpBB/download/file.php b/phpBB/download/file.php index bc7042fbc8..eabb6edbbb 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -52,15 +52,11 @@ if (isset($_GET['avatar'])) $container->setParameter('core.root_path', $phpbb_root_path); $container->setParameter('core.php_ext', $phpEx); - $phpbb_class_loader_ext = $container->get('class_loader.ext'); - $phpbb_class_loader_ext->register(); $phpbb_class_loader = $container->get('class_loader'); - $phpbb_class_loader->register(); + $phpbb_class_loader_ext = $container->get('class_loader.ext'); // set up caching $cache = $container->get('cache'); - $phpbb_class_loader_ext->set_cache($container->get('cache.driver')); - $phpbb_class_loader->set_cache($container->get('cache.driver')); $phpbb_dispatcher = $container->get('dispatcher'); $request = $container->get('request'); @@ -82,7 +78,6 @@ if (isset($_GET['avatar'])) // load extensions $phpbb_extension_manager = $container->get('ext.manager'); $phpbb_subscriber_loader = $container->get('event.subscriber_loader'); - $phpbb_subscriber_loader->load(); // worst-case default $browser = strtolower($request->header('User-Agent', 'msie 6.0')); diff --git a/phpBB/install/index.php b/phpBB/install/index.php index 36c10c3ca6..0d7a0a288c 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -88,15 +88,11 @@ $container->setParameter('core.root_path', $phpbb_root_path); $container->setParameter('core.php_ext', $phpEx); $container->setAlias('cache.driver.install', 'cache.driver'); -$phpbb_class_loader_ext = $container->get('class_loader.ext'); -$phpbb_class_loader_ext->register(); $phpbb_class_loader = $container->get('class_loader'); -$phpbb_class_loader->register(); +$phpbb_class_loader_ext = $container->get('class_loader.ext'); // set up caching $cache = $container->get('cache'); -$phpbb_class_loader_ext->set_cache($container->get('cache.driver')); -$phpbb_class_loader->set_cache($container->get('cache.driver')); $phpbb_dispatcher = $container->get('dispatcher'); $request = $container->get('request'); -- cgit v1.2.1 From 5ccd6915e3e8af30856319d84a48dde074fdbaee Mon Sep 17 00:00:00 2001 From: David King Date: Sat, 31 Mar 2012 15:52:16 -0400 Subject: [feature/qrpreview] Do not error or show preview if no text is entered PHPBB3-10726 --- phpBB/posting.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/posting.php b/phpBB/posting.php index 71ba353e89..7f57f693af 100644 --- a/phpBB/posting.php +++ b/phpBB/posting.php @@ -38,7 +38,7 @@ $load = (isset($_POST['load'])) ? true : false; $delete = (isset($_POST['delete'])) ? true : false; $cancel = (isset($_POST['cancel']) && !isset($_POST['save'])) ? true : false; -$refresh = (isset($_POST['add_file']) || isset($_POST['delete_file']) || isset($_POST['cancel_unglobalise']) || $save || $load) ? true : false; +$refresh = (isset($_POST['add_file']) || isset($_POST['delete_file']) || isset($_POST['cancel_unglobalise']) || $save || $load || $preview) ? true : false; $mode = ($delete && !$preview && !$refresh && $submit) ? 'delete' : request_var('mode', ''); $error = $post_data = array(); @@ -1198,8 +1198,8 @@ if (!sizeof($error) && $preview) 'PREVIEW_MESSAGE' => $preview_message, 'PREVIEW_SIGNATURE' => $preview_signature, - 'S_DISPLAY_PREVIEW' => true) - ); + 'S_DISPLAY_PREVIEW' => !empty($preview_message), + )); } } -- cgit v1.2.1 From 35c78c127b8fefe56512faaf83c47bee28908e0f Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sun, 1 Apr 2012 00:59:23 +0200 Subject: [feature/dic] Make table_config a DIC parameter PHPBB3-10739 --- phpBB/config/parameters.yml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/config/parameters.yml b/phpBB/config/parameters.yml index da29ae8417..3bedc9a135 100644 --- a/phpBB/config/parameters.yml +++ b/phpBB/config/parameters.yml @@ -1,4 +1,5 @@ parameters: + core.table_prefix: phpbb_ cache.driver.class: phpbb_cache_driver_file dbal.driver.class: dbal_mysqli dbal.dbhost: @@ -7,5 +8,5 @@ parameters: dbal.dbname: phpbb_dev dbal.dbport: dbal.new_link: false - tables.config: phpbb_config - tables.ext: phpbb_ext + tables.config: %core.table_prefix%config + tables.ext: %core.table_prefix%ext -- cgit v1.2.1 From e78fbfef9c6aac1349d18454a4292781d661795c Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sun, 1 Apr 2012 01:13:00 +0200 Subject: [feature/dic] Move cron.lock_db into DIC PHPBB3-10739 --- phpBB/config/services.yml | 7 +++++++ phpBB/cron.php | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index 6f2ed8c7c3..6817d8f015 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -114,3 +114,10 @@ services: arguments: - @cron.task_provider - @cache.driver + + cron.lock_db: + class: phpbb_lock_db + arguments: + - cron_lock + - @config + - @dbal.conn diff --git a/phpBB/cron.php b/phpBB/cron.php index 36b771f1b7..df48c2dc4d 100644 --- a/phpBB/cron.php +++ b/phpBB/cron.php @@ -71,7 +71,7 @@ else output_image(); } -$cron_lock = new phpbb_lock_db('cron_lock', $config, $db); +$cron_lock = $container->get('cron.lock_db'); if ($cron_lock->acquire()) { if ($config['use_system_cron']) -- cgit v1.2.1 From f80512f1066ebfc09d2a4ffac412c56a3fb247de Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 1 Apr 2012 09:52:55 +0300 Subject: [ticket/10733] Adding functions to locate resources Adding $style->locate() and $template->locate() functions PHPBB3-10733 --- phpBB/includes/style/resource_locator.php | 51 +++++++++++++++++++++++++++++++ phpBB/includes/style/style.php | 28 +++++++++++++++++ phpBB/includes/style/template.php | 36 ++++++++++++++++++++++ 3 files changed, 115 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/style/resource_locator.php b/phpBB/includes/style/resource_locator.php index 1b35752111..3e6dd5d6aa 100644 --- a/phpBB/includes/style/resource_locator.php +++ b/phpBB/includes/style/resource_locator.php @@ -237,4 +237,55 @@ class phpbb_style_resource_locator return ($find_all) ? $found_all : $source_file; } + + /** + * Locates source file path, accounting for styles tree and verifying that + * the path exists. + * + * Unlike previous functions, this function works without template handle + * and it can search for more than one file. If more than one file name is + * specified, it will return location of file that it finds first. + * + * @param array $files List of files to locate. + * @param bool $return_default Determines what to return if file does not + * exist. If true, function will return location where file is + * supposed to be. If false, function will return false. + * @param bool $return_full_path If true, function will return full path + * to file. If false, function will return file name. This + * parameter can be used to check which one of set of files + * is available. + * @return string or boolean Source file path if file exists or $return_default is + * true. False if file does not exist and $return_default is false + */ + public function get_first_file_location($files, $return_default = false, $return_full_path = true) + { + // set default value + $default_result = false; + + // check all available paths + foreach ($this->roots as $root_paths) + { + foreach ($root_paths as $path) + { + // check all files + foreach ($files as $filename) + { + $source_file = $path . '/' . $filename; + if (file_exists($source_file)) + { + return ($return_full_path) ? $source_file : $filename; + } + + // assign first file as result if $return_default is true + if ($return_default && $default_result === false) + { + $default_result = $source_file; + } + } + } + } + + // search failed + return $default_result; + } } diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php index dc1e71dff6..5ac61c9f10 100644 --- a/phpBB/includes/style/style.php +++ b/phpBB/includes/style/style.php @@ -150,4 +150,32 @@ class phpbb_style { $this->provider->set_ext_dir_prefix($ext_dir_prefix); } + + /** + * Locates source file path, accounting for styles tree and verifying that + * the path exists. + * + * @param string or array $files List of files to locate. If there is only + * one file, $files can be a string to make code easier to read. + * @param bool $return_default Determines what to return if file does not + * exist. If true, function will return location where file is + * supposed to be. If false, function will return false. + * @param bool $return_full_path If true, function will return full path + * to file. If false, function will return file name. This + * parameter can be used to check which one of set of files + * is available. + * @return string or boolean Source file path if file exists or $return_default is + * true. False if file does not exist and $return_default is false + */ + public function locate($files, $return_default = false, $return_full_path = true) + { + // convert string to array + if (is_string($files)) + { + $files = array($files); + } + + // use resource locator to find files + return $this->locator->get_first_file_location($files, $return_default, $return_full_path); + } } diff --git a/phpBB/includes/style/template.php b/phpBB/includes/style/template.php index 21a2e821dd..aebf1da603 100644 --- a/phpBB/includes/style/template.php +++ b/phpBB/includes/style/template.php @@ -456,4 +456,40 @@ class phpbb_style_template } include($file); } + + /** + * Locates source template path, accounting for styles tree and verifying that + * the path exists. + * + * @param string or array $files List of templates to locate. If there is only + * one template, $files can be a string to make code easier to read. + * @param bool $return_default Determines what to return if template does not + * exist. If true, function will return location where template is + * supposed to be. If false, function will return false. + * @param bool $return_full_path If true, function will return full path + * to template. If false, function will return template file name. + * This parameter can be used to check which one of set of template + * files is available. + * @return string or boolean Source template path if template exists or $return_default is + * true. False if template does not exist and $return_default is false + */ + public function locate($files, $return_default = false, $return_full_path = true) + { + // add tempalte path prefix + $templates = array(); + if (is_string($files)) + { + $templates[] = $this->template_path . $files; + } + else + { + foreach ($files as $file) + { + $templates[] = $this->template_path . $file; + } + } + + // use resource locator to find files + return $this->locator->get_first_file_location($templates, $return_default, $return_full_path); + } } -- cgit v1.2.1 From a7d0ef90ea921b2ed876bb933bfa022863771a6e Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 1 Apr 2012 10:58:24 +0300 Subject: [ticket/10665] INCLUDEJS template tag Implementing INLCUDEJS template tag in style classes PHPBB3-10665 --- phpBB/includes/style/template.php | 21 ++++++++++- phpBB/includes/style/template_compile.php | 32 +++++++++++++++- phpBB/includes/style/template_filter.php | 61 ++++++++++++++++++++++++++++++- 3 files changed, 109 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/template.php b/phpBB/includes/style/template.php index aebf1da603..4586e8dbf9 100644 --- a/phpBB/includes/style/template.php +++ b/phpBB/includes/style/template.php @@ -288,7 +288,7 @@ class phpbb_style_template return new phpbb_style_template_renderer_include($output_file, $this); } - $compile = new phpbb_style_template_compile($this->config['tpl_allow_php']); + $compile = new phpbb_style_template_compile($this->config['tpl_allow_php'], $this->locator, $this->phpbb_root_path); if ($compile->compile_file_to_file($source_file, $output_file) !== false) { @@ -492,4 +492,23 @@ class phpbb_style_template // use resource locator to find files return $this->locator->get_first_file_location($templates, $return_default, $return_full_path); } + + /** + * Include JS file + * + * @param string $file file name + * @param bool $locate True if file needs to be located + */ + function _js_include($file, $locate = false) + { + // Locate file + if ($locate) + { + $file = $this->locator->get_first_file_location(array($file), true, true); + } + + // Add HTML code + $code = ''; + $this->context->append_var('SCRIPTS', $code); + } } diff --git a/phpBB/includes/style/template_compile.php b/phpBB/includes/style/template_compile.php index 3ef3fffc00..bd9e18e102 100644 --- a/phpBB/includes/style/template_compile.php +++ b/phpBB/includes/style/template_compile.php @@ -25,6 +25,13 @@ stream_filter_register('phpbb_template', 'phpbb_style_template_filter'); */ class phpbb_style_template_compile { + /** + * Array of parameters to forward to template filter + * + * @var array + */ + private $filter_params; + /** * Whether tags are allowed * @@ -32,14 +39,31 @@ class phpbb_style_template_compile */ private $allow_php; + /** + * Style resource locator + * + * @var phpbb_style_resource_locator + */ + private $locator; + + /** + * @var string phpBB root path + */ + private $phpbb_root_path; + /** * Constructor. * * @param bool @allow_php Whether PHP code will be allowed in templates (inline PHP code, PHP tag and INCLUDEPHP tag) + * @param phpbb_style_resource_locator $locator Resource locator + * @param string $phpbb_root_path Path to phpBB root directory */ - public function __construct($allow_php) + public function __construct($allow_php, $locator, $phpbb_root_path) { + $this->filter_params = array(); $this->allow_php = $allow_php; + $this->locator = $locator; + $this->phpbb_root_path = $phpbb_root_path; } /** @@ -116,7 +140,11 @@ class phpbb_style_template_compile */ private function compile_stream_to_stream($source_stream, $dest_stream) { - stream_filter_append($source_stream, 'phpbb_template', null, array('allow_php' => $this->allow_php)); + $params = $this->filter_params; + $params['allow_php'] = $this->allow_php; + $params['locator'] = $this->locator; + $params['phpbb_root_path'] = $this->phpbb_root_path; + stream_filter_append($source_stream, 'phpbb_template', null, $params); stream_copy_to_stream($source_stream, $dest_stream); } } diff --git a/phpBB/includes/style/template_filter.php b/phpBB/includes/style/template_filter.php index 04fe85e07f..d62ad0ba1e 100644 --- a/phpBB/includes/style/template_filter.php +++ b/phpBB/includes/style/template_filter.php @@ -75,6 +75,18 @@ class phpbb_style_template_filter extends php_user_filter */ private $allow_php; + /** + * Resource locator. + * + * @var phpbb_template_locator + */ + private $locator; + + /** + * @var string phpBB root path + */ + private $phpbb_root_path; + /** * Stream filter * @@ -126,14 +138,16 @@ class phpbb_style_template_filter extends php_user_filter /** * Initializer, called on creation. * - * Get the allow_php option from params, which is passed - * to stream_filter_append. + * Get the allow_php option, root directory and locator from params, + * which are passed to stream_filter_append. */ public function onCreate() { $this->chunk = ''; $this->in_php = false; $this->allow_php = $this->params['allow_php']; + $this->locator = $this->params['locator']; + $this->phpbb_root_path = $this->params['phpbb_root_path']; return true; } @@ -281,6 +295,10 @@ class phpbb_style_template_filter extends php_user_filter return ($this->allow_php) ? 'compile_tag_include_php($matches[2]) . ' ?>' : ''; break; + case 'INCLUDEJS': + return 'compile_tag_include_js($matches[2]) . ' ?>'; + break; + case 'PHP': if ($this->allow_php) { @@ -856,6 +874,45 @@ class phpbb_style_template_filter extends php_user_filter return $tokens; } + /** + * Compile INCLUDEJS tag + * + * @param string $tag_args Expression given with INCLUDEJS in source template + * @return string compiled template code + */ + private function compile_tag_include_js($tag_args) + { + // Process dynamic includes + if ($tag_args[0] == '{') + { + $var = $this->get_varref($tag_args, $is_expr); + if (!$is_expr) + { + return " \$_template->_js_include($var, true);"; + } + return ''; + } + + // Locate file + $filename = $this->locator->get_first_file_location(array($tag_args), false, true); + + if ($filename === false) + { + // File does not exist, find it during run time + return ' $_template->_js_include(\'' . addslashes($tag_args) . '\', true); '; + } + + if (substr($filename, 0, strlen($this->phpbb_root_path)) != $this->phpbb_root_path) + { + // Absolute path, include as is + return ' $_template->_js_include(\'' . addslashes($filename) . '\', false); '; + } + + // Relative path, remove root path from it + $filename = substr($filename, strlen($this->phpbb_root_path)); + return ' global $phpbb_root_path; $_template->_js_include($phpbb_root_path . \'' . addslashes($filename) . '\', false); '; + } + /** * Generates a reference to the given variable inside the given (possibly nested) * block namespace. This is a string of the form: -- cgit v1.2.1 From 2225efc5609add8baf0dc0e7867d9f9f0fae4245 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 1 Apr 2012 10:58:59 +0300 Subject: [ticket/10665] INCLUDEJS template changes Implementing INLCUDEJS template tag in styles PHPBB3-10665 --- phpBB/styles/prosilver/template/overall_footer.html | 3 ++- phpBB/styles/prosilver/template/simple_footer.html | 1 + phpBB/styles/subsilver2/template/overall_footer.html | 1 + phpBB/styles/subsilver2/template/simple_footer.html | 1 + 4 files changed, 5 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index 1561bae26a..47071ba4df 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -52,7 +52,8 @@ - + +{SCRIPTS} diff --git a/phpBB/styles/prosilver/template/simple_footer.html b/phpBB/styles/prosilver/template/simple_footer.html index 3458d02495..549c31cfb6 100644 --- a/phpBB/styles/prosilver/template/simple_footer.html +++ b/phpBB/styles/prosilver/template/simple_footer.html @@ -8,6 +8,7 @@ +{SCRIPTS} diff --git a/phpBB/styles/subsilver2/template/overall_footer.html b/phpBB/styles/subsilver2/template/overall_footer.html index 9b0b95372e..77b11034b9 100644 --- a/phpBB/styles/subsilver2/template/overall_footer.html +++ b/phpBB/styles/subsilver2/template/overall_footer.html @@ -10,6 +10,7 @@ +{SCRIPTS} diff --git a/phpBB/styles/subsilver2/template/simple_footer.html b/phpBB/styles/subsilver2/template/simple_footer.html index b51be3ac4c..4a65bafd1c 100644 --- a/phpBB/styles/subsilver2/template/simple_footer.html +++ b/phpBB/styles/subsilver2/template/simple_footer.html @@ -7,6 +7,7 @@ +{SCRIPTS} -- cgit v1.2.1 From e7cf4bfb2ed2b549e567c7237df799b6af0977ae Mon Sep 17 00:00:00 2001 From: Hari Sankar R Date: Sun, 1 Apr 2012 18:25:50 +0530 Subject: [ticket/10731] Fixed addquote() to work on opera browser. In opera, window.getSelection() returned incorrect values, should be using document.getSelection() instead. Fixed in prosilver and subsilver2 templates. PHPBB3-10731 --- phpBB/styles/prosilver/template/editor.js | 2 +- phpBB/styles/subsilver2/template/editor.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/styles/prosilver/template/editor.js index 2c41b543b5..c16b0ef703 100644 --- a/phpBB/styles/prosilver/template/editor.js +++ b/phpBB/styles/prosilver/template/editor.js @@ -219,7 +219,7 @@ function addquote(post_id, username, l_wrote) // Get text selection - not only the post content :( // IE9 must use the document.selection method but has the *.getSelection so we just force no IE - if (window.getSelection && !is_ie) + if (window.getSelection && !is_ie && !window.opera) { theSelection = window.getSelection().toString(); } diff --git a/phpBB/styles/subsilver2/template/editor.js b/phpBB/styles/subsilver2/template/editor.js index b47583ec75..151cf53ff1 100644 --- a/phpBB/styles/subsilver2/template/editor.js +++ b/phpBB/styles/subsilver2/template/editor.js @@ -221,7 +221,7 @@ function addquote(post_id, username, l_wrote) // Get text selection - not only the post content :( // IE9 must use the document.selection method but has the *.getSelection so we just force no IE - if (window.getSelection && !is_ie) + if (window.getSelection && !is_ie && !window.opera) { theSelection = window.getSelection().toString(); } -- cgit v1.2.1 From 48616c7cf25555f2a5ae681a245ac0da9e812d89 Mon Sep 17 00:00:00 2001 From: Hari Sankar R Date: Sun, 1 Apr 2012 18:33:18 +0530 Subject: [ticket/10740] Changed styling of phpbb_alert box, to be centered. Changed the styling of the phpbb.alert() and phpbb.confirm() dialogue boxes to me more centered on a page. PHPBB3-10740 --- phpBB/styles/prosilver/theme/common.css | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 31015b28f9..e154db236f 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -594,9 +594,10 @@ li.pagination { border: 1px solid transparent; position: fixed; display: none; - top: 100px; - left: 35%; + top: 40%; + left: 50%; width: 30%; + margin-left: -15%; z-index: 50; padding: 25px; padding: 0 25px 20px 25px; -- cgit v1.2.1 From b1b530f92cca7eb115e096ea8901133d421771d2 Mon Sep 17 00:00:00 2001 From: Hari Sankar R Date: Sun, 1 Apr 2012 18:25:50 +0530 Subject: [ticket/10731] Fixed addquote() to work on opera browser. In opera, window.getSelection() returned incorrect values, should be using document.getSelection() instead. Fixed in prosilver and subsilver2 templates. PHPBB3-10731 --- phpBB/styles/prosilver/template/editor.js | 4 ++-- phpBB/styles/subsilver2/template/editor.js | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/editor.js b/phpBB/styles/prosilver/template/editor.js index cfdb54f54b..c16b0ef703 100644 --- a/phpBB/styles/prosilver/template/editor.js +++ b/phpBB/styles/prosilver/template/editor.js @@ -219,7 +219,7 @@ function addquote(post_id, username, l_wrote) // Get text selection - not only the post content :( // IE9 must use the document.selection method but has the *.getSelection so we just force no IE - if (window.getSelection && !is_ie) + if (window.getSelection && !is_ie && !window.opera) { theSelection = window.getSelection().toString(); } @@ -456,4 +456,4 @@ function getCaretPosition(txtarea) } return caretPos; -} \ No newline at end of file +} diff --git a/phpBB/styles/subsilver2/template/editor.js b/phpBB/styles/subsilver2/template/editor.js index 7cc5de9034..151cf53ff1 100644 --- a/phpBB/styles/subsilver2/template/editor.js +++ b/phpBB/styles/subsilver2/template/editor.js @@ -221,7 +221,7 @@ function addquote(post_id, username, l_wrote) // Get text selection - not only the post content :( // IE9 must use the document.selection method but has the *.getSelection so we just force no IE - if (window.getSelection && !is_ie) + if (window.getSelection && !is_ie && !window.opera) { theSelection = window.getSelection().toString(); } @@ -459,4 +459,4 @@ function getCaretPosition(txtarea) } return caretPos; -} \ No newline at end of file +} -- cgit v1.2.1 From f36a6f0ae35107ac75be3cffff2f0f341baee7a8 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sun, 1 Apr 2012 18:44:05 +0200 Subject: [ticket/10740] Revert margin-left changes of previous commit PHPBB3-10740 --- phpBB/styles/prosilver/theme/common.css | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index e154db236f..77e2b8c0c6 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -595,9 +595,8 @@ li.pagination { position: fixed; display: none; top: 40%; - left: 50%; + left: 35%; width: 30%; - margin-left: -15%; z-index: 50; padding: 25px; padding: 0 25px 20px 25px; -- cgit v1.2.1 From fb0df8d2e398a634457b317a721734e53596f002 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 1 Apr 2012 20:19:07 +0300 Subject: [ticket/10665] Moving filter parameters to one array Moving filter parameters to one array in template compiler class PHPBB3-10665 --- phpBB/includes/style/template_compile.php | 34 ++++++------------------------- 1 file changed, 6 insertions(+), 28 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/template_compile.php b/phpBB/includes/style/template_compile.php index bd9e18e102..fa0928f424 100644 --- a/phpBB/includes/style/template_compile.php +++ b/phpBB/includes/style/template_compile.php @@ -32,25 +32,6 @@ class phpbb_style_template_compile */ private $filter_params; - /** - * Whether tags are allowed - * - * @var bool - */ - private $allow_php; - - /** - * Style resource locator - * - * @var phpbb_style_resource_locator - */ - private $locator; - - /** - * @var string phpBB root path - */ - private $phpbb_root_path; - /** * Constructor. * @@ -60,10 +41,11 @@ class phpbb_style_template_compile */ public function __construct($allow_php, $locator, $phpbb_root_path) { - $this->filter_params = array(); - $this->allow_php = $allow_php; - $this->locator = $locator; - $this->phpbb_root_path = $phpbb_root_path; + $this->filter_params = array( + 'allow_php' => $allow_php, + 'locator' => $locator, + 'phpbb_root_path' => $phpbb_root_path + ); } /** @@ -140,11 +122,7 @@ class phpbb_style_template_compile */ private function compile_stream_to_stream($source_stream, $dest_stream) { - $params = $this->filter_params; - $params['allow_php'] = $this->allow_php; - $params['locator'] = $this->locator; - $params['phpbb_root_path'] = $this->phpbb_root_path; - stream_filter_append($source_stream, 'phpbb_template', null, $params); + stream_filter_append($source_stream, 'phpbb_template', null, $this->filter_params); stream_copy_to_stream($source_stream, $dest_stream); } } -- cgit v1.2.1 From 1ffc7c1fab85b1eb732b31bfd8a0f48c7351e68a Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 1 Apr 2012 20:29:03 +0300 Subject: [ticket/10665] Changing template->_js_include to public Changing template->_js_include to public function PHPBB3-10665 --- phpBB/includes/style/template.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/template.php b/phpBB/includes/style/template.php index 4586e8dbf9..3f15355f7a 100644 --- a/phpBB/includes/style/template.php +++ b/phpBB/includes/style/template.php @@ -499,7 +499,7 @@ class phpbb_style_template * @param string $file file name * @param bool $locate True if file needs to be located */ - function _js_include($file, $locate = false) + public function _js_include($file, $locate = false) { // Locate file if ($locate) -- cgit v1.2.1 From c89ea703bda1006b382f8cc0da292f6e2a3701f5 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 1 Apr 2012 20:46:10 +0300 Subject: [ticket/10665] Solution for T_SUPER_TEMPLATE_PATH Temporary solution for T_SUPER_TEMPLATE_PATH pointing to wrong directory, variable will be completely removed later because it will be obsolete PHPBB3-10665 --- phpBB/includes/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 74db8cb8fd..a44ebb04e8 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4770,7 +4770,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'T_ASSETS_PATH' => "{$web_path}assets", 'T_THEME_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/theme', 'T_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/template', - 'T_SUPER_TEMPLATE_PATH' => ($user->theme['style_parent_id']) ? "{$web_path}styles/" . rawurlencode($user->theme['style_parent_tree']) . '/template' : "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/template', + 'T_SUPER_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/template', 'T_IMAGES_PATH' => "{$web_path}images/", 'T_SMILIES_PATH' => "{$web_path}{$config['smilies_path']}/", 'T_AVATAR_PATH' => "{$web_path}{$config['avatar_path']}/", -- cgit v1.2.1 From 37480e5594145bbead07c8f70644d52983f92913 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 1 Apr 2012 20:50:59 +0300 Subject: [ticket/10665] Adding includejs to acp templates Adding includejs to acp overall_footer.html PHPBB3-10665 --- phpBB/adm/style/overall_footer.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/overall_footer.html b/phpBB/adm/style/overall_footer.html index 0337080f3d..a486a69514 100644 --- a/phpBB/adm/style/overall_footer.html +++ b/phpBB/adm/style/overall_footer.html @@ -39,7 +39,8 @@ - + +{SCRIPTS} -- cgit v1.2.1 From a728b08e9056473f19906f93f38339b9eb8f2ffc Mon Sep 17 00:00:00 2001 From: Shibu Lijack Date: Mon, 2 Apr 2012 00:05:37 +0530 Subject: [ticket/10734] Used pseudo class for clearing Instead of using a separate class for clearing, pseudo :after class is added. PHPBB3-10734 --- phpBB/styles/prosilver/theme/common.css | 6 ++++++ 1 file changed, 6 insertions(+) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 6fd410029d..790b9c154a 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -289,6 +289,12 @@ a#logo:hover { background-position: 100% 0; } +.inner:after { + content: ''; + clear: both; + display: block; +} + .rowbg { margin: 5px 5px 2px 5px; } -- cgit v1.2.1 From 06d26ef46e914c823889dab37627e7fa39d883ce Mon Sep 17 00:00:00 2001 From: Hari Sankar R Date: Mon, 2 Apr 2012 00:35:39 +0530 Subject: [ticket/10438] Alligning the Smileys on the same line as the text. Changed the styling of smilies to appear at the same level as text, by adding vertical-align: text-bottom css property to all smilies. Edited functions_content.php to add class="smilies" to all parsed smilies. PHPBB3-10438 --- phpBB/includes/functions_content.php | 2 +- phpBB/styles/prosilver/theme/common.css | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php index f2faf20f43..6b2ee98d7a 100644 --- a/phpBB/includes/functions_content.php +++ b/phpBB/includes/functions_content.php @@ -739,7 +739,7 @@ function smiley_text($text, $force_option = false) else { $root_path = (defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? generate_board_url() . '/' : $phpbb_root_path; - return preg_replace('#', $text); + return preg_replace('#
    -
    +

    {MESSAGE_TITLE}

    {MESSAGE_TEXT}

    @@ -13,7 +13,7 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/drafts.html b/phpBB/styles/prosilver/template/drafts.html index dea3bb414e..c3c54876e3 100644 --- a/phpBB/styles/prosilver/template/drafts.html +++ b/phpBB/styles/prosilver/template/drafts.html @@ -2,16 +2,16 @@
    -
    +

    {L_LOAD_DRAFT}

    {L_LOAD_DRAFT_EXPLAIN}

    -
    +
    -
    +
    • @@ -39,6 +39,6 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/faq_body.html b/phpBB/styles/prosilver/template/faq_body.html index 7aa32b66b9..46f738aa3a 100644 --- a/phpBB/styles/prosilver/template/faq_body.html +++ b/phpBB/styles/prosilver/template/faq_body.html @@ -21,7 +21,7 @@
    - + @@ -30,7 +30,7 @@
    -
    +

    {faq_block.BLOCK_TITLE}

    @@ -44,7 +44,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/forumlist_body.html b/phpBB/styles/prosilver/template/forumlist_body.html index cb6d14e47e..ed08aa791a 100644 --- a/phpBB/styles/prosilver/template/forumlist_body.html +++ b/phpBB/styles/prosilver/template/forumlist_body.html @@ -3,7 +3,7 @@ - + @@ -55,7 +55,7 @@ - + @@ -63,6 +63,6 @@
    {L_NO_FORUMS} -
    +
    diff --git a/phpBB/styles/prosilver/template/login_body.html b/phpBB/styles/prosilver/template/login_body.html index a3a70e3333..d8b9b01779 100644 --- a/phpBB/styles/prosilver/template/login_body.html +++ b/phpBB/styles/prosilver/template/login_body.html @@ -45,7 +45,7 @@ - + @@ -61,7 +61,7 @@

    {L_REGISTER}

    - + diff --git a/phpBB/styles/prosilver/template/login_forum.html b/phpBB/styles/prosilver/template/login_forum.html index e66e531fcd..13669a78bb 100644 --- a/phpBB/styles/prosilver/template/login_forum.html +++ b/phpBB/styles/prosilver/template/login_forum.html @@ -27,7 +27,7 @@ {S_LOGIN_REDIRECT} - + diff --git a/phpBB/styles/prosilver/template/memberlist_body.html b/phpBB/styles/prosilver/template/memberlist_body.html index f6f7bdc485..d5154761e9 100644 --- a/phpBB/styles/prosilver/template/memberlist_body.html +++ b/phpBB/styles/prosilver/template/memberlist_body.html @@ -46,7 +46,7 @@ - + @@ -77,7 +77,7 @@ - +
    @@ -121,7 +121,7 @@ -
    + diff --git a/phpBB/styles/prosilver/template/memberlist_email.html b/phpBB/styles/prosilver/template/memberlist_email.html index 062d266252..97bea144e8 100644 --- a/phpBB/styles/prosilver/template/memberlist_email.html +++ b/phpBB/styles/prosilver/template/memberlist_email.html @@ -46,7 +46,7 @@ - +
    @@ -56,7 +56,7 @@
    - + {S_FORM_TOKEN} diff --git a/phpBB/styles/prosilver/template/memberlist_im.html b/phpBB/styles/prosilver/template/memberlist_im.html index 88c57eb8c5..ccef778ebb 100644 --- a/phpBB/styles/prosilver/template/memberlist_im.html +++ b/phpBB/styles/prosilver/template/memberlist_im.html @@ -6,7 +6,7 @@
    -
    +

    {L_SEND_IM_EXPLAIN}

    @@ -79,7 +79,7 @@ {S_FORM_TOKEN} -
    +
    diff --git a/phpBB/styles/prosilver/template/memberlist_leaders.html b/phpBB/styles/prosilver/template/memberlist_leaders.html index bce1a69619..d0daa564c1 100644 --- a/phpBB/styles/prosilver/template/memberlist_leaders.html +++ b/phpBB/styles/prosilver/template/memberlist_leaders.html @@ -6,7 +6,7 @@
    -
    +
    @@ -37,7 +37,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/memberlist_search.html b/phpBB/styles/prosilver/template/memberlist_search.html index 8d2ccf044c..2ea32fc774 100644 --- a/phpBB/styles/prosilver/template/memberlist_search.html +++ b/phpBB/styles/prosilver/template/memberlist_search.html @@ -118,7 +118,7 @@ function insert_single(user) {S_FORM_TOKEN} - + diff --git a/phpBB/styles/prosilver/template/message_body.html b/phpBB/styles/prosilver/template/message_body.html index 645807cd89..fb6dfce35f 100644 --- a/phpBB/styles/prosilver/template/message_body.html +++ b/phpBB/styles/prosilver/template/message_body.html @@ -9,7 +9,7 @@

    {MESSAGE_TITLE}

    {MESSAGE_TEXT}

    {L_RETURN_TO_SEARCH_ADV}

    - + diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index 81736cc917..3973ffe73f 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -16,7 +16,7 @@
  • {L_THE_TEAM}{L_DELETE_COOKIES}{S_TIMEZONE}
  • - + - + + @@ -165,8 +165,8 @@
    -
    +
    {L_INFORMATION}: {L_BOARD_DISABLED} -
    +
    diff --git a/phpBB/styles/prosilver/template/posting_attach_body.html b/phpBB/styles/prosilver/template/posting_attach_body.html index d39405487d..162b0b5d4e 100644 --- a/phpBB/styles/prosilver/template/posting_attach_body.html +++ b/phpBB/styles/prosilver/template/posting_attach_body.html @@ -1,5 +1,5 @@
    -
    +

    {L_ADD_ATTACHMENT_EXPLAIN}

    @@ -17,5 +17,5 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/posting_editor.html b/phpBB/styles/prosilver/template/posting_editor.html index efd2c054d5..a5b41b6da4 100644 --- a/phpBB/styles/prosilver/template/posting_editor.html +++ b/phpBB/styles/prosilver/template/posting_editor.html @@ -149,13 +149,13 @@ -
    +
    -
    +

    {L_POSTED_ATTACHMENTS}

    @@ -177,13 +177,13 @@
    -
    +
    -
    +
    {S_HIDDEN_ADDRESS_FIELD} {S_HIDDEN_FIELDS} @@ -194,7 +194,7 @@
    -
    +
    @@ -210,7 +210,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/posting_layout.html b/phpBB/styles/prosilver/template/posting_layout.html index b81c8162d7..a5cb3fc154 100644 --- a/phpBB/styles/prosilver/template/posting_layout.html +++ b/phpBB/styles/prosilver/template/posting_layout.html @@ -8,7 +8,7 @@
    -
    +
    {L_FORUM_RULES} @@ -17,7 +17,7 @@ {FORUM_RULES} -
    +
    @@ -25,12 +25,12 @@
    -
    +

    {L_INFORMATION}

    {L_DRAFT_LOADED}

    -
    +
    @@ -40,7 +40,7 @@
    -
    +

    {L_SELECT_DESTINATION_FORUM}

    {L_UNGLOBALISE_EXPLAIN}

    @@ -55,21 +55,21 @@
    -
    +
    -
    +

    {L_POST_A}

    {S_FORM_TOKEN} -
    +
    diff --git a/phpBB/styles/prosilver/template/posting_pm_layout.html b/phpBB/styles/prosilver/template/posting_pm_layout.html index ebeb90b6d3..5421cc2cbd 100644 --- a/phpBB/styles/prosilver/template/posting_pm_layout.html +++ b/phpBB/styles/prosilver/template/posting_pm_layout.html @@ -2,12 +2,12 @@
    -
    +

    {L_INFORMATION}

    {L_DRAFT_LOADED_PM}

    -
    +
    @@ -18,12 +18,12 @@

    {L_TITLE}

    -
    +
    -
    +
    diff --git a/phpBB/styles/prosilver/template/posting_poll_body.html b/phpBB/styles/prosilver/template/posting_poll_body.html index ba0014ce57..3f64c5d5b5 100644 --- a/phpBB/styles/prosilver/template/posting_poll_body.html +++ b/phpBB/styles/prosilver/template/posting_poll_body.html @@ -1,5 +1,5 @@
    -
    +

    {L_ADD_POLL_EXPLAIN}

    @@ -52,5 +52,5 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/posting_preview.html b/phpBB/styles/prosilver/template/posting_preview.html index 82227c23b0..16fc4ba233 100644 --- a/phpBB/styles/prosilver/template/posting_preview.html +++ b/phpBB/styles/prosilver/template/posting_preview.html @@ -1,5 +1,5 @@
    -
    +
    @@ -16,11 +16,11 @@
    -
    +
    -
    +
    @@ -41,7 +41,7 @@
    {PREVIEW_SIGNATURE}
    -
    +

    diff --git a/phpBB/styles/prosilver/template/posting_review.html b/phpBB/styles/prosilver/template/posting_review.html index 540f116de4..2771c9829a 100644 --- a/phpBB/styles/prosilver/template/posting_review.html +++ b/phpBB/styles/prosilver/template/posting_review.html @@ -5,11 +5,11 @@
    -
    +
    {post_review_row.L_IGNORE_POST}
    -
    +
    @@ -28,7 +28,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/posting_smilies.html b/phpBB/styles/prosilver/template/posting_smilies.html index 9f7e25406e..84191588e2 100644 --- a/phpBB/styles/prosilver/template/posting_smilies.html +++ b/phpBB/styles/prosilver/template/posting_smilies.html @@ -10,12 +10,12 @@

    {L_SMILIES}

    -
    +
    {smiley.SMILEY_CODE} -
    +
    {PAGINATION}
    {L_CLOSE_WINDOW} diff --git a/phpBB/styles/prosilver/template/posting_topic_review.html b/phpBB/styles/prosilver/template/posting_topic_review.html index 1c4b67044d..5e7b36c526 100644 --- a/phpBB/styles/prosilver/template/posting_topic_review.html +++ b/phpBB/styles/prosilver/template/posting_topic_review.html @@ -14,11 +14,11 @@
    -
    +
    {topic_review_row.L_IGNORE_POST}
    -
    +
    @@ -45,7 +45,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/quickreply_editor.html b/phpBB/styles/prosilver/template/quickreply_editor.html index 4cd5eedd3e..f2c1eeb139 100644 --- a/phpBB/styles/prosilver/template/quickreply_editor.html +++ b/phpBB/styles/prosilver/template/quickreply_editor.html @@ -1,6 +1,6 @@
    -
    +

    {L_QUICKREPLY}

    @@ -17,6 +17,6 @@    
    -
    +
    diff --git a/phpBB/styles/prosilver/template/report_body.html b/phpBB/styles/prosilver/template/report_body.html index ec1a1e5820..3e876afe85 100644 --- a/phpBB/styles/prosilver/template/report_body.html +++ b/phpBB/styles/prosilver/template/report_body.html @@ -4,7 +4,7 @@
    -
    +

    {L_REPORT_POST_EXPLAIN}{L_REPORT_MESSAGE_EXPLAIN}

    @@ -30,11 +30,11 @@
    -
    +
    -
    +
    @@ -44,7 +44,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/search_body.html b/phpBB/styles/prosilver/template/search_body.html index 4b1d30d77d..a8baafa5f1 100644 --- a/phpBB/styles/prosilver/template/search_body.html +++ b/phpBB/styles/prosilver/template/search_body.html @@ -11,7 +11,7 @@
    -
    +

    {L_SEARCH_QUERY}

    @@ -27,11 +27,11 @@
    -
    +
    -
    +

    {L_SEARCH_OPTIONS}

    @@ -81,25 +81,25 @@ -
    +
    -
    +
    {S_HIDDEN_FIELDS} 
    -
    +
    -
    +
    @@ -121,7 +121,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/search_results.html b/phpBB/styles/prosilver/template/search_results.html index dbda076086..5d75bd3d56 100644 --- a/phpBB/styles/prosilver/template/search_results.html +++ b/phpBB/styles/prosilver/template/search_results.html @@ -71,13 +71,13 @@ -
    +
    {L_NO_SEARCH_RESULTS} -
    +
    @@ -114,13 +114,13 @@ -
    +
    {L_NO_SEARCH_RESULTS} -
    +
    diff --git a/phpBB/styles/prosilver/template/viewforum_body.html b/phpBB/styles/prosilver/template/viewforum_body.html index f62815ede1..f5ff1d3f98 100644 --- a/phpBB/styles/prosilver/template/viewforum_body.html +++ b/phpBB/styles/prosilver/template/viewforum_body.html @@ -21,7 +21,7 @@ {FORUM_RULES} - + @@ -72,7 +72,7 @@
    {L_NO_READ_ACCESS} -
    +
    @@ -104,7 +104,7 @@ - + @@ -117,7 +117,7 @@ - + @@ -156,7 +156,7 @@ - + @@ -165,7 +165,7 @@
    {L_NO_TOPICS} -
    +
    diff --git a/phpBB/styles/prosilver/template/viewonline_body.html b/phpBB/styles/prosilver/template/viewonline_body.html index 3f1f0e64bf..9da8202783 100644 --- a/phpBB/styles/prosilver/template/viewonline_body.html +++ b/phpBB/styles/prosilver/template/viewonline_body.html @@ -8,7 +8,7 @@
    -
    +
    @@ -38,7 +38,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/viewonline_whois.html b/phpBB/styles/prosilver/template/viewonline_whois.html index 88a41a1a3f..8abd933efa 100644 --- a/phpBB/styles/prosilver/template/viewonline_whois.html +++ b/phpBB/styles/prosilver/template/viewonline_whois.html @@ -3,13 +3,13 @@

    {L_WHOIS}

    -
    +
    {WHOIS}
    -
    +
    {L_CLOSE_WINDOW} diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html index 3c551b3d52..9110cea4e9 100644 --- a/phpBB/styles/prosilver/template/viewtopic_body.html +++ b/phpBB/styles/prosilver/template/viewtopic_body.html @@ -12,7 +12,7 @@
    -
    +
    {L_FORUM_RULES} @@ -21,7 +21,7 @@ {FORUM_RULES} -
    +
    @@ -59,7 +59,7 @@
    -
    +

    {POLL_QUESTION}

    @@ -98,7 +98,7 @@
    -
    +
    {S_FORM_TOKEN} {S_HIDDEN_FIELDS}
    @@ -111,7 +111,7 @@
    -
    +
    @@ -221,7 +221,7 @@ -
    +

    -- cgit v1.2.1 From 24cd3a21a0e8d3e9f7b45acf9194bd70bf595425 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 1 Apr 2012 22:16:53 +0300 Subject: [ticket/10742] Fixing table widths Fixing table widths for members list, team page, online users list PHPBB3-10742 --- phpBB/styles/prosilver/theme/common.css | 2 +- phpBB/styles/prosilver/theme/tweaks.css | 4 ---- 2 files changed, 1 insertion(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 77e2b8c0c6..14bbdc79a9 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -385,7 +385,7 @@ ul.rightside { /* Table styles ----------------------------------------*/ table.table1 { - /* See tweaks.css */ + width: 100%; } #ucp-main table.table1 { diff --git a/phpBB/styles/prosilver/theme/tweaks.css b/phpBB/styles/prosilver/theme/tweaks.css index 416c4a5510..b32faaf501 100644 --- a/phpBB/styles/prosilver/theme/tweaks.css +++ b/phpBB/styles/prosilver/theme/tweaks.css @@ -4,10 +4,6 @@ These style definitions are IE 7 and 8 specific tweaks required due to its poor CSS support. -------------------------------------------------*/ -table.table1 { - width: 100%; -} - /* Align checkboxes/radio buttons nicely */ dd label input { vertical-align: text-bottom; -- cgit v1.2.1 From 57ba42d8df363a51cb2443ae8a502d58ae63f26d Mon Sep 17 00:00:00 2001 From: Shibu Lijack Date: Mon, 2 Apr 2012 00:49:31 +0530 Subject: [ticket/10734] Removed unwanted css elements Removed all the corner css elements PHPBB-10734 --- phpBB/styles/prosilver/theme/colours.css | 33 --------------------------- phpBB/styles/prosilver/theme/common.css | 38 +------------------------------- 2 files changed, 1 insertion(+), 70 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/colours.css b/phpBB/styles/prosilver/theme/colours.css index 4f7bc12818..b6d1f310c6 100644 --- a/phpBB/styles/prosilver/theme/colours.css +++ b/phpBB/styles/prosilver/theme/colours.css @@ -877,39 +877,6 @@ ul.cplist { background-color: #FFFFFF; } -#cp-main span.corners-top, #cp-menu span.corners-top { - background-image: url("./images/corners_left2.gif"); -} - -#cp-main span.corners-top span, #cp-menu span.corners-top span { - background-image: url("./images/corners_right2.gif"); -} - -#cp-main span.corners-bottom, #cp-menu span.corners-bottom { - background-image: url("./images/corners_left2.gif"); -} - -#cp-main span.corners-bottom span, #cp-menu span.corners-bottom span { - background-image: url("./images/corners_right2.gif"); -} - -/* Topicreview */ -#cp-main .panel #topicreview span.corners-top, #cp-menu .panel #topicreview span.corners-top { - background-image: url("./images/corners_left.gif"); -} - -#cp-main .panel #topicreview span.corners-top span, #cp-menu .panel #topicreview span.corners-top span { - background-image: url("./images/corners_right.gif"); -} - -#cp-main .panel #topicreview span.corners-bottom, #cp-menu .panel #topicreview span.corners-bottom { - background-image: url("./images/corners_left.gif"); -} - -#cp-main .panel #topicreview span.corners-bottom span, #cp-menu .panel #topicreview span.corners-bottom span { - background-image: url("./images/corners_right.gif"); -} - /* Friends list */ .cp-mini { background-color: #eef5f9; diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 790b9c154a..249e3a3822 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -283,7 +283,7 @@ a#logo:hover { } .post { - padding: 0 10px; + padding: 10px; margin-bottom: 4px; background-repeat: no-repeat; background-position: 100% 0; @@ -299,42 +299,6 @@ a#logo:hover { margin: 5px 5px 2px 5px; } -span.corners-top, span.corners-bottom, span.corners-top span, span.corners-bottom span { - font-size: 1px; - line-height: 1px; - display: block; - height: 5px; - background-repeat: no-repeat; -} - -span.corners-top { - background-image: none; - background-position: 0 0; - margin: 0 -5px; -} - -span.corners-top span { - background-image: none; - background-position: 100% 0; -} - -span.corners-bottom { - background-image: none; - background-position: 0 100%; - margin: 0 -5px; - clear: both; -} - -span.corners-bottom span { - background-image: none; - background-position: 100% 100%; -} - -span.clear { - background-image: none; - clear: both; -} - .headbg span.corners-bottom { margin-bottom: -1px; } -- cgit v1.2.1 From 6498f2d33a16fa493f18c0d84bcce2dca1478179 Mon Sep 17 00:00:00 2001 From: Shibu Lijack Date: Mon, 2 Apr 2012 01:47:08 +0530 Subject: [ticket/10734] Fixed IE7 clear float bug Modified tweaks.css to fix IE bug PHPBB-10734 --- phpBB/styles/prosilver/theme/tweaks.css | 5 +++++ 1 file changed, 5 insertions(+) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/tweaks.css b/phpBB/styles/prosilver/theme/tweaks.css index 416c4a5510..cdef01965e 100644 --- a/phpBB/styles/prosilver/theme/tweaks.css +++ b/phpBB/styles/prosilver/theme/tweaks.css @@ -28,4 +28,9 @@ dl.details dd { /* Headerbar height fix for IE7 */ #site-description p { *margin-bottom: 1.0em; +} + +/* Clear float fix for IE7 */ +.inner { + zoom: 1; } \ No newline at end of file -- cgit v1.2.1 From 97ff7ee9d80ed04210242c5c902f05c583467513 Mon Sep 17 00:00:00 2001 From: Shibu Lijack Date: Mon, 2 Apr 2012 02:04:11 +0530 Subject: [ticket/10734] Fixed padding issues Fixed padding for post and panel. PHPBB-10734 --- phpBB/styles/prosilver/theme/common.css | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 249e3a3822..592b6a2ff9 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -277,13 +277,12 @@ a#logo:hover { .panel { margin-bottom: 4px; padding: 0 10px; - padding: 5px 10px; background-color: #f3f3f3; color: #3f3f3f; } .post { - padding: 10px; + padding: 5px 10px; margin-bottom: 4px; background-repeat: no-repeat; background-position: 100% 0; -- cgit v1.2.1 From 3ced1d2bfcee5ee4c0c62cae752d84c9cd4c9ea0 Mon Sep 17 00:00:00 2001 From: Shibu Lijack Date: Mon, 2 Apr 2012 16:15:55 +0530 Subject: [ticket/10734] Removed all the unnecessary corner classes Removed the corner span classes from all the template and theme files. PHPBB-10734 --- .../styles/prosilver/template/captcha_default.html | 4 +-- phpBB/styles/prosilver/template/captcha_qa.html | 4 +-- .../prosilver/template/captcha_recaptcha.html | 4 +-- phpBB/styles/prosilver/template/mcp_approve.html | 4 +-- phpBB/styles/prosilver/template/mcp_ban.html | 10 +++--- phpBB/styles/prosilver/template/mcp_forum.html | 4 +-- phpBB/styles/prosilver/template/mcp_front.html | 16 +++++----- phpBB/styles/prosilver/template/mcp_header.html | 2 +- phpBB/styles/prosilver/template/mcp_logs.html | 6 ++-- phpBB/styles/prosilver/template/mcp_move.html | 4 +-- .../styles/prosilver/template/mcp_notes_front.html | 4 +-- .../styles/prosilver/template/mcp_notes_user.html | 12 +++---- phpBB/styles/prosilver/template/mcp_post.html | 28 ++++++++-------- phpBB/styles/prosilver/template/mcp_queue.html | 4 +-- phpBB/styles/prosilver/template/mcp_reports.html | 4 +-- phpBB/styles/prosilver/template/mcp_topic.html | 18 +++++------ .../styles/prosilver/template/mcp_warn_front.html | 12 +++---- phpBB/styles/prosilver/template/mcp_warn_list.html | 4 +-- phpBB/styles/prosilver/template/mcp_warn_post.html | 12 +++---- phpBB/styles/prosilver/template/mcp_warn_user.html | 8 ++--- phpBB/styles/prosilver/template/mcp_whois.html | 4 +-- phpBB/styles/prosilver/template/ucp_agreement.html | 12 +++---- .../styles/prosilver/template/ucp_attachments.html | 4 +-- .../prosilver/template/ucp_avatar_options.html | 8 ++--- .../prosilver/template/ucp_groups_manage.html | 16 +++++----- .../prosilver/template/ucp_groups_membership.html | 12 +++---- phpBB/styles/prosilver/template/ucp_header.html | 10 +++--- .../prosilver/template/ucp_main_bookmarks.html | 4 +-- .../styles/prosilver/template/ucp_main_drafts.html | 6 ++-- .../styles/prosilver/template/ucp_main_front.html | 4 +-- .../prosilver/template/ucp_main_subscribed.html | 4 +-- .../styles/prosilver/template/ucp_pm_history.html | 4 +-- .../prosilver/template/ucp_pm_message_header.html | 2 +- .../styles/prosilver/template/ucp_pm_options.html | 4 +-- phpBB/styles/prosilver/template/ucp_pm_popup.html | 4 +-- .../prosilver/template/ucp_pm_viewfolder.html | 6 ++-- .../prosilver/template/ucp_pm_viewmessage.html | 6 ++-- .../prosilver/template/ucp_prefs_personal.html | 4 +-- .../styles/prosilver/template/ucp_prefs_post.html | 4 +-- .../styles/prosilver/template/ucp_prefs_view.html | 4 +-- .../template/ucp_profile_profile_info.html | 4 +-- .../template/ucp_profile_reg_details.html | 8 ++--- .../prosilver/template/ucp_profile_signature.html | 8 ++--- phpBB/styles/prosilver/template/ucp_register.html | 12 +++---- phpBB/styles/prosilver/template/ucp_remind.html | 4 +-- phpBB/styles/prosilver/template/ucp_resend.html | 4 +-- .../styles/prosilver/template/ucp_zebra_foes.html | 4 +-- .../prosilver/template/ucp_zebra_friends.html | 4 +-- phpBB/styles/prosilver/theme/common.css | 24 -------------- phpBB/styles/prosilver/theme/cp.css | 37 ---------------------- 50 files changed, 167 insertions(+), 228 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/captcha_default.html b/phpBB/styles/prosilver/template/captcha_default.html index bccf231251..007cff644f 100644 --- a/phpBB/styles/prosilver/template/captcha_default.html +++ b/phpBB/styles/prosilver/template/captcha_default.html @@ -1,6 +1,6 @@
    -
    +

    {L_CONFIRMATION}

    {L_CONFIRM_EXPLAIN}

    @@ -19,6 +19,6 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/captcha_qa.html b/phpBB/styles/prosilver/template/captcha_qa.html index 0b18ada3bb..7986b1faa2 100644 --- a/phpBB/styles/prosilver/template/captcha_qa.html +++ b/phpBB/styles/prosilver/template/captcha_qa.html @@ -1,6 +1,6 @@
    -
    +

    {L_CONFIRMATION}

    @@ -16,6 +16,6 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/captcha_recaptcha.html b/phpBB/styles/prosilver/template/captcha_recaptcha.html index 51a1615bd5..087a5b9405 100644 --- a/phpBB/styles/prosilver/template/captcha_recaptcha.html +++ b/phpBB/styles/prosilver/template/captcha_recaptcha.html @@ -1,6 +1,6 @@
    -
    +

    {L_CONFIRMATION}

    {L_CONFIRM_EXPLAIN}

    @@ -45,6 +45,6 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_approve.html b/phpBB/styles/prosilver/template/mcp_approve.html index 1010ac6e6f..8b7f7c8c6d 100644 --- a/phpBB/styles/prosilver/template/mcp_approve.html +++ b/phpBB/styles/prosilver/template/mcp_approve.html @@ -3,7 +3,7 @@
    {S_FORM_TOKEN} -
    +
    @@ -45,7 +45,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_ban.html b/phpBB/styles/prosilver/template/mcp_ban.html index f8cdc1a687..adcd86d057 100644 --- a/phpBB/styles/prosilver/template/mcp_ban.html +++ b/phpBB/styles/prosilver/template/mcp_ban.html @@ -36,7 +36,7 @@

    {L_TITLE}

    -
    +

    {L_TITLE}

    {L_EXPLAIN}

    @@ -72,7 +72,7 @@ -
    +
    @@ -82,7 +82,7 @@
    -
    +

    {L_UNBAN_TITLE}

    {L_UNBAN_EXPLAIN}

    @@ -107,7 +107,7 @@ -
    +
    @@ -119,7 +119,7 @@

    {L_NO_BAN_CELL}

    -
    + diff --git a/phpBB/styles/prosilver/template/mcp_forum.html b/phpBB/styles/prosilver/template/mcp_forum.html index 49d4601dfa..afd4f2308a 100644 --- a/phpBB/styles/prosilver/template/mcp_forum.html +++ b/phpBB/styles/prosilver/template/mcp_forum.html @@ -8,7 +8,7 @@
    -
    +
    -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_front.html b/phpBB/styles/prosilver/template/mcp_front.html index e9635e528c..69e0b02a4e 100644 --- a/phpBB/styles/prosilver/template/mcp_front.html +++ b/phpBB/styles/prosilver/template/mcp_front.html @@ -7,7 +7,7 @@
    -
    +

    {L_LATEST_UNAPPROVED}

    {L_UNAPPROVED_TOTAL}

    @@ -42,7 +42,7 @@ -
    +
    {S_FORM_TOKEN}
    @@ -59,7 +59,7 @@
    -
    +

    {L_LATEST_REPORTED}

    {L_REPORTS_TOTAL}

    @@ -92,13 +92,13 @@ -
    +
    -
    +

    {L_LATEST_REPORTED_PMS}

    {L_PM_REPORTS_TOTAL}

    @@ -131,13 +131,13 @@ -
    +
    -
    +

    {L_LATEST_LOGS}

    @@ -170,7 +170,7 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_header.html b/phpBB/styles/prosilver/template/mcp_header.html index 13cc7e12cf..7b9e4c13cb 100644 --- a/phpBB/styles/prosilver/template/mcp_header.html +++ b/phpBB/styles/prosilver/template/mcp_header.html @@ -19,7 +19,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_logs.html b/phpBB/styles/prosilver/template/mcp_logs.html index 713ab7d9da..b5561687b2 100644 --- a/phpBB/styles/prosilver/template/mcp_logs.html +++ b/phpBB/styles/prosilver/template/mcp_logs.html @@ -5,7 +5,7 @@
    -
    +
    {S_FORM_TOKEN} -
    +
    @@ -80,7 +80,7 @@ {S_FORM_TOKEN} -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_move.html b/phpBB/styles/prosilver/template/mcp_move.html index 03a5c475db..4611412a9e 100644 --- a/phpBB/styles/prosilver/template/mcp_move.html +++ b/phpBB/styles/prosilver/template/mcp_move.html @@ -3,7 +3,7 @@
    -
    +

    {MESSAGE_TITLE}

    @@ -30,7 +30,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_notes_front.html b/phpBB/styles/prosilver/template/mcp_notes_front.html index 38970198e7..3da66ccb2e 100644 --- a/phpBB/styles/prosilver/template/mcp_notes_front.html +++ b/phpBB/styles/prosilver/template/mcp_notes_front.html @@ -5,7 +5,7 @@

    {L_TITLE}

    -
    +
    @@ -15,7 +15,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_notes_user.html b/phpBB/styles/prosilver/template/mcp_notes_user.html index 129f2ca839..afe904dab3 100644 --- a/phpBB/styles/prosilver/template/mcp_notes_user.html +++ b/phpBB/styles/prosilver/template/mcp_notes_user.html @@ -5,7 +5,7 @@

    {L_TITLE}

    -
    +

    {USERNAME_FULL}

    @@ -25,11 +25,11 @@
    -
    +
    -
    +

    {L_ADD_FEEDBACK}

    {L_ADD_FEEDBACK_EXPLAIN}

    @@ -38,7 +38,7 @@
    - +
    @@ -48,7 +48,7 @@
    -
    +
    -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_post.html b/phpBB/styles/prosilver/template/mcp_post.html index 496d9ffd0f..752fbdd078 100644 --- a/phpBB/styles/prosilver/template/mcp_post.html +++ b/phpBB/styles/prosilver/template/mcp_post.html @@ -8,7 +8,7 @@
    -
    +

    {L_REPORT_REASON}: {REPORT_REASON_TITLE}

    @@ -25,7 +25,7 @@
    -
    +
    @@ -45,7 +45,7 @@
    -
    +
    @@ -115,12 +115,12 @@
    -
    +
    -
    +

    {L_MOD_OPTIONS}

    @@ -159,18 +159,18 @@ -
    +
    -
    +

    {RETURN_QUEUE} | {RETURN_TOPIC_SIMPLE} | {RETURN_POST}{RETURN_REPORTS} | {L_VIEW_POST} | {L_VIEW_TOPIC} | {L_VIEW_FORUM}{RETURN_TOPIC}

    -
    +
    @@ -179,7 +179,7 @@
    -
    +
    @@ -216,13 +216,13 @@
    -
    +
    -
    +

    {L_MCP_POST_REPORTS}

    @@ -231,13 +231,13 @@

    {reports.REASON_TITLE}: {reports.REASON_DESC}
    {reports.REPORT_TEXT}

    -
    +
    -
    +

    {L_THIS_POST_IP}: {POST_IPADDR}{POST_IP} ({POST_IP}{L_LOOKUP_IP}) @@ -289,7 +289,7 @@

    {L_LOOKUP_ALL}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_queue.html b/phpBB/styles/prosilver/template/mcp_queue.html index f86678ebe4..e9a477a24c 100644 --- a/phpBB/styles/prosilver/template/mcp_queue.html +++ b/phpBB/styles/prosilver/template/mcp_queue.html @@ -11,7 +11,7 @@

    {L_TITLE}

    -
    +

    {L_EXPLAIN}

    @@ -81,7 +81,7 @@

    {L_NO_TOPICS_QUEUE}{L_NO_POSTS_QUEUE}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_reports.html b/phpBB/styles/prosilver/template/mcp_reports.html index 5f06fc091e..95e7d9e021 100644 --- a/phpBB/styles/prosilver/template/mcp_reports.html +++ b/phpBB/styles/prosilver/template/mcp_reports.html @@ -13,7 +13,7 @@

    {L_TITLE}

    -
    +

    {L_EXPLAIN}

    @@ -83,7 +83,7 @@

    {L_NO_REPORTS}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_topic.html b/phpBB/styles/prosilver/template/mcp_topic.html index ab0c83a56f..1da1b1b3d4 100644 --- a/phpBB/styles/prosilver/template/mcp_topic.html +++ b/phpBB/styles/prosilver/template/mcp_topic.html @@ -22,15 +22,15 @@ onload_functions.push('subPanels()');
    @@ -39,7 +39,7 @@ onload_functions.push('subPanels()');
    -
    +
    @@ -89,11 +89,11 @@ onload_functions.push('subPanels()');
    -
    +
    -
    +

    {L_EXPAND_VIEW} @@ -103,7 +103,7 @@ onload_functions.push('subPanels()');
    -
    +
    @@ -131,7 +131,7 @@ onload_functions.push('subPanels()');
    -
    +
    @@ -147,7 +147,7 @@ onload_functions.push('subPanels()'); -

    +
    diff --git a/phpBB/styles/prosilver/template/mcp_warn_front.html b/phpBB/styles/prosilver/template/mcp_warn_front.html index 8f42e28cc0..f631cfb00d 100644 --- a/phpBB/styles/prosilver/template/mcp_warn_front.html +++ b/phpBB/styles/prosilver/template/mcp_warn_front.html @@ -5,7 +5,7 @@

    {L_WARN_USER}

    -
    +

    {L_SELECT_USER}

    @@ -17,7 +17,7 @@
    -
    +
    @@ -28,7 +28,7 @@
    -
    +

    {L_MOST_WARNINGS}

    @@ -58,11 +58,11 @@

    {L_WARNINGS_ZERO_TOTAL}

    -
    +
    -
    +

    {L_LATEST_WARNINGS}

    @@ -91,7 +91,7 @@

    {L_WARNINGS_ZERO_TOTAL}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/mcp_warn_list.html b/phpBB/styles/prosilver/template/mcp_warn_list.html index d9c0bce088..b17b1dd589 100644 --- a/phpBB/styles/prosilver/template/mcp_warn_list.html +++ b/phpBB/styles/prosilver/template/mcp_warn_list.html @@ -5,7 +5,7 @@

    {L_WARNED_USERS}

    -
    +

    {L_WARNED_USERS_EXPLAIN}

    @@ -56,7 +56,7 @@

    {L_WARNINGS_ZERO_TOTAL}

    -
    +
    {S_FORM_TOKEN}
    diff --git a/phpBB/styles/prosilver/template/mcp_warn_post.html b/phpBB/styles/prosilver/template/mcp_warn_post.html index fd8c60d25a..540abb9473 100644 --- a/phpBB/styles/prosilver/template/mcp_warn_post.html +++ b/phpBB/styles/prosilver/template/mcp_warn_post.html @@ -5,7 +5,7 @@

    {L_MCP_WARN_POST}

    -
    +

    {USERNAME}{USERNAME}

    @@ -25,11 +25,11 @@
    -
    +
    -
    +

    {L_POST_DETAILS}

    @@ -41,11 +41,11 @@
    -
    +
    -
    +

    {L_ADD_WARNING}

    {L_ADD_WARNING_EXPLAIN}

    @@ -61,7 +61,7 @@
    - +
    diff --git a/phpBB/styles/prosilver/template/mcp_warn_user.html b/phpBB/styles/prosilver/template/mcp_warn_user.html index 6c326c8bc6..5e99c8d7e1 100644 --- a/phpBB/styles/prosilver/template/mcp_warn_user.html +++ b/phpBB/styles/prosilver/template/mcp_warn_user.html @@ -5,7 +5,7 @@

    {L_WARN_USER}

    -
    +

    {USERNAME_FULL}

    @@ -25,11 +25,11 @@
    -
    +
    -
    +

    {L_ADD_WARNING}

    {L_ADD_WARNING_EXPLAIN}

    @@ -45,7 +45,7 @@
    - +
    diff --git a/phpBB/styles/prosilver/template/mcp_whois.html b/phpBB/styles/prosilver/template/mcp_whois.html index 0da9b6187e..88d3269a71 100644 --- a/phpBB/styles/prosilver/template/mcp_whois.html +++ b/phpBB/styles/prosilver/template/mcp_whois.html @@ -2,7 +2,7 @@

    {L_WHOIS}

    -
    +

    {L_RETURN_POST}

    @@ -10,7 +10,7 @@

    {L_RETURN_POST}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_agreement.html b/phpBB/styles/prosilver/template/ucp_agreement.html index 3825abc08f..4109b6ef34 100644 --- a/phpBB/styles/prosilver/template/ucp_agreement.html +++ b/phpBB/styles/prosilver/template/ucp_agreement.html @@ -31,16 +31,16 @@
    -
    +

    {SITENAME} - {L_REGISTRATION}

    {L_COPPA_BIRTHDAY}{L_TERMS_OF_USE}

    -
    +
    -
    +
    {L_COPPA_NO}  {L_COPPA_YES} @@ -51,21 +51,21 @@ {S_HIDDEN_FIELDS} {S_FORM_TOKEN}
    -
    +
    -
    +

    {SITENAME} - {AGREEMENT_TITLE}

    {AGREEMENT_TEXT}


    {L_BACK}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_attachments.html b/phpBB/styles/prosilver/template/ucp_attachments.html index 5a15339b8a..84e4c2e875 100644 --- a/phpBB/styles/prosilver/template/ucp_attachments.html +++ b/phpBB/styles/prosilver/template/ucp_attachments.html @@ -5,7 +5,7 @@

    {L_TITLE}

    -
    +

    {L_ATTACHMENTS_EXPLAIN}

    @@ -63,7 +63,7 @@

    {L_UCP_NO_ATTACHMENTS}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_avatar_options.html b/phpBB/styles/prosilver/template/ucp_avatar_options.html index 7012c42f3b..9801e065a5 100644 --- a/phpBB/styles/prosilver/template/ucp_avatar_options.html +++ b/phpBB/styles/prosilver/template/ucp_avatar_options.html @@ -1,6 +1,6 @@
    -
    +

    {L_AVATAR_FEATURES_DISABLED}

    @@ -43,11 +43,11 @@
    - +
    -
    +

    {L_AVATAR_GALLERY}

    @@ -66,5 +66,5 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_groups_manage.html b/phpBB/styles/prosilver/template/ucp_groups_manage.html index a6f8e1d793..a13c043e48 100644 --- a/phpBB/styles/prosilver/template/ucp_groups_manage.html +++ b/phpBB/styles/prosilver/template/ucp_groups_manage.html @@ -5,7 +5,7 @@
    -
    +

    {L_GROUPS_EXPLAIN}

    @@ -45,11 +45,11 @@ -
    +
    -
    +

    {L_GROUP_SETTINGS_SAVE}

    @@ -63,7 +63,7 @@
    -
    +
    @@ -163,7 +163,7 @@ - +
    @@ -173,7 +173,7 @@
    -
    +

    {L_ADD_USERS}

    @@ -194,7 +194,7 @@ -
    +
    @@ -230,7 +230,7 @@

    {L_NO_LEADERS}

    - + diff --git a/phpBB/styles/prosilver/template/ucp_groups_membership.html b/phpBB/styles/prosilver/template/ucp_groups_membership.html index 26ee6d8a52..a312911ae4 100644 --- a/phpBB/styles/prosilver/template/ucp_groups_membership.html +++ b/phpBB/styles/prosilver/template/ucp_groups_membership.html @@ -5,7 +5,7 @@
    -
    +

    {L_GROUPS_EXPLAIN}

    @@ -66,12 +66,12 @@ -
    +
    -
    +
    • @@ -98,12 +98,12 @@
    -
    +
    -
    +
    • @@ -130,7 +130,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_header.html b/phpBB/styles/prosilver/template/ucp_header.html index 4d008564c4..c5d58b8eaa 100644 --- a/phpBB/styles/prosilver/template/ucp_header.html +++ b/phpBB/styles/prosilver/template/ucp_header.html @@ -15,7 +15,7 @@
    -
    +
    @@ -63,7 +63,7 @@
    -
    +
    {L_FRIENDS}
    @@ -77,13 +77,13 @@
    -
    +
    -
    +
    {L_MESSAGE_COLOURS}
    @@ -92,7 +92,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_main_bookmarks.html b/phpBB/styles/prosilver/template/ucp_main_bookmarks.html index 50310f3b79..89502bbc3d 100644 --- a/phpBB/styles/prosilver/template/ucp_main_bookmarks.html +++ b/phpBB/styles/prosilver/template/ucp_main_bookmarks.html @@ -5,7 +5,7 @@

    {L_TITLE}

    -
    +

    {L_BOOKMARKS_EXPLAIN}

    @@ -60,7 +60,7 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_main_drafts.html b/phpBB/styles/prosilver/template/ucp_main_drafts.html index 2fc9e3e1fc..2155abeda3 100644 --- a/phpBB/styles/prosilver/template/ucp_main_drafts.html +++ b/phpBB/styles/prosilver/template/ucp_main_drafts.html @@ -5,14 +5,14 @@

    {L_TITLE}

    -
    +

    {L_DRAFTS_EXPLAIN}

    -
    +
    @@ -55,7 +55,7 @@

    {L_NO_SAVED_DRAFTS}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_main_front.html b/phpBB/styles/prosilver/template/ucp_main_front.html index 20afd119cc..b7a0619227 100644 --- a/phpBB/styles/prosilver/template/ucp_main_front.html +++ b/phpBB/styles/prosilver/template/ucp_main_front.html @@ -3,7 +3,7 @@

    {L_TITLE}

    -
    +

    {L_UCP_WELCOME}

    @@ -39,7 +39,7 @@
    {L_YOUR_WARNINGS}:
    {WARNING_IMG} [{WARNINGS}]
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_main_subscribed.html b/phpBB/styles/prosilver/template/ucp_main_subscribed.html index 2711c9486f..ab65d9b3ae 100644 --- a/phpBB/styles/prosilver/template/ucp_main_subscribed.html +++ b/phpBB/styles/prosilver/template/ucp_main_subscribed.html @@ -4,7 +4,7 @@

    {L_TITLE}

    -
    +

    {L_WATCHED_EXPLAIN}

    @@ -77,7 +77,7 @@

    {L_NO_WATCHED_TOPICS}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_pm_history.html b/phpBB/styles/prosilver/template/ucp_pm_history.html index 9051eb2ee0..d7fcbb9e54 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_history.html +++ b/phpBB/styles/prosilver/template/ucp_pm_history.html @@ -12,7 +12,7 @@
    -
    +
    @@ -28,7 +28,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_pm_message_header.html b/phpBB/styles/prosilver/template/ucp_pm_message_header.html index ae66dd0a36..d6659fad0f 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_message_header.html +++ b/phpBB/styles/prosilver/template/ucp_pm_message_header.html @@ -3,7 +3,7 @@
    -
    +

    {FOLDER_STATUS}

    diff --git a/phpBB/styles/prosilver/template/ucp_pm_options.html b/phpBB/styles/prosilver/template/ucp_pm_options.html index c2a2e58c97..dde8ee639b 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_options.html +++ b/phpBB/styles/prosilver/template/ucp_pm_options.html @@ -5,7 +5,7 @@
    -
    +

    {ERROR_MESSAGE}

    {NOTIFICATION_MESSAGE}

    @@ -123,7 +123,7 @@
    - + {S_FORM_TOKEN}
    diff --git a/phpBB/styles/prosilver/template/ucp_pm_popup.html b/phpBB/styles/prosilver/template/ucp_pm_popup.html index 1a9a4d015e..4cc39ee450 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_popup.html +++ b/phpBB/styles/prosilver/template/ucp_pm_popup.html @@ -14,12 +14,12 @@ function jump_to_inbox(url)
    -
    +

    {L_LOGIN_CHECK_PM}{MESSAGE}

    {CLICK_TO_VIEW}

    {L_CLOSE_WINDOW}

    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html b/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html index dac03c3505..20394b254e 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html +++ b/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html @@ -8,7 +8,7 @@

    {L_EXPORT_AS_CSV}

    -
    +

    {L_OPTIONS}

    @@ -20,7 +20,7 @@
    -
    +
    @@ -110,7 +110,7 @@ - + diff --git a/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html b/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html index 5411fda572..2e7a7c4ac9 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html +++ b/phpBB/styles/prosilver/template/ucp_pm_viewmessage.html @@ -2,7 +2,7 @@ - + @@ -15,7 +15,7 @@
    -
    +
    @@ -96,7 +96,7 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_prefs_personal.html b/phpBB/styles/prosilver/template/ucp_prefs_personal.html index 635f321469..1c829899fd 100644 --- a/phpBB/styles/prosilver/template/ucp_prefs_personal.html +++ b/phpBB/styles/prosilver/template/ucp_prefs_personal.html @@ -5,7 +5,7 @@

    {L_TITLE}

    -
    +

    {ERROR}

    @@ -95,7 +95,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_prefs_post.html b/phpBB/styles/prosilver/template/ucp_prefs_post.html index ee3ae3f34e..0ca51ed7d6 100644 --- a/phpBB/styles/prosilver/template/ucp_prefs_post.html +++ b/phpBB/styles/prosilver/template/ucp_prefs_post.html @@ -4,7 +4,7 @@

    {L_TITLE}

    -
    +

    {ERROR}

    @@ -38,7 +38,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_prefs_view.html b/phpBB/styles/prosilver/template/ucp_prefs_view.html index 125a62e12a..2e47c2e054 100644 --- a/phpBB/styles/prosilver/template/ucp_prefs_view.html +++ b/phpBB/styles/prosilver/template/ucp_prefs_view.html @@ -5,7 +5,7 @@

    {L_TITLE}

    -
    +

    {ERROR}

    @@ -81,7 +81,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_profile_profile_info.html b/phpBB/styles/prosilver/template/ucp_profile_profile_info.html index 0f53c82e76..b6f6a8988d 100644 --- a/phpBB/styles/prosilver/template/ucp_profile_profile_info.html +++ b/phpBB/styles/prosilver/template/ucp_profile_profile_info.html @@ -5,7 +5,7 @@

    {L_TITLE}

    -
    +

    {L_PROFILE_INFO_NOTICE}

    @@ -66,7 +66,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_profile_reg_details.html b/phpBB/styles/prosilver/template/ucp_profile_reg_details.html index 9d4a9e3463..4f74c7193b 100644 --- a/phpBB/styles/prosilver/template/ucp_profile_reg_details.html +++ b/phpBB/styles/prosilver/template/ucp_profile_reg_details.html @@ -4,7 +4,7 @@

    {L_TITLE}

    -
    +

    {L_FORCE_PASSWORD_EXPLAIN}

    @@ -31,11 +31,11 @@
    -
    +
    -
    +
    @@ -44,7 +44,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_profile_signature.html b/phpBB/styles/prosilver/template/ucp_profile_signature.html index cf5a6c3229..574f61ed9f 100644 --- a/phpBB/styles/prosilver/template/ucp_profile_signature.html +++ b/phpBB/styles/prosilver/template/ucp_profile_signature.html @@ -6,17 +6,17 @@
    -
    +

    {L_SIGNATURE_PREVIEW}

    {SIGNATURE_PREVIEW}
    -
    +
    -
    +

    {L_SIGNATURE_EXPLAIN}

    @@ -36,7 +36,7 @@
    - +
    diff --git a/phpBB/styles/prosilver/template/ucp_register.html b/phpBB/styles/prosilver/template/ucp_register.html index 30ed37eecc..47253af37c 100644 --- a/phpBB/styles/prosilver/template/ucp_register.html +++ b/phpBB/styles/prosilver/template/ucp_register.html @@ -21,7 +21,7 @@
    -
    +

    {SITENAME} - {L_REGISTRATION}

    @@ -72,7 +72,7 @@
    - + @@ -83,17 +83,17 @@
    -
    +

    {L_COPPA_COMPLIANCE}

    {L_COPPA_EXPLAIN}

    -
    +
    -
    +
    {S_HIDDEN_FIELDS} @@ -102,7 +102,7 @@ {S_FORM_TOKEN}
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_remind.html b/phpBB/styles/prosilver/template/ucp_remind.html index afc23b3f21..d480258209 100644 --- a/phpBB/styles/prosilver/template/ucp_remind.html +++ b/phpBB/styles/prosilver/template/ucp_remind.html @@ -3,7 +3,7 @@
    -
    +

    {L_SEND_PASSWORD}

    @@ -25,7 +25,7 @@
    - + diff --git a/phpBB/styles/prosilver/template/ucp_resend.html b/phpBB/styles/prosilver/template/ucp_resend.html index 0481c2a601..36e112863c 100644 --- a/phpBB/styles/prosilver/template/ucp_resend.html +++ b/phpBB/styles/prosilver/template/ucp_resend.html @@ -4,7 +4,7 @@
    -
    +

    {L_UCP_RESEND}

    @@ -25,7 +25,7 @@
    -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_zebra_foes.html b/phpBB/styles/prosilver/template/ucp_zebra_foes.html index 8a2c9cbff5..7aceac74c3 100644 --- a/phpBB/styles/prosilver/template/ucp_zebra_foes.html +++ b/phpBB/styles/prosilver/template/ucp_zebra_foes.html @@ -5,7 +5,7 @@

    {L_TITLE}

    -
    +

    {L_FOES_EXPLAIN}

    @@ -28,7 +28,7 @@ -
    +
    diff --git a/phpBB/styles/prosilver/template/ucp_zebra_friends.html b/phpBB/styles/prosilver/template/ucp_zebra_friends.html index 928ec1a881..8908e4ba69 100644 --- a/phpBB/styles/prosilver/template/ucp_zebra_friends.html +++ b/phpBB/styles/prosilver/template/ucp_zebra_friends.html @@ -5,7 +5,7 @@

    {L_TITLE}

    -
    +

    {L_FRIENDS_EXPLAIN}

    @@ -28,7 +28,7 @@
    - +
    diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 592b6a2ff9..fd67c48111 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -298,22 +298,6 @@ a#logo:hover { margin: 5px 5px 2px 5px; } -.headbg span.corners-bottom { - margin-bottom: -1px; -} - -.post span.corners-top, .post span.corners-bottom, .panel span.corners-top, .panel span.corners-bottom, .navbar span.corners-top, .navbar span.corners-bottom { - margin: 0 -10px; -} - -.rules span.corners-top { - margin: 0 -10px 5px -10px; -} - -.rules span.corners-bottom { - margin: 5px -10px 0 -10px; -} - /* Horizontal lists ----------------------------------------*/ ul.linklist { @@ -437,14 +421,6 @@ table.info tbody th { margin: 0 -1px; } -.forumbg-table > .inner > span.corners-top { - margin: 0 -4px -1px -4px; -} - -.forumbg-table > .inner > span.corners-bottom { - margin: -1px -4px 0 -4px; -} - /* Misc layout styles ---------------------------------------- */ /* column[1-2] styles are containers for two column layouts diff --git a/phpBB/styles/prosilver/theme/cp.css b/phpBB/styles/prosilver/theme/cp.css index 74f11e47a6..d073b2b9d1 100644 --- a/phpBB/styles/prosilver/theme/cp.css +++ b/phpBB/styles/prosilver/theme/cp.css @@ -240,49 +240,12 @@ ul.cplist { margin-left: 10px; } -#cp-main span.corners-top, #cp-menu span.corners-top { - background-image: none; -} - -#cp-main span.corners-top span, #cp-menu span.corners-top span { - background-image: none; -} - -#cp-main span.corners-bottom, #cp-menu span.corners-bottom { - background-image: none; -} - -#cp-main span.corners-bottom span, #cp-menu span.corners-bottom span { - background-image: none; -} - -/* Topicreview */ -#cp-main .panel #topicreview span.corners-top, #cp-menu .panel #topicreview span.corners-top { - background-image: none; -} - -#cp-main .panel #topicreview span.corners-top span, #cp-menu .panel #topicreview span.corners-top span { - background-image: none; -} - -#cp-main .panel #topicreview span.corners-bottom, #cp-menu .panel #topicreview span.corners-bottom { - background-image: none; -} - -#cp-main .panel #topicreview span.corners-bottom span, #cp-menu .panel #topicreview span.corners-bottom span { - background-image: none; -} - /* Friends list */ .cp-mini { padding: 0 5px; margin: 10px 15px 10px 5px; } -.cp-mini span.corners-top, .cp-mini span.corners-bottom { - margin: 0 -5px; -} - dl.mini dt { font-weight: bold; } -- cgit v1.2.1 From 42101fe8d48cbdbe1a4e73bd9cc388a9e4b490c5 Mon Sep 17 00:00:00 2001 From: Hari Sankar R Date: Mon, 2 Apr 2012 16:26:23 +0530 Subject: [ticket/10699] Long h2 title breaks div.minitabs in MCP Fixed overlapping of Subject title over the minitabs. Added css property to cp.css under MCP Specific tweaks. Wrapped h2 and #minitabs under .tabs-container with clear: both PHPBB3-10699 --- phpBB/styles/prosilver/template/mcp_topic.html | 4 ++-- phpBB/styles/prosilver/theme/cp.css | 17 +++++++++++++++++ phpBB/styles/prosilver/theme/tweaks.css | 10 ++++++++++ 3 files changed, 29 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/mcp_topic.html b/phpBB/styles/prosilver/template/mcp_topic.html index 5dbc8d670c..e8d5ceada4 100644 --- a/phpBB/styles/prosilver/template/mcp_topic.html +++ b/phpBB/styles/prosilver/template/mcp_topic.html @@ -1,5 +1,5 @@ - +

    {L_TOPIC}: {TOPIC_TITLE}

    - - + + - + - + - + -- cgit v1.2.1 From 4771af08339d456174cbe3ebb1563e0f756733dd Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 11 Apr 2012 14:33:09 +0100 Subject: [ticket/10783] Added assets_version to subsilver2. PHPBB3-10783 --- phpBB/styles/subsilver2/template/overall_footer.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/overall_footer.html b/phpBB/styles/subsilver2/template/overall_footer.html index 4f686cf5e4..24c6f8105c 100644 --- a/phpBB/styles/subsilver2/template/overall_footer.html +++ b/phpBB/styles/subsilver2/template/overall_footer.html @@ -9,7 +9,7 @@
    - + {SCRIPTS} -- cgit v1.2.1 From 6ad58c7e046c9f257ad5441b7a583cddb213ad3f Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Wed, 11 Apr 2012 14:37:15 +0100 Subject: [ticket/10783] Added assets_version to ACP and simple_*.html. PHPBB3-10783 --- phpBB/adm/style/overall_footer.html | 4 ++-- phpBB/adm/style/overall_header.html | 2 +- phpBB/adm/style/simple_footer.html | 2 +- phpBB/adm/style/simple_header.html | 2 +- phpBB/styles/prosilver/template/simple_footer.html | 2 +- phpBB/styles/prosilver/template/simple_header.html | 8 ++++---- phpBB/styles/subsilver2/template/simple_footer.html | 2 +- 7 files changed, 11 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/overall_footer.html b/phpBB/adm/style/overall_footer.html index 0d88c8bcc5..2bc9ee52d7 100644 --- a/phpBB/adm/style/overall_footer.html +++ b/phpBB/adm/style/overall_footer.html @@ -37,8 +37,8 @@ - - + + {SCRIPTS} diff --git a/phpBB/adm/style/overall_header.html b/phpBB/adm/style/overall_header.html index be5ac29131..f79c0318b5 100644 --- a/phpBB/adm/style/overall_header.html +++ b/phpBB/adm/style/overall_header.html @@ -5,7 +5,7 @@ {META} {PAGE_TITLE} - + - + diff --git a/phpBB/adm/style/simple_header.html b/phpBB/adm/style/simple_header.html index 84ff665acc..d4cbcb6cbe 100644 --- a/phpBB/adm/style/simple_header.html +++ b/phpBB/adm/style/simple_header.html @@ -5,7 +5,7 @@ {META} {PAGE_TITLE} - + - + {SCRIPTS} diff --git a/phpBB/styles/prosilver/template/simple_header.html b/phpBB/styles/prosilver/template/simple_header.html index f0dcbed5a4..5440d66520 100644 --- a/phpBB/styles/prosilver/template/simple_header.html +++ b/phpBB/styles/prosilver/template/simple_header.html @@ -40,18 +40,18 @@ // ]]> - + - + - + diff --git a/phpBB/styles/subsilver2/template/simple_footer.html b/phpBB/styles/subsilver2/template/simple_footer.html index 771765ee12..6082b71891 100644 --- a/phpBB/styles/subsilver2/template/simple_footer.html +++ b/phpBB/styles/subsilver2/template/simple_footer.html @@ -6,7 +6,7 @@ - + {SCRIPTS} -- cgit v1.2.1 From 534d96695744e2ddeebf33a971edef40d443e585 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 11 Apr 2012 21:39:27 +0200 Subject: [ticket/10788] Add imkingdavid to the list of developers in docs/AUTHORS. PHPBB3-10788 --- phpBB/docs/AUTHORS | 1 + 1 file changed, 1 insertion(+) (limited to 'phpBB') diff --git a/phpBB/docs/AUTHORS b/phpBB/docs/AUTHORS index de599193d2..234f8c273b 100644 --- a/phpBB/docs/AUTHORS +++ b/phpBB/docs/AUTHORS @@ -25,6 +25,7 @@ phpBB Lead Developer: naderman (Nils Adermann) phpBB Developers: Acyd Burn (Meik Sievertsen) [Lead 09/2005 - 01/2010] bantu (Andreas Fischer) ckwalsh (Cullen Walsh) + imkingdavid (David King) igorw (Igor Wiedler) kellanved (Henry Sudhof) nickvergessen (Joas Schilling) -- cgit v1.2.1 From f394fd250e5cf35a38579ecc403a78e223f37da8 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 11 Apr 2012 22:08:36 +0200 Subject: [ticket/10788] Move ckwalsh and kellanved to the Former Contributors section. PHPBB3-10788 --- phpBB/docs/AUTHORS | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/AUTHORS b/phpBB/docs/AUTHORS index 234f8c273b..57adec6a67 100644 --- a/phpBB/docs/AUTHORS +++ b/phpBB/docs/AUTHORS @@ -24,10 +24,8 @@ phpBB Lead Developer: naderman (Nils Adermann) phpBB Developers: Acyd Burn (Meik Sievertsen) [Lead 09/2005 - 01/2010] bantu (Andreas Fischer) - ckwalsh (Cullen Walsh) imkingdavid (David King) igorw (Igor Wiedler) - kellanved (Henry Sudhof) nickvergessen (Joas Schilling) Oleg (Oleg Pudeyev) rxu (Ruslan Uzdenov) @@ -49,9 +47,11 @@ phpBB Developers: A_Jelly_Doughnut (Josh Woody) [01/2010 - 11/2010] APTX (Marek A. Ruszczyński) [12/2007 - 04/2011] Ashe (Ludovic Arnaud) [10/2002 - 11/2003, 06/2006 - 10/2006] BartVB (Bart van Bragt) [11/2000 - 03/2006] + ckwalsh (Cullen Walsh) [01/2010 - 07/2011] DavidMJ (David M.) [12/2005 - 08/2009] dhn (Dominik Dröscher) [05/2007 - 01/2011] GrahamJE (Graham Eames) [09/2005 - 11/2006] + kellanved (Henry Sudhof) [04/2007 - 03/2011] TerraFrost (Jim Wigginton) [04/2009 - 01/2011] Vic D'Elfant (Vic D'Elfant) [04/2007 - 04/2009] -- cgit v1.2.1 From 8382e449423fd1dfecb416389613e847b02f63c6 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 11 Apr 2012 23:57:36 -0400 Subject: [ticket/10688] Update readme for 3.1 and current practices. PHPBB3-10688 --- phpBB/docs/README.html | 55 ++++++++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 24 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/README.html b/phpBB/docs/README.html index 7cd727c60e..6adc1ee7cb 100644 --- a/phpBB/docs/README.html +++ b/phpBB/docs/README.html @@ -84,23 +84,26 @@
    -

    Installation, update and conversion instructions can be found in the INSTALL document contained in this distribution. If you are intending to convert from a previous phpBB 2.0.x installation we highly recommend you backup any existing data before proceeding!

    +

    Installation, update and conversion instructions can be found in the INSTALL document contained in this distribution. If you are intending to convert from a previous phpBB 2.0.x or 3.0.x installation we highly recommend you backup any existing data before proceeding!

    -

    Users of phpBB3 Beta versions cannot directly update.

    +

    Users of phpBB 3.0 and 3.1 Beta versions cannot directly update.

    Please note that we won't support the following installation types:

      -
    • Updates from phpBB3 Beta versions to phpBB3 RC1 and higher
    • -
    • Conversions from phpBB 2.0.x to phpBB3 Beta versions
    • -
    • phpBB3 Beta installations
    • +
    • Updates from phpBB 3.0 Beta versions to phpBB 3.0 RC1 and higher
    • +
    • Updates from phpBB 3.1 Beta versions to phpBB 3.1 RC1 and higher
    • +
    • Conversions from phpBB 2.0.x to phpBB 3.0 or 3.1 Beta versions
    • +
    • phpBB 3.0 or 3.1 Beta installations

    We give support for the following installation types:

      -
    • Updates from phpBB3 RC1 to the latest version
    • +
    • Updates from phpBB 3.0 RC1 and 3.1 RC1 to the latest version
    • +
    • Note: if using the Automatic Update Package, updates are supported from phpBB 3.0.2 onward. To update a pre-3.0.2 installation, first update to 3.0.2 and then update to the current version.
    • Conversions from phpBB 2.0.x to the latest version
    • -
    • New installations of phpBB3 - always only the latest released version
    • +
    • New installations of phpBB 3.0.x - always only the latest released version
    • +
    • New installations of phpBB 3.1.x - always only the latest released version
    @@ -129,13 +132,13 @@

    This is the official location for all supported language sets. If you download a package from a 3rd party site you do so with the understanding that we cannot offer support. So please, do not ask for help in these cases!

    -

    Installation of these packages is straightforward, simply download the required language pack and unarchive it into the languages/ folder. Please ensure you retain the directory structure when doing this! Once uploaded go to the Admin->System->Language Packs and install the now appeared new language pack. To install the style imageset you should download the imageset for your language and unarchive the file/s into the relevant imageset directory (styles/prosilver/imageset or styles/subsilver2/imageset), again you must retain the directory structure. Once installed the imageset will become immediately available.

    +

    Installation of these packages is straightforward, simply download the required language pack and unarchive it into the languages/ folder. Please ensure you retain the directory structure when doing this! Once uploaded go to the Admin->System->Language Packs and install the now appearing new language pack. To install the style imageset you should download the imageset for your language and unarchive the file/s into the relevant imageset directory (styles/prosilver/imageset or styles/subsilver2/imageset), again you must retain the directory structure. Once installed the imageset will become immediately available.

    If your language is not available please visit our forums where you will find a topic listing translations currently available or in preparation. This topic also gives you information should you wish to volunteer to translate a language not currently listed.

    2.ii. Styles

    -

    Although phpBB Group are rather proud of the included styles we realise that it may not be to everyones tastes. Therefore phpBB3 allows styles to be switched with relative ease. Firstly you need to locate and download a style you like. We maintain such a site at

    +

    Although phpBB Group are rather proud of the included styles we realise that they may not be to everyone's tastes. Therefore phpBB3 allows styles to be switched with relative ease. Firstly you need to locate and download a style you like. We maintain such a site at

    http://www.phpbb.com/styles/

    @@ -185,7 +188,7 @@

    phpBB Group maintains a thriving community where a number of people have generously decided to donate their time to help support users. This site can be found at:

    -

    http://www.phpbb.com/

    +

    http://www.phpbb.com/community/

    If you do seek help via our forums please be sure to do a Search before posting. This may well save both you and us time and allow the developer, moderator and support groups to spend more time responding to people with unknown issues and problems. Please also remember that phpBB is an entirely volunteer effort, no one receives any compensation for the time they give, this includes moderators as well as developers. So please be respectful and mindful when awaiting responses.

    @@ -193,6 +196,8 @@

    Another place you may find help is our IRC channel. This operates on the Freenode IRC network, irc.freenode.net and the channel is #phpbb and can be accessed by any good IRC client such as mIRC, XChat, etc. Again, please do not abuse this service and be respectful of other users.

    +

    There are other IRC channels available, please see http://www.phpbb.com/support/irc/ for the complete list.

    + @@ -209,13 +214,13 @@
    -

    This is the third stable release of phpBB. The 3.0.x line is essentially feature frozen, with only point releases seeing fixes for bugs and security issues, though feature alterations and minor feature additions may be done if deemed absolutely required. Our next major release will be phpBB 3.2 and the planning phase has begun (the unstable development version is 3.1). Please do not post questions asking when 3.2 will be available, no release date has been set.

    +

    This is a stable release of phpBB. The 3.1.x line is feature frozen, with point releases principally including fixes for bugs and security issues. Feature alterations and minor feature additions may be done if deemed absolutely required. The next major release will be phpBB 3.2 which is currently under development. Please do not post questions asking when 3.2 will be available, no release date has been set.

    -

    For those interested in the development of phpBB should keep an eye on the community forums to see how things are progressing:

    +

    Those interested in the development of phpBB should keep an eye on the development forums to see how things are progressing:

    http://area51.phpbb.com/phpBB/

    -

    Please note that this forum should NOT be used to obtain support for or ask questions about phpBB 2.0.x or phpBB 3.1.x, the main community forums are the place for this. Any such posts will be locked and go unanswered.

    +

    Please note that this forum should NOT be used to obtain support for phpBB, the main community forums are the place for this.

    @@ -233,31 +238,33 @@
    -

    The phpBB Group uses a bug tracking system to store, list and manage all reported bugs, it can be found at the location listed below. Please DO NOT post bug reports to our forums, they will be locked. In addition please DO NOT use the bug tracker for support requests. Posting such a request will only see you directed to the support forums (while taking time away from working on real bugs).

    +

    The phpBB Group uses a bug tracking system to store, list and manage all reported bugs, it can be found at the location listed below. Please DO NOT post bug reports to our forums. In addition please DO NOT use the bug tracker for support requests. Posting such a request will only see you directed to the support forums (while taking time away from working on real bugs).

    -

    http://tracker.phpbb.com/

    +

    http://tracker.phpbb.com/browse/PHPBB3

    While we very much appreciate receiving bug reports (the more reports the more stable phpBB will be) we ask you carry out a few steps before adding new entries:

      -
    • Firstly determine if your bug is reproduceable, how to determine this depends on the bug in question. Only if the bug is reproduceable it is likely to be a problem with phpBB3 (or in some way connected). If something cannot be reproduced it may turn out to have been your hosting provider working on something, a user doing something silly, etc. Bug reports for non-reproduceable events can slow down our attempts to fix real, reproduceable issues

    • +
    • Firstly determine if your bug is reproduceable, how to determine this depends on the bug in question. Only if the bug is reproduceable it is likely to be a problem with phpBB3 (or in some way connected). If something cannot be reproduced it may turn out to have been your hosting provider working on something, a user doing something silly, etc. Bug reports for non-reproduceable events can slow down our attempts to fix real, reproduceable issues.

    • Next please read or search through the existing bug reports to see if your bug (or one very similar to it) is already listed. If it is please add to that existing bug rather than creating a new duplicate entry (all this does is slow us down).

    • -
    • Check the forums (use search!) to see if people have discussed anything that sounds similar to what you are seeing. However, as noted above please DO NOT post your particular bug to the forum unless it's non-reproduceable or you are sure it's related to something you have done rather phpBB3

    • -
    • If no existing bug exists then please feel free to add it
    • +
    • Check the forums (use search!) to see if people have discussed anything that sounds similar to what you are seeing. However, as noted above please DO NOT post your particular bug to the forum unless it's non-reproduceable or you are sure it's related to something you have done rather phpBB3.

    • +
    • If no existing bug exists then please feel free to add it.

    If you do post a new bug (i.e. one that isn't already listed in the bug tracker) firstly make sure you have logged in (your username and password are the same as for the community forums) then please include the following details:

      -
    • Your server type/version, e.g. Apache 1.3.28, IIS 4, Sambar, etc.
    • -
    • PHP version and mode of operation, e.g. PHP 5.1.1 as a module, PHP 4.4.4 running as CGI, etc.
    • -
    • DB type/version, e.g. MySQL 4.0.1, PostgreSQL 7.3.2, MSSQL Server 2000 SP1, etc.
    • +
    • Your server type/version, e.g. Apache 2.2.3, IIS 7, Sambar, etc.
    • +
    • PHP version and mode of operation, e.g. PHP 5.3.2 as a module, PHP 5.4.0 running as CGI, etc.
    • +
    • DB type/version, e.g. MySQL 5.0.77, PostgreSQL 9.0.6, MSSQL Server 2000 SP1, etc.
    -

    The relevant database type/version is listed within the administration control panel

    +

    The relevant database type/version is listed within the administration control panel.

    Please also be as detailed as you can in your report, if possible list the steps required to duplicate the problem. If you have a patch that fixes the issue, please attach it to the ticket or submit a pull request on GitHub.

    +

    If you create a patch, it is very much appreciated (but not required) if you follow the phpBB coding guidelines. Please note that the coding guidelines are somewhat different between different versions of phpBB. For phpBB 3.1.x the coding guidelines may be found here: http://area51.phpbb.com/docs/31x/coding-guidelines.html

    +

    Once a bug has been submitted you will be emailed any follow up comments added to it. Please if you are requested to supply additional information, do so! It is frustrating for us to receive bug reports, ask for additional information but get nothing. In these cases we have a policy of closing the bug, which may leave a very real problem in place. Obviously we would rather not have this situation arise.

    5.i. Security related bugs

    @@ -306,11 +313,11 @@
    -

    phpBB is no longer supported on PHP4 due to several compatibility issues and we recommend that you upgrade to the latest stable release of PHP5 to run phpBB. The minimum version required is PHP 5.2.0.

    +

    phpBB 3.1.x takes advantage of new features added in PHP 5.3. We recommend that you upgrade to the latest stable release of PHP5 to run phpBB. The minimum version required is PHP 5.3.2.

    Please remember that running any application on a developmental version of PHP can lead to strange/unexpected results which may appear to be bugs in the application (which may not be true). Therefore we recommend you upgrade to the newest stable version of PHP before running phpBB3. If you are running a developmental version of PHP please check any bugs you find on a system running a stable release before submitting.

    -

    This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MSSQL Server 2000, PostgreSQL 7.x, Oracle 8, SQLite and Firebird. Versions of PHP used range from 5.2.0 to 5.3.x without problem.

    +

    This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MSSQL Server 2000, PostgreSQL 8.x, Oracle 8, SQLite and Firebird. Versions of PHP used range from 5.3.x to 5.4.x without problem.

    7.i. Notice on PHP security issues

    -- cgit v1.2.1 From 8bb083eed91f049600ff0db4d8528e7a6c7e5093 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Thu, 12 Apr 2012 00:24:09 -0400 Subject: [ticket/10688] Update install.html for 3.1 and current practices. PHPBB3-10688 --- phpBB/docs/INSTALL.html | 20 ++++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/INSTALL.html b/phpBB/docs/INSTALL.html index 9628e4c337..47cf546ee8 100644 --- a/phpBB/docs/INSTALL.html +++ b/phpBB/docs/INSTALL.html @@ -124,7 +124,7 @@
    -

    phpBB3 has a few requirements which must be met before you are able to install and use it.

    +

    phpBB 3.1.x has a few requirements which must be met before you are able to install and use it.

    • A webserver or web hosting account running on any major Operating System with support for PHP
    • @@ -134,13 +134,17 @@
    • PostgreSQL 7.3+
    • SQLite 2.8.2+
    • Firebird 2.1+
    • -
    • MS SQL Server 2000 or above (directly or via ODBC)
    • +
    • MS SQL Server 2000 or above (directly or via ODBC or the native adapter)
    • Oracle
    -
  • PHP 5.2.0+ with support for the database you intend to use.
  • +
  • PHP 5.3.2+ with support for the database you intend to use.
  • +
  • The following PHP modules are required:
  • +
      +
    • json
    • +
  • getimagesize() function need to be enabled.
  • -
  • These optional presence of the following modules within PHP will provide access to additional features, but they are not required. +
  • Presence of the following modules within PHP will provide access to additional features, but they are not required:
    • zlib Compression support
    • Remote FTP support
    • @@ -151,7 +155,7 @@
    -

    If your server or hosting account does not meet the requirements above we are afraid phpBB3 is not for you.

    +

    If your server or hosting account does not meet the requirements above we are afraid phpBB 3.1.x is not for you.

  • @@ -175,7 +179,7 @@

    All .php, .inc, .sql, .cfg, .html and .txt files should be uploaded in ASCII mode, while all graphics should be uploaded in BINARY mode. If you are unfamiliar with what this means please refer to your FTP client documentation. In most cases this is all handled transparantly by your ftp client but if you encounter problems later you should be sure the files where uploaded correctly as described here.

    -

    phpBB3 comes supplied with english as its standard language. However a number of separate packs for different languages are available. If you are not a native english speaker you may wish to install one or more of these packages before continuing. The installation process below will allow you to select a default language from those available (you can of course change this default at a later stage). For more details of language packs, where to obtain them and how to install them please see the README.

    +

    phpBB3 comes supplied with British English as its standard language. However a number of separate packs for different languages are available. If you are not a native English speaker you may wish to install one or more of these packages before continuing. The installation process below will allow you to select a default language from those available (you can of course change this default at a later stage). For more details of language packs, where to obtain them and how to install them please see the README.

    Once all the files have been uploaded to your site you should point your browser at this location with the addition of install/. For example if your domain name is www.mydomain.tld and you placed phpBB3 in a directory /phpBB3 off your web root you would enter http://www.mydomain.tld/phpBB3/install/ or (alternatively) http://www.mydomain.tld/phpBB3/install/index.php into your browser. When you have done this you should see the phpBB3 Installation screen appear.

    @@ -267,7 +271,7 @@

    This package is meant for those wanting to only replace changed files from a previous version to the latest version. This package normally contains the changed files from up to five previous versions.

    -

    This package contains a number of archives, each contains the files changed from a given release to the latest version. You should select the appropriate archive for your current version, e.g. if you currently have 3.0.9 you should select the phpBB-3.0.9_to_3.0.10.zip/tar.gz file.

    +

    This package contains a number of archives, each contains the files changed from a given release to the latest version. You should select the appropriate archive for your current version, e.g. if you currently have 3.1.0 you should select the phpBB-3.1.0_to_3.1.1.zip/tar.gz file.

    The directory structure has been preserved enabling you (if you wish) to simply upload the contents of the archive to the appropriate location on your server, i.e. simply overwrite the existing files with the new versions. Do not forget that if you have installed any MODs these files will overwrite the originals possibly destroying them in the process. You will need to re-add MODs to any affected file before uploading.

    @@ -279,7 +283,7 @@

    The patch file is one solution for those with many Modifications (MODs) or other changes who do not want to re-add them back to all the changed files if they use the method explained above. To use this you will need command line access to a standard UNIX type patch application. If you do not have access to such an application but still want to use this update approach, we strongly recommend the Automatic update package explained below. It is also the recommended update method.

    -

    A number of patch files are provided to allow you to update from previous stable releases. Select the correct patch, e.g. if your current version is 3.0.9 you need the phpBB-3.0.9_to_3.0.10.patch file. Place the correct patch in the parent directory containing the phpBB3 core files (i.e. index.php, viewforum.php, etc.). With this done you should run the following command: patch -cl -d [PHPBB DIRECTORY] -p1 < [PATCH NAME] (where PHPBB DIRECTORY is the directory name your phpBB Installation resides in, for example phpBB3, and where PATCH NAME is the relevant filename of the selected patch file). This should complete quickly, hopefully without any HUNK FAILED comments.

    +

    A number of patch files are provided to allow you to update from previous stable releases. Select the correct patch, e.g. if your current version is 3.1.0 you need the phpBB-3.1.0_to_3.1.1.patch file. Place the correct patch in the parent directory containing the phpBB3 core files (i.e. index.php, viewforum.php, etc.). With this done you should run the following command: patch -cl -d [PHPBB DIRECTORY] -p1 < [PATCH NAME] (where PHPBB DIRECTORY is the directory name your phpBB Installation resides in, for example phpBB3, and where PATCH NAME is the relevant filename of the selected patch file). This should complete quickly, hopefully without any HUNK FAILED comments.

    If you do get failures you should look at using the Changed files only package to replace the files which failed to patch, please note that you will need to manually re-add any Modifications (MODs) to these particular files. Alternatively if you know how you can examine the .rej files to determine what failed where and make manual adjustments to the relevant source.

    -- cgit v1.2.1 From 7a9d9f97ef83b61ce155a09c1e75c90f4c533f3f Mon Sep 17 00:00:00 2001 From: Marc Alexander Date: Wed, 11 Apr 2012 23:29:47 +0200 Subject: [ticket/10784] Do not show ajax overlay unless needed PHPBB3-10784 --- phpBB/adm/style/ajax.js | 12 ++++++++---- phpBB/assets/javascript/core.js | 6 +++++- 2 files changed, 13 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/ajax.js b/phpBB/adm/style/ajax.js index fd2f7a2122..12541cb057 100644 --- a/phpBB/adm/style/ajax.js +++ b/phpBB/adm/style/ajax.js @@ -28,7 +28,8 @@ phpbb.add_ajax_callback('forum_down', function() { phpbb.ajaxify({ selector: el.parents('span').siblings('.up').children('a'), - callback: 'forum_up' + callback: 'forum_up', + overlay: false }); } @@ -43,7 +44,8 @@ phpbb.add_ajax_callback('forum_down', function() { phpbb.ajaxify({ selector: tr.prev().find('.down').children('a'), - callback: 'forum_down' + callback: 'forum_down', + overlay: false }); } }); @@ -61,7 +63,8 @@ phpbb.add_ajax_callback('forum_up', function() { phpbb.ajaxify({ selector: el.parents('span').siblings('.down').children('a'), - callback: 'forum_down' + callback: 'forum_down', + overlay: false }); } @@ -76,7 +79,8 @@ phpbb.add_ajax_callback('forum_up', function() { phpbb.ajaxify({ selector: tr.next().find('.up').children('a'), - callback: 'forum_up' + callback: 'forum_up', + overlay: false }); } }); diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index c41edfa145..958b6c9ff6 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -245,6 +245,7 @@ phpbb.ajaxify = function(options) { var elements = $(options.selector), refresh = options.refresh, callback = options.callback, + overlay = (typeof options.overlay !== 'undefined') ? options.overlay : true, is_form = elements.is('form'), event_name = is_form ? 'submit' : 'click'; @@ -382,7 +383,10 @@ phpbb.ajaxify = function(options) { return; } - phpbb.loading_alert(); + if (overlay) + { + phpbb.loading_alert(); + } $.ajax({ url: action, -- cgit v1.2.1 From 8a1d084d6d00500b3ea17a7fd3168ec4f321b31b Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Fri, 13 Apr 2012 04:03:07 +0200 Subject: [ticket/10783] Correctly add assets_version config var to includejs urls PHPBB3-10783 --- phpBB/includes/style/template.php | 3 +++ phpBB/includes/style/template_filter.php | 10 ++++------ 2 files changed, 7 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/template.php b/phpBB/includes/style/template.php index 3f15355f7a..9d476e74b9 100644 --- a/phpBB/includes/style/template.php +++ b/phpBB/includes/style/template.php @@ -507,6 +507,9 @@ class phpbb_style_template $file = $this->locator->get_first_file_location(array($file), true, true); } + $file .= (strpos($file, '?') === false) ? '?' : '&'; + $file .= 'assets_version=' . $this->config['assets_version']; + // Add HTML code $code = ''; $this->context->append_var('SCRIPTS', $code); diff --git a/phpBB/includes/style/template_filter.php b/phpBB/includes/style/template_filter.php index f9bbcce4b2..6ef9d80a3d 100644 --- a/phpBB/includes/style/template_filter.php +++ b/phpBB/includes/style/template_filter.php @@ -138,7 +138,7 @@ class phpbb_style_template_filter extends php_user_filter /** * Initializer, called on creation. * - * Get the allow_php option, root directory and locator from params, + * Get the allow_php option, root directory and locator from params, * which are passed to stream_filter_append. */ public function onCreate() @@ -882,8 +882,6 @@ class phpbb_style_template_filter extends php_user_filter */ private function compile_tag_include_js($tag_args) { - global $config; - // Process dynamic includes if ($tag_args[0] == '{') { @@ -896,14 +894,14 @@ class phpbb_style_template_filter extends php_user_filter } // Locate file - $filename = $this->locator->get_first_file_location(array($tag_args), false, true) . '?assets_version=' . $config['assets_version']; - + $filename = $this->locator->get_first_file_location(array($tag_args), false, true); + if ($filename === false) { // File does not exist, find it during run time return ' $_template->_js_include(\'' . addslashes($tag_args) . '\', true); '; } - + if (substr($filename, 0, strlen($this->phpbb_root_path)) != $this->phpbb_root_path) { // Absolute path, include as is -- cgit v1.2.1 From 875958573cfbda4ea5ae42000bbd40ec9dfa3241 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Fri, 13 Apr 2012 12:10:49 +0100 Subject: [ticket/10783] Fixed an HTML error with assets_version. PHPBB3-10783 --- phpBB/styles/prosilver/template/overall_footer.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index 621f7ab0af..5d61f5b580 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -51,7 +51,7 @@ - {SCRIPTS} -- cgit v1.2.1 From f8a5a16d0b8ed23653e1ce261c569fafe0bd6365 Mon Sep 17 00:00:00 2001 From: Rahul R Date: Wed, 11 Apr 2012 06:10:45 +0530 Subject: [ticket/10777] Split the comment into 2 lines Split the comment into 2 lines each having less than 79 characters. PHPBB3-10777 --- phpBB/viewtopic.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index df6ccc5905..1f167ed722 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -1629,7 +1629,8 @@ else $all_marked_read = true; } -// If there are absolutely no more unread posts in this forum and unread posts shown, we can safely show the #unread link +// If there are absolutely no more unread posts in this forum +// and unread posts shown, we can safely show the #unread link if ($all_marked_read) { if ($post_unread) -- cgit v1.2.1 From 4b6b41a1e5cb3d4ba7c896dfa4d72082aa2f069e Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Fri, 13 Apr 2012 16:26:41 +0200 Subject: [ticket/10605] Add parameter documentation to phpbb_delete_user_pms PHPBB3-10605 --- phpBB/includes/functions_privmsgs.php | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php index 14a6d83b2a..00bec11569 100644 --- a/phpBB/includes/functions_privmsgs.php +++ b/phpBB/includes/functions_privmsgs.php @@ -1085,6 +1085,10 @@ function delete_pm($user_id, $msg_ids, $folder_id) /** * Delete all PM(s) for a given user and delete the ones without references +* +* @param int $user_id ID of the user whose private messages we want to delete +* +* @return boolean False if there were no pms found, true otherwise. */ function phpbb_delete_user_pms($user_id) { -- cgit v1.2.1 From 7a4b4c7599f3203664350158e36e666a59ca9de2 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 13 Apr 2012 16:31:49 +0200 Subject: [ticket/10094] Purge acm_file cache before phpBB installation. PHPBB3-10094 --- phpBB/install/install_install.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index 026fc0d404..08d072c522 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -53,11 +53,13 @@ class install_install extends module function main($mode, $sub) { - global $lang, $template, $language, $phpbb_root_path; + global $lang, $template, $language, $phpbb_root_path, $cache; switch ($sub) { case 'intro': + $cache->purge(); + $this->page_title = $lang['SUB_INTRO']; $template->assign_vars(array( -- cgit v1.2.1 From 3741e99aab94fc903db82c1c4d3d6b1f7b1e2a1a Mon Sep 17 00:00:00 2001 From: Senky Date: Sun, 15 Apr 2012 20:10:51 +0200 Subject: [ticket/10161] all "e-mail" strings in language files changed to "email" according to Oleg's comment: email is preferred by RFCs and probably the way of the future PHPBB3-10161 --- phpBB/language/en/acp/ban.php | 14 ++--- phpBB/language/en/acp/board.php | 60 +++++++++++----------- phpBB/language/en/acp/common.php | 32 ++++++------ phpBB/language/en/acp/email.php | 6 +-- phpBB/language/en/acp/language.php | 2 +- phpBB/language/en/acp/permissions.php | 2 +- phpBB/language/en/acp/permissions_phpbb.php | 10 ++-- phpBB/language/en/acp/posting.php | 2 +- phpBB/language/en/acp/styles.php | 4 +- phpBB/language/en/acp/users.php | 6 +-- phpBB/language/en/common.php | 28 +++++----- phpBB/language/en/email/admin_send_email.txt | 4 +- phpBB/language/en/email/admin_welcome_inactive.txt | 2 +- phpBB/language/en/email/coppa_resend_inactive.txt | 2 +- phpBB/language/en/email/coppa_welcome_inactive.txt | 2 +- phpBB/language/en/email/email_notify.txt | 6 +-- phpBB/language/en/email/installed.txt | 2 +- phpBB/language/en/email/profile_send_email.txt | 4 +- .../language/en/email/user_reactivate_account.txt | 2 +- phpBB/language/en/email/user_resend_inactive.txt | 2 +- phpBB/language/en/email/user_welcome.txt | 2 +- phpBB/language/en/email/user_welcome_inactive.txt | 2 +- phpBB/language/en/help_bbcode.php | 2 +- phpBB/language/en/help_faq.php | 12 ++--- phpBB/language/en/install.php | 4 +- phpBB/language/en/mcp.php | 2 +- phpBB/language/en/memberlist.php | 20 ++++---- phpBB/language/en/ucp.php | 46 ++++++++--------- phpBB/language/en/viewtopic.php | 4 +- 29 files changed, 143 insertions(+), 143 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/ban.php b/phpBB/language/en/acp/ban.php index 77e8a93f3c..2dc0489030 100644 --- a/phpBB/language/en/acp/ban.php +++ b/phpBB/language/en/acp/ban.php @@ -40,7 +40,7 @@ $lang = array_merge($lang, array( '30_MINS' => '30 minutes', '6_HOURS' => '6 hours', - 'ACP_BAN_EXPLAIN' => 'Here you can control the banning of users by name, IP or e-mail address. These methods prevent a user reaching any part of the board. You can give a short (maximum 3000 characters) reason for the ban if you wish. This will be displayed in the admin log. The duration of a ban can also be specified. If you want the ban to end on a specific date rather than after a set time period select Until -> for the ban length and enter a date in YYYY-MM-DD format.', + 'ACP_BAN_EXPLAIN' => 'Here you can control the banning of users by name, IP or email address. These methods prevent a user reaching any part of the board. You can give a short (maximum 3000 characters) reason for the ban if you wish. This will be displayed in the admin log. The duration of a ban can also be specified. If you want the ban to end on a specific date rather than after a set time period select Until -> for the ban length and enter a date in YYYY-MM-DD format.', 'BAN_EXCLUDE' => 'Exclude from banning', 'BAN_LENGTH' => 'Length of ban', @@ -50,12 +50,12 @@ $lang = array_merge($lang, array( 'BANNED_UNTIL_DATE' => 'until %s', // Example: "until Mon 13.Jul.2009, 14:44" 'BANNED_UNTIL_DURATION' => '%1$s (until %2$s)', // Example: "7 days (until Tue 14.Jul.2009, 14:44)" - 'EMAIL_BAN' => 'Ban one or more e-mail addresses', - 'EMAIL_BAN_EXCLUDE_EXPLAIN' => 'Enable this to exclude the entered e-mail address from all current bans.', - 'EMAIL_BAN_EXPLAIN' => 'To specify more than one e-mail address enter each on a new line. To match partial addresses use * as the wildcard, e.g. *@hotmail.com, *@*.domain.tld, etc.', - 'EMAIL_NO_BANNED' => 'No banned e-mail addresses', - 'EMAIL_UNBAN' => 'Un-ban or un-exclude e-mails', - 'EMAIL_UNBAN_EXPLAIN' => 'You can unban (or un-exclude) multiple e-mail addresses in one go using the appropriate combination of mouse and keyboard for your computer and browser. Excluded e-mail addresses are emphasised.', + 'EMAIL_BAN' => 'Ban one or more email addresses', + 'EMAIL_BAN_EXCLUDE_EXPLAIN' => 'Enable this to exclude the entered email address from all current bans.', + 'EMAIL_BAN_EXPLAIN' => 'To specify more than one email address enter each on a new line. To match partial addresses use * as the wildcard, e.g. *@hotmail.com, *@*.domain.tld, etc.', + 'EMAIL_NO_BANNED' => 'No banned email addresses', + 'EMAIL_UNBAN' => 'Un-ban or un-exclude emails', + 'EMAIL_UNBAN_EXPLAIN' => 'You can unban (or un-exclude) multiple email addresses in one go using the appropriate combination of mouse and keyboard for your computer and browser. Excluded email addresses are emphasised.', 'IP_BAN' => 'Ban one or more IPs', 'IP_BAN_EXCLUDE_EXPLAIN' => 'Enable this to exclude the entered IP from all current bans.', diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php index 0bb99b5449..758ef8ed82 100644 --- a/phpBB/language/en/acp/board.php +++ b/phpBB/language/en/acp/board.php @@ -207,7 +207,7 @@ $lang = array_merge($lang, array( 'ACP_REGISTER_SETTINGS_EXPLAIN' => 'Here you are able to define registration and profile related settings.', 'ACC_ACTIVATION' => 'Account activation', - 'ACC_ACTIVATION_EXPLAIN' => 'This determines whether users have immediate access to the board or if confirmation is required. You can also completely disable new registrations. “Board-wide e-mail†must be enabled in order to use user or admin activation.', + 'ACC_ACTIVATION_EXPLAIN' => 'This determines whether users have immediate access to the board or if confirmation is required. You can also completely disable new registrations. “Board-wide email†must be enabled in order to use user or admin activation.', 'NEW_MEMBER_POST_LIMIT' => 'New member post limit', 'NEW_MEMBER_POST_LIMIT_EXPLAIN' => 'New members are within the Newly Registered Users group until they reach this number of posts. You can use this group to keep them from using the PM system or to review their posts. A value of 0 disables this feature.', 'NEW_MEMBER_GROUP_DEFAULT' => 'Set Newly Registered Users group to default', @@ -216,10 +216,10 @@ $lang = array_merge($lang, array( 'ACC_ADMIN' => 'By admin', 'ACC_DISABLE' => 'Disable registration', 'ACC_NONE' => 'No activation (immediate access)', - 'ACC_USER' => 'By user (e-mail verification)', + 'ACC_USER' => 'By user (email verification)', // 'ACC_USER_ADMIN' => 'User + Admin', - 'ALLOW_EMAIL_REUSE' => 'Allow e-mail address re-use', - 'ALLOW_EMAIL_REUSE_EXPLAIN' => 'Different users can register with the same e-mail address.', + 'ALLOW_EMAIL_REUSE' => 'Allow email address re-use', + 'ALLOW_EMAIL_REUSE_EXPLAIN' => 'Different users can register with the same email address.', 'COPPA' => 'COPPA', 'COPPA_FAX' => 'COPPA fax number', 'COPPA_MAIL' => 'COPPA mailing address', @@ -390,10 +390,10 @@ $lang = array_merge($lang, array( 'LDAP_DN' => 'LDAP base dn', 'LDAP_DN_EXPLAIN' => 'This is the Distinguished Name, locating the user information, e.g. o=My Company,c=US.', - 'LDAP_EMAIL' => 'LDAP e-mail attribute', - 'LDAP_EMAIL_EXPLAIN' => 'Set this to the name of your user entry e-mail attribute (if one exists) in order to automatically set the e-mail address for new users. Leaving this empty results in empty e-mail address for users who log in for the first time.', + 'LDAP_EMAIL' => 'LDAP email attribute', + 'LDAP_EMAIL_EXPLAIN' => 'Set this to the name of your user entry email attribute (if one exists) in order to automatically set the email address for new users. Leaving this empty results in empty email address for users who log in for the first time.', 'LDAP_INCORRECT_USER_PASSWORD' => 'Binding to LDAP server failed with specified user/password.', - 'LDAP_NO_EMAIL' => 'The specified e-mail attribute does not exist.', + 'LDAP_NO_EMAIL' => 'The specified email attribute does not exist.', 'LDAP_NO_IDENTITY' => 'Could not find a login identity for %s.', 'LDAP_PASSWORD' => 'LDAP password', 'LDAP_PASSWORD_EXPLAIN' => 'Leave blank to use anonymous binding, otherwise fill in the password for the above user. Required for Active Directory Servers.
    Warning: This password will be stored as plain text in the database, visible to everybody who can access your database or who can view this configuration page.', @@ -411,7 +411,7 @@ $lang = array_merge($lang, array( // Server Settings $lang = array_merge($lang, array( - 'ACP_SERVER_SETTINGS_EXPLAIN' => 'Here you define server and domain dependant settings. Please ensure the data you enter is accurate, errors will result in e-mails containing incorrect information. When entering the domain name remember it does include http:// or other protocol term. Only alter the port number if you know your server uses a different value, port 80 is correct in most cases.', + 'ACP_SERVER_SETTINGS_EXPLAIN' => 'Here you define server and domain dependant settings. Please ensure the data you enter is accurate, errors will result in emails containing incorrect information. When entering the domain name remember it does include http:// or other protocol term. Only alter the port number if you know your server uses a different value, port 80 is correct in most cases.', 'ENABLE_GZIP' => 'Enable GZip compression', 'ENABLE_GZIP_EXPLAIN' => 'Generated content will be compressed prior to sending it to the user. This can reduce network traffic but will also increase CPU usage on both server and client side. Requires zlib PHP extension to be loaded.', @@ -454,8 +454,8 @@ $lang = array_merge($lang, array( 'CHECK_DNSBL_EXPLAIN' => 'If enabled the user’s IP address is checked against the following DNSBL services on registration and posting: spamcop.net and www.spamhaus.org. This lookup may take a while, depending on the server’s configuration. If slowdowns are experienced or too many false positives reported it is recommended to disable this check.', 'CLASS_B' => 'A.B', 'CLASS_C' => 'A.B.C', - 'EMAIL_CHECK_MX' => 'Check e-mail domain for valid MX record', - 'EMAIL_CHECK_MX_EXPLAIN' => 'If enabled, the e-mail domain provided on registration and profile changes is checked for a valid MX record.', + 'EMAIL_CHECK_MX' => 'Check email domain for valid MX record', + 'EMAIL_CHECK_MX_EXPLAIN' => 'If enabled, the email domain provided on registration and profile changes is checked for a valid MX record.', 'FORCE_PASS_CHANGE' => 'Force password change', 'FORCE_PASS_CHANGE_EXPLAIN' => 'Require user to change their password after a set number of days. Setting this value to 0 disables this behaviour.', 'FORM_TIME_MAX' => 'Maximum time to submit forms', @@ -492,24 +492,24 @@ $lang = array_merge($lang, array( // Email Settings $lang = array_merge($lang, array( - 'ACP_EMAIL_SETTINGS_EXPLAIN' => 'This information is used when the board sends e-mails to your users. Please ensure the e-mail address you specify is valid, any bounced or undeliverable messages will likely be sent to that address. If your host does not provide a native (PHP based) e-mail service you can instead send messages directly using SMTP. This requires the address of an appropriate server (ask your provider if necessary). If the server requires authentication (and only if it does) enter the necessary username, password and authentication method.', - - 'ADMIN_EMAIL' => 'Return e-mail address', - 'ADMIN_EMAIL_EXPLAIN' => 'This will be used as the return address on all e-mails, the technical contact e-mail address. It will always be used as the Return-Path and Sender address in e-mails.', - 'BOARD_EMAIL_FORM' => 'Users send e-mail via board', - 'BOARD_EMAIL_FORM_EXPLAIN' => 'Instead of showing the users e-mail address users are able to send e-mails via the board.', - 'BOARD_HIDE_EMAILS' => 'Hide e-mail addresses', - 'BOARD_HIDE_EMAILS_EXPLAIN' => 'This function keeps e-mail addresses completely private.', - 'CONTACT_EMAIL' => 'Contact e-mail address', - 'CONTACT_EMAIL_EXPLAIN' => 'This address will be used whenever a specific contact point is needed, e.g. spam, error output, etc. It will always be used as the From and Reply-To address in e-mails.', - 'EMAIL_FUNCTION_NAME' => 'E-mail function name', - 'EMAIL_FUNCTION_NAME_EXPLAIN' => 'The e-mail function used to send mails through PHP.', - 'EMAIL_PACKAGE_SIZE' => 'E-mail package size', - 'EMAIL_PACKAGE_SIZE_EXPLAIN' => 'This is the number of maximum e-mails sent out in one package. This setting is applied to the internal message queue; set this value to 0 if you have problems with non-delivered notification e-mails.', - 'EMAIL_SIG' => 'E-mail signature', - 'EMAIL_SIG_EXPLAIN' => 'This text will be attached to all e-mails the board sends.', - 'ENABLE_EMAIL' => 'Enable board-wide e-mails', - 'ENABLE_EMAIL_EXPLAIN' => 'If this is set to disabled no e-mails will be sent by the board at all. Note the user and admin account activation settings require this setting to be enabled. If currently using “user†or “admin†activation in the activation settings, disabling this setting will require no activation of new accounts.', + 'ACP_EMAIL_SETTINGS_EXPLAIN' => 'This information is used when the board sends emails to your users. Please ensure the email address you specify is valid, any bounced or undeliverable messages will likely be sent to that address. If your host does not provide a native (PHP based) email service you can instead send messages directly using SMTP. This requires the address of an appropriate server (ask your provider if necessary). If the server requires authentication (and only if it does) enter the necessary username, password and authentication method.', + + 'ADMIN_EMAIL' => 'Return email address', + 'ADMIN_EMAIL_EXPLAIN' => 'This will be used as the return address on all emails, the technical contact email address. It will always be used as the Return-Path and Sender address in emails.', + 'BOARD_EMAIL_FORM' => 'Users send email via board', + 'BOARD_EMAIL_FORM_EXPLAIN' => 'Instead of showing the users email address users are able to send emails via the board.', + 'BOARD_HIDE_EMAILS' => 'Hide email addresses', + 'BOARD_HIDE_EMAILS_EXPLAIN' => 'This function keeps email addresses completely private.', + 'CONTACT_EMAIL' => 'Contact email address', + 'CONTACT_EMAIL_EXPLAIN' => 'This address will be used whenever a specific contact point is needed, e.g. spam, error output, etc. It will always be used as the From and Reply-To address in emails.', + 'EMAIL_FUNCTION_NAME' => 'Email function name', + 'EMAIL_FUNCTION_NAME_EXPLAIN' => 'The email function used to send mails through PHP.', + 'EMAIL_PACKAGE_SIZE' => 'Email package size', + 'EMAIL_PACKAGE_SIZE_EXPLAIN' => 'This is the number of maximum emails sent out in one package. This setting is applied to the internal message queue; set this value to 0 if you have problems with non-delivered notification emails.', + 'EMAIL_SIG' => 'Email signature', + 'EMAIL_SIG_EXPLAIN' => 'This text will be attached to all emails the board sends.', + 'ENABLE_EMAIL' => 'Enable board-wide emails', + 'ENABLE_EMAIL_EXPLAIN' => 'If this is set to disabled no emails will be sent by the board at all. Note the user and admin account activation settings require this setting to be enabled. If currently using “user†or “admin†activation in the activation settings, disabling this setting will require no activation of new accounts.', 'SMTP_AUTH_METHOD' => 'Authentication method for SMTP', 'SMTP_AUTH_METHOD_EXPLAIN' => 'Only used if a username/password is set, ask your provider if you are unsure which method to use.', 'SMTP_CRAM_MD5' => 'CRAM-MD5', @@ -525,8 +525,8 @@ $lang = array_merge($lang, array( 'SMTP_SETTINGS' => 'SMTP settings', 'SMTP_USERNAME' => 'SMTP username', 'SMTP_USERNAME_EXPLAIN' => 'Only enter a username if your SMTP server requires it.', - 'USE_SMTP' => 'Use SMTP server for e-mail', - 'USE_SMTP_EXPLAIN' => 'Select “Yes†if you want or have to send e-mail via a named server instead of the local mail function.', + 'USE_SMTP' => 'Use SMTP server for email', + 'USE_SMTP_EXPLAIN' => 'Select “Yes†if you want or have to send email via a named server instead of the local mail function.', )); // Jabber settings diff --git a/phpBB/language/en/acp/common.php b/phpBB/language/en/acp/common.php index 6012c59483..dc35969955 100644 --- a/phpBB/language/en/acp/common.php +++ b/phpBB/language/en/acp/common.php @@ -47,7 +47,7 @@ $lang = array_merge($lang, array( 'ACP_BACKUP' => 'Backup', 'ACP_BAN' => 'Banning', - 'ACP_BAN_EMAILS' => 'Ban e-mails', + 'ACP_BAN_EMAILS' => 'Ban emails', 'ACP_BAN_IPS' => 'Ban IPs', 'ACP_BAN_USERNAMES' => 'Ban usernames', 'ACP_BBCODES' => 'BBCodes', @@ -79,7 +79,7 @@ $lang = array_merge($lang, array( 'ACP_DISALLOW' => 'Disallow', 'ACP_DISALLOW_USERNAMES' => 'Disallow usernames', - 'ACP_EMAIL_SETTINGS' => 'E-mail settings', + 'ACP_EMAIL_SETTINGS' => 'Email settings', 'ACP_EXTENSION_GROUPS' => 'Manage extension groups', 'ACP_FORUM_BASED_PERMISSIONS' => 'Forum based permissions', @@ -123,7 +123,7 @@ $lang = array_merge($lang, array( 'ACP_MANAGE_RANKS' => 'Manage ranks', 'ACP_MANAGE_REASONS' => 'Manage report/denial reasons', 'ACP_MANAGE_USERS' => 'Manage users', - 'ACP_MASS_EMAIL' => 'Mass e-mail', + 'ACP_MASS_EMAIL' => 'Mass email', 'ACP_MESSAGES' => 'Messages', 'ACP_MESSAGE_SETTINGS' => 'Private message settings', 'ACP_MODULE_MANAGEMENT' => 'Module management', @@ -265,7 +265,7 @@ $lang = array_merge($lang, array( 'NOTIFY' => 'Notification', 'NO_ADMIN' => 'You are not authorised to administer this board.', - 'NO_EMAILS_DEFINED' => 'No valid e-mail addresses found.', + 'NO_EMAILS_DEFINED' => 'No valid email addresses found.', 'NO_FILES_TO_DELETE' => 'Attachments you selected for deletion do not exist.', 'NO_PASSWORD_SUPPLIED' => 'You need to enter your password to access the Administration Control Panel.', @@ -314,7 +314,7 @@ $lang = array_merge($lang, array( // Logs $lang = array_merge($lang, array( 'ACP_ADMIN_LOGS_EXPLAIN' => 'This lists all the actions carried out by board administrators. You can sort by username, date, IP or action. If you have appropriate permissions you can also clear individual operations or the log as a whole.', - 'ACP_CRITICAL_LOGS_EXPLAIN' => 'This lists the actions carried out by the board itself. This log provides you with information you are able to use for solving specific problems, for example non-delivery of e-mails. You can sort by username, date, IP or action. If you have appropriate permissions you can also clear individual operations or the log as a whole.', + 'ACP_CRITICAL_LOGS_EXPLAIN' => 'This lists the actions carried out by the board itself. This log provides you with information you are able to use for solving specific problems, for example non-delivery of emails. You can sort by username, date, IP or action. If you have appropriate permissions you can also clear individual operations or the log as a whole.', 'ACP_MOD_LOGS_EXPLAIN' => 'This lists all actions done on forums, topics and posts as well as actions carried out on users by moderators, including banning. You can sort by username, date, IP or action. If you have appropriate permissions you can also clear individual operations or the log as a whole.', 'ACP_USERS_LOGS_EXPLAIN' => 'This lists all actions carried out by users or on users (reports, warnings and user notes).', 'ALL_ENTRIES' => 'All entries', @@ -426,8 +426,8 @@ $lang = array_merge($lang, array( 'INACTIVE_REASON_REMIND' => 'Forced user account reactivation', 'INACTIVE_REASON_UNKNOWN' => 'Unknown', 'INACTIVE_USERS' => 'Inactive users', - 'INACTIVE_USERS_EXPLAIN' => 'This is a list of users who have registered but whose accounts are inactive. You can activate, delete or remind (by sending an e-mail) these users if you wish.', - 'INACTIVE_USERS_EXPLAIN_INDEX' => 'This is a list of the last 10 registered users who have inactive accounts. Accounts are inactive either because account activation was enabled in user registration settings and these users’ accounts have not yet been activated, or because these accounts have been deactivated. A full list is available by following the link below from where you can activate, delete or remind (by sending an e-mail) these users if you wish.', + 'INACTIVE_USERS_EXPLAIN' => 'This is a list of users who have registered but whose accounts are inactive. You can activate, delete or remind (by sending an email) these users if you wish.', + 'INACTIVE_USERS_EXPLAIN_INDEX' => 'This is a list of the last 10 registered users who have inactive accounts. Accounts are inactive either because account activation was enabled in user registration settings and these users’ accounts have not yet been activated, or because these accounts have been deactivated. A full list is available by following the link below from where you can activate, delete or remind (by sending an email) these users if you wish.', 'NO_INACTIVE_USERS' => 'No inactive users', @@ -497,13 +497,13 @@ $lang = array_merge($lang, array( 'LOG_BAN_EXCLUDE_USER' => 'Excluded user from ban for reason “%1$sâ€
    » %2$s', 'LOG_BAN_EXCLUDE_IP' => 'Excluded IP from ban for reason “%1$sâ€
    » %2$s', - 'LOG_BAN_EXCLUDE_EMAIL' => 'Excluded e-mail from ban for reason “%1$sâ€
    » %2$s', + 'LOG_BAN_EXCLUDE_EMAIL' => 'Excluded email from ban for reason “%1$sâ€
    » %2$s', 'LOG_BAN_USER' => 'Banned user for reason “%1$sâ€
    » %2$s', 'LOG_BAN_IP' => 'Banned IP for reason “%1$sâ€
    » %2$s', - 'LOG_BAN_EMAIL' => 'Banned e-mail for reason “%1$sâ€
    » %2$s', + 'LOG_BAN_EMAIL' => 'Banned email for reason “%1$sâ€
    » %2$s', 'LOG_UNBAN_USER' => 'Unbanned user
    » %s', 'LOG_UNBAN_IP' => 'Unbanned IP
    » %s', - 'LOG_UNBAN_EMAIL' => 'Unbanned e-mail
    » %s', + 'LOG_UNBAN_EMAIL' => 'Unbanned email
    » %s', 'LOG_BBCODE_ADD' => 'Added new BBCode
    » %s', 'LOG_BBCODE_EDIT' => 'Edited BBCode
    » %s', @@ -523,7 +523,7 @@ $lang = array_merge($lang, array( 'LOG_CONFIG_AUTH' => 'Altered authentication settings', 'LOG_CONFIG_AVATAR' => 'Altered avatar settings', 'LOG_CONFIG_COOKIE' => 'Altered cookie settings', - 'LOG_CONFIG_EMAIL' => 'Altered e-mail settings', + 'LOG_CONFIG_EMAIL' => 'Altered email settings', 'LOG_CONFIG_FEATURES' => 'Altered board features', 'LOG_CONFIG_LOAD' => 'Altered load settings', 'LOG_CONFIG_MESSAGE' => 'Altered private message settings', @@ -576,7 +576,7 @@ $lang = array_merge($lang, array( 'LOG_DOWNLOAD_REMOVE_IP' => 'Removed IP/hostname from download list
    » %s', 'LOG_ERROR_JABBER' => 'Jabber error
    » %s', - 'LOG_ERROR_EMAIL' => 'E-mail error
    » %s', + 'LOG_ERROR_EMAIL' => 'Email error
    » %s', 'LOG_FORUM_ADD' => 'Created new forum
    » %s', 'LOG_FORUM_COPIED_PERMISSIONS' => 'Copied forum permissions from %1$s
    » %2$s', @@ -612,7 +612,7 @@ $lang = array_merge($lang, array( 'LOG_INACTIVE_ACTIVATE' => 'Activated inactive users
    » %s', 'LOG_INACTIVE_DELETE' => 'Deleted inactive users
    » %s', - 'LOG_INACTIVE_REMIND' => 'Sent reminder e-mails to inactive users
    » %s', + 'LOG_INACTIVE_REMIND' => 'Sent reminder emails to inactive users
    » %s', 'LOG_INSTALL_CONVERTED' => 'Converted from %1$s to phpBB %2$s', 'LOG_INSTALL_INSTALLED' => 'Installed phpBB %s', @@ -629,7 +629,7 @@ $lang = array_merge($lang, array( 'LOG_LANGUAGE_FILE_REPLACED' => 'Replaced language file
    » %s', 'LOG_LANGUAGE_FILE_SUBMITTED' => 'Submitted language file and placed in store folder
    » %s', - 'LOG_MASS_EMAIL' => 'Sent mass e-mail
    » %s', + 'LOG_MASS_EMAIL' => 'Sent mass email
    » %s', 'LOG_MCP_CHANGE_POSTER' => 'Changed poster in topic “%1$sâ€
    » from %2$s to %3$s', @@ -723,7 +723,7 @@ $lang = array_merge($lang, array( 'LOG_USER_ACTIVE' => 'User activated
    » %s', 'LOG_USER_BAN_USER' => 'Banned User via user management for reason “%1$sâ€
    » %2$s', 'LOG_USER_BAN_IP' => 'Banned IP via user management for reason “%1$sâ€
    » %2$s', - 'LOG_USER_BAN_EMAIL' => 'Banned e-mail via user management for reason “%1$sâ€
    » %2$s', + 'LOG_USER_BAN_EMAIL' => 'Banned email via user management for reason “%1$sâ€
    » %2$s', 'LOG_USER_DELETED' => 'Deleted user
    » %s', 'LOG_USER_DEL_ATTACH' => 'Removed all attachments made by the user
    » %s', 'LOG_USER_DEL_AVATAR' => 'Removed user avatar
    » %s', @@ -736,7 +736,7 @@ $lang = array_merge($lang, array( 'LOG_USER_REACTIVATE' => 'Forced user account reactivation
    » %s', 'LOG_USER_REMOVED_NR' => 'Removed newly registered flag from user
    » %s', - 'LOG_USER_UPDATE_EMAIL' => 'User “%1$s†changed e-mail
    » from “%2$s†to “%3$sâ€', + 'LOG_USER_UPDATE_EMAIL' => 'User “%1$s†changed email
    » from “%2$s†to “%3$sâ€', 'LOG_USER_UPDATE_NAME' => 'Changed username
    » from “%1$s†to “%2$sâ€', 'LOG_USER_USER_UPDATE' => 'Updated user details
    » %s', diff --git a/phpBB/language/en/acp/email.php b/phpBB/language/en/acp/email.php index c39b8743e7..aacb35b9bb 100644 --- a/phpBB/language/en/acp/email.php +++ b/phpBB/language/en/acp/email.php @@ -36,12 +36,12 @@ if (empty($lang) || !is_array($lang)) // Email settings $lang = array_merge($lang, array( - 'ACP_MASS_EMAIL_EXPLAIN' => 'Here you can e-mail a message to either all of your users or all users of a specific group having the option to receive mass e-mails enabled. To achieve this an e-mail will be sent out to the administrative e-mail address supplied, with a blind carbon copy sent to all recipients. The default setting is to only include 50 recipients in such an e-mail, for more recipients more e-mails will be sent. If you are emailing a large group of people please be patient after submitting and do not stop the page halfway through. It is normal for a mass emailing to take a long time, you will be notified when the script has completed.', + 'ACP_MASS_EMAIL_EXPLAIN' => 'Here you can email a message to either all of your users or all users of a specific group having the option to receive mass emails enabled. To achieve this an email will be sent out to the administrative email address supplied, with a blind carbon copy sent to all recipients. The default setting is to only include 50 recipients in such an email, for more recipients more emails will be sent. If you are emailing a large group of people please be patient after submitting and do not stop the page halfway through. It is normal for a mass emailing to take a long time, you will be notified when the script has completed.', 'ALL_USERS' => 'All users', 'COMPOSE' => 'Compose', - 'EMAIL_SEND_ERROR' => 'There were one or more errors while sending the e-mail. Please check the %sError log%s for detailed error messages.', + 'EMAIL_SEND_ERROR' => 'There were one or more errors while sending the email. Please check the %sError log%s for detailed error messages.', 'EMAIL_SENT' => 'This message has been sent.', 'EMAIL_SENT_QUEUE' => 'This message has been queued for sending.', @@ -53,7 +53,7 @@ $lang = array_merge($lang, array( 'SEND_TO_USERS_EXPLAIN' => 'Entering names here will override any group selected above. Enter each username on a new line.', 'MAIL_BANNED' => 'Mail banned users', - 'MAIL_BANNED_EXPLAIN' => 'When sending a mass e-mail to a group you can select here whether banned users will also receive the e-mail.', + 'MAIL_BANNED_EXPLAIN' => 'When sending a mass email to a group you can select here whether banned users will also receive the email.', 'MAIL_HIGH_PRIORITY' => 'High', 'MAIL_LOW_PRIORITY' => 'Low', 'MAIL_NORMAL_PRIORITY' => 'Normal', diff --git a/phpBB/language/en/acp/language.php b/phpBB/language/en/acp/language.php index 6bac0a815b..154551bd6e 100644 --- a/phpBB/language/en/acp/language.php +++ b/phpBB/language/en/acp/language.php @@ -38,7 +38,7 @@ $lang = array_merge($lang, array( 'ACP_FILES' => 'Admin language files', 'ACP_LANGUAGE_PACKS_EXPLAIN' => 'Here you are able to install/remove language packs. The default language pack is marked with an asterisk (*).', - 'EMAIL_FILES' => 'E-mail templates', + 'EMAIL_FILES' => 'Email templates', 'FILE_CONTENTS' => 'File contents', 'FILE_FROM_STORAGE' => 'File from storage folder', diff --git a/phpBB/language/en/acp/permissions.php b/phpBB/language/en/acp/permissions.php index 2a8d857197..cf5ad33bab 100644 --- a/phpBB/language/en/acp/permissions.php +++ b/phpBB/language/en/acp/permissions.php @@ -202,7 +202,7 @@ $lang = array_merge($lang, array( 'ROLE_DESCRIPTION_MOD_SIMPLE' => 'Can only use basic topic actions. Cannot send warnings or use moderation queue.', 'ROLE_DESCRIPTION_MOD_STANDARD' => 'Can use most moderating tools, but cannot ban users or change the post author.', 'ROLE_DESCRIPTION_USER_FULL' => 'Can use all available forum features for users, including changing the user name or ignoring the flood limit.
    Not recommended.', - 'ROLE_DESCRIPTION_USER_LIMITED' => 'Can access some of the user features. Attachments, e-mails, or instant messages are not allowed.', + 'ROLE_DESCRIPTION_USER_LIMITED' => 'Can access some of the user features. Attachments, emails, or instant messages are not allowed.', 'ROLE_DESCRIPTION_USER_NOAVATAR' => 'Has a limited feature set and is not allowed to use the Avatar feature.', 'ROLE_DESCRIPTION_USER_NOPM' => 'Has a limited feature set, and is not allowed to use Private Messages.', 'ROLE_DESCRIPTION_USER_STANDARD' => 'Can access most but not all user features. Cannot change user name or ignore the flood limit, for instance.', diff --git a/phpBB/language/en/acp/permissions_phpbb.php b/phpBB/language/en/acp/permissions_phpbb.php index f8cb35ed6a..17649693fa 100644 --- a/phpBB/language/en/acp/permissions_phpbb.php +++ b/phpBB/language/en/acp/permissions_phpbb.php @@ -99,7 +99,7 @@ $lang = array_merge($lang, array( 'acl_u_viewprofile' => array('lang' => 'Can view profiles, memberlist and online list', 'cat' => 'profile'), 'acl_u_chgname' => array('lang' => 'Can change username', 'cat' => 'profile'), 'acl_u_chgpasswd' => array('lang' => 'Can change password', 'cat' => 'profile'), - 'acl_u_chgemail' => array('lang' => 'Can change e-mail address', 'cat' => 'profile'), + 'acl_u_chgemail' => array('lang' => 'Can change email address', 'cat' => 'profile'), 'acl_u_chgavatar' => array('lang' => 'Can change avatar', 'cat' => 'profile'), 'acl_u_chggrp' => array('lang' => 'Can change default usergroup', 'cat' => 'profile'), @@ -116,7 +116,7 @@ $lang = array_merge($lang, array( 'acl_u_pm_edit' => array('lang' => 'Can edit own private messages', 'cat' => 'pm'), 'acl_u_pm_delete' => array('lang' => 'Can remove private messages from own folder', 'cat' => 'pm'), 'acl_u_pm_forward' => array('lang' => 'Can forward private messages', 'cat' => 'pm'), - 'acl_u_pm_emailpm' => array('lang' => 'Can e-mail private messages', 'cat' => 'pm'), + 'acl_u_pm_emailpm' => array('lang' => 'Can email private messages', 'cat' => 'pm'), 'acl_u_pm_printpm' => array('lang' => 'Can print private messages', 'cat' => 'pm'), 'acl_u_pm_attach' => array('lang' => 'Can attach files in private messages', 'cat' => 'pm'), 'acl_u_pm_download' => array('lang' => 'Can download files in private messages', 'cat' => 'pm'), @@ -125,7 +125,7 @@ $lang = array_merge($lang, array( 'acl_u_pm_img' => array('lang' => 'Can use [img] BBCode tag in private messages', 'cat' => 'pm'), 'acl_u_pm_flash' => array('lang' => 'Can use [flash] BBCode tag in private messages', 'cat' => 'pm'), - 'acl_u_sendemail' => array('lang' => 'Can send e-mails', 'cat' => 'misc'), + 'acl_u_sendemail' => array('lang' => 'Can send emails', 'cat' => 'misc'), 'acl_u_sendim' => array('lang' => 'Can send instant messages', 'cat' => 'misc'), 'acl_u_ignoreflood' => array('lang' => 'Can ignore flood limit', 'cat' => 'misc'), 'acl_u_hideonline' => array('lang' => 'Can hide online status', 'cat' => 'misc'), @@ -162,7 +162,7 @@ $lang = array_merge($lang, array( 'acl_f_report' => array('lang' => 'Can report posts', 'cat' => 'actions'), 'acl_f_subscribe' => array('lang' => 'Can subscribe forum', 'cat' => 'actions'), 'acl_f_print' => array('lang' => 'Can print topics', 'cat' => 'actions'), - 'acl_f_email' => array('lang' => 'Can e-mail topics', 'cat' => 'actions'), + 'acl_f_email' => array('lang' => 'Can email topics', 'cat' => 'actions'), 'acl_f_search' => array('lang' => 'Can search the forum', 'cat' => 'misc'), 'acl_f_ignoreflood' => array('lang' => 'Can ignore flood limit', 'cat' => 'misc'), @@ -230,7 +230,7 @@ $lang = array_merge($lang, array( 'acl_a_clearlogs' => array('lang' => 'Can clear logs', 'cat' => 'misc'), 'acl_a_modules' => array('lang' => 'Can manage modules', 'cat' => 'misc'), 'acl_a_language' => array('lang' => 'Can manage language packs', 'cat' => 'misc'), - 'acl_a_email' => array('lang' => 'Can send mass e-mail', 'cat' => 'misc'), + 'acl_a_email' => array('lang' => 'Can send mass email', 'cat' => 'misc'), 'acl_a_bots' => array('lang' => 'Can manage bots', 'cat' => 'misc'), 'acl_a_reasons' => array('lang' => 'Can manage report/denial reasons', 'cat' => 'misc'), 'acl_a_backup' => array('lang' => 'Can backup/restore database', 'cat' => 'misc'), diff --git a/phpBB/language/en/acp/posting.php b/phpBB/language/en/acp/posting.php index 76d4869990..89e171744f 100644 --- a/phpBB/language/en/acp/posting.php +++ b/phpBB/language/en/acp/posting.php @@ -81,7 +81,7 @@ $lang = array_merge($lang, array( 'INTTEXT' => 'Unicode letter characters, numbers, spaces, commas, dots, minus, plus, hyphen, underscore and whitespaces.', 'IDENTIFIER' => 'Characters from the latin alphabet (A-Z), numbers, hyphen and underscore', 'NUMBER' => 'Any series of digits', - 'EMAIL' => 'A valid e-mail address', + 'EMAIL' => 'A valid email address', 'URL' => 'A valid URL using any protocol (http, ftp, etc… cannot be used for javascript exploits). If none is given, “http://†is prefixed to the string.', 'LOCAL_URL' => 'A local URL. The URL must be relative to the topic page and cannot contain a server name or protocol.', 'COLOR' => 'A HTML colour, can be either in the numeric form #FF1234 or a CSS colour keyword such as fuchsia or InactiveBorder' diff --git a/phpBB/language/en/acp/styles.php b/phpBB/language/en/acp/styles.php index f5bab1d76f..e7954ff148 100644 --- a/phpBB/language/en/acp/styles.php +++ b/phpBB/language/en/acp/styles.php @@ -183,7 +183,7 @@ $lang = array_merge($lang, array( 'IMG_ICON_BACK_TOP' => 'Top', 'IMG_ICON_CONTACT_AIM' => 'AIM', - 'IMG_ICON_CONTACT_EMAIL' => 'Send e-mail', + 'IMG_ICON_CONTACT_EMAIL' => 'Send email', 'IMG_ICON_CONTACT_ICQ' => 'ICQ', 'IMG_ICON_CONTACT_JABBER' => 'Jabber', 'IMG_ICON_CONTACT_MSNM' => 'WLM', @@ -255,7 +255,7 @@ $lang = array_merge($lang, array( 'NO_UNIT' => 'None', 'ONLY_STYLE' => 'This is the only remaining style, you cannot delete it.', - + 'PARENT_STYLE_NOT_FOUND' => 'Parent style was not found. This style may not work correctly. Please uninstall it.', 'PURGED_CACHE' => 'Cache was purged.', diff --git a/phpBB/language/en/acp/users.php b/phpBB/language/en/acp/users.php index 852f68bcd7..4496fdba7c 100644 --- a/phpBB/language/en/acp/users.php +++ b/phpBB/language/en/acp/users.php @@ -54,7 +54,7 @@ $lang = array_merge($lang, array( 'CANNOT_REMOVE_YOURSELF' => 'You are not allowed to remove your own user account.', 'CANNOT_SET_FOUNDER_IGNORED' => 'You are not able to promote ignored users to be founders.', 'CANNOT_SET_FOUNDER_INACTIVE' => 'You need to activate users before you promote them to founders, only activated users are able to be promoted.', - 'CONFIRM_EMAIL_EXPLAIN' => 'You only need to specify this if you are changing the users e-mail address.', + 'CONFIRM_EMAIL_EXPLAIN' => 'You only need to specify this if you are changing the users email address.', 'DELETE_POSTS' => 'Delete posts', 'DELETE_USER' => 'Delete user', @@ -93,8 +93,8 @@ $lang = array_merge($lang, array( 'USER_ADMIN_ACTIVATE' => 'Activate account', 'USER_ADMIN_ACTIVATED' => 'User activated successfully.', 'USER_ADMIN_AVATAR_REMOVED' => 'Successfully removed avatar from user account.', - 'USER_ADMIN_BAN_EMAIL' => 'Ban by e-mail', - 'USER_ADMIN_BAN_EMAIL_REASON' => 'E-mail address banned via user management', + 'USER_ADMIN_BAN_EMAIL' => 'Ban by email', + 'USER_ADMIN_BAN_EMAIL_REASON' => 'Email address banned via user management', 'USER_ADMIN_BAN_IP' => 'Ban by IP', 'USER_ADMIN_BAN_IP_REASON' => 'IP banned via user management', 'USER_ADMIN_BAN_NAME_REASON' => 'Username banned via user management', diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 12f8edad9e..75717e1807 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -101,7 +101,7 @@ $lang = array_merge($lang, array( 'BACK_TO_TOP' => 'Top', 'BACK_TO_PREV' => 'Back to previous page', - 'BAN_TRIGGERED_BY_EMAIL'=> 'A ban has been issued on your e-mail address.', + 'BAN_TRIGGERED_BY_EMAIL'=> 'A ban has been issued on your email address.', 'BAN_TRIGGERED_BY_IP' => 'A ban has been issued on your IP address.', 'BAN_TRIGGERED_BY_USER' => 'A ban has been issued on your username.', 'BBCODE_GUIDE' => 'BBCode guide', @@ -169,9 +169,9 @@ $lang = array_merge($lang, array( ), 'EDIT_POST' => 'Edit post', - 'EMAIL' => 'E-mail', // Short form for EMAIL_ADDRESS - 'EMAIL_ADDRESS' => 'E-mail address', - 'EMAIL_SMTP_ERROR_RESPONSE' => 'Ran into problems sending e-mail at Line %1$s. Response: %2$s.', + 'EMAIL' => 'Email', // Short form for EMAIL_ADDRESS + 'EMAIL_ADDRESS' => 'Email address', + 'EMAIL_SMTP_ERROR_RESPONSE' => 'Ran into problems sending email at Line %1$s. Response: %2$s.', 'EMPTY_SUBJECT' => 'You must specify a subject when posting a new topic.', 'EMPTY_MESSAGE_SUBJECT' => 'You must specify a subject when composing a new message.', 'ENABLED' => 'Enabled', @@ -296,7 +296,7 @@ $lang = array_merge($lang, array( 'INFORMATION' => 'Information', 'INTERESTS' => 'Interests', 'INVALID_DIGEST_CHALLENGE' => 'Invalid digest challenge.', - 'INVALID_EMAIL_LOG' => '%s possibly an invalid e-mail address?', + 'INVALID_EMAIL_LOG' => '%s possibly an invalid email address?', 'INVALID_PLURAL_RULE' => 'The chosen plural rule is invalid. Valid values are integers between 0 and 15.', 'IP' => 'IP', 'IP_BLACKLISTED' => 'Your IP %1$s has been blocked because it is blacklisted. For details please see %2$s.', @@ -391,9 +391,9 @@ $lang = array_merge($lang, array( 'NO_AUTH_OPERATION' => 'You do not have the necessary permissions to complete this operation.', 'NO_CONNECT_TO_SMTP_HOST' => 'Could not connect to smtp host : %1$s : %2$s', 'NO_BIRTHDAYS' => 'No birthdays today', - 'NO_EMAIL_MESSAGE' => 'E-mail message was blank.', + 'NO_EMAIL_MESSAGE' => 'Email message was blank.', 'NO_EMAIL_RESPONSE_CODE' => 'Could not get mail server response codes.', - 'NO_EMAIL_SUBJECT' => 'No e-mail subject specified.', + 'NO_EMAIL_SUBJECT' => 'No email subject specified.', 'NO_FORUM' => 'The forum you selected does not exist.', 'NO_FORUMS' => 'This board has no forums.', 'NO_GROUP' => 'The requested usergroup does not exist.', @@ -521,7 +521,7 @@ $lang = array_merge($lang, array( 'REPORT_BY' => 'Report by', 'REPORT_POST' => 'Report this post', 'REPORTING_POST' => 'Reporting post', - 'RESEND_ACTIVATION' => 'Resend activation e-mail', + 'RESEND_ACTIVATION' => 'Resend activation email', 'RESET' => 'Reset', 'RESTORE_PERMISSIONS' => 'Restore permissions', 'RETURN_INDEX' => '%sReturn to the index page%s', @@ -571,8 +571,8 @@ $lang = array_merge($lang, array( 'SELECT_ALL_CODE' => 'Select all', 'SELECT_DESTINATION_FORUM' => 'Please select a destination forum', 'SELECT_FORUM' => 'Select a forum', - 'SEND_EMAIL' => 'E-mail', // Used for submit buttons - 'SEND_EMAIL_USER' => 'E-mail', // Used as: {L_SEND_EMAIL_USER} {USERNAME} -> E-mail UserX + 'SEND_EMAIL' => 'Email', // Used for submit buttons + 'SEND_EMAIL_USER' => 'Email', // Used as: {L_SEND_EMAIL_USER} {USERNAME} -> Email UserX 'SEND_PRIVATE_MESSAGE' => 'Send private message', 'SETTINGS' => 'Settings', 'SIGNATURE' => 'Signature', @@ -604,7 +604,7 @@ $lang = array_merge($lang, array( 'THE_TEAM' => 'The team', 'TIME' => 'Time', 'TIMEOUT_PROCESSING_REQ' => 'Request timed out.', - + 'TOO_LARGE' => 'The value you entered is too large.', 'TOO_LARGE_MAX_RECIPIENTS' => 'The value of Maximum number of allowed recipients per private message setting you entered is too large.', @@ -623,7 +623,7 @@ $lang = array_merge($lang, array( 'TOO_LONG_PASSWORD_CONFIRM' => 'The password confirmation you entered is too long.', 'TOO_LONG_USER_PASSWORD' => 'The password you entered is too long.', 'TOO_LONG_USERNAME' => 'The username you entered is too long.', - 'TOO_LONG_EMAIL' => 'The e-mail address you entered is too long.', + 'TOO_LONG_EMAIL' => 'The email address you entered is too long.', 'TOO_LONG_WEBSITE' => 'The website address you entered is too long.', 'TOO_LONG_YIM' => 'The Yahoo! Messenger name you entered is too long.', @@ -644,10 +644,10 @@ $lang = array_merge($lang, array( 'TOO_SHORT_PASSWORD_CONFIRM' => 'The password confirmation you entered is too short.', 'TOO_SHORT_USER_PASSWORD' => 'The password you entered is too short.', 'TOO_SHORT_USERNAME' => 'The username you entered is too short.', - 'TOO_SHORT_EMAIL' => 'The e-mail address you entered is too short.', + 'TOO_SHORT_EMAIL' => 'The email address you entered is too short.', 'TOO_SHORT_WEBSITE' => 'The website address you entered is too short.', 'TOO_SHORT_YIM' => 'The Yahoo! Messenger name you entered is too short.', - + 'TOO_SMALL' => 'The value you entered is too small.', 'TOO_SMALL_MAX_RECIPIENTS' => 'The value of Maximum number of allowed recipients per private message setting you entered is too small.', diff --git a/phpBB/language/en/email/admin_send_email.txt b/phpBB/language/en/email/admin_send_email.txt index 6687404527..b778496258 100644 --- a/phpBB/language/en/email/admin_send_email.txt +++ b/phpBB/language/en/email/admin_send_email.txt @@ -1,9 +1,9 @@ -The following is an e-mail sent to you by an administrator of "{SITENAME}". If this message is spam, contains abusive or other comments you find offensive please contact the webmaster of the board at the following address: +The following is an email sent to you by an administrator of "{SITENAME}". If this message is spam, contains abusive or other comments you find offensive please contact the webmaster of the board at the following address: {CONTACT_EMAIL} -Include this full e-mail (particularly the headers). +Include this full email (particularly the headers). Message sent to you follows: ~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/phpBB/language/en/email/admin_welcome_inactive.txt b/phpBB/language/en/email/admin_welcome_inactive.txt index 30b3aae852..8605956318 100644 --- a/phpBB/language/en/email/admin_welcome_inactive.txt +++ b/phpBB/language/en/email/admin_welcome_inactive.txt @@ -2,7 +2,7 @@ Subject: Welcome to "{SITENAME}" {WELCOME_MSG} -Please keep this e-mail for your records. Your account information is as follows: +Please keep this email for your records. Your account information is as follows: ---------------------------- Username: {USERNAME} diff --git a/phpBB/language/en/email/coppa_resend_inactive.txt b/phpBB/language/en/email/coppa_resend_inactive.txt index c3e4af576d..915534a13e 100644 --- a/phpBB/language/en/email/coppa_resend_inactive.txt +++ b/phpBB/language/en/email/coppa_resend_inactive.txt @@ -16,7 +16,7 @@ OR mail it to: Permission to participate at "{SITENAME}" - {U_BOARD} Username: {USERNAME} -E-mail: {EMAIL_ADDRESS} +Email: {EMAIL_ADDRESS} I HAVE REVIEWED THE INFORMATION PROVIDED BY MY CHILD AND HEREBY GRANT PERMISSION TO "{SITENAME}" TO STORE THIS INFORMATION. I UNDERSTAND THIS INFORMATION CAN BE CHANGED AT ANY TIME BY ENTERING A PASSWORD. diff --git a/phpBB/language/en/email/coppa_welcome_inactive.txt b/phpBB/language/en/email/coppa_welcome_inactive.txt index c3e4af576d..915534a13e 100644 --- a/phpBB/language/en/email/coppa_welcome_inactive.txt +++ b/phpBB/language/en/email/coppa_welcome_inactive.txt @@ -16,7 +16,7 @@ OR mail it to: Permission to participate at "{SITENAME}" - {U_BOARD} Username: {USERNAME} -E-mail: {EMAIL_ADDRESS} +Email: {EMAIL_ADDRESS} I HAVE REVIEWED THE INFORMATION PROVIDED BY MY CHILD AND HEREBY GRANT PERMISSION TO "{SITENAME}" TO STORE THIS INFORMATION. I UNDERSTAND THIS INFORMATION CAN BE CHANGED AT ANY TIME BY ENTERING A PASSWORD. diff --git a/phpBB/language/en/email/email_notify.txt b/phpBB/language/en/email/email_notify.txt index 0d0ac7fc28..725b52f0cc 100644 --- a/phpBB/language/en/email/email_notify.txt +++ b/phpBB/language/en/email/email_notify.txt @@ -1,8 +1,8 @@ -Subject: "{SITENAME}" - E-mail a friend +Subject: "{SITENAME}" - Email a friend Hello {TO_USERNAME}, -This e-mail was sent from "{SITENAME}" by {FROM_USERNAME} who thought you may be interested in the following topic: +This email was sent from "{SITENAME}" by {FROM_USERNAME} who thought you may be interested in the following topic: {TOPIC_NAME} @@ -10,7 +10,7 @@ You can find it at: {U_TOPIC} -A message from {FROM_USERNAME} may also be included below. Please note that this message has not been seen or approved by the board administrators. If you wish to complain about having received this e-mail please contact the board administrator at {BOARD_CONTACT}. Please quote the message headers when contacting this address. +A message from {FROM_USERNAME} may also be included below. Please note that this message has not been seen or approved by the board administrators. If you wish to complain about having received this email please contact the board administrator at {BOARD_CONTACT}. Please quote the message headers when contacting this address. ---------- diff --git a/phpBB/language/en/email/installed.txt b/phpBB/language/en/email/installed.txt index 2aa03a7f33..9ec93484e1 100644 --- a/phpBB/language/en/email/installed.txt +++ b/phpBB/language/en/email/installed.txt @@ -4,7 +4,7 @@ Congratulations, You have successfully installed phpBB on your server. -This e-mail contains important information regarding your installation and should be kept for reference. Your password has been securely stored in our database and cannot be retrieved. In the event that it is forgotten, you will be able to reset it using the email address associated with your account. +This email contains important information regarding your installation and should be kept for reference. Your password has been securely stored in our database and cannot be retrieved. In the event that it is forgotten, you will be able to reset it using the email address associated with your account. ---------------------------- Username: {USERNAME} diff --git a/phpBB/language/en/email/profile_send_email.txt b/phpBB/language/en/email/profile_send_email.txt index 9fb19e7eb1..3e63777c9f 100644 --- a/phpBB/language/en/email/profile_send_email.txt +++ b/phpBB/language/en/email/profile_send_email.txt @@ -1,11 +1,11 @@ Hello {TO_USERNAME}, -The following is an e-mail sent to you by {FROM_USERNAME} via your account on "{SITENAME}". If this message is spam, contains abusive or other comments you find offensive please contact the webmaster of the board at the following address: +The following is an email sent to you by {FROM_USERNAME} via your account on "{SITENAME}". If this message is spam, contains abusive or other comments you find offensive please contact the webmaster of the board at the following address: {BOARD_CONTACT} -Include this full e-mail (particularly the headers). Please note that the reply address to this e-mail has been set to that of {FROM_USERNAME}. +Include this full email (particularly the headers). Please note that the reply address to this email has been set to that of {FROM_USERNAME}. Message sent to you follows ~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/phpBB/language/en/email/user_reactivate_account.txt b/phpBB/language/en/email/user_reactivate_account.txt index 4ef7dd899a..7e25018f4d 100644 --- a/phpBB/language/en/email/user_reactivate_account.txt +++ b/phpBB/language/en/email/user_reactivate_account.txt @@ -3,7 +3,7 @@ Subject: Reactivate your account on "{SITENAME}" A board administrator requested that your account be reactivated. Your account is currently inactive. Please follow the steps listed here to reactivate your account. -Please keep this e-mail for your records. Your account information is as follows: +Please keep this email for your records. Your account information is as follows: ---------------------------- Username: {USERNAME} diff --git a/phpBB/language/en/email/user_resend_inactive.txt b/phpBB/language/en/email/user_resend_inactive.txt index 4638d6df63..7879b914b9 100644 --- a/phpBB/language/en/email/user_resend_inactive.txt +++ b/phpBB/language/en/email/user_resend_inactive.txt @@ -2,7 +2,7 @@ Subject: Welcome to "{SITENAME}" {WELCOME_MSG} -Please keep this e-mail for your records. Your account information is as follows: +Please keep this email for your records. Your account information is as follows: ---------------------------- Username: {USERNAME} diff --git a/phpBB/language/en/email/user_welcome.txt b/phpBB/language/en/email/user_welcome.txt index 2648769dfd..aaead86afc 100644 --- a/phpBB/language/en/email/user_welcome.txt +++ b/phpBB/language/en/email/user_welcome.txt @@ -2,7 +2,7 @@ Subject: Welcome to "{SITENAME}" {WELCOME_MSG} -Please keep this e-mail for your records. Your account information is as follows: +Please keep this email for your records. Your account information is as follows: ---------------------------- Username: {USERNAME} diff --git a/phpBB/language/en/email/user_welcome_inactive.txt b/phpBB/language/en/email/user_welcome_inactive.txt index 1b72b1c5a8..5cbb3af3de 100644 --- a/phpBB/language/en/email/user_welcome_inactive.txt +++ b/phpBB/language/en/email/user_welcome_inactive.txt @@ -2,7 +2,7 @@ Subject: Welcome to "{SITENAME}" {WELCOME_MSG} -Please keep this e-mail for your records. Your account information is as follows: +Please keep this email for your records. Your account information is as follows: ---------------------------- Username: {USERNAME} diff --git a/phpBB/language/en/help_bbcode.php b/phpBB/language/en/help_bbcode.php index 7b2672ad94..e0cda9df04 100644 --- a/phpBB/language/en/help_bbcode.php +++ b/phpBB/language/en/help_bbcode.php @@ -88,7 +88,7 @@ $help = array( ), array( 0 => 'Linking to another site', - 1 => 'phpBB BBCode supports a number of ways of creating URIs (Uniform Resource Indicators) better known as URLs.
    • The first of these uses the [url=][/url] tag, whatever you type after the = sign will cause the contents of that tag to act as a URL. For example to link to phpBB.com you could use:

      [url=http://www.phpbb.com/]Visit phpBB![/url]

      This would generate the following link, Visit phpBB! Please notice that the link opens in the same window or a new window depending on the users browser preferences.
    • If you want the URL itself displayed as the link you can do this by simply using:

      [url]http://www.phpbb.com/[/url]

      This would generate the following link, http://www.phpbb.com/
    • Additionally, phpBB features something called Magic Links, this will turn any syntactically correct URL into a link without you needing to specify any tags or even the leading http://. For example typing www.phpbb.com into your message will automatically lead to www.phpbb.com being output when you view the message.
    • The same thing applies equally to e-mail addresses, you can either specify an address explicitly for example:

      [email]no.one@domain.adr[/email]

      which will output no.one@domain.adr or you can just type no.one@domain.adr into your message and it will be automatically converted when you view.
    As with all the BBCode tags you can wrap URLs around any of the other tags such as [img][/img] (see next entry), [b][/b], etc. As with the formatting tags it is up to you to ensure the correct open and close order is following, for example:

    [url=http://www.google.com/][img]http://www.google.com/intl/en_ALL/images/logo.gif[/url][/img]

    is not correct which may lead to your post being deleted so take care.' + 1 => 'phpBB BBCode supports a number of ways of creating URIs (Uniform Resource Indicators) better known as URLs.
    • The first of these uses the [url=][/url] tag, whatever you type after the = sign will cause the contents of that tag to act as a URL. For example to link to phpBB.com you could use:

      [url=http://www.phpbb.com/]Visit phpBB![/url]

      This would generate the following link, Visit phpBB! Please notice that the link opens in the same window or a new window depending on the users browser preferences.
    • If you want the URL itself displayed as the link you can do this by simply using:

      [url]http://www.phpbb.com/[/url]

      This would generate the following link, http://www.phpbb.com/
    • Additionally, phpBB features something called Magic Links, this will turn any syntactically correct URL into a link without you needing to specify any tags or even the leading http://. For example typing www.phpbb.com into your message will automatically lead to www.phpbb.com being output when you view the message.
    • The same thing applies equally to email addresses, you can either specify an address explicitly for example:

      [email]no.one@domain.adr[/email]

      which will output no.one@domain.adr or you can just type no.one@domain.adr into your message and it will be automatically converted when you view.
    As with all the BBCode tags you can wrap URLs around any of the other tags such as [img][/img] (see next entry), [b][/b], etc. As with the formatting tags it is up to you to ensure the correct open and close order is following, for example:

    [url=http://www.google.com/][img]http://www.google.com/intl/en_ALL/images/logo.gif[/url][/img]

    is not correct which may lead to your post being deleted so take care.' ), array( 0 => '--', diff --git a/phpBB/language/en/help_faq.php b/phpBB/language/en/help_faq.php index b14f155f3a..f21a8d866e 100644 --- a/phpBB/language/en/help_faq.php +++ b/phpBB/language/en/help_faq.php @@ -55,7 +55,7 @@ $help = array( ), array( 0 => 'I registered but cannot login!', - 1 => 'First, check your username and password. If they are correct, then one of two things may have happened. If COPPA support is enabled and you specified being under 13 years old during registration, you will have to follow the instructions you received. Some boards will also require new registrations to be activated, either by yourself or by an administrator before you can logon; this information was present during registration. If you were sent an e-mail, follow the instructions. If you did not receive an e-mail, you may have provided an incorrect e-mail address or the e-mail may have been picked up by a spam filer. If you are sure the e-mail address you provided is correct, try contacting an administrator.' + 1 => 'First, check your username and password. If they are correct, then one of two things may have happened. If COPPA support is enabled and you specified being under 13 years old during registration, you will have to follow the instructions you received. Some boards will also require new registrations to be activated, either by yourself or by an administrator before you can logon; this information was present during registration. If you were sent an email, follow the instructions. If you did not receive an email, you may have provided an incorrect email address or the email may have been picked up by a spam filer. If you are sure the email address you provided is correct, try contacting an administrator.' ), array( 0 => 'I registered in the past but cannot login any more?!', @@ -102,8 +102,8 @@ $help = array( 1 => 'Ranks, which appear below your username, indicate the number of posts you have made or identify certain users, e.g. moderators and administrators. In general, you cannot directly change the wording of any board ranks as they are set by the board administrator. Please do not abuse the board by posting unnecessarily just to increase your rank. Most boards will not tolerate this and the moderator or administrator will simply lower your post count.' ), array( - 0 => 'When I click the e-mail link for a user it asks me to login?', - 1 => 'Only registered users can send e-mail to other users via the built-in e-mail form, and only if the administrator has enabled this feature. This is to prevent malicious use of the e-mail system by anonymous users.' + 0 => 'When I click the email link for a user it asks me to login?', + 1 => 'Only registered users can send email to other users via the built-in email form, and only if the administrator has enabled this feature. This is to prevent malicious use of the email system by anonymous users.' ), array( 0 => '--', @@ -255,8 +255,8 @@ $help = array( 1 => 'You can block a user from sending you private messages by using message rules within your User Control Panel. If you are receiving abusive private messages from a particular user, inform a board administrator; they have the power to prevent a user from sending private messages.' ), array( - 0 => 'I have received a spamming or abusive e-mail from someone on this board!', - 1 => 'We are sorry to hear that. The e-mail form feature of this board includes safeguards to try and track users who send such posts, so e-mail the board administrator with a full copy of the e-mail you received. It is very important that this includes the headers that contain the details of the user that sent the e-mail. The board administrator can then take action.' + 0 => 'I have received a spamming or abusive email from someone on this board!', + 1 => 'We are sorry to hear that. The email form feature of this board includes safeguards to try and track users who send such posts, so email the board administrator with a full copy of the email you received. It is very important that this includes the headers that contain the details of the user that sent the email. The board administrator can then take action.' ), array( 0 => '--', @@ -336,6 +336,6 @@ $help = array( ), array( 0 => 'Who do I contact about abusive and/or legal matters related to this board?', - 1 => 'Any of the administrators listed on the “The team†page should be an appropriate point of contact for your complaints. If this still gets no response then you should contact the owner of the domain (do a whois lookup) or, if this is running on a free service (e.g. Yahoo!, free.fr, f2s.com, etc.), the management or abuse department of that service. Please note that the phpBB Group has absolutely no jurisdiction and cannot in any way be held liable over how, where or by whom this board is used. Do not contact the phpBB Group in relation to any legal (cease and desist, liable, defamatory comment, etc.) matter not directly related to the phpBB.com website or the discrete software of phpBB itself. If you do e-mail phpBB Group about any third party use of this software then you should expect a terse response or no response at all.' + 1 => 'Any of the administrators listed on the “The team†page should be an appropriate point of contact for your complaints. If this still gets no response then you should contact the owner of the domain (do a whois lookup) or, if this is running on a free service (e.g. Yahoo!, free.fr, f2s.com, etc.), the management or abuse department of that service. Please note that the phpBB Group has absolutely no jurisdiction and cannot in any way be held liable over how, where or by whom this board is used. Do not contact the phpBB Group in relation to any legal (cease and desist, liable, defamatory comment, etc.) matter not directly related to the phpBB.com website or the discrete software of phpBB itself. If you do email phpBB Group about any third party use of this software then you should expect a terse response or no response at all.' ) ); diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index ca6045a921..03f2e964ec 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -240,8 +240,8 @@ $lang = array_merge($lang, array( 'INST_ERR_DB_NO_FIREBIRD_PS'=> 'The database you selected for Firebird has a page size less than 8192, it must be at least 8192.', 'INST_ERR_DB_NO_POSTGRES' => 'The database you have selected was not created in UNICODE or UTF8 encoding. Try installing with a database in UNICODE or UTF8 encoding.', 'INST_ERR_DB_NO_NAME' => 'No database name specified.', - 'INST_ERR_EMAIL_INVALID' => 'The e-mail address you entered is invalid.', - 'INST_ERR_EMAIL_MISMATCH' => 'The e-mails you entered did not match.', + 'INST_ERR_EMAIL_INVALID' => 'The email address you entered is invalid.', + 'INST_ERR_EMAIL_MISMATCH' => 'The emails you entered did not match.', 'INST_ERR_FATAL' => 'Fatal installation error', 'INST_ERR_FATAL_DB' => 'A fatal and unrecoverable database error has occurred. This may be because the specified user does not have appropriate permissions to CREATE TABLES or INSERT data, etc. Further information may be given below. Please contact your hosting provider in the first instance or the support forums of phpBB for further assistance.', 'INST_ERR_FTP_PATH' => 'Could not change to the given directory, please check the path.', diff --git a/phpBB/language/en/mcp.php b/phpBB/language/en/mcp.php index 3ee619ea16..eaa2d7e3a5 100644 --- a/phpBB/language/en/mcp.php +++ b/phpBB/language/en/mcp.php @@ -144,7 +144,7 @@ $lang = array_merge($lang, array( 'MCP_ADD' => 'Add a warning', 'MCP_BAN' => 'Banning', - 'MCP_BAN_EMAILS' => 'Ban e-mails', + 'MCP_BAN_EMAILS' => 'Ban emails', 'MCP_BAN_IPS' => 'Ban IPs', 'MCP_BAN_USERNAMES' => 'Ban Usernames', diff --git a/phpBB/language/en/memberlist.php b/phpBB/language/en/memberlist.php index c3ab27871e..cdbedebefc 100644 --- a/phpBB/language/en/memberlist.php +++ b/phpBB/language/en/memberlist.php @@ -46,25 +46,25 @@ $lang = array_merge($lang, array( 'BEFORE' => 'Before', - 'CC_EMAIL' => 'Send a copy of this e-mail to yourself.', + 'CC_EMAIL' => 'Send a copy of this email to yourself.', 'CONTACT_USER' => 'Contact', 'DEST_LANG' => 'Language', 'DEST_LANG_EXPLAIN' => 'Select an appropriate language (if available) for the recipient of this message.', - 'EMAIL_BODY_EXPLAIN' => 'This message will be sent as plain text, do not include any HTML or BBCode. The return address for this message will be set to your e-mail address.', - 'EMAIL_DISABLED' => 'Sorry but all e-mail related functions have been disabled.', - 'EMAIL_SENT' => 'The e-mail has been sent.', - 'EMAIL_TOPIC_EXPLAIN' => 'This message will be sent as plain text, do not include any HTML or BBCode. Please note that the topic information is already included in the message. The return address for this message will be set to your e-mail address.', - 'EMPTY_ADDRESS_EMAIL' => 'You must provide a valid e-mail address for the recipient.', + 'EMAIL_BODY_EXPLAIN' => 'This message will be sent as plain text, do not include any HTML or BBCode. The return address for this message will be set to your email address.', + 'EMAIL_DISABLED' => 'Sorry but all email related functions have been disabled.', + 'EMAIL_SENT' => 'The email has been sent.', + 'EMAIL_TOPIC_EXPLAIN' => 'This message will be sent as plain text, do not include any HTML or BBCode. Please note that the topic information is already included in the message. The return address for this message will be set to your email address.', + 'EMPTY_ADDRESS_EMAIL' => 'You must provide a valid email address for the recipient.', 'EMPTY_MESSAGE_EMAIL' => 'You must enter a message to be emailed.', 'EMPTY_MESSAGE_IM' => 'You must enter a message to be send.', 'EMPTY_NAME_EMAIL' => 'You must enter the real name of the recipient.', - 'EMPTY_SUBJECT_EMAIL' => 'You must specify a subject for the e-mail.', + 'EMPTY_SUBJECT_EMAIL' => 'You must specify a subject for the email.', 'EQUAL_TO' => 'Equal to', 'FIND_USERNAME_EXPLAIN' => 'Use this form to search for specific members. You do not need to fill out all fields. To match partial data use * as a wildcard. When entering dates use the format YYYY-MM-DD, e.g. 2004-02-29. Use the mark checkboxes to select one or more usernames (several usernames may be accepted depending on the form itself) and click the Select Marked button to return to the previous form.', - 'FLOOD_EMAIL_LIMIT' => 'You cannot send another e-mail at this time. Please try again later.', + 'FLOOD_EMAIL_LIMIT' => 'You cannot send another email at this time. Please try again later.', 'GROUP_LEADER' => 'Group leader', @@ -103,7 +103,7 @@ $lang = array_merge($lang, array( 'MORE_THAN' => 'More than', - 'NO_EMAIL' => 'You are not permitted to send e-mail to this user.', + 'NO_EMAIL' => 'You are not permitted to send email to this user.', 'NO_VIEW_USERS' => 'You are not authorised to view the member list or profiles.', 'ORDER' => 'Order', @@ -126,7 +126,7 @@ $lang = array_merge($lang, array( 'SEND_MESSAGE' => 'Message', 'SEND_MSNM_MESSAGE' => 'Send WLM message', 'SEND_YIM_MESSAGE' => 'Send YIM message', - 'SORT_EMAIL' => 'E-mail', + 'SORT_EMAIL' => 'Email', 'SORT_LAST_ACTIVE' => 'Last active', 'SORT_POST_COUNT' => 'Post count', diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index aa1e9c27ce..2212e44628 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -49,9 +49,9 @@ $lang = array_merge($lang, array(
    We may also create cookies external to the phpBB software whilst browsing “%1$sâ€, though these are outside the scope of this document which is intended to only cover the pages created by the phpBB software. The second way in which we collect your information is by what you submit to us. This can be, and is not limited to: posting as an anonymous user (hereinafter “anonymous postsâ€), registering on “%1$s†(hereinafter “your accountâ€) and posts submitted by you after registration and whilst logged in (hereinafter “your postsâ€).

    - Your account will at a bare minimum contain a uniquely identifiable name (hereinafter “your user nameâ€), a personal password used for logging into your account (hereinafter “your passwordâ€) and a personal, valid e-mail address (hereinafter “your e-mailâ€). Your information for your account at “%1$s†is protected by data-protection laws applicable in the country that hosts us. Any information beyond your user name, your password, and your e-mail address required by “%1$s†during the registration process is either mandatory or optional, at the discretion of “%1$sâ€. In all cases, you have the option of what information in your account is publicly displayed. Furthermore, within your account, you have the option to opt-in or opt-out of automatically generated e-mails from the phpBB software.
    + Your account will at a bare minimum contain a uniquely identifiable name (hereinafter “your user nameâ€), a personal password used for logging into your account (hereinafter “your passwordâ€) and a personal, valid email address (hereinafter “your emailâ€). Your information for your account at “%1$s†is protected by data-protection laws applicable in the country that hosts us. Any information beyond your user name, your password, and your email address required by “%1$s†during the registration process is either mandatory or optional, at the discretion of “%1$sâ€. In all cases, you have the option of what information in your account is publicly displayed. Furthermore, within your account, you have the option to opt-in or opt-out of automatically generated emails from the phpBB software.

    - Your password is ciphered (a one-way hash) so that it is secure. However, it is recommended that you do not reuse the same password across a number of different websites. Your password is the means of accessing your account at “%1$sâ€, so please guard it carefully and under no circumstance will anyone affiliated with “%1$sâ€, phpBB or another 3rd party, legitimately ask you for your password. Should you forget your password for your account, you can use the “I forgot my password†feature provided by the phpBB software. This process will ask you to submit your user name and your e-mail, then the phpBB software will generate a new password to reclaim your account.
    + Your password is ciphered (a one-way hash) so that it is secure. However, it is recommended that you do not reuse the same password across a number of different websites. Your password is the means of accessing your account at “%1$sâ€, so please guard it carefully and under no circumstance will anyone affiliated with “%1$sâ€, phpBB or another 3rd party, legitimately ask you for your password. Should you forget your password for your account, you can use the “I forgot my password†feature provided by the phpBB software. This process will ask you to submit your user name and your email, then the phpBB software will generate a new password to reclaim your account.
    ', )); @@ -61,13 +61,13 @@ $lang = array_merge($lang, array( 'ACCOUNT_ACTIVE_ADMIN' => 'The account has now been activated.', 'ACCOUNT_ACTIVE_PROFILE' => 'Your account has now been successfully reactivated.', 'ACCOUNT_ADDED' => 'Thank you for registering, your account has been created. You may now login with your username and password.', - 'ACCOUNT_COPPA' => 'Your account has been created but has to be approved, please check your e-mail for details.', - 'ACCOUNT_EMAIL_CHANGED' => 'Your account has been updated. However, this board requires account reactivation on e-mail changes. An activation key has been sent to the new e-mail address you provided. Please check your e-mail for further information.', - 'ACCOUNT_EMAIL_CHANGED_ADMIN' => 'Your account has been updated. However, this board requires account reactivation by the administrators on e-mail changes. An e-mail has been sent to them and you will be informed when your account has been reactivated.', - 'ACCOUNT_INACTIVE' => 'Your account has been created. However, this board requires account activation, an activation key has been sent to the e-mail address you provided. Please check your e-mail for further information.', - 'ACCOUNT_INACTIVE_ADMIN' => 'Your account has been created. However, this board requires account activation by the administrator group. An e-mail has been sent to them and you will be informed when your account has been activated.', - 'ACTIVATION_EMAIL_SENT' => 'The activation e-mail has been sent to your e-mail address.', - 'ACTIVATION_EMAIL_SENT_ADMIN' => 'The activation e-mail has been sent to the administrators e-mail addresses.', + 'ACCOUNT_COPPA' => 'Your account has been created but has to be approved, please check your email for details.', + 'ACCOUNT_EMAIL_CHANGED' => 'Your account has been updated. However, this board requires account reactivation on email changes. An activation key has been sent to the new email address you provided. Please check your email for further information.', + 'ACCOUNT_EMAIL_CHANGED_ADMIN' => 'Your account has been updated. However, this board requires account reactivation by the administrators on email changes. An email has been sent to them and you will be informed when your account has been reactivated.', + 'ACCOUNT_INACTIVE' => 'Your account has been created. However, this board requires account activation, an activation key has been sent to the email address you provided. Please check your email for further information.', + 'ACCOUNT_INACTIVE_ADMIN' => 'Your account has been created. However, this board requires account activation by the administrator group. An email has been sent to them and you will be informed when your account has been activated.', + 'ACTIVATION_EMAIL_SENT' => 'The activation email has been sent to your email address.', + 'ACTIVATION_EMAIL_SENT_ADMIN' => 'The activation email has been sent to the administrators email addresses.', 'ADD' => 'Add', 'ADD_BCC' => 'Add [BCC]', 'ADD_FOES' => 'Add new foes', @@ -79,7 +79,7 @@ $lang = array_merge($lang, array( 'ADD_RULE' => 'Add rule', 'ADD_TO' => 'Add [To]', 'ADD_USERS_UCP_EXPLAIN' => 'Here you can add new users to the group. You may select whether this group becomes the new default for the selected users. Please enter each username on a separate line.', - 'ADMIN_EMAIL' => 'Administrators can e-mail me information', + 'ADMIN_EMAIL' => 'Administrators can email me information', 'AGREE' => 'I agree to these terms', 'ALLOW_PM' => 'Allow users to send you private messages', 'ALLOW_PM_EXPLAIN' => 'Note that administrators and moderators will always be able to send you messages.', @@ -134,7 +134,7 @@ $lang = array_merge($lang, array( 'CREATE_FOLDER' => 'Add folder…', 'CURRENT_IMAGE' => 'Current image', 'CURRENT_PASSWORD' => 'Current password', - 'CURRENT_PASSWORD_EXPLAIN' => 'You must confirm your current password if you wish to change it, alter your e-mail address or username.', + 'CURRENT_PASSWORD_EXPLAIN' => 'You must confirm your current password if you wish to change it, alter your email address or username.', 'CUR_PASSWORD_EMPTY' => 'You did not enter your current password.', 'CUR_PASSWORD_ERROR' => 'The current password you entered is incorrect.', 'CUSTOM_DATEFORMAT' => 'Custom…', @@ -164,17 +164,17 @@ $lang = array_merge($lang, array( 'DEMOTE_SELECTED' => 'Demote selected', 'DISABLE_CENSORS' => 'Enable word censoring', 'DISPLAY_GALLERY' => 'Display gallery', - 'DOMAIN_NO_MX_RECORD_EMAIL' => 'The entered e-mail domain has no valid MX record.', + 'DOMAIN_NO_MX_RECORD_EMAIL' => 'The entered email domain has no valid MX record.', 'DOWNLOADS' => 'Downloads', 'DRAFTS_DELETED' => 'All selected drafts were successfully deleted.', 'DRAFTS_EXPLAIN' => 'Here you can view, edit and delete your saved drafts.', 'DRAFT_UPDATED' => 'Draft successfully updated.', 'EDIT_DRAFT_EXPLAIN' => 'Here you are able to edit your draft. Drafts do not contain attachment and poll information.', - 'EMAIL_BANNED_EMAIL' => 'The e-mail address you entered is not allowed to be used.', - 'EMAIL_INVALID_EMAIL' => 'The e-mail address you entered is invalid.', - 'EMAIL_REMIND' => 'This must be the e-mail address associated with your account. If you have not changed this via your user control panel then it is the e-mail address you registered your account with.', - 'EMAIL_TAKEN_EMAIL' => 'The entered e-mail address is already in use.', + 'EMAIL_BANNED_EMAIL' => 'The email address you entered is not allowed to be used.', + 'EMAIL_INVALID_EMAIL' => 'The email address you entered is invalid.', + 'EMAIL_REMIND' => 'This must be the email address associated with your account. If you have not changed this via your user control panel then it is the email address you registered your account with.', + 'EMAIL_TAKEN_EMAIL' => 'The entered email address is already in use.', 'EMPTY_DRAFT' => 'You must enter a message to submit your changes.', 'EMPTY_DRAFT_TITLE' => 'You must enter a draft title.', 'EXPORT_AS_XML' => 'Export as XML', @@ -286,7 +286,7 @@ $lang = array_merge($lang, array( 'NEW_PASSWORD_ERROR' => 'The passwords you entered do not match.', 'NOTIFY_METHOD' => 'Notification method', 'NOTIFY_METHOD_BOTH' => 'Both', - 'NOTIFY_METHOD_EMAIL' => 'E-mail only', + 'NOTIFY_METHOD_EMAIL' => 'Email only', 'NOTIFY_METHOD_EXPLAIN' => 'Method for sending messages sent via this board.', 'NOTIFY_METHOD_IM' => 'Jabber only', 'NOTIFY_ON_PM' => 'Notify me on new private messages', @@ -324,7 +324,7 @@ $lang = array_merge($lang, array( 'NO_BOOKMARKS' => 'You have no bookmarks.', 'NO_BOOKMARKS_SELECTED' => 'You have selected no bookmarks.', 'NO_EDIT_READ_MESSAGE' => 'Private message cannot be edited because it has already been read.', - 'NO_EMAIL_USER' => 'The e-mail/username information submitted could not be found.', + 'NO_EMAIL_USER' => 'The email/username information submitted could not be found.', 'NO_FOES' => 'No foes currently defined', 'NO_FRIENDS' => 'No friends currently defined', 'NO_FRIENDS_OFFLINE' => 'No friends offline', @@ -350,7 +350,7 @@ $lang = array_merge($lang, array( 'PASS_TYPE_SYMBOL_EXPLAIN' => 'Password must be between %1$s and %2$s long, must contain letters in mixed case, must contain numbers and must contain symbols.', 'PASSWORD' => 'Password', 'PASSWORD_ACTIVATED' => 'Your new password has been activated.', - 'PASSWORD_UPDATED' => 'A new password was sent to your registered e-mail address.', + 'PASSWORD_UPDATED' => 'A new password was sent to your registered email address.', 'PERMISSIONS_RESTORED' => 'Successfully restored original permissions.', 'PERMISSIONS_TRANSFERRED' => 'Successfully transferred permissions from %s, you are now able to browse the board with this user’s permissions.
    Please note that admin permissions were not transferred. You are able to revert to your permission set at any time.', 'PM_DISABLED' => 'Private messaging has been disabled on this board.', @@ -408,7 +408,7 @@ $lang = array_merge($lang, array( 'SEARCH_YOUR_POSTS' => 'Show your posts', 'SEND_PASSWORD' => 'Send password', 'SENT_AT' => 'Sent', // Used before dates in private messages - 'SHOW_EMAIL' => 'Users can contact me by e-mail', + 'SHOW_EMAIL' => 'Users can contact me by email', 'SIGNATURE_EXPLAIN' => 'This is a block of text that can be added to posts you make. There is a %d character limit.', 'SIGNATURE_PREVIEW' => 'Your signature will appear like this in posts', 'SIGNATURE_TOO_LONG' => 'Your signature is too long.', @@ -427,12 +427,12 @@ $lang = array_merge($lang, array( 'UCP' => 'User Control Panel', 'UCP_ACTIVATE' => 'Activate account', - 'UCP_ADMIN_ACTIVATE' => 'Please note that you will need to enter a valid e-mail address before your account is activated. The administrator will review your account and if approved you will receive an e-mail at the address you specified.', + 'UCP_ADMIN_ACTIVATE' => 'Please note that you will need to enter a valid email address before your account is activated. The administrator will review your account and if approved you will receive an email at the address you specified.', 'UCP_AIM' => 'AOL Instant Messenger', 'UCP_ATTACHMENTS' => 'Attachments', 'UCP_COPPA_BEFORE' => 'Before %s', 'UCP_COPPA_ON_AFTER' => 'On or after %s', - 'UCP_EMAIL_ACTIVATE' => 'Please note that you will need to enter a valid e-mail address before your account is activated. You will receive an e-mail at the address you provide that contains an account activation link.', + 'UCP_EMAIL_ACTIVATE' => 'Please note that you will need to enter a valid email address before your account is activated. You will receive an email at the address you provide that contains an account activation link.', 'UCP_ICQ' => 'ICQ number', 'UCP_JABBER' => 'Jabber address', @@ -472,7 +472,7 @@ $lang = array_merge($lang, array( 'UCP_REGISTER_DISABLE' => 'Creating a new account is currently not possible.', 'UCP_REMIND' => 'Send password', - 'UCP_RESEND' => 'Send activation e-mail', + 'UCP_RESEND' => 'Send activation email', 'UCP_WELCOME' => 'Welcome to the User Control Panel. From here you can monitor, view and update your profile, preferences, subscribed forums and topics. You can also send messages to other users (if permitted). Please ensure you read any announcements before continuing.', 'UCP_YIM' => 'Yahoo Messenger', 'UCP_ZEBRA' => 'Friends & Foes', diff --git a/phpBB/language/en/viewtopic.php b/phpBB/language/en/viewtopic.php index 184f88ed3c..278c064fe7 100644 --- a/phpBB/language/en/viewtopic.php +++ b/phpBB/language/en/viewtopic.php @@ -57,13 +57,13 @@ $lang = array_merge($lang, array( 1 => 'Last edited by %2$s on %3$s, edited %1$d time in total.', 2 => 'Last edited by %2$s on %3$s, edited %1$d times in total.', ), - 'EMAIL_TOPIC' => 'E-mail friend', + 'EMAIL_TOPIC' => 'Email friend', 'ERROR_NO_ATTACHMENT' => 'The selected attachment does not exist anymore.', 'FILE_NOT_FOUND_404' => 'The file %s does not exist.', 'FORK_TOPIC' => 'Copy topic', 'FULL_EDITOR' => 'Full Editor & Preview', - + 'LINKAGE_FORBIDDEN' => 'You are not authorised to view, download or link from/to this site.', 'LOGIN_NOTIFY_TOPIC' => 'You have been notified about this topic, please login to view it.', 'LOGIN_VIEWTOPIC' => 'The board requires you to be registered and logged in to view this topic.', -- cgit v1.2.1 From 249d8ede1261f6736a1d245ad204bc2bca544945 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Mon, 16 Apr 2012 01:24:10 +0530 Subject: [ticket/10797] user rank is displayed in mcp_warn.php When warning a user in MCP, the user's rank title and image are displayed. language key user rank also added. PHPBB3-10797 --- phpBB/includes/mcp/mcp_warn.php | 4 ++-- phpBB/language/en/mcp.php | 1 + 2 files changed, 3 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/mcp/mcp_warn.php b/phpBB/includes/mcp/mcp_warn.php index 63e5b19155..1016204ff8 100644 --- a/phpBB/includes/mcp/mcp_warn.php +++ b/phpBB/includes/mcp/mcp_warn.php @@ -308,7 +308,7 @@ class mcp_warn include($phpbb_root_path . 'includes/functions_display.' . $phpEx); } - $rank_title = $rank_img = ''; + get_user_rank($user_row['user_rank'], $user_row['user_posts'], $rank_title, $rank_img, $rank_img_src); $avatar_img = get_user_avatar($user_row['user_avatar'], $user_row['user_avatar_type'], $user_row['user_avatar_width'], $user_row['user_avatar_height']); $template->assign_vars(array( @@ -413,7 +413,7 @@ class mcp_warn include($phpbb_root_path . 'includes/functions_display.' . $phpEx); } - $rank_title = $rank_img = ''; + get_user_rank($user_row['user_rank'], $user_row['user_posts'], $rank_title, $rank_img, $rank_img_src); $avatar_img = get_user_avatar($user_row['user_avatar'], $user_row['user_avatar_type'], $user_row['user_avatar_width'], $user_row['user_avatar_height']); // OK, they didn't submit a warning so lets build the page for them to do so diff --git a/phpBB/language/en/mcp.php b/phpBB/language/en/mcp.php index d0bcec0d9c..16b55b3612 100644 --- a/phpBB/language/en/mcp.php +++ b/phpBB/language/en/mcp.php @@ -274,6 +274,7 @@ $lang = array_merge($lang, array( 'POST_REPORTED_SUCCESS' => 'This post has been successfully reported.', 'POST_UNLOCKED_SUCCESS' => 'Post unlocked successfully.', + 'RANK' => 'User rank', 'READ_USERNOTES' => 'User notes', 'READ_WARNINGS' => 'User warnings', 'REPORTER' => 'Reporter', -- cgit v1.2.1 From 7a6d3ec61bff708fa1ebc60765c91af0a5648fc9 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Sun, 15 Apr 2012 23:33:34 -0500 Subject: [ticket/10819] Improve side-by-side diff styling Used transparent background for unchanged lines Shortened the table headers and make the background grey Added a border between the columns Increased the font size on pre blocks Added Consolas as the first pre font, for Windows users Added wordwrapping for pre blocks PHPBB3-10819 --- phpBB/adm/style/install_update_diff.html | 27 ++++++++++++++------------- 1 file changed, 14 insertions(+), 13 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/install_update_diff.html b/phpBB/adm/style/install_update_diff.html index b65a014312..96bf2532b1 100644 --- a/phpBB/adm/style/install_update_diff.html +++ b/phpBB/adm/style/install_update_diff.html @@ -119,6 +119,7 @@ table.hrdiff { overflow: hidden; border-bottom: 1px solid #999; table-layout: fixed; + background: transparent; } table.hrdiff th { @@ -128,7 +129,8 @@ table.hrdiff th { font-family: Verdana,Helvetica,sans-serif; font-size: 11px; border-bottom: 1px solid #999; - background: transparent; + border-right: 1px solid #999; + background: #D9D9D9; } table.hrdiff thead th { @@ -142,29 +144,28 @@ table.hrdiff tr:first-child th { } table.hrdiff tbody th { - padding: 2em 1px 1px 1px; font-size: 80%; border-top: 1px solid #999; } -table.hrdiff tbody td.old { - border-left: 1px solid #999; - border-right: 1px solid #999; -} -table.hrdiff tbody td.new { +table.hrdiff tbody td { border-right: 1px solid #999; } +/* Variant of http://www.longren.org/wrapping-text-inside-pre-tags/ */ table.hrdiff td pre { - overflow: auto; - display: block; - width: 100%; - overflow: auto; - display: block; + font-family: "Consolas", monospace; + font-size: 1.1em; + overflow-x: auto; /* Use horizontal scroller if needed; for Firefox 2, not needed in Firefox 3 */ + white-space: pre-wrap; /* css-3 */ + white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ + white-space: -pre-wrap; /* Opera 4-6 */ + white-space: -o-pre-wrap; /* Opera 7 */ + word-wrap: break-word; /* Internet Explorer 5.5+ */ } table.hrdiff .unmodified { - background: #fff; + background: transparent; } table.hrdiff .added { -- cgit v1.2.1 From 09621342a54525e9dfcd3419b91d39e13ee7a326 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Sun, 15 Apr 2012 23:38:12 -0500 Subject: [ticket/10819] Forgot this causes vertical scrollbars on IE PHPBB3-10819 --- phpBB/adm/style/install_update_diff.html | 1 - 1 file changed, 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/install_update_diff.html b/phpBB/adm/style/install_update_diff.html index 96bf2532b1..e57d19161d 100644 --- a/phpBB/adm/style/install_update_diff.html +++ b/phpBB/adm/style/install_update_diff.html @@ -156,7 +156,6 @@ table.hrdiff tbody td { table.hrdiff td pre { font-family: "Consolas", monospace; font-size: 1.1em; - overflow-x: auto; /* Use horizontal scroller if needed; for Firefox 2, not needed in Firefox 3 */ white-space: pre-wrap; /* css-3 */ white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ white-space: -pre-wrap; /* Opera 4-6 */ -- cgit v1.2.1 From 00c54f8a7cad92eff14fe62530766666c2c796a7 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Tue, 17 Apr 2012 22:59:10 -0500 Subject: [ticket/10819] Remove support for older browsers PHPBB3-10819 --- phpBB/adm/style/install_update_diff.html | 4 ---- 1 file changed, 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/install_update_diff.html b/phpBB/adm/style/install_update_diff.html index e57d19161d..4d8bcfd1fc 100644 --- a/phpBB/adm/style/install_update_diff.html +++ b/phpBB/adm/style/install_update_diff.html @@ -152,14 +152,10 @@ table.hrdiff tbody td { border-right: 1px solid #999; } -/* Variant of http://www.longren.org/wrapping-text-inside-pre-tags/ */ table.hrdiff td pre { font-family: "Consolas", monospace; font-size: 1.1em; white-space: pre-wrap; /* css-3 */ - white-space: -moz-pre-wrap !important; /* Mozilla, since 1999 */ - white-space: -pre-wrap; /* Opera 4-6 */ - white-space: -o-pre-wrap; /* Opera 7 */ word-wrap: break-word; /* Internet Explorer 5.5+ */ } -- cgit v1.2.1 From b3e42635ca201eea2fa82fb057f021768daf6786 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Tue, 10 Apr 2012 22:41:59 +0300 Subject: [ticket/10759] Fixing style in database updater Fixing error in database updater caused by style components merge PHPBB3-10759 --- phpBB/install/database_update.php | 155 +++++++++++++++++++++++++++++++------- 1 file changed, 127 insertions(+), 28 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 5368ec06bb..0b33168496 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -1110,20 +1110,6 @@ function database_update_info() 'group_legend' => array('UINT', 0), ), ), - 'drop_columns' => array( - STYLES_TABLE => array( - 'imageset_id', - 'template_id', - 'theme_id', - ), - ), - 'drop_tables' => array( - STYLES_IMAGESET_TABLE, - STYLES_IMAGESET_DATA_TABLE, - STYLES_TEMPLATE_TABLE, - STYLES_TEMPLATE_DATA_TABLE, - STYLES_THEME_TABLE, - ), ), ); } @@ -1135,7 +1121,7 @@ function database_update_info() *****************************************************************************/ function change_database_data(&$no_updates, $version) { - global $db, $errored, $error_ary, $config, $phpbb_root_path, $phpEx; + global $db, $errored, $error_ary, $config, $phpbb_root_path, $phpEx, $db_tools; switch ($version) { @@ -2312,13 +2298,6 @@ function change_database_data(&$no_updates, $version) 'auth' => 'acl_a_styles', 'cat' => 'ACP_STYLE_MANAGEMENT', ), - 'edit' => array( - 'base' => 'acp_styles', - 'class' => 'acp', - 'title' => 'ACP_STYLES_EDIT', - 'auth' => 'acl_a_styles', - 'cat' => 'ACP_STYLE_MANAGEMENT', - ), 'cache' => array( 'base' => 'acp_styles', 'class' => 'acp', @@ -2421,13 +2400,133 @@ function change_database_data(&$no_updates, $version) { set_config('teampage_memberships', '1'); } - - // Clear styles table and add prosilver entry - _sql('DELETE FROM ' . STYLES_TABLE, $errored, $error_ary); - $sql = 'INSERT INTO ' . STYLES_TABLE . " (style_name, style_copyright, style_active, style_path, bbcode_bitfield, style_parent_id, style_parent_tree) VALUES ('prosilver', '© phpBB Group', 1, 'prosilver', 'kNg=', 0, '')"; - _sql($sql, $errored, $error_ary); - + // Check if styles table was already updated + if ($db_tools->sql_table_exists(STYLES_THEME_TABLE)) + { + // Get list of valid installed styles + $available_styles = array('prosilver'); + + $iterator = new DirectoryIterator($phpbb_root_path . 'styles'); + $skip_dirs = array('.', '..', 'prosilver'); + foreach ($iterator as $fileinfo) + { + if ($fileinfo->isDir() && !in_array($fileinfo->getFilename(), $skip_dirs) && file_exists($fileinfo->getPathname() . '/style.cfg')) + { + $style_cfg = parse_cfg_file($fileinfo->getPathname() . '/style.cfg'); + if (isset($style_cfg['phpbb_version']) && version_compare($style_cfg['phpbb_version'], '3.1.0-dev', '>=')) + { + // 3.1 style + $available_styles[] = $fileinfo->getFilename(); + } + } + } + + // Get all installed styles + if ($db_tools->sql_table_exists(STYLES_IMAGESET_TABLE)) + { + $sql = 'SELECT s.style_id, t.template_path, t.template_id, t.bbcode_bitfield, t.template_inherits_id, t.template_inherit_path, c.theme_path, c.theme_id, i.imageset_path, i.imageset_id + FROM ' . STYLES_TABLE . ' s, ' . STYLES_TEMPLATE_TABLE . ' t, ' . STYLES_THEME_TABLE . ' c, ' . STYLES_IMAGESET_TABLE . " i + WHERE t.template_id = s.template_id + AND c.theme_id = s.theme_id + AND i.imageset_id = s.imageset_id"; + } + else + { + $sql = 'SELECT s.style_id, t.template_path, t.template_id, t.bbcode_bitfield, t.template_inherits_id, t.template_inherit_path, c.theme_path, c.theme_id + FROM ' . STYLES_TABLE . ' s, ' . STYLES_TEMPLATE_TABLE . ' t, ' . STYLES_THEME_TABLE . " c + WHERE t.template_id = s.template_id + AND c.theme_id = s.theme_id"; + } + $result = $db->sql_query($sql); + + $styles = array(); + while ($row = $db->sql_fetchrow($result)) + { + $styles[] = $row; + } + $db->sql_freeresult($result); + + // Check each style + $valid_styles = array(); + foreach ($styles as $style_row) + { + if ( + // Ignore styles with parent style + $style_row['template_inherits_id'] == 0 && + // Check if components match + $style_row['template_path'] == $style_row['theme_path'] && (!isset($style_row['imageset_path']) || $style_row['template_path'] == $style_row['imageset_path']) && + // Check if components are valid + in_array($style_row['template_path'], $available_styles) + ) + { + // Valid style. Keep it + $sql_ary = array( + 'style_path' => $style_row['template_path'], + 'bbcode_bitfield' => $style_row['bbcode_bitfield'], + 'style_parent_id' => 0, + 'style_parent_tree' => '', + ); + _sql('UPDATE ' . STYLES_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE style_id = ' . $style_row['style_id'], $errored, $error_ary); + $valid_styles[] = $style_row['style_id']; + } + } + + // Remove old styles tables + $changes = array( + 'drop_columns' => array( + STYLES_TABLE => array( + 'imageset_id', + 'template_id', + 'theme_id', + ), + ), + + 'drop_tables' => array( + STYLES_IMAGESET_TABLE, + STYLES_IMAGESET_DATA_TABLE, + STYLES_TEMPLATE_TABLE, + STYLES_TEMPLATE_DATA_TABLE, + STYLES_THEME_TABLE, + ) + ); + $statements = $db_tools->perform_schema_changes($changes); + + foreach ($statements as $sql) + { + _sql($sql, $errored, $error_ary); + } + + // Remove old entries from styles table + if (!sizeof($valid_styles)) + { + // No valid styles: remove everything and add prosilver + _sql('DELETE FROM ' . STYLES_TABLE, $errored, $error_ary); + + $sql = 'INSERT INTO ' . STYLES_TABLE . " (style_id, style_name, style_copyright, style_active, style_path, bbcode_bitfield, style_parent_id, style_parent_tree) VALUES (1, 'prosilver', '© phpBB Group', 1, 'prosilver', 'kNg=', 0, '')"; + _sql($sql, $errored, $error_ary); + + set_config('default_style', '1'); + + $sql = 'UPDATE ' . USERS_TABLE . ' SET user_style = 0'; + _sql($sql, $errored, $error_ary); + } + else + { + // There are valid styles in styles table. Remove styles that are outdated + _sql('DELETE FROM ' . STYLES_TABLE . ' WHERE ' . $db->sql_in_set('style_id', $valid_styles, true), $errored, $error_ary); + + // Change default style + if (!in_array($config['default_style'], $valid_styles)) + { + set_config('default_style', $valid_styles[0]); + } + + // Reset styles for users + _sql('UPDATE ' . USERS_TABLE . ' SET user_style = 0 WHERE ' . $db->sql_in_set('user_style', $valid_styles, true), $errored, $error_ary); + } + } + $no_updates = false; if (!isset($config['assets_version'])) -- cgit v1.2.1 From ea8f83de6f87af8fc9413e1be557953cabe8811e Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 19 Apr 2012 03:06:40 +0200 Subject: [ticket/10759] Fix whitespace in database_update.php PHPBB3-10759 --- phpBB/install/database_update.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 0b33168496..cddc1c4164 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -2310,7 +2310,7 @@ function change_database_data(&$no_updates, $version) _add_modules($modules_to_install); $sql = 'DELETE FROM ' . MODULES_TABLE . " - WHERE (module_basename = 'styles' OR module_basename = 'acp_styles') AND (module_mode = 'imageset' OR module_mode = 'theme' OR module_mode = 'template')"; + WHERE (module_basename = 'styles' OR module_basename = 'acp_styles') AND (module_mode = 'imageset' OR module_mode = 'theme' OR module_mode = 'template')"; _sql($sql, $errored, $error_ary); // Localise Global Announcements @@ -2474,15 +2474,15 @@ function change_database_data(&$no_updates, $version) // Remove old styles tables $changes = array( - 'drop_columns' => array( - STYLES_TABLE => array( + 'drop_columns' => array( + STYLES_TABLE => array( 'imageset_id', 'template_id', 'theme_id', ), ), - 'drop_tables' => array( + 'drop_tables' => array( STYLES_IMAGESET_TABLE, STYLES_IMAGESET_DATA_TABLE, STYLES_TEMPLATE_TABLE, -- cgit v1.2.1 From c43373068636a4f361423f2fe41231ac2e32f70f Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 19 Apr 2012 03:18:20 +0200 Subject: [ticket/10759] Retrieve style_id after INSERT since we cannot set it PHPBB3-10759 --- phpBB/install/database_update.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index cddc1c4164..d71226a29c 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -2503,10 +2503,17 @@ function change_database_data(&$no_updates, $version) // No valid styles: remove everything and add prosilver _sql('DELETE FROM ' . STYLES_TABLE, $errored, $error_ary); - $sql = 'INSERT INTO ' . STYLES_TABLE . " (style_id, style_name, style_copyright, style_active, style_path, bbcode_bitfield, style_parent_id, style_parent_tree) VALUES (1, 'prosilver', '© phpBB Group', 1, 'prosilver', 'kNg=', 0, '')"; + $sql = 'INSERT INTO ' . STYLES_TABLE . " (style_name, style_copyright, style_active, style_path, bbcode_bitfield, style_parent_id, style_parent_tree) VALUES ('prosilver', '© phpBB Group', 1, 'prosilver', 'kNg=', 0, '')"; _sql($sql, $errored, $error_ary); - set_config('default_style', '1'); + $sql = 'SELECT style_id + FROM ' . $table . " + WHERE style_name = 'prosilver'"; + $result = _sql($sql, $errored, $error_ary); + $default_style = $db->sql_fetchfield($result); + $db->sql_freeresult($result); + + set_config('default_style', $default_style); $sql = 'UPDATE ' . USERS_TABLE . ' SET user_style = 0'; _sql($sql, $errored, $error_ary); -- cgit v1.2.1 From 0b7a0fa2d11c4f30d31e36f2c11c574491432d4a Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 19 Apr 2012 03:27:42 +0200 Subject: [ticket/10759] Clarify comments a bit PHPBB3-10759 --- phpBB/install/database_update.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index d71226a29c..c30508dcee 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -2404,7 +2404,7 @@ function change_database_data(&$no_updates, $version) // Check if styles table was already updated if ($db_tools->sql_table_exists(STYLES_THEME_TABLE)) { - // Get list of valid installed styles + // Get list of valid 3.1 styles $available_styles = array('prosilver'); $iterator = new DirectoryIterator($phpbb_root_path . 'styles'); @@ -2447,12 +2447,12 @@ function change_database_data(&$no_updates, $version) } $db->sql_freeresult($result); - // Check each style + // Decide which styles to keep, all others will be deleted $valid_styles = array(); foreach ($styles as $style_row) { if ( - // Ignore styles with parent style + // Delete styles with parent style (not supported yet) $style_row['template_inherits_id'] == 0 && // Check if components match $style_row['template_path'] == $style_row['theme_path'] && (!isset($style_row['imageset_path']) || $style_row['template_path'] == $style_row['imageset_path']) && -- cgit v1.2.1 From 18704215216cf31e8d96058d2df7ef7cf20a3f7b Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 19 Apr 2012 03:38:01 +0200 Subject: [ticket/10759] Don't select imageset_id, it's not needed PHPBB3-10759 --- phpBB/install/database_update.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index c30508dcee..88ebb8209e 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -2425,7 +2425,7 @@ function change_database_data(&$no_updates, $version) // Get all installed styles if ($db_tools->sql_table_exists(STYLES_IMAGESET_TABLE)) { - $sql = 'SELECT s.style_id, t.template_path, t.template_id, t.bbcode_bitfield, t.template_inherits_id, t.template_inherit_path, c.theme_path, c.theme_id, i.imageset_path, i.imageset_id + $sql = 'SELECT s.style_id, t.template_path, t.template_id, t.bbcode_bitfield, t.template_inherits_id, t.template_inherit_path, c.theme_path, c.theme_id, i.imageset_path FROM ' . STYLES_TABLE . ' s, ' . STYLES_TEMPLATE_TABLE . ' t, ' . STYLES_THEME_TABLE . ' c, ' . STYLES_IMAGESET_TABLE . " i WHERE t.template_id = s.template_id AND c.theme_id = s.theme_id -- cgit v1.2.1 From 439ade4ee2f2fcd301ad3690624a821a779c95ee Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Thu, 19 Apr 2012 03:51:17 +0200 Subject: [ticket/10759] Make sure style ids are integers PHPBB3-10759 --- phpBB/install/database_update.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 88ebb8209e..a0892005d2 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -2468,7 +2468,7 @@ function change_database_data(&$no_updates, $version) 'style_parent_tree' => '', ); _sql('UPDATE ' . STYLES_TABLE . ' SET ' . $db->sql_build_array('UPDATE', $sql_ary) . ' WHERE style_id = ' . $style_row['style_id'], $errored, $error_ary); - $valid_styles[] = $style_row['style_id']; + $valid_styles[] = (int) $style_row['style_id']; } } -- cgit v1.2.1 From 733018f99a7d8c6200921f31c683606c6f01fe76 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Tue, 3 Apr 2012 11:23:09 +0300 Subject: [ticket/10756] Moving template classes Moving template class files from includes/style/ to includes/template/ and removing template_ file prefix PHPBB3-10756 --- phpBB/includes/style/template_compile.php | 128 --- phpBB/includes/style/template_context.php | 359 ------- phpBB/includes/style/template_filter.php | 1028 -------------------- phpBB/includes/style/template_renderer.php | 35 - phpBB/includes/style/template_renderer_eval.php | 60 -- phpBB/includes/style/template_renderer_include.php | 60 -- phpBB/includes/template/compile.php | 128 +++ phpBB/includes/template/context.php | 359 +++++++ phpBB/includes/template/filter.php | 1028 ++++++++++++++++++++ phpBB/includes/template/renderer.php | 35 + phpBB/includes/template/renderer_eval.php | 60 ++ phpBB/includes/template/renderer_include.php | 60 ++ 12 files changed, 1670 insertions(+), 1670 deletions(-) delete mode 100644 phpBB/includes/style/template_compile.php delete mode 100644 phpBB/includes/style/template_context.php delete mode 100644 phpBB/includes/style/template_filter.php delete mode 100644 phpBB/includes/style/template_renderer.php delete mode 100644 phpBB/includes/style/template_renderer_eval.php delete mode 100644 phpBB/includes/style/template_renderer_include.php create mode 100644 phpBB/includes/template/compile.php create mode 100644 phpBB/includes/template/context.php create mode 100644 phpBB/includes/template/filter.php create mode 100644 phpBB/includes/template/renderer.php create mode 100644 phpBB/includes/template/renderer_eval.php create mode 100644 phpBB/includes/template/renderer_include.php (limited to 'phpBB') diff --git a/phpBB/includes/style/template_compile.php b/phpBB/includes/style/template_compile.php deleted file mode 100644 index fa0928f424..0000000000 --- a/phpBB/includes/style/template_compile.php +++ /dev/null @@ -1,128 +0,0 @@ -filter_params = array( - 'allow_php' => $allow_php, - 'locator' => $locator, - 'phpbb_root_path' => $phpbb_root_path - ); - } - - /** - * Compiles template in $source_file and writes compiled template to - * cache directory - * - * @param string $handle Template handle to compile - * @param string $source_file Source template file - * @return bool Return true on success otherwise false - */ - public function compile_file_to_file($source_file, $compiled_file) - { - $source_handle = @fopen($source_file, 'rb'); - $destination_handle = @fopen($compiled_file, 'wb'); - - if (!$source_handle || !$destination_handle) - { - return false; - } - - @flock($destination_handle, LOCK_EX); - - $this->compile_stream_to_stream($source_handle, $destination_handle); - - @fclose($source_handle); - @flock($destination_handle, LOCK_UN); - @fclose($destination_handle); - - phpbb_chmod($compiled_file, CHMOD_READ | CHMOD_WRITE); - - clearstatcache(); - - return true; - } - - /** - * Compiles a template located at $source_file. - * - * Returns PHP source suitable for eval(). - * - * @param string $source_file Source template file - * @return string|bool Return compiled code on successful compilation otherwise false - */ - public function compile_file($source_file) - { - $source_handle = @fopen($source_file, 'rb'); - $destination_handle = @fopen('php://temp' ,'r+b'); - - if (!$source_handle || !$destination_handle) - { - return false; - } - - $this->compile_stream_to_stream($source_handle, $destination_handle); - - @fclose($source_handle); - - rewind($destination_handle); - $contents = stream_get_contents($destination_handle); - @fclose($dest_handle); - - return $contents; - } - - /** - * Compiles contents of $source_stream into $dest_stream. - * - * A stream filter is appended to $source_stream as part of the - * process. - * - * @param resource $source_stream Source stream - * @param resource $dest_stream Destination stream - * @return void - */ - private function compile_stream_to_stream($source_stream, $dest_stream) - { - stream_filter_append($source_stream, 'phpbb_template', null, $this->filter_params); - stream_copy_to_stream($source_stream, $dest_stream); - } -} diff --git a/phpBB/includes/style/template_context.php b/phpBB/includes/style/template_context.php deleted file mode 100644 index b22f77da2e..0000000000 --- a/phpBB/includes/style/template_context.php +++ /dev/null @@ -1,359 +0,0 @@ - $this->tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value - * if it's a root-level variable, it'll be like this: - * --> $this->tpldata[.][0][varname] == value - * - * @var array - */ - private $tpldata = array('.' => array(0 => array())); - - /** - * @var array Reference to template->tpldata['.'][0] - */ - private $rootref; - - public function __construct() - { - $this->clear(); - } - - /** - * Clears template data set. - */ - public function clear() - { - $this->tpldata = array('.' => array(0 => array())); - $this->rootref = &$this->tpldata['.'][0]; - } - - /** - * Assign a single scalar value to a single key. - * - * Value can be a string, an integer or a boolean. - * - * @param string $varname Variable name - * @param string $varval Value to assign to variable - */ - public function assign_var($varname, $varval) - { - $this->rootref[$varname] = $varval; - - return true; - } - - /** - * Append text to the string value stored in a key. - * - * Text is appended using the string concatenation operator (.). - * - * @param string $varname Variable name - * @param string $varval Value to append to variable - */ - public function append_var($varname, $varval) - { - $this->rootref[$varname] = (isset($this->rootref[$varname]) ? $this->rootref[$varname] : '') . $varval; - - return true; - } - - /** - * Returns a reference to template data array. - * - * This function is public so that template renderer may invoke it. - * Users should alter template variables via functions in phpbb_style_template. - * - * Note: modifying returned array will affect data stored in the context. - * - * @return array template data - */ - public function &get_data_ref() - { - // returning a reference directly is not - // something php is capable of doing - $ref = &$this->tpldata; - return $ref; - } - - /** - * Returns a reference to template root scope. - * - * This function is public so that template renderer may invoke it. - * Users should not need to invoke this function. - * - * Note: modifying returned array will affect data stored in the context. - * - * @return array template data - */ - public function &get_root_ref() - { - // rootref is already a reference - return $this->rootref; - } - - /** - * Assign key variable pairs from an array to a specified block - * - * @param string $blockname Name of block to assign $vararray to - * @param array $vararray A hash of variable name => value pairs - */ - public function assign_block_vars($blockname, array $vararray) - { - if (strpos($blockname, '.') !== false) - { - // Nested block. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - $str = &$this->tpldata; - for ($i = 0; $i < $blockcount; $i++) - { - $str = &$str[$blocks[$i]]; - $str = &$str[sizeof($str) - 1]; - } - - $s_row_count = isset($str[$blocks[$blockcount]]) ? sizeof($str[$blocks[$blockcount]]) : 0; - $vararray['S_ROW_COUNT'] = $s_row_count; - - // Assign S_FIRST_ROW - if (!$s_row_count) - { - $vararray['S_FIRST_ROW'] = true; - } - - // Now the tricky part, we always assign S_LAST_ROW and remove the entry before - // This is much more clever than going through the complete template data on display (phew) - $vararray['S_LAST_ROW'] = true; - if ($s_row_count > 0) - { - unset($str[$blocks[$blockcount]][($s_row_count - 1)]['S_LAST_ROW']); - } - - // Now we add the block that we're actually assigning to. - // We're adding a new iteration to this block with the given - // variable assignments. - $str[$blocks[$blockcount]][] = $vararray; - } - else - { - // Top-level block. - $s_row_count = (isset($this->tpldata[$blockname])) ? sizeof($this->tpldata[$blockname]) : 0; - $vararray['S_ROW_COUNT'] = $s_row_count; - - // Assign S_FIRST_ROW - if (!$s_row_count) - { - $vararray['S_FIRST_ROW'] = true; - } - - // We always assign S_LAST_ROW and remove the entry before - $vararray['S_LAST_ROW'] = true; - if ($s_row_count > 0) - { - unset($this->tpldata[$blockname][($s_row_count - 1)]['S_LAST_ROW']); - } - - // Add a new iteration to this block with the variable assignments we were given. - $this->tpldata[$blockname][] = $vararray; - } - - return true; - } - - /** - * Change already assigned key variable pair (one-dimensional - single loop entry) - * - * An example of how to use this function: - * {@example alter_block_array.php} - * - * @param string $blockname the blockname, for example 'loop' - * @param array $vararray the var array to insert/add or merge - * @param mixed $key Key to search for - * - * array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position] - * - * int: Position [the position to change or insert at directly given] - * - * If key is false the position is set to 0 - * If key is true the position is set to the last entry - * - * @param string $mode Mode to execute (valid modes are 'insert' and 'change') - * - * If insert, the vararray is inserted at the given position (position counting from zero). - * If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value). - * - * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) - * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) - * - * @return bool false on error, true on success - */ - public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') - { - if (strpos($blockname, '.') !== false) - { - // Nested block. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - $block = &$this->tpldata; - for ($i = 0; $i < $blockcount; $i++) - { - if (($pos = strpos($blocks[$i], '[')) !== false) - { - $name = substr($blocks[$i], 0, $pos); - - if (strpos($blocks[$i], '[]') === $pos) - { - $index = sizeof($block[$name]) - 1; - } - else - { - $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1); - } - } - else - { - $name = $blocks[$i]; - $index = sizeof($block[$name]) - 1; - } - $block = &$block[$name]; - $block = &$block[$index]; - } - - $block = &$block[$blocks[$i]]; // Traverse the last block - } - else - { - // Top-level block. - $block = &$this->tpldata[$blockname]; - } - - // Change key to zero (change first position) if false and to last position if true - if ($key === false || $key === true) - { - $key = ($key === false) ? 0 : sizeof($block); - } - - // Get correct position if array given - if (is_array($key)) - { - // Search array to get correct position - list($search_key, $search_value) = @each($key); - - $key = NULL; - foreach ($block as $i => $val_ary) - { - if ($val_ary[$search_key] === $search_value) - { - $key = $i; - break; - } - } - - // key/value pair not found - if ($key === NULL) - { - return false; - } - } - - // Insert Block - if ($mode == 'insert') - { - // Make sure we are not exceeding the last iteration - if ($key >= sizeof($this->tpldata[$blockname])) - { - $key = sizeof($this->tpldata[$blockname]); - unset($this->tpldata[$blockname][($key - 1)]['S_LAST_ROW']); - $vararray['S_LAST_ROW'] = true; - } - else if ($key === 0) - { - unset($this->tpldata[$blockname][0]['S_FIRST_ROW']); - $vararray['S_FIRST_ROW'] = true; - } - - // Re-position template blocks - for ($i = sizeof($block); $i > $key; $i--) - { - $block[$i] = $block[$i-1]; - } - - // Insert vararray at given position - $block[$key] = $vararray; - - return true; - } - - // Which block to change? - if ($mode == 'change') - { - if ($key == sizeof($block)) - { - $key--; - } - - $block[$key] = array_merge($block[$key], $vararray); - - return true; - } - - return false; - } - - /** - * Reset/empty complete block - * - * @param string $blockname Name of block to destroy - */ - public function destroy_block_vars($blockname) - { - if (strpos($blockname, '.') !== false) - { - // Nested block. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - $str = &$this->tpldata; - for ($i = 0; $i < $blockcount; $i++) - { - $str = &$str[$blocks[$i]]; - $str = &$str[sizeof($str) - 1]; - } - - unset($str[$blocks[$blockcount]]); - } - else - { - // Top-level block. - unset($this->tpldata[$blockname]); - } - - return true; - } -} diff --git a/phpBB/includes/style/template_filter.php b/phpBB/includes/style/template_filter.php deleted file mode 100644 index 6ef9d80a3d..0000000000 --- a/phpBB/includes/style/template_filter.php +++ /dev/null @@ -1,1028 +0,0 @@ -'; - - const REGEX_TOKENS = '~|{((?:[a-z_][a-z_0-9]+\.)*\\$?[A-Z][A-Z_0-9]+)}~'; - - /** - * @var array - */ - private $block_names = array(); - - /** - * @var array - */ - private $block_else_level = array(); - - /** - * @var string - */ - private $chunk; - - /** - * @var bool - */ - private $in_php; - - /** - * Whether inline PHP code, and tags - * are allowed. If this is false all PHP code will be silently - * removed from the template during compilation. - * - * @var bool - */ - private $allow_php; - - /** - * Resource locator. - * - * @var phpbb_template_locator - */ - private $locator; - - /** - * @var string phpBB root path - */ - private $phpbb_root_path; - - /** - * Stream filter - * - * Is invoked for evey chunk of the stream, allowing us - * to work on a chunk at a time, which saves memory. - */ - public function filter($in, $out, &$consumed, $closing) - { - $written = false; - $first = false; - - while ($bucket = stream_bucket_make_writeable($in)) - { - $consumed += $bucket->datalen; - - $data = $this->chunk . $bucket->data; - $last_nl = strrpos($data, "\n"); - $this->chunk = substr($data, $last_nl); - $data = substr($data, 0, $last_nl); - - if (!strlen($data)) - { - continue; - } - - $written = true; - - $data = $this->compile($data); - if (!$first) - { - $data = $this->prepend_preamble($data); - $first = false; - } - $bucket->data = $data; - $bucket->datalen = strlen($bucket->data); - stream_bucket_append($out, $bucket); - } - - if ($closing && strlen($this->chunk)) - { - $written = true; - $bucket = stream_bucket_new($this->stream, $this->compile($this->chunk)); - stream_bucket_append($out, $bucket); - } - - return $written ? PSFS_PASS_ON : PSFS_FEED_ME; - } - - /** - * Initializer, called on creation. - * - * Get the allow_php option, root directory and locator from params, - * which are passed to stream_filter_append. - */ - public function onCreate() - { - $this->chunk = ''; - $this->in_php = false; - $this->allow_php = $this->params['allow_php']; - $this->locator = $this->params['locator']; - $this->phpbb_root_path = $this->params['phpbb_root_path']; - return true; - } - - /** - * Compiles a chunk of template. - * - * The chunk must comprise of one or more complete lines from the source - * template. - * - * @param string $data Chunk of source template to compile - * @return string Compiled PHP/HTML code - */ - private function compile($data) - { - $block_start_in_php = $this->in_php; - - $data = preg_replace('#<(?:[\\?%]|script)#s', '', $data); - $data = preg_replace_callback(self::REGEX_TOKENS, array($this, 'replace'), $data); - - // Remove php - if (!$this->allow_php) - { - if ($block_start_in_php - && $this->in_php - && strpos($data, '') === false - && strpos($data, '') === false) - { - // This is just php code - return ''; - } - $data = preg_replace('~^.*?~', '', $data); - $data = preg_replace('~.*?~', '', $data); - $data = preg_replace('~.*?$~', '', $data); - } - - /* - Preserve whitespace. - PHP removes a newline after the closing tag (if it's there). This is by design. - - - Consider the following template: - - - some content - - - If we were to simply preserve all whitespace, we could simply replace all "?>" tags - with "?>\n". - Doing that, would add additional newlines to the compiled tempalte in place of the - IF and ENDIF statements. These newlines are unwanted (and one is conditional). - The IF and ENDIF are usually on their own line for ease of reading. - - This replacement preserves newlines only for statements that aren't the only statement on a line. - It will NOT preserve newlines at the end of statements in the above examle. - It will preserve newlines in situations like: - - inline content - - - */ - - $data = preg_replace('~(?).)+(?)$~m', "$1\n", $data); - $data = str_replace('/**/?>', "?>\n", $data); - $data = str_replace('?>' . $data); - return $data; - } - - /** - * Callback for replacing matched tokens with PHP code - * - * @param array $matches Regular expression matches - * @return string compiled template code - */ - private function replace($matches) - { - if ($this->in_php && $matches[1] != 'ENDPHP') - { - return ''; - } - - if (isset($matches[3])) - { - return $this->compile_var_tags($matches[0]); - } - - switch ($matches[1]) - { - case 'BEGIN': - $this->block_else_level[] = false; - return 'compile_tag_block($matches[2]) . ' ?>'; - break; - - case 'BEGINELSE': - $this->block_else_level[sizeof($this->block_else_level) - 1] = true; - return ''; - break; - - case 'END': - array_pop($this->block_names); - return 'block_else_level)) ? '}' : '}}') . ' ?>'; - break; - - case 'IF': - return 'compile_tag_if($matches[2], false) . ' ?>'; - break; - - case 'ELSE': - return ''; - break; - - case 'ELSEIF': - return 'compile_tag_if($matches[2], true) . ' ?>'; - break; - - case 'ENDIF': - return ''; - break; - - case 'DEFINE': - return 'compile_tag_define($matches[2], true) . ' ?>'; - break; - - case 'UNDEFINE': - return 'compile_tag_define($matches[2], false) . ' ?>'; - break; - - case 'INCLUDE': - return 'compile_tag_include($matches[2]) . ' ?>'; - break; - - case 'INCLUDEPHP': - return ($this->allow_php) ? 'compile_tag_include_php($matches[2]) . ' ?>' : ''; - break; - - case 'INCLUDEJS': - return 'compile_tag_include_js($matches[2]) . ' ?>'; - break; - - case 'PHP': - if ($this->allow_php) - { - $this->in_php = true; - return ''; - break; - - case 'ENDPHP': - if ($this->allow_php) - { - $this->in_php = false; - return ' ?>'; - } - return ''; - break; - - default: - return $matches[0]; - break; - - } - return ''; - } - - /** - * Convert template variables into PHP varrefs - * - * @param string $text_blocks Variable reference in source template - * @param bool $is_expr Returns whether the source was an expression type variable (i.e. S_FIRST_ROW) - * @return string PHP variable name - */ - private function get_varref($text_blocks, &$is_expr) - { - // change template varrefs into PHP varrefs - $varrefs = array(); - - // This one will handle varrefs WITH namespaces - preg_match_all('#\{((?:' . self::REGEX_NS . '\.)+)(\$)?(' . self::REGEX_VAR . ')\}#', $text_blocks, $varrefs, PREG_SET_ORDER); - - foreach ($varrefs as $var_val) - { - $namespace = $var_val[1]; - $varname = $var_val[3]; - $new = $this->generate_block_varref($namespace, $varname, $is_expr, $var_val[2]); - - $text_blocks = str_replace($var_val[0], $new, $text_blocks); - } - - // Language variables cannot be reduced to a single varref, so they must be skipped - // These two replacements would break language variables, so we can only run them on non-language types - if (strpos($text_blocks, '{L_') === false && strpos($text_blocks, '{LA_') === false) - { - // This will handle the remaining root-level varrefs - $text_blocks = preg_replace('#\{(' . self::REGEX_VAR . ')\}#', "\$_rootref['\\1']", $text_blocks); - $text_blocks = preg_replace('#\{\$(' . self::REGEX_VAR . ')\}#', "\$_tpldata['DEFINE']['.']['\\1']", $text_blocks); - } - - return $text_blocks; - } - - /** - * Compile variables - * - * @param string $text_blocks Variable reference in source template - * @return string compiled template code - */ - private function compile_var_tags(&$text_blocks) - { - $text_blocks = $this->get_varref($text_blocks, $is_expr); - $lang_replaced = $this->compile_language_tags($text_blocks); - - if(!$lang_replaced) - { - $text_blocks = ''; - } - - return $text_blocks; - } - - /** - * Handles special language tags L_ and LA_ - * - * @param string $text_blocks Variable reference in source template - * @return bool Whether a replacement occurred or not - */ - private function compile_language_tags(&$text_blocks) - { - $replacements = 0; - - // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array - if (strpos($text_blocks, '{L_') !== false) - { - $text_blocks = preg_replace('#\{L_(' . self::REGEX_VAR_SUFFIX . ')\}#', "", $text_blocks, -1, $replacements); - return (bool) $replacements; - } - - // Handle addslashed language variables prefixed with LA_ - // If a template variable already exist, it will be used in favor of it... - if (strpos($text_blocks, '{LA_') !== false) - { - $text_blocks = preg_replace('#\{LA_(' . self::REGEX_VAR_SUFFIX . '+)\}#', "", $text_blocks, -1, $replacements); - return (bool) $replacements; - } - - return false; - } - - /** - * Compile blocks - * - * @param string $tag_args Block contents in source template - * @return string compiled template code - */ - private function compile_tag_block($tag_args) - { - $no_nesting = false; - - // Is the designer wanting to call another loop in a loop? - // - // - // - // - // 'loop2' is actually on the same nesting level as 'loop' you assign - // variables to it with template->assign_block_vars('loop2', array(...)) - if (strpos($tag_args, '!') === 0) - { - // Count the number if ! occurrences (not allowed in vars) - $no_nesting = substr_count($tag_args, '!'); - $tag_args = substr($tag_args, $no_nesting); - } - - // Allow for control of looping (indexes start from zero): - // foo(2) : Will start the loop on the 3rd entry - // foo(-2) : Will start the loop two entries from the end - // foo(3,4) : Will start the loop on the fourth entry and end it on the fifth - // foo(3,-4) : Will start the loop on the fourth entry and end it four from last - $match = array(); - - if (preg_match('#^([^()]*)\(([\-\d]+)(?:,([\-\d]+))?\)$#', $tag_args, $match)) - { - $tag_args = $match[1]; - - if ($match[2] < 0) - { - $loop_start = '($_' . $tag_args . '_count ' . $match[2] . ' < 0 ? 0 : $_' . $tag_args . '_count ' . $match[2] . ')'; - } - else - { - $loop_start = '($_' . $tag_args . '_count < ' . $match[2] . ' ? $_' . $tag_args . '_count : ' . $match[2] . ')'; - } - - if (!isset($match[3]) || strlen($match[3]) < 1 || $match[3] == -1) - { - $loop_end = '$_' . $tag_args . '_count'; - } - else if ($match[3] >= 0) - { - $loop_end = '(' . ($match[3] + 1) . ' > $_' . $tag_args . '_count ? $_' . $tag_args . '_count : ' . ($match[3] + 1) . ')'; - } - else //if ($match[3] < -1) - { - $loop_end = '$_' . $tag_args . '_count' . ($match[3] + 1); - } - } - else - { - $loop_start = 0; - $loop_end = '$_' . $tag_args . '_count'; - } - - $tag_template_php = ''; - array_push($this->block_names, $tag_args); - - if ($no_nesting !== false) - { - // We need to implode $no_nesting times from the end... - $block = array_slice($this->block_names, -$no_nesting); - } - else - { - $block = $this->block_names; - } - - if (sizeof($block) < 2) - { - // Block is not nested. - $tag_template_php = '$_' . $tag_args . "_count = (isset(\$_tpldata['$tag_args'])) ? sizeof(\$_tpldata['$tag_args']) : 0;"; - $varref = "\$_tpldata['$tag_args']"; - } - else - { - // This block is nested. - // Generate a namespace string for this block. - $namespace = implode('.', $block); - - // Get a reference to the data array for this block that depends on the - // current indices of all parent blocks. - $varref = $this->generate_block_data_ref($namespace, false); - - // Create the for loop code to iterate over this block. - $tag_template_php = '$_' . $tag_args . '_count = (isset(' . $varref . ')) ? sizeof(' . $varref . ') : 0;'; - } - - $tag_template_php .= 'if ($_' . $tag_args . '_count) {'; - - /** - * The following uses foreach for iteration instead of a for loop, foreach is faster but requires PHP to make a copy of the contents of the array which uses more memory - * - * if (!$offset) - * { - * $tag_template_php .= 'foreach (' . $varref . ' as $_' . $tag_args . '_i => $_' . $tag_args . '_val){'; - * } - * - */ - - $tag_template_php .= 'for ($_' . $tag_args . '_i = ' . $loop_start . '; $_' . $tag_args . '_i < ' . $loop_end . '; ++$_' . $tag_args . '_i){'; - $tag_template_php .= '$_' . $tag_args . '_val = &' . $varref . '[$_' . $tag_args . '_i];'; - - return $tag_template_php; - } - - /** - * Compile a general expression - much of this is from Smarty with - * some adaptions for our block level methods - * - * @param string $tag_args Expression (tag arguments) in source template - * @return string compiled template code - */ - private function compile_expression($tag_args) - { - $match = array(); - preg_match_all('/(?: - "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" | - \'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' | - [(),] | - [^\s(),]+)/x', $tag_args, $match); - - $tokens = $match[0]; - $is_arg_stack = array(); - - for ($i = 0, $size = sizeof($tokens); $i < $size; $i++) - { - $token = &$tokens[$i]; - - switch ($token) - { - case '!==': - case '===': - case '<<': - case '>>': - case '|': - case '^': - case '&': - case '~': - case ')': - case ',': - case '+': - case '-': - case '*': - case '/': - case '@': - break; - - case '==': - case 'eq': - $token = '=='; - break; - - case '!=': - case '<>': - case 'ne': - case 'neq': - $token = '!='; - break; - - case '<': - case 'lt': - $token = '<'; - break; - - case '<=': - case 'le': - case 'lte': - $token = '<='; - break; - - case '>': - case 'gt': - $token = '>'; - break; - - case '>=': - case 'ge': - case 'gte': - $token = '>='; - break; - - case '&&': - case 'and': - $token = '&&'; - break; - - case '||': - case 'or': - $token = '||'; - break; - - case '!': - case 'not': - $token = '!'; - break; - - case '%': - case 'mod': - $token = '%'; - break; - - case '(': - array_push($is_arg_stack, $i); - break; - - case 'is': - $is_arg_start = ($tokens[$i-1] == ')') ? array_pop($is_arg_stack) : $i-1; - $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); - - $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); - - array_splice($tokens, $is_arg_start, sizeof($tokens), $new_tokens); - - $i = $is_arg_start; - - // no break - - default: - $varrefs = array(); - if (preg_match('#^((?:' . self::REGEX_NS . '\.)+)?(\$)?(?=[A-Z])([A-Z0-9\-_]+)#s', $token, $varrefs)) - { - if (!empty($varrefs[1])) - { - $namespace = substr($varrefs[1], 0, -1); - $dot_pos = strrchr($namespace, '.'); - if ($dot_pos !== false) - { - $namespace = substr($dot_pos, 1); - } - - // S_ROW_COUNT is deceptive, it returns the current row number not the number of rows - // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM - switch ($varrefs[3]) - { - case 'S_ROW_NUM': - case 'S_ROW_COUNT': - $token = "\$_${namespace}_i"; - break; - - case 'S_NUM_ROWS': - $token = "\$_${namespace}_count"; - break; - - case 'S_FIRST_ROW': - $token = "(\$_${namespace}_i == 0)"; - break; - - case 'S_LAST_ROW': - $token = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; - break; - - case 'S_BLOCK_NAME': - $token = "'$namespace'"; - break; - - default: - $token = $this->generate_block_data_ref(substr($varrefs[1], 0, -1), true, $varrefs[2]) . '[\'' . $varrefs[3] . '\']'; - $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; - break; - } - } - else - { - $token = ($varrefs[2]) ? '$_tpldata[\'DEFINE\'][\'.\'][\'' . $varrefs[3] . '\']' : '$_rootref[\'' . $varrefs[3] . '\']'; - $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; - } - - } - else if (preg_match('#^\.((?:' . self::REGEX_NS . '\.?)+)$#s', $token, $varrefs)) - { - // Allow checking if loops are set with .loopname - // It is also possible to check the loop count by doing for example - $blocks = explode('.', $varrefs[1]); - - // If the block is nested, we have a reference that we can grab. - // If the block is not nested, we just go and grab the block from _tpldata - if (sizeof($blocks) > 1) - { - $block = array_pop($blocks); - $namespace = implode('.', $blocks); - $varref = $this->generate_block_data_ref($namespace, true); - - // Add the block reference for the last child. - $varref .= "['" . $block . "']"; - } - else - { - $varref = '$_tpldata'; - - // Add the block reference for the last child. - $varref .= "['" . $blocks[0] . "']"; - } - $token = "(isset($varref) ? sizeof($varref) : 0)"; - } - - break; - } - } - - return $tokens; - } - - /** - * Compile IF tags - * - * @param string $tag_args Expression given with IF in source template - * @param bool $elseif True if compiling an IF tag, false if compiling an ELSEIF tag - * @return string compiled template code - */ - private function compile_tag_if($tag_args, $elseif) - { - $tokens = $this->compile_expression($tag_args); - - $tpl = ($elseif) ? '} else if (' : 'if ('; - - $tpl .= implode(' ', $tokens); - $tpl .= ') { '; - - return $tpl; - } - - /** - * Compile DEFINE tags - * - * @param string $tag_args Expression given with DEFINE in source template - * @param bool $op True if compiling a DEFINE tag, false if compiling an UNDEFINE tag - * @return string compiled template code - */ - private function compile_tag_define($tag_args, $op) - { - $match = array(); - preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (.*?))?$#', $tag_args, $match); - - if (empty($match[2]) || (!isset($match[3]) && $op)) - { - return ''; - } - - if (!$op) - { - return 'unset(' . (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ');'; - } - - $parsed_statement = implode(' ', $this->compile_expression($match[3])); - - return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $parsed_statement . ';'; - } - - /** - * Compile INCLUDE tag - * - * @param string $tag_args Expression given with INCLUDE in source template - * @return string compiled template code - */ - private function compile_tag_include($tag_args) - { - // Process dynamic includes - if ($tag_args[0] == '{') - { - $var = $this->get_varref($tag_args, $is_expr); - - // Make sure someone didn't try to include S_FIRST_ROW or similar - if (!$is_expr) - { - return "if (isset($var)) { \$_template->_tpl_include($var); }"; - } - } - - return "\$_template->_tpl_include('$tag_args');"; - } - - /** - * Compile INCLUDE_PHP tag - * - * @param string $tag_args Expression given with INCLUDEPHP in source template - * @return string compiled template code - */ - private function compile_tag_include_php($tag_args) - { - return "\$_template->_php_include('$tag_args');"; - } - - /** - * parse expression - * This is from Smarty - */ - private function _parse_is_expr($is_arg, $tokens) - { - $expr_end = 0; - $negate_expr = false; - - if (($first_token = array_shift($tokens)) == 'not') - { - $negate_expr = true; - $expr_type = array_shift($tokens); - } - else - { - $expr_type = $first_token; - } - - switch ($expr_type) - { - case 'even': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!(($is_arg / $expr_arg) & 1)"; - } - else - { - $expr = "!($is_arg & 1)"; - } - break; - - case 'odd': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "(($is_arg / $expr_arg) & 1)"; - } - else - { - $expr = "($is_arg & 1)"; - } - break; - - case 'div': - if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') - { - $expr_end++; - $expr_arg = $tokens[$expr_end++]; - $expr = "!($is_arg % $expr_arg)"; - } - break; - } - - if ($negate_expr) - { - if ($expr[0] == '!') - { - // Negated expression, de-negate it. - $expr = substr($expr, 1); - } - else - { - $expr = "!($expr)"; - } - } - - array_splice($tokens, 0, $expr_end, $expr); - - return $tokens; - } - - /** - * Compile INCLUDEJS tag - * - * @param string $tag_args Expression given with INCLUDEJS in source template - * @return string compiled template code - */ - private function compile_tag_include_js($tag_args) - { - // Process dynamic includes - if ($tag_args[0] == '{') - { - $var = $this->get_varref($tag_args, $is_expr); - if (!$is_expr) - { - return " \$_template->_js_include($var, true);"; - } - return ''; - } - - // Locate file - $filename = $this->locator->get_first_file_location(array($tag_args), false, true); - - if ($filename === false) - { - // File does not exist, find it during run time - return ' $_template->_js_include(\'' . addslashes($tag_args) . '\', true); '; - } - - if (substr($filename, 0, strlen($this->phpbb_root_path)) != $this->phpbb_root_path) - { - // Absolute path, include as is - return ' $_template->_js_include(\'' . addslashes($filename) . '\', false); '; - } - - // Relative path, remove root path from it - $filename = substr($filename, strlen($this->phpbb_root_path)); - return ' global $phpbb_root_path; $_template->_js_include($phpbb_root_path . \'' . addslashes($filename) . '\', false); '; - } - - /** - * Generates a reference to the given variable inside the given (possibly nested) - * block namespace. This is a string of the form: - * ' . $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . ' - * It's ready to be inserted into an "echo" line in one of the templates. - * - * @param string $namespace Namespace to access (expects a trailing "." on the namespace) - * @param string $varname Variable name to use - * @param bool $expr Returns whether the source was an expression type - * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable - * @return string Code to access variable or echo it if $echo is true - */ - private function generate_block_varref($namespace, $varname, &$expr, $defop = false) - { - // Strip the trailing period. - $namespace = substr($namespace, 0, -1); - - if (($pos = strrpos($namespace, '.')) !== false) - { - $local_namespace = substr($namespace, $pos + 1); - } - else - { - $local_namespace = $namespace; - } - - $expr = true; - - // S_ROW_COUNT is deceptive, it returns the current row number now the number of rows - // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM - switch ($varname) - { - case 'S_ROW_NUM': - case 'S_ROW_COUNT': - $varref = "\$_${local_namespace}_i"; - break; - - case 'S_NUM_ROWS': - $varref = "\$_${local_namespace}_count"; - break; - - case 'S_FIRST_ROW': - $varref = "(\$_${local_namespace}_i == 0)"; - break; - - case 'S_LAST_ROW': - $varref = "(\$_${local_namespace}_i == \$_${local_namespace}_count - 1)"; - break; - - case 'S_BLOCK_NAME': - $varref = "'$local_namespace'"; - break; - - default: - // Get a reference to the data block for this namespace. - $varref = $this->generate_block_data_ref($namespace, true, $defop); - // Prepend the necessary code to stick this in an echo line. - - // Append the variable reference. - $varref .= "['$varname']"; - - $expr = false; - break; - } - // @todo Test the !$expr more - - return $varref; - } - - /** - * Generates a reference to the array of data values for the given - * (possibly nested) block namespace. This is a string of the form: - * $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['$childN'] - * - * @param string $blockname Block to access (does not expect a trailing "." on the blockname) - * @param bool $include_last_iterator If $include_last_iterator is true, then [$_childN_i] will be appended to the form shown above. - * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable - * @return string Code to access variable - */ - private function generate_block_data_ref($blockname, $include_last_iterator, $defop = false) - { - // Get an array of the blocks involved. - $blocks = explode('.', $blockname); - $blockcount = sizeof($blocks) - 1; - - // DEFINE is not an element of any referenced variable, we must use _tpldata to access it - if ($defop) - { - $varref = '$_tpldata[\'DEFINE\']'; - // Build up the string with everything but the last child. - for ($i = 0; $i < $blockcount; $i++) - { - $varref .= "['" . $blocks[$i] . "'][\$_" . $blocks[$i] . '_i]'; - } - // Add the block reference for the last child. - $varref .= "['" . $blocks[$blockcount] . "']"; - // Add the iterator for the last child if requried. - if ($include_last_iterator) - { - $varref .= '[$_' . $blocks[$blockcount] . '_i]'; - } - return $varref; - } - else if ($include_last_iterator) - { - return '$_'. $blocks[$blockcount] . '_val'; - } - else - { - return '$_'. $blocks[$blockcount - 1] . '_val[\''. $blocks[$blockcount]. '\']'; - } - } -} diff --git a/phpBB/includes/style/template_renderer.php b/phpBB/includes/style/template_renderer.php deleted file mode 100644 index bd2a786e86..0000000000 --- a/phpBB/includes/style/template_renderer.php +++ /dev/null @@ -1,35 +0,0 @@ -code = $code; - $this->template = $template; - } - - /** - * Displays the template managed by this renderer by eval'ing php code - * of the template. - * - * @param phpbb_style_template_context $context Template context to use - * @param array $lang Language entries to use - */ - public function render($context, $lang) - { - $_template = $this->template; - $_tpldata = &$context->get_data_ref(); - $_rootref = &$context->get_root_ref(); - $_lang = $lang; - - eval(' ?>' . $this->code . 'path = $path; - $this->template = $template; - } - - /** - * Displays the template managed by this renderer by including - * the php file containing the template. - * - * @param phpbb_style_template_context $context Template context to use - * @param array $lang Language entries to use - */ - public function render($context, $lang) - { - $_template = $this->template; - $_tpldata = &$context->get_data_ref(); - $_rootref = &$context->get_root_ref(); - $_lang = $lang; - - include($this->path); - } -} diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php new file mode 100644 index 0000000000..fa0928f424 --- /dev/null +++ b/phpBB/includes/template/compile.php @@ -0,0 +1,128 @@ +filter_params = array( + 'allow_php' => $allow_php, + 'locator' => $locator, + 'phpbb_root_path' => $phpbb_root_path + ); + } + + /** + * Compiles template in $source_file and writes compiled template to + * cache directory + * + * @param string $handle Template handle to compile + * @param string $source_file Source template file + * @return bool Return true on success otherwise false + */ + public function compile_file_to_file($source_file, $compiled_file) + { + $source_handle = @fopen($source_file, 'rb'); + $destination_handle = @fopen($compiled_file, 'wb'); + + if (!$source_handle || !$destination_handle) + { + return false; + } + + @flock($destination_handle, LOCK_EX); + + $this->compile_stream_to_stream($source_handle, $destination_handle); + + @fclose($source_handle); + @flock($destination_handle, LOCK_UN); + @fclose($destination_handle); + + phpbb_chmod($compiled_file, CHMOD_READ | CHMOD_WRITE); + + clearstatcache(); + + return true; + } + + /** + * Compiles a template located at $source_file. + * + * Returns PHP source suitable for eval(). + * + * @param string $source_file Source template file + * @return string|bool Return compiled code on successful compilation otherwise false + */ + public function compile_file($source_file) + { + $source_handle = @fopen($source_file, 'rb'); + $destination_handle = @fopen('php://temp' ,'r+b'); + + if (!$source_handle || !$destination_handle) + { + return false; + } + + $this->compile_stream_to_stream($source_handle, $destination_handle); + + @fclose($source_handle); + + rewind($destination_handle); + $contents = stream_get_contents($destination_handle); + @fclose($dest_handle); + + return $contents; + } + + /** + * Compiles contents of $source_stream into $dest_stream. + * + * A stream filter is appended to $source_stream as part of the + * process. + * + * @param resource $source_stream Source stream + * @param resource $dest_stream Destination stream + * @return void + */ + private function compile_stream_to_stream($source_stream, $dest_stream) + { + stream_filter_append($source_stream, 'phpbb_template', null, $this->filter_params); + stream_copy_to_stream($source_stream, $dest_stream); + } +} diff --git a/phpBB/includes/template/context.php b/phpBB/includes/template/context.php new file mode 100644 index 0000000000..b22f77da2e --- /dev/null +++ b/phpBB/includes/template/context.php @@ -0,0 +1,359 @@ + $this->tpldata[block][iteration#][child][iteration#][child2][iteration#][variablename] == value + * if it's a root-level variable, it'll be like this: + * --> $this->tpldata[.][0][varname] == value + * + * @var array + */ + private $tpldata = array('.' => array(0 => array())); + + /** + * @var array Reference to template->tpldata['.'][0] + */ + private $rootref; + + public function __construct() + { + $this->clear(); + } + + /** + * Clears template data set. + */ + public function clear() + { + $this->tpldata = array('.' => array(0 => array())); + $this->rootref = &$this->tpldata['.'][0]; + } + + /** + * Assign a single scalar value to a single key. + * + * Value can be a string, an integer or a boolean. + * + * @param string $varname Variable name + * @param string $varval Value to assign to variable + */ + public function assign_var($varname, $varval) + { + $this->rootref[$varname] = $varval; + + return true; + } + + /** + * Append text to the string value stored in a key. + * + * Text is appended using the string concatenation operator (.). + * + * @param string $varname Variable name + * @param string $varval Value to append to variable + */ + public function append_var($varname, $varval) + { + $this->rootref[$varname] = (isset($this->rootref[$varname]) ? $this->rootref[$varname] : '') . $varval; + + return true; + } + + /** + * Returns a reference to template data array. + * + * This function is public so that template renderer may invoke it. + * Users should alter template variables via functions in phpbb_style_template. + * + * Note: modifying returned array will affect data stored in the context. + * + * @return array template data + */ + public function &get_data_ref() + { + // returning a reference directly is not + // something php is capable of doing + $ref = &$this->tpldata; + return $ref; + } + + /** + * Returns a reference to template root scope. + * + * This function is public so that template renderer may invoke it. + * Users should not need to invoke this function. + * + * Note: modifying returned array will affect data stored in the context. + * + * @return array template data + */ + public function &get_root_ref() + { + // rootref is already a reference + return $this->rootref; + } + + /** + * Assign key variable pairs from an array to a specified block + * + * @param string $blockname Name of block to assign $vararray to + * @param array $vararray A hash of variable name => value pairs + */ + public function assign_block_vars($blockname, array $vararray) + { + if (strpos($blockname, '.') !== false) + { + // Nested block. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $str = &$this->tpldata; + for ($i = 0; $i < $blockcount; $i++) + { + $str = &$str[$blocks[$i]]; + $str = &$str[sizeof($str) - 1]; + } + + $s_row_count = isset($str[$blocks[$blockcount]]) ? sizeof($str[$blocks[$blockcount]]) : 0; + $vararray['S_ROW_COUNT'] = $s_row_count; + + // Assign S_FIRST_ROW + if (!$s_row_count) + { + $vararray['S_FIRST_ROW'] = true; + } + + // Now the tricky part, we always assign S_LAST_ROW and remove the entry before + // This is much more clever than going through the complete template data on display (phew) + $vararray['S_LAST_ROW'] = true; + if ($s_row_count > 0) + { + unset($str[$blocks[$blockcount]][($s_row_count - 1)]['S_LAST_ROW']); + } + + // Now we add the block that we're actually assigning to. + // We're adding a new iteration to this block with the given + // variable assignments. + $str[$blocks[$blockcount]][] = $vararray; + } + else + { + // Top-level block. + $s_row_count = (isset($this->tpldata[$blockname])) ? sizeof($this->tpldata[$blockname]) : 0; + $vararray['S_ROW_COUNT'] = $s_row_count; + + // Assign S_FIRST_ROW + if (!$s_row_count) + { + $vararray['S_FIRST_ROW'] = true; + } + + // We always assign S_LAST_ROW and remove the entry before + $vararray['S_LAST_ROW'] = true; + if ($s_row_count > 0) + { + unset($this->tpldata[$blockname][($s_row_count - 1)]['S_LAST_ROW']); + } + + // Add a new iteration to this block with the variable assignments we were given. + $this->tpldata[$blockname][] = $vararray; + } + + return true; + } + + /** + * Change already assigned key variable pair (one-dimensional - single loop entry) + * + * An example of how to use this function: + * {@example alter_block_array.php} + * + * @param string $blockname the blockname, for example 'loop' + * @param array $vararray the var array to insert/add or merge + * @param mixed $key Key to search for + * + * array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position] + * + * int: Position [the position to change or insert at directly given] + * + * If key is false the position is set to 0 + * If key is true the position is set to the last entry + * + * @param string $mode Mode to execute (valid modes are 'insert' and 'change') + * + * If insert, the vararray is inserted at the given position (position counting from zero). + * If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value). + * + * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) + * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) + * + * @return bool false on error, true on success + */ + public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') + { + if (strpos($blockname, '.') !== false) + { + // Nested block. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $block = &$this->tpldata; + for ($i = 0; $i < $blockcount; $i++) + { + if (($pos = strpos($blocks[$i], '[')) !== false) + { + $name = substr($blocks[$i], 0, $pos); + + if (strpos($blocks[$i], '[]') === $pos) + { + $index = sizeof($block[$name]) - 1; + } + else + { + $index = min((int) substr($blocks[$i], $pos + 1, -1), sizeof($block[$name]) - 1); + } + } + else + { + $name = $blocks[$i]; + $index = sizeof($block[$name]) - 1; + } + $block = &$block[$name]; + $block = &$block[$index]; + } + + $block = &$block[$blocks[$i]]; // Traverse the last block + } + else + { + // Top-level block. + $block = &$this->tpldata[$blockname]; + } + + // Change key to zero (change first position) if false and to last position if true + if ($key === false || $key === true) + { + $key = ($key === false) ? 0 : sizeof($block); + } + + // Get correct position if array given + if (is_array($key)) + { + // Search array to get correct position + list($search_key, $search_value) = @each($key); + + $key = NULL; + foreach ($block as $i => $val_ary) + { + if ($val_ary[$search_key] === $search_value) + { + $key = $i; + break; + } + } + + // key/value pair not found + if ($key === NULL) + { + return false; + } + } + + // Insert Block + if ($mode == 'insert') + { + // Make sure we are not exceeding the last iteration + if ($key >= sizeof($this->tpldata[$blockname])) + { + $key = sizeof($this->tpldata[$blockname]); + unset($this->tpldata[$blockname][($key - 1)]['S_LAST_ROW']); + $vararray['S_LAST_ROW'] = true; + } + else if ($key === 0) + { + unset($this->tpldata[$blockname][0]['S_FIRST_ROW']); + $vararray['S_FIRST_ROW'] = true; + } + + // Re-position template blocks + for ($i = sizeof($block); $i > $key; $i--) + { + $block[$i] = $block[$i-1]; + } + + // Insert vararray at given position + $block[$key] = $vararray; + + return true; + } + + // Which block to change? + if ($mode == 'change') + { + if ($key == sizeof($block)) + { + $key--; + } + + $block[$key] = array_merge($block[$key], $vararray); + + return true; + } + + return false; + } + + /** + * Reset/empty complete block + * + * @param string $blockname Name of block to destroy + */ + public function destroy_block_vars($blockname) + { + if (strpos($blockname, '.') !== false) + { + // Nested block. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + $str = &$this->tpldata; + for ($i = 0; $i < $blockcount; $i++) + { + $str = &$str[$blocks[$i]]; + $str = &$str[sizeof($str) - 1]; + } + + unset($str[$blocks[$blockcount]]); + } + else + { + // Top-level block. + unset($this->tpldata[$blockname]); + } + + return true; + } +} diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php new file mode 100644 index 0000000000..6ef9d80a3d --- /dev/null +++ b/phpBB/includes/template/filter.php @@ -0,0 +1,1028 @@ +'; + + const REGEX_TOKENS = '~|{((?:[a-z_][a-z_0-9]+\.)*\\$?[A-Z][A-Z_0-9]+)}~'; + + /** + * @var array + */ + private $block_names = array(); + + /** + * @var array + */ + private $block_else_level = array(); + + /** + * @var string + */ + private $chunk; + + /** + * @var bool + */ + private $in_php; + + /** + * Whether inline PHP code, and tags + * are allowed. If this is false all PHP code will be silently + * removed from the template during compilation. + * + * @var bool + */ + private $allow_php; + + /** + * Resource locator. + * + * @var phpbb_template_locator + */ + private $locator; + + /** + * @var string phpBB root path + */ + private $phpbb_root_path; + + /** + * Stream filter + * + * Is invoked for evey chunk of the stream, allowing us + * to work on a chunk at a time, which saves memory. + */ + public function filter($in, $out, &$consumed, $closing) + { + $written = false; + $first = false; + + while ($bucket = stream_bucket_make_writeable($in)) + { + $consumed += $bucket->datalen; + + $data = $this->chunk . $bucket->data; + $last_nl = strrpos($data, "\n"); + $this->chunk = substr($data, $last_nl); + $data = substr($data, 0, $last_nl); + + if (!strlen($data)) + { + continue; + } + + $written = true; + + $data = $this->compile($data); + if (!$first) + { + $data = $this->prepend_preamble($data); + $first = false; + } + $bucket->data = $data; + $bucket->datalen = strlen($bucket->data); + stream_bucket_append($out, $bucket); + } + + if ($closing && strlen($this->chunk)) + { + $written = true; + $bucket = stream_bucket_new($this->stream, $this->compile($this->chunk)); + stream_bucket_append($out, $bucket); + } + + return $written ? PSFS_PASS_ON : PSFS_FEED_ME; + } + + /** + * Initializer, called on creation. + * + * Get the allow_php option, root directory and locator from params, + * which are passed to stream_filter_append. + */ + public function onCreate() + { + $this->chunk = ''; + $this->in_php = false; + $this->allow_php = $this->params['allow_php']; + $this->locator = $this->params['locator']; + $this->phpbb_root_path = $this->params['phpbb_root_path']; + return true; + } + + /** + * Compiles a chunk of template. + * + * The chunk must comprise of one or more complete lines from the source + * template. + * + * @param string $data Chunk of source template to compile + * @return string Compiled PHP/HTML code + */ + private function compile($data) + { + $block_start_in_php = $this->in_php; + + $data = preg_replace('#<(?:[\\?%]|script)#s', '', $data); + $data = preg_replace_callback(self::REGEX_TOKENS, array($this, 'replace'), $data); + + // Remove php + if (!$this->allow_php) + { + if ($block_start_in_php + && $this->in_php + && strpos($data, '') === false + && strpos($data, '') === false) + { + // This is just php code + return ''; + } + $data = preg_replace('~^.*?~', '', $data); + $data = preg_replace('~.*?~', '', $data); + $data = preg_replace('~.*?$~', '', $data); + } + + /* + Preserve whitespace. + PHP removes a newline after the closing tag (if it's there). This is by design. + + + Consider the following template: + + + some content + + + If we were to simply preserve all whitespace, we could simply replace all "?>" tags + with "?>\n". + Doing that, would add additional newlines to the compiled tempalte in place of the + IF and ENDIF statements. These newlines are unwanted (and one is conditional). + The IF and ENDIF are usually on their own line for ease of reading. + + This replacement preserves newlines only for statements that aren't the only statement on a line. + It will NOT preserve newlines at the end of statements in the above examle. + It will preserve newlines in situations like: + + inline content + + + */ + + $data = preg_replace('~(?).)+(?)$~m', "$1\n", $data); + $data = str_replace('/**/?>', "?>\n", $data); + $data = str_replace('?>' . $data); + return $data; + } + + /** + * Callback for replacing matched tokens with PHP code + * + * @param array $matches Regular expression matches + * @return string compiled template code + */ + private function replace($matches) + { + if ($this->in_php && $matches[1] != 'ENDPHP') + { + return ''; + } + + if (isset($matches[3])) + { + return $this->compile_var_tags($matches[0]); + } + + switch ($matches[1]) + { + case 'BEGIN': + $this->block_else_level[] = false; + return 'compile_tag_block($matches[2]) . ' ?>'; + break; + + case 'BEGINELSE': + $this->block_else_level[sizeof($this->block_else_level) - 1] = true; + return ''; + break; + + case 'END': + array_pop($this->block_names); + return 'block_else_level)) ? '}' : '}}') . ' ?>'; + break; + + case 'IF': + return 'compile_tag_if($matches[2], false) . ' ?>'; + break; + + case 'ELSE': + return ''; + break; + + case 'ELSEIF': + return 'compile_tag_if($matches[2], true) . ' ?>'; + break; + + case 'ENDIF': + return ''; + break; + + case 'DEFINE': + return 'compile_tag_define($matches[2], true) . ' ?>'; + break; + + case 'UNDEFINE': + return 'compile_tag_define($matches[2], false) . ' ?>'; + break; + + case 'INCLUDE': + return 'compile_tag_include($matches[2]) . ' ?>'; + break; + + case 'INCLUDEPHP': + return ($this->allow_php) ? 'compile_tag_include_php($matches[2]) . ' ?>' : ''; + break; + + case 'INCLUDEJS': + return 'compile_tag_include_js($matches[2]) . ' ?>'; + break; + + case 'PHP': + if ($this->allow_php) + { + $this->in_php = true; + return ''; + break; + + case 'ENDPHP': + if ($this->allow_php) + { + $this->in_php = false; + return ' ?>'; + } + return ''; + break; + + default: + return $matches[0]; + break; + + } + return ''; + } + + /** + * Convert template variables into PHP varrefs + * + * @param string $text_blocks Variable reference in source template + * @param bool $is_expr Returns whether the source was an expression type variable (i.e. S_FIRST_ROW) + * @return string PHP variable name + */ + private function get_varref($text_blocks, &$is_expr) + { + // change template varrefs into PHP varrefs + $varrefs = array(); + + // This one will handle varrefs WITH namespaces + preg_match_all('#\{((?:' . self::REGEX_NS . '\.)+)(\$)?(' . self::REGEX_VAR . ')\}#', $text_blocks, $varrefs, PREG_SET_ORDER); + + foreach ($varrefs as $var_val) + { + $namespace = $var_val[1]; + $varname = $var_val[3]; + $new = $this->generate_block_varref($namespace, $varname, $is_expr, $var_val[2]); + + $text_blocks = str_replace($var_val[0], $new, $text_blocks); + } + + // Language variables cannot be reduced to a single varref, so they must be skipped + // These two replacements would break language variables, so we can only run them on non-language types + if (strpos($text_blocks, '{L_') === false && strpos($text_blocks, '{LA_') === false) + { + // This will handle the remaining root-level varrefs + $text_blocks = preg_replace('#\{(' . self::REGEX_VAR . ')\}#', "\$_rootref['\\1']", $text_blocks); + $text_blocks = preg_replace('#\{\$(' . self::REGEX_VAR . ')\}#', "\$_tpldata['DEFINE']['.']['\\1']", $text_blocks); + } + + return $text_blocks; + } + + /** + * Compile variables + * + * @param string $text_blocks Variable reference in source template + * @return string compiled template code + */ + private function compile_var_tags(&$text_blocks) + { + $text_blocks = $this->get_varref($text_blocks, $is_expr); + $lang_replaced = $this->compile_language_tags($text_blocks); + + if(!$lang_replaced) + { + $text_blocks = ''; + } + + return $text_blocks; + } + + /** + * Handles special language tags L_ and LA_ + * + * @param string $text_blocks Variable reference in source template + * @return bool Whether a replacement occurred or not + */ + private function compile_language_tags(&$text_blocks) + { + $replacements = 0; + + // transform vars prefixed by L_ into their language variable pendant if nothing is set within the tpldata array + if (strpos($text_blocks, '{L_') !== false) + { + $text_blocks = preg_replace('#\{L_(' . self::REGEX_VAR_SUFFIX . ')\}#', "", $text_blocks, -1, $replacements); + return (bool) $replacements; + } + + // Handle addslashed language variables prefixed with LA_ + // If a template variable already exist, it will be used in favor of it... + if (strpos($text_blocks, '{LA_') !== false) + { + $text_blocks = preg_replace('#\{LA_(' . self::REGEX_VAR_SUFFIX . '+)\}#', "", $text_blocks, -1, $replacements); + return (bool) $replacements; + } + + return false; + } + + /** + * Compile blocks + * + * @param string $tag_args Block contents in source template + * @return string compiled template code + */ + private function compile_tag_block($tag_args) + { + $no_nesting = false; + + // Is the designer wanting to call another loop in a loop? + // + // + // + // + // 'loop2' is actually on the same nesting level as 'loop' you assign + // variables to it with template->assign_block_vars('loop2', array(...)) + if (strpos($tag_args, '!') === 0) + { + // Count the number if ! occurrences (not allowed in vars) + $no_nesting = substr_count($tag_args, '!'); + $tag_args = substr($tag_args, $no_nesting); + } + + // Allow for control of looping (indexes start from zero): + // foo(2) : Will start the loop on the 3rd entry + // foo(-2) : Will start the loop two entries from the end + // foo(3,4) : Will start the loop on the fourth entry and end it on the fifth + // foo(3,-4) : Will start the loop on the fourth entry and end it four from last + $match = array(); + + if (preg_match('#^([^()]*)\(([\-\d]+)(?:,([\-\d]+))?\)$#', $tag_args, $match)) + { + $tag_args = $match[1]; + + if ($match[2] < 0) + { + $loop_start = '($_' . $tag_args . '_count ' . $match[2] . ' < 0 ? 0 : $_' . $tag_args . '_count ' . $match[2] . ')'; + } + else + { + $loop_start = '($_' . $tag_args . '_count < ' . $match[2] . ' ? $_' . $tag_args . '_count : ' . $match[2] . ')'; + } + + if (!isset($match[3]) || strlen($match[3]) < 1 || $match[3] == -1) + { + $loop_end = '$_' . $tag_args . '_count'; + } + else if ($match[3] >= 0) + { + $loop_end = '(' . ($match[3] + 1) . ' > $_' . $tag_args . '_count ? $_' . $tag_args . '_count : ' . ($match[3] + 1) . ')'; + } + else //if ($match[3] < -1) + { + $loop_end = '$_' . $tag_args . '_count' . ($match[3] + 1); + } + } + else + { + $loop_start = 0; + $loop_end = '$_' . $tag_args . '_count'; + } + + $tag_template_php = ''; + array_push($this->block_names, $tag_args); + + if ($no_nesting !== false) + { + // We need to implode $no_nesting times from the end... + $block = array_slice($this->block_names, -$no_nesting); + } + else + { + $block = $this->block_names; + } + + if (sizeof($block) < 2) + { + // Block is not nested. + $tag_template_php = '$_' . $tag_args . "_count = (isset(\$_tpldata['$tag_args'])) ? sizeof(\$_tpldata['$tag_args']) : 0;"; + $varref = "\$_tpldata['$tag_args']"; + } + else + { + // This block is nested. + // Generate a namespace string for this block. + $namespace = implode('.', $block); + + // Get a reference to the data array for this block that depends on the + // current indices of all parent blocks. + $varref = $this->generate_block_data_ref($namespace, false); + + // Create the for loop code to iterate over this block. + $tag_template_php = '$_' . $tag_args . '_count = (isset(' . $varref . ')) ? sizeof(' . $varref . ') : 0;'; + } + + $tag_template_php .= 'if ($_' . $tag_args . '_count) {'; + + /** + * The following uses foreach for iteration instead of a for loop, foreach is faster but requires PHP to make a copy of the contents of the array which uses more memory + * + * if (!$offset) + * { + * $tag_template_php .= 'foreach (' . $varref . ' as $_' . $tag_args . '_i => $_' . $tag_args . '_val){'; + * } + * + */ + + $tag_template_php .= 'for ($_' . $tag_args . '_i = ' . $loop_start . '; $_' . $tag_args . '_i < ' . $loop_end . '; ++$_' . $tag_args . '_i){'; + $tag_template_php .= '$_' . $tag_args . '_val = &' . $varref . '[$_' . $tag_args . '_i];'; + + return $tag_template_php; + } + + /** + * Compile a general expression - much of this is from Smarty with + * some adaptions for our block level methods + * + * @param string $tag_args Expression (tag arguments) in source template + * @return string compiled template code + */ + private function compile_expression($tag_args) + { + $match = array(); + preg_match_all('/(?: + "[^"\\\\]*(?:\\\\.[^"\\\\]*)*" | + \'[^\'\\\\]*(?:\\\\.[^\'\\\\]*)*\' | + [(),] | + [^\s(),]+)/x', $tag_args, $match); + + $tokens = $match[0]; + $is_arg_stack = array(); + + for ($i = 0, $size = sizeof($tokens); $i < $size; $i++) + { + $token = &$tokens[$i]; + + switch ($token) + { + case '!==': + case '===': + case '<<': + case '>>': + case '|': + case '^': + case '&': + case '~': + case ')': + case ',': + case '+': + case '-': + case '*': + case '/': + case '@': + break; + + case '==': + case 'eq': + $token = '=='; + break; + + case '!=': + case '<>': + case 'ne': + case 'neq': + $token = '!='; + break; + + case '<': + case 'lt': + $token = '<'; + break; + + case '<=': + case 'le': + case 'lte': + $token = '<='; + break; + + case '>': + case 'gt': + $token = '>'; + break; + + case '>=': + case 'ge': + case 'gte': + $token = '>='; + break; + + case '&&': + case 'and': + $token = '&&'; + break; + + case '||': + case 'or': + $token = '||'; + break; + + case '!': + case 'not': + $token = '!'; + break; + + case '%': + case 'mod': + $token = '%'; + break; + + case '(': + array_push($is_arg_stack, $i); + break; + + case 'is': + $is_arg_start = ($tokens[$i-1] == ')') ? array_pop($is_arg_stack) : $i-1; + $is_arg = implode(' ', array_slice($tokens, $is_arg_start, $i - $is_arg_start)); + + $new_tokens = $this->_parse_is_expr($is_arg, array_slice($tokens, $i+1)); + + array_splice($tokens, $is_arg_start, sizeof($tokens), $new_tokens); + + $i = $is_arg_start; + + // no break + + default: + $varrefs = array(); + if (preg_match('#^((?:' . self::REGEX_NS . '\.)+)?(\$)?(?=[A-Z])([A-Z0-9\-_]+)#s', $token, $varrefs)) + { + if (!empty($varrefs[1])) + { + $namespace = substr($varrefs[1], 0, -1); + $dot_pos = strrchr($namespace, '.'); + if ($dot_pos !== false) + { + $namespace = substr($dot_pos, 1); + } + + // S_ROW_COUNT is deceptive, it returns the current row number not the number of rows + // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM + switch ($varrefs[3]) + { + case 'S_ROW_NUM': + case 'S_ROW_COUNT': + $token = "\$_${namespace}_i"; + break; + + case 'S_NUM_ROWS': + $token = "\$_${namespace}_count"; + break; + + case 'S_FIRST_ROW': + $token = "(\$_${namespace}_i == 0)"; + break; + + case 'S_LAST_ROW': + $token = "(\$_${namespace}_i == \$_${namespace}_count - 1)"; + break; + + case 'S_BLOCK_NAME': + $token = "'$namespace'"; + break; + + default: + $token = $this->generate_block_data_ref(substr($varrefs[1], 0, -1), true, $varrefs[2]) . '[\'' . $varrefs[3] . '\']'; + $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; + break; + } + } + else + { + $token = ($varrefs[2]) ? '$_tpldata[\'DEFINE\'][\'.\'][\'' . $varrefs[3] . '\']' : '$_rootref[\'' . $varrefs[3] . '\']'; + $token = '(isset(' . $token . ') ? ' . $token . ' : null)'; + } + + } + else if (preg_match('#^\.((?:' . self::REGEX_NS . '\.?)+)$#s', $token, $varrefs)) + { + // Allow checking if loops are set with .loopname + // It is also possible to check the loop count by doing for example + $blocks = explode('.', $varrefs[1]); + + // If the block is nested, we have a reference that we can grab. + // If the block is not nested, we just go and grab the block from _tpldata + if (sizeof($blocks) > 1) + { + $block = array_pop($blocks); + $namespace = implode('.', $blocks); + $varref = $this->generate_block_data_ref($namespace, true); + + // Add the block reference for the last child. + $varref .= "['" . $block . "']"; + } + else + { + $varref = '$_tpldata'; + + // Add the block reference for the last child. + $varref .= "['" . $blocks[0] . "']"; + } + $token = "(isset($varref) ? sizeof($varref) : 0)"; + } + + break; + } + } + + return $tokens; + } + + /** + * Compile IF tags + * + * @param string $tag_args Expression given with IF in source template + * @param bool $elseif True if compiling an IF tag, false if compiling an ELSEIF tag + * @return string compiled template code + */ + private function compile_tag_if($tag_args, $elseif) + { + $tokens = $this->compile_expression($tag_args); + + $tpl = ($elseif) ? '} else if (' : 'if ('; + + $tpl .= implode(' ', $tokens); + $tpl .= ') { '; + + return $tpl; + } + + /** + * Compile DEFINE tags + * + * @param string $tag_args Expression given with DEFINE in source template + * @param bool $op True if compiling a DEFINE tag, false if compiling an UNDEFINE tag + * @return string compiled template code + */ + private function compile_tag_define($tag_args, $op) + { + $match = array(); + preg_match('#^((?:' . self::REGEX_NS . '\.)+)?\$(?=[A-Z])([A-Z0-9_\-]*)(?: = (.*?))?$#', $tag_args, $match); + + if (empty($match[2]) || (!isset($match[3]) && $op)) + { + return ''; + } + + if (!$op) + { + return 'unset(' . (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ');'; + } + + $parsed_statement = implode(' ', $this->compile_expression($match[3])); + + return (($match[1]) ? $this->generate_block_data_ref(substr($match[1], 0, -1), true, true) . '[\'' . $match[2] . '\']' : '$_tpldata[\'DEFINE\'][\'.\'][\'' . $match[2] . '\']') . ' = ' . $parsed_statement . ';'; + } + + /** + * Compile INCLUDE tag + * + * @param string $tag_args Expression given with INCLUDE in source template + * @return string compiled template code + */ + private function compile_tag_include($tag_args) + { + // Process dynamic includes + if ($tag_args[0] == '{') + { + $var = $this->get_varref($tag_args, $is_expr); + + // Make sure someone didn't try to include S_FIRST_ROW or similar + if (!$is_expr) + { + return "if (isset($var)) { \$_template->_tpl_include($var); }"; + } + } + + return "\$_template->_tpl_include('$tag_args');"; + } + + /** + * Compile INCLUDE_PHP tag + * + * @param string $tag_args Expression given with INCLUDEPHP in source template + * @return string compiled template code + */ + private function compile_tag_include_php($tag_args) + { + return "\$_template->_php_include('$tag_args');"; + } + + /** + * parse expression + * This is from Smarty + */ + private function _parse_is_expr($is_arg, $tokens) + { + $expr_end = 0; + $negate_expr = false; + + if (($first_token = array_shift($tokens)) == 'not') + { + $negate_expr = true; + $expr_type = array_shift($tokens); + } + else + { + $expr_type = $first_token; + } + + switch ($expr_type) + { + case 'even': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!(($is_arg / $expr_arg) & 1)"; + } + else + { + $expr = "!($is_arg & 1)"; + } + break; + + case 'odd': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "(($is_arg / $expr_arg) & 1)"; + } + else + { + $expr = "($is_arg & 1)"; + } + break; + + case 'div': + if (isset($tokens[$expr_end]) && $tokens[$expr_end] == 'by') + { + $expr_end++; + $expr_arg = $tokens[$expr_end++]; + $expr = "!($is_arg % $expr_arg)"; + } + break; + } + + if ($negate_expr) + { + if ($expr[0] == '!') + { + // Negated expression, de-negate it. + $expr = substr($expr, 1); + } + else + { + $expr = "!($expr)"; + } + } + + array_splice($tokens, 0, $expr_end, $expr); + + return $tokens; + } + + /** + * Compile INCLUDEJS tag + * + * @param string $tag_args Expression given with INCLUDEJS in source template + * @return string compiled template code + */ + private function compile_tag_include_js($tag_args) + { + // Process dynamic includes + if ($tag_args[0] == '{') + { + $var = $this->get_varref($tag_args, $is_expr); + if (!$is_expr) + { + return " \$_template->_js_include($var, true);"; + } + return ''; + } + + // Locate file + $filename = $this->locator->get_first_file_location(array($tag_args), false, true); + + if ($filename === false) + { + // File does not exist, find it during run time + return ' $_template->_js_include(\'' . addslashes($tag_args) . '\', true); '; + } + + if (substr($filename, 0, strlen($this->phpbb_root_path)) != $this->phpbb_root_path) + { + // Absolute path, include as is + return ' $_template->_js_include(\'' . addslashes($filename) . '\', false); '; + } + + // Relative path, remove root path from it + $filename = substr($filename, strlen($this->phpbb_root_path)); + return ' global $phpbb_root_path; $_template->_js_include($phpbb_root_path . \'' . addslashes($filename) . '\', false); '; + } + + /** + * Generates a reference to the given variable inside the given (possibly nested) + * block namespace. This is a string of the form: + * ' . $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['varname'] . ' + * It's ready to be inserted into an "echo" line in one of the templates. + * + * @param string $namespace Namespace to access (expects a trailing "." on the namespace) + * @param string $varname Variable name to use + * @param bool $expr Returns whether the source was an expression type + * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable + * @return string Code to access variable or echo it if $echo is true + */ + private function generate_block_varref($namespace, $varname, &$expr, $defop = false) + { + // Strip the trailing period. + $namespace = substr($namespace, 0, -1); + + if (($pos = strrpos($namespace, '.')) !== false) + { + $local_namespace = substr($namespace, $pos + 1); + } + else + { + $local_namespace = $namespace; + } + + $expr = true; + + // S_ROW_COUNT is deceptive, it returns the current row number now the number of rows + // hence S_ROW_COUNT is deprecated in favour of S_ROW_NUM + switch ($varname) + { + case 'S_ROW_NUM': + case 'S_ROW_COUNT': + $varref = "\$_${local_namespace}_i"; + break; + + case 'S_NUM_ROWS': + $varref = "\$_${local_namespace}_count"; + break; + + case 'S_FIRST_ROW': + $varref = "(\$_${local_namespace}_i == 0)"; + break; + + case 'S_LAST_ROW': + $varref = "(\$_${local_namespace}_i == \$_${local_namespace}_count - 1)"; + break; + + case 'S_BLOCK_NAME': + $varref = "'$local_namespace'"; + break; + + default: + // Get a reference to the data block for this namespace. + $varref = $this->generate_block_data_ref($namespace, true, $defop); + // Prepend the necessary code to stick this in an echo line. + + // Append the variable reference. + $varref .= "['$varname']"; + + $expr = false; + break; + } + // @todo Test the !$expr more + + return $varref; + } + + /** + * Generates a reference to the array of data values for the given + * (possibly nested) block namespace. This is a string of the form: + * $_tpldata['parent'][$_parent_i]['$child1'][$_child1_i]['$child2'][$_child2_i]...['$childN'] + * + * @param string $blockname Block to access (does not expect a trailing "." on the blockname) + * @param bool $include_last_iterator If $include_last_iterator is true, then [$_childN_i] will be appended to the form shown above. + * @param bool $defop If true this is a variable created with the DEFINE construct, otherwise template variable + * @return string Code to access variable + */ + private function generate_block_data_ref($blockname, $include_last_iterator, $defop = false) + { + // Get an array of the blocks involved. + $blocks = explode('.', $blockname); + $blockcount = sizeof($blocks) - 1; + + // DEFINE is not an element of any referenced variable, we must use _tpldata to access it + if ($defop) + { + $varref = '$_tpldata[\'DEFINE\']'; + // Build up the string with everything but the last child. + for ($i = 0; $i < $blockcount; $i++) + { + $varref .= "['" . $blocks[$i] . "'][\$_" . $blocks[$i] . '_i]'; + } + // Add the block reference for the last child. + $varref .= "['" . $blocks[$blockcount] . "']"; + // Add the iterator for the last child if requried. + if ($include_last_iterator) + { + $varref .= '[$_' . $blocks[$blockcount] . '_i]'; + } + return $varref; + } + else if ($include_last_iterator) + { + return '$_'. $blocks[$blockcount] . '_val'; + } + else + { + return '$_'. $blocks[$blockcount - 1] . '_val[\''. $blocks[$blockcount]. '\']'; + } + } +} diff --git a/phpBB/includes/template/renderer.php b/phpBB/includes/template/renderer.php new file mode 100644 index 0000000000..bd2a786e86 --- /dev/null +++ b/phpBB/includes/template/renderer.php @@ -0,0 +1,35 @@ +code = $code; + $this->template = $template; + } + + /** + * Displays the template managed by this renderer by eval'ing php code + * of the template. + * + * @param phpbb_style_template_context $context Template context to use + * @param array $lang Language entries to use + */ + public function render($context, $lang) + { + $_template = $this->template; + $_tpldata = &$context->get_data_ref(); + $_rootref = &$context->get_root_ref(); + $_lang = $lang; + + eval(' ?>' . $this->code . 'path = $path; + $this->template = $template; + } + + /** + * Displays the template managed by this renderer by including + * the php file containing the template. + * + * @param phpbb_style_template_context $context Template context to use + * @param array $lang Language entries to use + */ + public function render($context, $lang) + { + $_template = $this->template; + $_tpldata = &$context->get_data_ref(); + $_rootref = &$context->get_root_ref(); + $_lang = $lang; + + include($this->path); + } +} -- cgit v1.2.1 From ef295a28606789874b524445f9fa690408c8eafc Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Tue, 3 Apr 2012 11:27:15 +0300 Subject: [ticket/10756] Renaming template classes Renaming template classes from phpbb_style_template_ to phpbb_template_ PHPBB3-10756 --- phpBB/includes/style/style.php | 2 +- phpBB/includes/style/template.php | 20 ++++++++++---------- phpBB/includes/template/compile.php | 4 ++-- phpBB/includes/template/context.php | 2 +- phpBB/includes/template/filter.php | 2 +- phpBB/includes/template/renderer.php | 4 ++-- phpBB/includes/template/renderer_eval.php | 4 ++-- phpBB/includes/template/renderer_include.php | 4 ++-- 8 files changed, 21 insertions(+), 21 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php index 5ac61c9f10..4bfb9eaa07 100644 --- a/phpBB/includes/style/style.php +++ b/phpBB/includes/style/style.php @@ -119,7 +119,7 @@ class phpbb_style $this->template->cachepath = $this->phpbb_root_path . 'cache/tpl_' . str_replace('_', '-', $name) . '_'; - $this->template->context = new phpbb_style_template_context(); + $this->template->context = new phpbb_template_context(); if ($template_path !== false) { diff --git a/phpBB/includes/style/template.php b/phpBB/includes/style/template.php index 9d476e74b9..ad4c452268 100644 --- a/phpBB/includes/style/template.php +++ b/phpBB/includes/style/template.php @@ -32,7 +32,7 @@ if (!defined('IN_PHPBB')) class phpbb_style_template { /** - * @var phpbb_style_template_context Template context. + * @var phpbb_template_context Template context. * Stores template data used during template rendering. */ public $context; @@ -253,15 +253,15 @@ class phpbb_style_template * configuration setting may be used to force templates to be always * recompiled. * - * Returns an object implementing phpbb_style_template_renderer, or null + * Returns an object implementing phpbb_template_renderer, or null * if template loading or compilation failed. Call render() on the * renderer to display the template. This will result in template * contents sent to the output stream (unless, of course, output * buffering is in effect). * * @param string $handle Handle of the template to load - * @return phpbb_style_template_renderer Template renderer object, or null on failure - * @uses phpbb_style_template_compile is used to compile template source + * @return phpbb_template_renderer Template renderer object, or null on failure + * @uses phpbb_template_compile is used to compile template source */ private function _tpl_load($handle) { @@ -285,18 +285,18 @@ class phpbb_style_template // Recompile page if the original template is newer, otherwise load the compiled version if (!$recompile) { - return new phpbb_style_template_renderer_include($output_file, $this); + return new phpbb_template_renderer_include($output_file, $this); } - $compile = new phpbb_style_template_compile($this->config['tpl_allow_php'], $this->locator, $this->phpbb_root_path); + $compile = new phpbb_template_compile($this->config['tpl_allow_php'], $this->locator, $this->phpbb_root_path); if ($compile->compile_file_to_file($source_file, $output_file) !== false) { - $renderer = new phpbb_style_template_renderer_include($output_file, $this); + $renderer = new phpbb_template_renderer_include($output_file, $this); } else if (($code = $compile->compile_file($source_file)) !== false) { - $renderer = new phpbb_style_template_renderer_eval($code, $this); + $renderer = new phpbb_template_renderer_eval($code, $this); } else { @@ -358,7 +358,7 @@ class phpbb_style_template $this->context->append_var($varname, $varval); } - // Docstring is copied from phpbb_style_template_context method with the same name. + // Docstring is copied from phpbb_template_context method with the same name. /** * Assign key variable pairs from an array to a specified block * @param string $blockname Name of block to assign $vararray to @@ -369,7 +369,7 @@ class phpbb_style_template return $this->context->assign_block_vars($blockname, $vararray); } - // Docstring is copied from phpbb_style_template_context method with the same name. + // Docstring is copied from phpbb_template_context method with the same name. /** * Change already assigned key variable pair (one-dimensional - single loop entry) * diff --git a/phpBB/includes/template/compile.php b/phpBB/includes/template/compile.php index fa0928f424..82b301c1a2 100644 --- a/phpBB/includes/template/compile.php +++ b/phpBB/includes/template/compile.php @@ -15,7 +15,7 @@ if (!defined('IN_PHPBB')) exit; } -stream_filter_register('phpbb_template', 'phpbb_style_template_filter'); +stream_filter_register('phpbb_template', 'phpbb_template_filter'); /** * Extension of template class - Functions needed for compiling templates only. @@ -23,7 +23,7 @@ stream_filter_register('phpbb_template', 'phpbb_style_template_filter'); * @package phpBB3 * @uses template_filter As a PHP stream filter to perform compilation of templates */ -class phpbb_style_template_compile +class phpbb_template_compile { /** * Array of parameters to forward to template filter diff --git a/phpBB/includes/template/context.php b/phpBB/includes/template/context.php index b22f77da2e..5e0b1d4a7e 100644 --- a/phpBB/includes/template/context.php +++ b/phpBB/includes/template/context.php @@ -20,7 +20,7 @@ if (!defined('IN_PHPBB')) * * @package phpBB3 */ -class phpbb_style_template_context +class phpbb_template_context { /** * variable that holds all the data we'll be substituting into diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php index 6ef9d80a3d..4a2593b757 100644 --- a/phpBB/includes/template/filter.php +++ b/phpBB/includes/template/filter.php @@ -35,7 +35,7 @@ if (!defined('IN_PHPBB')) * @see template_compile * @package phpBB3 */ -class phpbb_style_template_filter extends php_user_filter +class phpbb_template_filter extends php_user_filter { const REGEX_NS = '[a-z_][a-z_0-9]+'; diff --git a/phpBB/includes/template/renderer.php b/phpBB/includes/template/renderer.php index bd2a786e86..30e234a733 100644 --- a/phpBB/includes/template/renderer.php +++ b/phpBB/includes/template/renderer.php @@ -23,12 +23,12 @@ if (!defined('IN_PHPBB')) * * @package phpBB3 */ -interface phpbb_style_template_renderer +interface phpbb_template_renderer { /** * Displays the template managed by this renderer. * - * @param phpbb_style_template_context $context Template context to use + * @param phpbb_template_context $context Template context to use * @param array $lang Language entries to use */ public function render($context, $lang); diff --git a/phpBB/includes/template/renderer_eval.php b/phpBB/includes/template/renderer_eval.php index 3e08b06e69..62dfbc3708 100644 --- a/phpBB/includes/template/renderer_eval.php +++ b/phpBB/includes/template/renderer_eval.php @@ -21,7 +21,7 @@ if (!defined('IN_PHPBB')) * * @package phpBB3 */ -class phpbb_style_template_renderer_eval implements phpbb_style_template_renderer +class phpbb_template_renderer_eval implements phpbb_template_renderer { /** * Template code to be eval'ed. @@ -45,7 +45,7 @@ class phpbb_style_template_renderer_eval implements phpbb_style_template_rendere * Displays the template managed by this renderer by eval'ing php code * of the template. * - * @param phpbb_style_template_context $context Template context to use + * @param phpbb_template_context $context Template context to use * @param array $lang Language entries to use */ public function render($context, $lang) diff --git a/phpBB/includes/template/renderer_include.php b/phpBB/includes/template/renderer_include.php index 91c1a1bb65..f5c9026abf 100644 --- a/phpBB/includes/template/renderer_include.php +++ b/phpBB/includes/template/renderer_include.php @@ -22,7 +22,7 @@ if (!defined('IN_PHPBB')) * * @package phpBB3 */ -class phpbb_style_template_renderer_include implements phpbb_style_template_renderer +class phpbb_template_renderer_include implements phpbb_template_renderer { /** * Template path to be included. @@ -45,7 +45,7 @@ class phpbb_style_template_renderer_include implements phpbb_style_template_rend * Displays the template managed by this renderer by including * the php file containing the template. * - * @param phpbb_style_template_context $context Template context to use + * @param phpbb_template_context $context Template context to use * @param array $lang Language entries to use */ public function render($context, $lang) -- cgit v1.2.1 From ea3a2ef2234095e9db2d79f8c1d17bf1dfda1a23 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Tue, 3 Apr 2012 13:19:03 +0300 Subject: [ticket/10756] Creating locator interface Creating locator interface to be used in template class PHPBB3-10756 --- phpBB/includes/style/resource_locator.php | 2 +- phpBB/includes/style/template.php | 8 +- phpBB/includes/template/locator.php | 133 ++++++++++++++++++++++++++++++ 3 files changed, 138 insertions(+), 5 deletions(-) create mode 100644 phpBB/includes/template/locator.php (limited to 'phpBB') diff --git a/phpBB/includes/style/resource_locator.php b/phpBB/includes/style/resource_locator.php index 3e6dd5d6aa..fafa11c352 100644 --- a/phpBB/includes/style/resource_locator.php +++ b/phpBB/includes/style/resource_locator.php @@ -30,7 +30,7 @@ if (!defined('IN_PHPBB')) * * @package phpBB3 */ -class phpbb_style_resource_locator +class phpbb_style_resource_locator implements phpbb_template_locator { /** * Paths to style directories. diff --git a/phpBB/includes/style/template.php b/phpBB/includes/style/template.php index ad4c452268..1967ec7d96 100644 --- a/phpBB/includes/style/template.php +++ b/phpBB/includes/style/template.php @@ -63,8 +63,8 @@ class phpbb_style_template private $user; /** - * Style resource locator - * @var phpbb_style_resource_locator + * Template locator + * @var phpbb_template_locator */ private $locator; @@ -85,10 +85,10 @@ class phpbb_style_template * * @param string $phpbb_root_path phpBB root path * @param user $user current user - * @param phpbb_style_resource_locator $locator style resource locator + * @param phpbb_template_locator $locator template locator * @param phpbb_style_path_provider $provider style path provider */ - public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_style_resource_locator $locator, phpbb_style_path_provider_interface $provider) + public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_template_locator $locator, phpbb_style_path_provider_interface $provider) { $this->phpbb_root_path = $phpbb_root_path; $this->phpEx = $phpEx; diff --git a/phpBB/includes/template/locator.php b/phpBB/includes/template/locator.php new file mode 100644 index 0000000000..836046e92b --- /dev/null +++ b/phpBB/includes/template/locator.php @@ -0,0 +1,133 @@ + filename pairs. + * + * @param array $filname_array Should be a hash of handle => filename pairs. + */ + public function set_filenames(array $filename_array); + + /** + * Determines the filename for a template handle. + * + * The filename comes from array used in a set_filenames call, + * which should have been performed prior to invoking this function. + * Return value is a file basename (without path). + * + * @param $handle string Template handle + * @return string Filename corresponding to the template handle + */ + public function get_filename_for_handle($handle); + + /** + * Determines the source file path for a template handle without + * regard for styles tree. + * + * This function returns the path in "primary" style directory + * corresponding to the given template handle. That path may or + * may not actually exist on the filesystem. Because this function + * does not perform stat calls to determine whether the path it + * returns actually exists, it is faster than get_source_file_for_handle. + * + * Use get_source_file_for_handle to obtain the actual path that is + * guaranteed to exist (which might come from the parent style + * directory if primary style has parent styles). + * + * This function will trigger an error if the handle was never + * associated with a template file via set_filenames. + * + * @param $handle string Template handle + * @return string Path to source file path in primary style directory + */ + public function get_virtual_source_file_for_handle($handle); + + /** + * Determines the source file path for a template handle, accounting + * for styles tree and verifying that the path exists. + * + * This function returns the actual path that may be compiled for + * the specified template handle. It will trigger an error if + * the template handle was never associated with a template path + * via set_filenames or if the template file does not exist on the + * filesystem. + * + * Use get_virtual_source_file_for_handle to just resolve a template + * handle to a path without any filesystem or styles tree checks. + * + * @param string $handle Template handle (i.e. "friendly" template name) + * @param bool $find_all If true, each root path will be checked and function + * will return array of files instead of string and will not + * trigger a error if template does not exist + * @return string Source file path + */ + public function get_source_file_for_handle($handle, $find_all = false); + + /** + * Locates source file path, accounting for styles tree and verifying that + * the path exists. + * + * Unlike previous functions, this function works without template handle + * and it can search for more than one file. If more than one file name is + * specified, it will return location of file that it finds first. + * + * @param array $files List of files to locate. + * @param bool $return_default Determines what to return if file does not + * exist. If true, function will return location where file is + * supposed to be. If false, function will return false. + * @param bool $return_full_path If true, function will return full path + * to file. If false, function will return file name. This + * parameter can be used to check which one of set of files + * is available. + * @return string or boolean Source file path if file exists or $return_default is + * true. False if file does not exist and $return_default is false + */ + public function get_first_file_location($files, $return_default = false, $return_full_path = true); +} -- cgit v1.2.1 From 6cecc91326135fbb36eb9d73aa25fc40cfdfb54b Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Tue, 3 Apr 2012 13:23:08 +0300 Subject: [ticket/10756] Removing path provider from template class Removing path provider from template class because it is not used by template class PHPBB3-10756 --- phpBB/common.php | 3 ++- phpBB/includes/bbcode.php | 2 +- phpBB/includes/functions_messenger.php | 4 +++- phpBB/includes/style/template.php | 10 +--------- phpBB/install/index.php | 2 +- 5 files changed, 8 insertions(+), 13 deletions(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index a00e3e82a8..7694620b36 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -124,7 +124,8 @@ $phpbb_extension_manager = new phpbb_extension_manager($db, EXT_TABLE, $phpbb_ro // Initialize style $phpbb_style_resource_locator = new phpbb_style_resource_locator(); $phpbb_style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); -$template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator, $phpbb_style_path_provider); + +$template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator); $phpbb_style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator, $phpbb_style_path_provider, $template); $phpbb_subscriber_loader = new phpbb_event_extension_subscriber_loader($phpbb_dispatcher, $phpbb_extension_manager); diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php index 612ced8ad6..3adf9582d6 100644 --- a/phpBB/includes/bbcode.php +++ b/phpBB/includes/bbcode.php @@ -134,7 +134,7 @@ class bbcode $style_resource_locator = new phpbb_style_resource_locator(); $style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); - $template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator, $style_path_provider); + $template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator); $style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator, $style_path_provider, $template); $style->set_style(); $template->set_filenames(array('bbcode.html' => 'bbcode.html')); diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index f608c95fe4..de14703817 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -210,8 +210,10 @@ class messenger { $style_resource_locator = new phpbb_style_resource_locator(); $style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); - $tpl = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator, $style_path_provider); + + $tpl = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator); $style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator, $style_path_provider, $tpl); + $this->tpl_msg[$template_lang . $template_file] = $tpl; $fallback_template_path = false; diff --git a/phpBB/includes/style/template.php b/phpBB/includes/style/template.php index 1967ec7d96..6dd588c17b 100644 --- a/phpBB/includes/style/template.php +++ b/phpBB/includes/style/template.php @@ -68,12 +68,6 @@ class phpbb_style_template */ private $locator; - /** - * Template path provider - * @var phpbb_style_path_provider - */ - private $provider; - /** * Location of templates directory within style directories * @var string @@ -86,9 +80,8 @@ class phpbb_style_template * @param string $phpbb_root_path phpBB root path * @param user $user current user * @param phpbb_template_locator $locator template locator - * @param phpbb_style_path_provider $provider style path provider */ - public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_template_locator $locator, phpbb_style_path_provider_interface $provider) + public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_template_locator $locator) { $this->phpbb_root_path = $phpbb_root_path; $this->phpEx = $phpEx; @@ -96,7 +89,6 @@ class phpbb_style_template $this->user = $user; $this->locator = $locator; $this->template_path = $this->locator->template_path; - $this->provider = $provider; } /** diff --git a/phpBB/install/index.php b/phpBB/install/index.php index bb10521bba..be5ebc53b5 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -202,7 +202,7 @@ $config = new phpbb_config(array( $phpbb_style_resource_locator = new phpbb_style_resource_locator(); $phpbb_style_path_provider = new phpbb_style_path_provider(); -$template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator, $phpbb_style_path_provider); +$template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator); $phpbb_style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator, $phpbb_style_path_provider, $template); $phpbb_style->set_ext_dir_prefix('adm/'); $phpbb_style->set_custom_style('admin', '../adm/style', ''); -- cgit v1.2.1 From d91abbb146d3a808764bf19b9e6adc6e14db1751 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Tue, 3 Apr 2012 13:57:12 +0300 Subject: [ticket/10756] Renaming phpbb_style_template to phpbb_template Renaming phpbb_style_template to phpbb_template PHPBB3-10756 --- phpBB/common.php | 3 +- phpBB/includes/bbcode.php | 2 +- phpBB/includes/functions_messenger.php | 3 +- phpBB/includes/style/style.php | 6 +- phpBB/includes/style/template.php | 509 ------------------------------ phpBB/includes/template/context.php | 2 +- phpBB/includes/template/renderer_eval.php | 2 +- phpBB/includes/template/template.php | 509 ++++++++++++++++++++++++++++++ phpBB/install/index.php | 2 +- 9 files changed, 518 insertions(+), 520 deletions(-) delete mode 100644 phpBB/includes/style/template.php create mode 100644 phpBB/includes/template/template.php (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index 7694620b36..81fe275008 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -124,8 +124,7 @@ $phpbb_extension_manager = new phpbb_extension_manager($db, EXT_TABLE, $phpbb_ro // Initialize style $phpbb_style_resource_locator = new phpbb_style_resource_locator(); $phpbb_style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); - -$template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator); +$template = new phpbb_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator); $phpbb_style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator, $phpbb_style_path_provider, $template); $phpbb_subscriber_loader = new phpbb_event_extension_subscriber_loader($phpbb_dispatcher, $phpbb_extension_manager); diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php index 3adf9582d6..fde917e5b1 100644 --- a/phpBB/includes/bbcode.php +++ b/phpBB/includes/bbcode.php @@ -134,7 +134,7 @@ class bbcode $style_resource_locator = new phpbb_style_resource_locator(); $style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); - $template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator); + $template = new phpbb_template($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator); $style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator, $style_path_provider, $template); $style->set_style(); $template->set_filenames(array('bbcode.html' => 'bbcode.html')); diff --git a/phpBB/includes/functions_messenger.php b/phpBB/includes/functions_messenger.php index de14703817..e9073553d0 100644 --- a/phpBB/includes/functions_messenger.php +++ b/phpBB/includes/functions_messenger.php @@ -210,8 +210,7 @@ class messenger { $style_resource_locator = new phpbb_style_resource_locator(); $style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); - - $tpl = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator); + $tpl = new phpbb_template($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator); $style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $style_resource_locator, $style_path_provider, $tpl); $this->tpl_msg[$template_lang . $template_file] = $tpl; diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php index 4bfb9eaa07..2be4cb8855 100644 --- a/phpBB/includes/style/style.php +++ b/phpBB/includes/style/style.php @@ -22,7 +22,7 @@ if (!defined('IN_PHPBB')) class phpbb_style { /** - * @var phpbb_style_template Template class. + * @var phpbb_template Template class. * Handles everything related to templates. */ private $template; @@ -66,9 +66,9 @@ class phpbb_style * @param user $user current user * @param phpbb_style_resource_locator $locator style resource locator * @param phpbb_style_path_provider $provider style path provider - * @param phpbb_style_template $template template + * @param phpbb_template $template template */ - public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_style_resource_locator $locator, phpbb_style_path_provider_interface $provider, phpbb_style_template $template) + public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_style_resource_locator $locator, phpbb_style_path_provider_interface $provider, phpbb_template $template) { $this->phpbb_root_path = $phpbb_root_path; $this->phpEx = $phpEx; diff --git a/phpBB/includes/style/template.php b/phpBB/includes/style/template.php deleted file mode 100644 index 6dd588c17b..0000000000 --- a/phpBB/includes/style/template.php +++ /dev/null @@ -1,509 +0,0 @@ - $user->img('icon_contact', 'CONTACT', 'full'); -* -* More in-depth... -* yadayada -*/ - -/** -* Base Template class. -* @package phpBB3 -*/ -class phpbb_style_template -{ - /** - * @var phpbb_template_context Template context. - * Stores template data used during template rendering. - */ - public $context; - - /** - * @var string Path of the cache directory for the template - */ - public $cachepath = ''; - - /** - * @var string phpBB root path - */ - private $phpbb_root_path; - - /** - * @var phpEx PHP file extension - */ - private $phpEx; - - /** - * @var phpbb_config phpBB config instance - */ - private $config; - - /** - * @var user current user - */ - private $user; - - /** - * Template locator - * @var phpbb_template_locator - */ - private $locator; - - /** - * Location of templates directory within style directories - * @var string - */ - public $template_path = 'template/'; - - /** - * Constructor. - * - * @param string $phpbb_root_path phpBB root path - * @param user $user current user - * @param phpbb_template_locator $locator template locator - */ - public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_template_locator $locator) - { - $this->phpbb_root_path = $phpbb_root_path; - $this->phpEx = $phpEx; - $this->config = $config; - $this->user = $user; - $this->locator = $locator; - $this->template_path = $this->locator->template_path; - } - - /** - * Sets the template filenames for handles. - * - * @param array $filname_array Should be a hash of handle => filename pairs. - */ - public function set_filenames(array $filename_array) - { - $this->locator->set_filenames($filename_array); - - return true; - } - - /** - * Clears all variables and blocks assigned to this template. - */ - public function destroy() - { - $this->context->clear(); - } - - /** - * Reset/empty complete block - * - * @param string $blockname Name of block to destroy - */ - public function destroy_block_vars($blockname) - { - $this->context->destroy_block_vars($blockname); - } - - /** - * Display a template for provided handle. - * - * The template will be loaded and compiled, if necessary, first. - * - * This function calls hooks. - * - * @param string $handle Handle to display - * @return bool True on success, false on failure - */ - public function display($handle) - { - $result = $this->call_hook($handle); - if ($result !== false) - { - return $result[0]; - } - - return $this->load_and_render($handle); - } - - /** - * Loads a template for $handle, compiling it if necessary, and - * renders the template. - * - * @param string $handle Template handle to render - * @return bool True on success, false on failure - */ - private function load_and_render($handle) - { - $renderer = $this->_tpl_load($handle); - - if ($renderer) - { - $renderer->render($this->context, $this->get_lang()); - return true; - } - else - { - return false; - } - } - - /** - * Calls hook if any is defined. - * - * @param string $handle Template handle being displayed. - */ - private function call_hook($handle) - { - global $phpbb_hook; - - if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $this)) - { - if ($phpbb_hook->hook_return(array(__CLASS__, __FUNCTION__))) - { - $result = $phpbb_hook->hook_return_result(array(__CLASS__, __FUNCTION__)); - return array($result); - } - } - - return false; - } - - /** - * Obtains language array. - * This is either lang property of $user property, or if - * it is not set an empty array. - * @return array language entries - */ - public function get_lang() - { - if (isset($this->user->lang)) - { - $lang = $this->user->lang; - } - else - { - $lang = array(); - } - return $lang; - } - - /** - * Display the handle and assign the output to a template variable - * or return the compiled result. - * - * @param string $handle Handle to operate on - * @param string $template_var Template variable to assign compiled handle to - * @param bool $return_content If true return compiled handle, otherwise assign to $template_var - * @return bool|string false on failure, otherwise if $return_content is true return string of the compiled handle, otherwise return true - */ - public function assign_display($handle, $template_var = '', $return_content = true) - { - ob_start(); - $result = $this->display($handle); - $contents = ob_get_clean(); - if ($result === false) - { - return false; - } - - if ($return_content) - { - return $contents; - } - - $this->assign_var($template_var, $contents); - - return true; - } - - /** - * Obtains a template renderer for a template identified by specified - * handle. The template renderer can display the template later. - * - * Template source will first be compiled into php code. - * If template cache is writable the compiled php code will be stored - * on filesystem and template will not be subsequently recompiled. - * If template cache is not writable template source will be recompiled - * every time it is needed. DEBUG_EXTRA define and load_tplcompile - * configuration setting may be used to force templates to be always - * recompiled. - * - * Returns an object implementing phpbb_template_renderer, or null - * if template loading or compilation failed. Call render() on the - * renderer to display the template. This will result in template - * contents sent to the output stream (unless, of course, output - * buffering is in effect). - * - * @param string $handle Handle of the template to load - * @return phpbb_template_renderer Template renderer object, or null on failure - * @uses phpbb_template_compile is used to compile template source - */ - private function _tpl_load($handle) - { - $output_file = $this->_compiled_file_for_handle($handle); - - $recompile = defined('DEBUG_EXTRA') || - !file_exists($output_file) || - @filesize($output_file) === 0; - - if ($recompile || $this->config['load_tplcompile']) - { - // Set only if a recompile or an mtime check are required. - $source_file = $this->locator->get_source_file_for_handle($handle); - - if (!$recompile && @filemtime($output_file) < @filemtime($source_file)) - { - $recompile = true; - } - } - - // Recompile page if the original template is newer, otherwise load the compiled version - if (!$recompile) - { - return new phpbb_template_renderer_include($output_file, $this); - } - - $compile = new phpbb_template_compile($this->config['tpl_allow_php'], $this->locator, $this->phpbb_root_path); - - if ($compile->compile_file_to_file($source_file, $output_file) !== false) - { - $renderer = new phpbb_template_renderer_include($output_file, $this); - } - else if (($code = $compile->compile_file($source_file)) !== false) - { - $renderer = new phpbb_template_renderer_eval($code, $this); - } - else - { - $renderer = null; - } - - return $renderer; - } - - /** - * Determines compiled file path for handle $handle. - * - * @param string $handle Template handle (i.e. "friendly" template name) - * @return string Compiled file path - */ - private function _compiled_file_for_handle($handle) - { - $source_file = $this->locator->get_filename_for_handle($handle); - $compiled_file = $this->cachepath . str_replace('/', '.', $source_file) . '.' . $this->phpEx; - return $compiled_file; - } - - /** - * Assign key variable pairs from an array - * - * @param array $vararray A hash of variable name => value pairs - */ - public function assign_vars(array $vararray) - { - foreach ($vararray as $key => $val) - { - $this->assign_var($key, $val); - } - } - - /** - * Assign a single scalar value to a single key. - * - * Value can be a string, an integer or a boolean. - * - * @param string $varname Variable name - * @param string $varval Value to assign to variable - */ - public function assign_var($varname, $varval) - { - $this->context->assign_var($varname, $varval); - } - - /** - * Append text to the string value stored in a key. - * - * Text is appended using the string concatenation operator (.). - * - * @param string $varname Variable name - * @param string $varval Value to append to variable - */ - public function append_var($varname, $varval) - { - $this->context->append_var($varname, $varval); - } - - // Docstring is copied from phpbb_template_context method with the same name. - /** - * Assign key variable pairs from an array to a specified block - * @param string $blockname Name of block to assign $vararray to - * @param array $vararray A hash of variable name => value pairs - */ - public function assign_block_vars($blockname, array $vararray) - { - return $this->context->assign_block_vars($blockname, $vararray); - } - - // Docstring is copied from phpbb_template_context method with the same name. - /** - * Change already assigned key variable pair (one-dimensional - single loop entry) - * - * An example of how to use this function: - * {@example alter_block_array.php} - * - * @param string $blockname the blockname, for example 'loop' - * @param array $vararray the var array to insert/add or merge - * @param mixed $key Key to search for - * - * array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position] - * - * int: Position [the position to change or insert at directly given] - * - * If key is false the position is set to 0 - * If key is true the position is set to the last entry - * - * @param string $mode Mode to execute (valid modes are 'insert' and 'change') - * - * If insert, the vararray is inserted at the given position (position counting from zero). - * If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value). - * - * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) - * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) - * - * @return bool false on error, true on success - */ - public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') - { - return $this->context->alter_block_array($blockname, $vararray, $key, $mode); - } - - /** - * Include a separate template. - * - * This function is marked public due to the way the template - * implementation uses it. It is actually an implementation function - * and should not be considered part of template class's public API. - * - * @param string $filename Template filename to include - * @param bool $include True to include the file, false to just load it - * @uses template_compile is used to compile uncached templates - */ - public function _tpl_include($filename, $include = true) - { - $this->locator->set_filenames(array($filename => $filename)); - - if (!$this->load_and_render($filename)) - { - // trigger_error cannot be used here, as the output already started - echo 'template->_tpl_include(): Failed including ' . htmlspecialchars($handle) . "\n"; - } - } - - /** - * Include a PHP file. - * - * If a relative path is passed in $filename, it is considered to be - * relative to board root ($phpbb_root_path). Absolute paths are - * also allowed. - * - * This function is marked public due to the way the template - * implementation uses it. It is actually an implementation function - * and should not be considered part of template class's public API. - * - * @param string $filename Path to PHP file to include - */ - public function _php_include($filename) - { - if (phpbb_is_absolute($filename)) - { - $file = $filename; - } - else - { - $file = $this->phpbb_root_path . $filename; - } - - if (!file_exists($file)) - { - // trigger_error cannot be used here, as the output already started - echo 'template->_php_include(): File ' . htmlspecialchars($file) . " does not exist\n"; - return; - } - include($file); - } - - /** - * Locates source template path, accounting for styles tree and verifying that - * the path exists. - * - * @param string or array $files List of templates to locate. If there is only - * one template, $files can be a string to make code easier to read. - * @param bool $return_default Determines what to return if template does not - * exist. If true, function will return location where template is - * supposed to be. If false, function will return false. - * @param bool $return_full_path If true, function will return full path - * to template. If false, function will return template file name. - * This parameter can be used to check which one of set of template - * files is available. - * @return string or boolean Source template path if template exists or $return_default is - * true. False if template does not exist and $return_default is false - */ - public function locate($files, $return_default = false, $return_full_path = true) - { - // add tempalte path prefix - $templates = array(); - if (is_string($files)) - { - $templates[] = $this->template_path . $files; - } - else - { - foreach ($files as $file) - { - $templates[] = $this->template_path . $file; - } - } - - // use resource locator to find files - return $this->locator->get_first_file_location($templates, $return_default, $return_full_path); - } - - /** - * Include JS file - * - * @param string $file file name - * @param bool $locate True if file needs to be located - */ - public function _js_include($file, $locate = false) - { - // Locate file - if ($locate) - { - $file = $this->locator->get_first_file_location(array($file), true, true); - } - - $file .= (strpos($file, '?') === false) ? '?' : '&'; - $file .= 'assets_version=' . $this->config['assets_version']; - - // Add HTML code - $code = ''; - $this->context->append_var('SCRIPTS', $code); - } -} diff --git a/phpBB/includes/template/context.php b/phpBB/includes/template/context.php index 5e0b1d4a7e..ec09da1cf3 100644 --- a/phpBB/includes/template/context.php +++ b/phpBB/includes/template/context.php @@ -86,7 +86,7 @@ class phpbb_template_context * Returns a reference to template data array. * * This function is public so that template renderer may invoke it. - * Users should alter template variables via functions in phpbb_style_template. + * Users should alter template variables via functions in phpbb_template. * * Note: modifying returned array will affect data stored in the context. * diff --git a/phpBB/includes/template/renderer_eval.php b/phpBB/includes/template/renderer_eval.php index 62dfbc3708..f8e4cb7b10 100644 --- a/phpBB/includes/template/renderer_eval.php +++ b/phpBB/includes/template/renderer_eval.php @@ -33,7 +33,7 @@ class phpbb_template_renderer_eval implements phpbb_template_renderer * Template includes are delegated to template object $template. * * @param string $code php code of the template - * @param phpbb_style_template $template template object + * @param phpbb_template $template template object */ public function __construct($code, $template) { diff --git a/phpBB/includes/template/template.php b/phpBB/includes/template/template.php new file mode 100644 index 0000000000..0a3e992b03 --- /dev/null +++ b/phpBB/includes/template/template.php @@ -0,0 +1,509 @@ + $user->img('icon_contact', 'CONTACT', 'full'); +* +* More in-depth... +* yadayada +*/ + +/** +* Base Template class. +* @package phpBB3 +*/ +class phpbb_template +{ + /** + * @var phpbb_template_context Template context. + * Stores template data used during template rendering. + */ + public $context; + + /** + * @var string Path of the cache directory for the template + */ + public $cachepath = ''; + + /** + * @var string phpBB root path + */ + private $phpbb_root_path; + + /** + * @var phpEx PHP file extension + */ + private $phpEx; + + /** + * @var phpbb_config phpBB config instance + */ + private $config; + + /** + * @var user current user + */ + private $user; + + /** + * Template locator + * @var phpbb_template_locator + */ + private $locator; + + /** + * Location of templates directory within style directories + * @var string + */ + public $template_path = 'template/'; + + /** + * Constructor. + * + * @param string $phpbb_root_path phpBB root path + * @param user $user current user + * @param phpbb_template_locator $locator template locator + */ + public function __construct($phpbb_root_path, $phpEx, $config, $user, phpbb_template_locator $locator) + { + $this->phpbb_root_path = $phpbb_root_path; + $this->phpEx = $phpEx; + $this->config = $config; + $this->user = $user; + $this->locator = $locator; + $this->template_path = $this->locator->template_path; + } + + /** + * Sets the template filenames for handles. + * + * @param array $filname_array Should be a hash of handle => filename pairs. + */ + public function set_filenames(array $filename_array) + { + $this->locator->set_filenames($filename_array); + + return true; + } + + /** + * Clears all variables and blocks assigned to this template. + */ + public function destroy() + { + $this->context->clear(); + } + + /** + * Reset/empty complete block + * + * @param string $blockname Name of block to destroy + */ + public function destroy_block_vars($blockname) + { + $this->context->destroy_block_vars($blockname); + } + + /** + * Display a template for provided handle. + * + * The template will be loaded and compiled, if necessary, first. + * + * This function calls hooks. + * + * @param string $handle Handle to display + * @return bool True on success, false on failure + */ + public function display($handle) + { + $result = $this->call_hook($handle); + if ($result !== false) + { + return $result[0]; + } + + return $this->load_and_render($handle); + } + + /** + * Loads a template for $handle, compiling it if necessary, and + * renders the template. + * + * @param string $handle Template handle to render + * @return bool True on success, false on failure + */ + private function load_and_render($handle) + { + $renderer = $this->_tpl_load($handle); + + if ($renderer) + { + $renderer->render($this->context, $this->get_lang()); + return true; + } + else + { + return false; + } + } + + /** + * Calls hook if any is defined. + * + * @param string $handle Template handle being displayed. + */ + private function call_hook($handle) + { + global $phpbb_hook; + + if (!empty($phpbb_hook) && $phpbb_hook->call_hook(array(__CLASS__, __FUNCTION__), $handle, $this)) + { + if ($phpbb_hook->hook_return(array(__CLASS__, __FUNCTION__))) + { + $result = $phpbb_hook->hook_return_result(array(__CLASS__, __FUNCTION__)); + return array($result); + } + } + + return false; + } + + /** + * Obtains language array. + * This is either lang property of $user property, or if + * it is not set an empty array. + * @return array language entries + */ + public function get_lang() + { + if (isset($this->user->lang)) + { + $lang = $this->user->lang; + } + else + { + $lang = array(); + } + return $lang; + } + + /** + * Display the handle and assign the output to a template variable + * or return the compiled result. + * + * @param string $handle Handle to operate on + * @param string $template_var Template variable to assign compiled handle to + * @param bool $return_content If true return compiled handle, otherwise assign to $template_var + * @return bool|string false on failure, otherwise if $return_content is true return string of the compiled handle, otherwise return true + */ + public function assign_display($handle, $template_var = '', $return_content = true) + { + ob_start(); + $result = $this->display($handle); + $contents = ob_get_clean(); + if ($result === false) + { + return false; + } + + if ($return_content) + { + return $contents; + } + + $this->assign_var($template_var, $contents); + + return true; + } + + /** + * Obtains a template renderer for a template identified by specified + * handle. The template renderer can display the template later. + * + * Template source will first be compiled into php code. + * If template cache is writable the compiled php code will be stored + * on filesystem and template will not be subsequently recompiled. + * If template cache is not writable template source will be recompiled + * every time it is needed. DEBUG_EXTRA define and load_tplcompile + * configuration setting may be used to force templates to be always + * recompiled. + * + * Returns an object implementing phpbb_template_renderer, or null + * if template loading or compilation failed. Call render() on the + * renderer to display the template. This will result in template + * contents sent to the output stream (unless, of course, output + * buffering is in effect). + * + * @param string $handle Handle of the template to load + * @return phpbb_template_renderer Template renderer object, or null on failure + * @uses phpbb_template_compile is used to compile template source + */ + private function _tpl_load($handle) + { + $output_file = $this->_compiled_file_for_handle($handle); + + $recompile = defined('DEBUG_EXTRA') || + !file_exists($output_file) || + @filesize($output_file) === 0; + + if ($recompile || $this->config['load_tplcompile']) + { + // Set only if a recompile or an mtime check are required. + $source_file = $this->locator->get_source_file_for_handle($handle); + + if (!$recompile && @filemtime($output_file) < @filemtime($source_file)) + { + $recompile = true; + } + } + + // Recompile page if the original template is newer, otherwise load the compiled version + if (!$recompile) + { + return new phpbb_template_renderer_include($output_file, $this); + } + + $compile = new phpbb_template_compile($this->config['tpl_allow_php'], $this->locator, $this->phpbb_root_path); + + if ($compile->compile_file_to_file($source_file, $output_file) !== false) + { + $renderer = new phpbb_template_renderer_include($output_file, $this); + } + else if (($code = $compile->compile_file($source_file)) !== false) + { + $renderer = new phpbb_template_renderer_eval($code, $this); + } + else + { + $renderer = null; + } + + return $renderer; + } + + /** + * Determines compiled file path for handle $handle. + * + * @param string $handle Template handle (i.e. "friendly" template name) + * @return string Compiled file path + */ + private function _compiled_file_for_handle($handle) + { + $source_file = $this->locator->get_filename_for_handle($handle); + $compiled_file = $this->cachepath . str_replace('/', '.', $source_file) . '.' . $this->phpEx; + return $compiled_file; + } + + /** + * Assign key variable pairs from an array + * + * @param array $vararray A hash of variable name => value pairs + */ + public function assign_vars(array $vararray) + { + foreach ($vararray as $key => $val) + { + $this->assign_var($key, $val); + } + } + + /** + * Assign a single scalar value to a single key. + * + * Value can be a string, an integer or a boolean. + * + * @param string $varname Variable name + * @param string $varval Value to assign to variable + */ + public function assign_var($varname, $varval) + { + $this->context->assign_var($varname, $varval); + } + + /** + * Append text to the string value stored in a key. + * + * Text is appended using the string concatenation operator (.). + * + * @param string $varname Variable name + * @param string $varval Value to append to variable + */ + public function append_var($varname, $varval) + { + $this->context->append_var($varname, $varval); + } + + // Docstring is copied from phpbb_template_context method with the same name. + /** + * Assign key variable pairs from an array to a specified block + * @param string $blockname Name of block to assign $vararray to + * @param array $vararray A hash of variable name => value pairs + */ + public function assign_block_vars($blockname, array $vararray) + { + return $this->context->assign_block_vars($blockname, $vararray); + } + + // Docstring is copied from phpbb_template_context method with the same name. + /** + * Change already assigned key variable pair (one-dimensional - single loop entry) + * + * An example of how to use this function: + * {@example alter_block_array.php} + * + * @param string $blockname the blockname, for example 'loop' + * @param array $vararray the var array to insert/add or merge + * @param mixed $key Key to search for + * + * array: KEY => VALUE [the key/value pair to search for within the loop to determine the correct position] + * + * int: Position [the position to change or insert at directly given] + * + * If key is false the position is set to 0 + * If key is true the position is set to the last entry + * + * @param string $mode Mode to execute (valid modes are 'insert' and 'change') + * + * If insert, the vararray is inserted at the given position (position counting from zero). + * If change, the current block gets merged with the vararray (resulting in new key/value pairs be added and existing keys be replaced by the new value). + * + * Since counting begins by zero, inserting at the last position will result in this array: array(vararray, last positioned array) + * and inserting at position 1 will result in this array: array(first positioned array, vararray, following vars) + * + * @return bool false on error, true on success + */ + public function alter_block_array($blockname, array $vararray, $key = false, $mode = 'insert') + { + return $this->context->alter_block_array($blockname, $vararray, $key, $mode); + } + + /** + * Include a separate template. + * + * This function is marked public due to the way the template + * implementation uses it. It is actually an implementation function + * and should not be considered part of template class's public API. + * + * @param string $filename Template filename to include + * @param bool $include True to include the file, false to just load it + * @uses template_compile is used to compile uncached templates + */ + public function _tpl_include($filename, $include = true) + { + $this->locator->set_filenames(array($filename => $filename)); + + if (!$this->load_and_render($filename)) + { + // trigger_error cannot be used here, as the output already started + echo 'template->_tpl_include(): Failed including ' . htmlspecialchars($handle) . "\n"; + } + } + + /** + * Include a PHP file. + * + * If a relative path is passed in $filename, it is considered to be + * relative to board root ($phpbb_root_path). Absolute paths are + * also allowed. + * + * This function is marked public due to the way the template + * implementation uses it. It is actually an implementation function + * and should not be considered part of template class's public API. + * + * @param string $filename Path to PHP file to include + */ + public function _php_include($filename) + { + if (phpbb_is_absolute($filename)) + { + $file = $filename; + } + else + { + $file = $this->phpbb_root_path . $filename; + } + + if (!file_exists($file)) + { + // trigger_error cannot be used here, as the output already started + echo 'template->_php_include(): File ' . htmlspecialchars($file) . " does not exist\n"; + return; + } + include($file); + } + + /** + * Locates source template path, accounting for styles tree and verifying that + * the path exists. + * + * @param string or array $files List of templates to locate. If there is only + * one template, $files can be a string to make code easier to read. + * @param bool $return_default Determines what to return if template does not + * exist. If true, function will return location where template is + * supposed to be. If false, function will return false. + * @param bool $return_full_path If true, function will return full path + * to template. If false, function will return template file name. + * This parameter can be used to check which one of set of template + * files is available. + * @return string or boolean Source template path if template exists or $return_default is + * true. False if template does not exist and $return_default is false + */ + public function locate($files, $return_default = false, $return_full_path = true) + { + // add tempalte path prefix + $templates = array(); + if (is_string($files)) + { + $templates[] = $this->template_path . $files; + } + else + { + foreach ($files as $file) + { + $templates[] = $this->template_path . $file; + } + } + + // use resource locator to find files + return $this->locator->get_first_file_location($templates, $return_default, $return_full_path); + } + + /** + * Include JS file + * + * @param string $file file name + * @param bool $locate True if file needs to be located + */ + public function _js_include($file, $locate = false) + { + // Locate file + if ($locate) + { + $file = $this->locator->get_first_file_location(array($file), true, true); + } + + $file .= (strpos($file, '?') === false) ? '?' : '&'; + $file .= 'assets_version=' . $this->config['assets_version']; + + // Add HTML code + $code = ''; + $this->context->append_var('SCRIPTS', $code); + } +} diff --git a/phpBB/install/index.php b/phpBB/install/index.php index be5ebc53b5..f992b67bb7 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -202,7 +202,7 @@ $config = new phpbb_config(array( $phpbb_style_resource_locator = new phpbb_style_resource_locator(); $phpbb_style_path_provider = new phpbb_style_path_provider(); -$template = new phpbb_style_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator); +$template = new phpbb_template($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator); $phpbb_style = new phpbb_style($phpbb_root_path, $phpEx, $config, $user, $phpbb_style_resource_locator, $phpbb_style_path_provider, $template); $phpbb_style->set_ext_dir_prefix('adm/'); $phpbb_style->set_custom_style('admin', '../adm/style', ''); -- cgit v1.2.1 From ed9a58a6ccea5b9b2685488ff0cfc45f0ccdbeb5 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Tue, 3 Apr 2012 14:32:49 +0300 Subject: [ticket/10756] Fixing variable declarations in style and template classes Fixing variable declaration, removing function from template locator that does not belong there PHPBB3-10756 --- phpBB/includes/style/style.php | 15 ++++++++++----- phpBB/includes/template/locator.php | 12 ------------ phpBB/includes/template/template.php | 18 ++++++++++++------ 3 files changed, 22 insertions(+), 23 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php index 2be4cb8855..3f470015f6 100644 --- a/phpBB/includes/style/style.php +++ b/phpBB/includes/style/style.php @@ -22,28 +22,33 @@ if (!defined('IN_PHPBB')) class phpbb_style { /** - * @var phpbb_template Template class. + * Template class. * Handles everything related to templates. + * @var phpbb_template */ private $template; /** - * @var string phpBB root path + * phpBB root path + * @var string */ private $phpbb_root_path; /** - * @var phpEx PHP file extension + * PHP file extension + * @var string */ private $phpEx; /** - * @var phpbb_config phpBB config instance + * phpBB config instance + * @var phpbb_config */ private $config; /** - * @var user current user + * Current user + * @var phpbb_user */ private $user; diff --git a/phpBB/includes/template/locator.php b/phpBB/includes/template/locator.php index 836046e92b..01c79eec4e 100644 --- a/phpBB/includes/template/locator.php +++ b/phpBB/includes/template/locator.php @@ -35,18 +35,6 @@ if (!defined('IN_PHPBB')) */ interface phpbb_template_locator { - /** - * Sets the list of style paths - * - * These paths will be searched for style files in the provided order. - * Paths may be outside of phpBB, but templates loaded from these paths - * will still be cached. - * - * @param array $style_paths An array of paths to style directories - * @return null - */ - public function set_paths($style_paths); - /** * Sets the template filenames for handles. $filename_array * should be a hash of handle => filename pairs. diff --git a/phpBB/includes/template/template.php b/phpBB/includes/template/template.php index 0a3e992b03..e6512c8417 100644 --- a/phpBB/includes/template/template.php +++ b/phpBB/includes/template/template.php @@ -32,33 +32,39 @@ if (!defined('IN_PHPBB')) class phpbb_template { /** - * @var phpbb_template_context Template context. + * Template context. * Stores template data used during template rendering. + * @var phpbb_template_context */ public $context; /** - * @var string Path of the cache directory for the template + * Path of the cache directory for the template + * @var string */ public $cachepath = ''; /** - * @var string phpBB root path + * phpBB root path + * @var string */ private $phpbb_root_path; /** - * @var phpEx PHP file extension + * PHP file extension + * @var string */ private $phpEx; /** - * @var phpbb_config phpBB config instance + * phpBB config instance + * @var phpbb_config */ private $config; /** - * @var user current user + * Current user + * @var phpbb_user */ private $user; -- cgit v1.2.1 From 286aebd93bd49eac2ff80c3a6930f7f692a4c3ef Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 18 Apr 2012 17:01:40 +0200 Subject: [ticket/10811] Fix AJAX callback alt_text so it can be repeated. PHPBB3-10811 --- phpBB/assets/javascript/core.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 958b6c9ff6..74c71fca79 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -436,11 +436,12 @@ phpbb.add_ajax_callback = function(id, callback) * the alt-text data attribute, and replaces the text in the attribute with the * current text so that the process can be repeated. */ -phpbb.add_ajax_callback('alt_text', function(data) { +phpbb.add_ajax_callback('alt_text', function() { var el = $(this), alt_text; alt_text = el.attr('data-alt-text'); + el.attr('data-alt-text', el.text()); el.attr('title', alt_text); el.text(alt_text); }); -- cgit v1.2.1 From 00172afa532c99329f4683ecaefb0ba851e46b94 Mon Sep 17 00:00:00 2001 From: riadhchtara Date: Sun, 15 Apr 2012 12:36:42 +0100 Subject: [ticket/10813] Installer now checks json extension Installer now checks json extension and cannot continue without it. Changes are made in phpBB/install/install_install.php where the checking for json is added and to phpBB/language/en/install.php where 2 new keys for the messages that would be displayed are also added. PHPBB3-10813 --- phpBB/install/install_install.php | 22 +++++++++++++++++++++- phpBB/language/en/install.php | 2 ++ 2 files changed, 23 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index 7558fde944..ad84155585 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -128,7 +128,7 @@ class install_install extends module 'BODY' => $lang['REQUIREMENTS_EXPLAIN'], )); - $passed = array('php' => false, 'db' => false, 'files' => false, 'pcre' => false, 'imagesize' => false,); + $passed = array('php' => false, 'db' => false, 'files' => false, 'pcre' => false, 'imagesize' => false, 'json' => false,); // Test for basic PHP settings $template->assign_block_vars('checks', array( @@ -244,6 +244,26 @@ class install_install extends module 'S_EXPLAIN' => true, 'S_LEGEND' => false, )); + + // Check for php json support + if (@extension_loaded('json')) + { + $passed['json'] = true; + $result = '' . $lang['YES'] . ''; + } + else + { + $result = '' . $lang['NO'] . ''; + } + + $template->assign_block_vars('checks', array( + 'TITLE' => $lang['PHP_JSON_SUPPORT'], + 'TITLE_EXPLAIN' => $lang['PHP_JSON_SUPPORT_EXPLAIN'], + 'RESULT' => $result, + + 'S_EXPLAIN' => true, + 'S_LEGEND' => false, + )); /** * Better not enabling and adding to the loaded extensions due to the specific requirements needed diff --git a/phpBB/language/en/install.php b/phpBB/language/en/install.php index ca6045a921..29664ae5f0 100644 --- a/phpBB/language/en/install.php +++ b/phpBB/language/en/install.php @@ -292,6 +292,8 @@ $lang = array_merge($lang, array( 'PCRE_UTF_SUPPORT_EXPLAIN' => 'phpBB will not run if your PHP installation is not compiled with UTF-8 support in the PCRE extension.', 'PHP_GETIMAGESIZE_SUPPORT' => 'PHP function getimagesize() is available', 'PHP_GETIMAGESIZE_SUPPORT_EXPLAIN' => 'Required - In order for phpBB to function correctly, the getimagesize function needs to be available.', + 'PHP_JSON_SUPPORT' => 'PHP JSON support', + 'PHP_JSON_SUPPORT_EXPLAIN' => 'Required - In order for phpBB to function correctly, the PHP JSON extension needs to be available.', 'PHP_OPTIONAL_MODULE' => 'Optional modules', 'PHP_OPTIONAL_MODULE_EXPLAIN' => 'Optional - These modules or applications are optional. However, if they are available they will enable extra features.', 'PHP_SUPPORTED_DB' => 'Supported databases', -- cgit v1.2.1 From 90fc8fe59f5f6e53071a8ccb85d085d62491c466 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Fri, 20 Apr 2012 04:30:42 +0530 Subject: [ticket/10797] language key rank moved to common Language key RANK moved from memberlist to common. Removed from mcp language. PHPBB3-10797 --- phpBB/language/en/common.php | 1 + phpBB/language/en/mcp.php | 1 - phpBB/language/en/memberlist.php | 1 - 3 files changed, 1 insertion(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 005640b7dd..dc6bab3ce2 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -459,6 +459,7 @@ $lang = array_merge($lang, array( 'PRIVATE_MESSAGING' => 'Private messaging', 'PROFILE' => 'User Control Panel', + 'RANK' => 'Rank', 'READING_FORUM' => 'Viewing topics in %s', 'READING_GLOBAL_ANNOUNCE' => 'Reading global announcement', 'READING_LINK' => 'Following forum link %s', diff --git a/phpBB/language/en/mcp.php b/phpBB/language/en/mcp.php index 16b55b3612..d0bcec0d9c 100644 --- a/phpBB/language/en/mcp.php +++ b/phpBB/language/en/mcp.php @@ -274,7 +274,6 @@ $lang = array_merge($lang, array( 'POST_REPORTED_SUCCESS' => 'This post has been successfully reported.', 'POST_UNLOCKED_SUCCESS' => 'Post unlocked successfully.', - 'RANK' => 'User rank', 'READ_USERNOTES' => 'User notes', 'READ_WARNINGS' => 'User warnings', 'REPORTER' => 'Reporter', diff --git a/phpBB/language/en/memberlist.php b/phpBB/language/en/memberlist.php index e71f9d6565..7dc5e6b74a 100644 --- a/phpBB/language/en/memberlist.php +++ b/phpBB/language/en/memberlist.php @@ -110,7 +110,6 @@ $lang = array_merge($lang, array( 'POST_IP' => 'Posted from IP/domain', - 'RANK' => 'Rank', 'REAL_NAME' => 'Recipient name', 'RECIPIENT' => 'Recipient', 'REMOVE_FOE' => 'Remove foe', -- cgit v1.2.1 From edf60bcd550334a521f35700d52d800b1851d693 Mon Sep 17 00:00:00 2001 From: galaxyAbstractor Date: Sat, 14 Apr 2012 18:57:21 +0200 Subject: [ticket/10812] Disabled register_globals check in PHP 5.4 Disabled the check for register_globals if PHP version is 5.4+ PHPBB3-10812 --- phpBB/install/install_install.php | 35 +++++++++++++++++++---------------- 1 file changed, 19 insertions(+), 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index 026fc0d404..454c8b4df0 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -166,25 +166,28 @@ class install_install extends module 'S_LEGEND' => false, )); - // Check for register_globals being enabled - if (@ini_get('register_globals') == '1' || strtolower(@ini_get('register_globals')) == 'on') + // Don't check for register_globals on 5.4+ + if (version_compare($php_version, '5.4.0-dev') < 0) { - $result = '' . $lang['NO'] . ''; - } - else - { - $result = '' . $lang['YES'] . ''; - } - - $template->assign_block_vars('checks', array( - 'TITLE' => $lang['PHP_REGISTER_GLOBALS'], - 'TITLE_EXPLAIN' => $lang['PHP_REGISTER_GLOBALS_EXPLAIN'], - 'RESULT' => $result, + // Check for register_globals being enabled + if (@ini_get('register_globals') == '1' || strtolower(@ini_get('register_globals')) == 'on') + { + $result = '' . $lang['NO'] . ''; + } + else + { + $result = '' . $lang['YES'] . ''; + } - 'S_EXPLAIN' => true, - 'S_LEGEND' => false, - )); + $template->assign_block_vars('checks', array( + 'TITLE' => $lang['PHP_REGISTER_GLOBALS'], + 'TITLE_EXPLAIN' => $lang['PHP_REGISTER_GLOBALS_EXPLAIN'], + 'RESULT' => $result, + 'S_EXPLAIN' => true, + 'S_LEGEND' => false, + )); + } // Check for url_fopen if (@ini_get('allow_url_fopen') == '1' || strtolower(@ini_get('allow_url_fopen')) == 'on') -- cgit v1.2.1 From 4788705a9a885df4bc9af834d6911a8c9919ce0b Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Sun, 15 Apr 2012 15:01:32 +0530 Subject: [ticket/10815] enables feed feature by default for a fresh install PHPBB3-10815 --- phpBB/install/schemas/schema_data.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index fcc372ae93..efc81e37c0 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -99,7 +99,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('email_package_size INSERT INTO phpbb_config (config_name, config_value) VALUES ('enable_confirm', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('enable_pm_icons', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('enable_post_confirm', '1'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('feed_enable', '0'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('feed_enable', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('feed_http_auth', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('feed_limit_post', '15'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('feed_limit_topic', '10'); -- cgit v1.2.1 From de70b17b1dc19e19faa0d56395a1aba8868c9624 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Fri, 20 Apr 2012 23:50:49 -0500 Subject: [ticket/10492] Separate config generation from the installer PHPBB3-10492 --- phpBB/includes/functions_install.php | 52 ++++++++++++++++++++++++++++++++++++ phpBB/install/install_install.php | 28 +------------------ 2 files changed, 53 insertions(+), 27 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_install.php b/phpBB/includes/functions_install.php index 6caa5c943f..633b2755f0 100644 --- a/phpBB/includes/functions_install.php +++ b/phpBB/includes/functions_install.php @@ -512,4 +512,56 @@ function adjust_language_keys_callback($matches) } } +/** +* Creates the output to be stored in a phpBB config.php file +* +* @param array $data Array containing the database connection information +* @param string $dbms The name of the DBAL class to use +* @param array $load_extensions Array of additional extensions that should be loaded +* @param bool $debug If the debug constants should be enabled by default or not +* +* @return string The output to write to the file +*/ +function phpbb_create_config_file_data($data, $dbms, $load_extensions, $debug = false) +{ + $load_extensions = implode(',', $load_extensions); + + $config_data = " $dbms, + 'dbhost' => $data['dbhost'], + 'dbport' => $data['dbport'], + 'dbname' => $data['dbname'], + 'dbuser' => $data['dbuser'], + 'dbpasswd' => htmlspecialchars_decode($data['dbpasswd']), + 'table_prefix' => $data['table_prefix'], + 'acm_type' => 'file', + 'load_extensions' => $load_extensions, + ); + + foreach ($config_data_array as $key => $value) + { + $config_data .= "\${$key} = '" . str_replace("'", "\\'", str_replace('\\', '\\\\', $value)) . "';\n"; + } + + $config_data .= "\n@define('PHPBB_INSTALLED', true);\n"; + + if ($debug) + { + $config_data .= "@define('DEBUG', true);\n"; + $config_data .= "@define('DEBUG_EXTRA', true);\n"; + } + else + { + $config_data .= "// @define('DEBUG', true);\n"; + $config_data .= "// @define('DEBUG_EXTRA', true);\n"; + } + + $config_data .= '?' . '>'; // Done this to prevent highlighting editors getting confused! + + return $config_data; +} + ?> \ No newline at end of file diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index 454c8b4df0..81dac9ecde 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -884,34 +884,8 @@ class install_install extends module @chmod($phpbb_root_path . 'cache/install_lock', 0777); - $load_extensions = implode(',', $load_extensions); - // Time to convert the data provided into a config file - $config_data = " $available_dbms[$data['dbms']]['DRIVER'], - 'dbhost' => $data['dbhost'], - 'dbport' => $data['dbport'], - 'dbname' => $data['dbname'], - 'dbuser' => $data['dbuser'], - 'dbpasswd' => htmlspecialchars_decode($data['dbpasswd']), - 'table_prefix' => $data['table_prefix'], - 'acm_type' => 'file', - 'load_extensions' => $load_extensions, - ); - - foreach ($config_data_array as $key => $value) - { - $config_data .= "\${$key} = '" . str_replace("'", "\\'", str_replace('\\', '\\\\', $value)) . "';\n"; - } - unset($config_data_array); - - $config_data .= "\n@define('PHPBB_INSTALLED', true);\n"; - $config_data .= "// @define('DEBUG', true);\n"; - $config_data .= "// @define('DEBUG_EXTRA', true);\n"; - $config_data .= '?' . '>'; // Done this to prevent highlighting editors getting confused! + $config_data = phpbb_create_config_file_data($data, $available_dbms[$data['dbms']]['DRIVER'], $load_extensions); // Attempt to write out the config file directly. If it works, this is the easiest way to do it ... if ((file_exists($phpbb_root_path . 'config.' . $phpEx) && phpbb_is_writable($phpbb_root_path . 'config.' . $phpEx)) || phpbb_is_writable($phpbb_root_path)) -- cgit v1.2.1 From a21b367b21d811a3673145572b0bdd123ccc4767 Mon Sep 17 00:00:00 2001 From: galaxyAbstractor Date: Sat, 21 Apr 2012 14:16:55 +0200 Subject: [ticket/10836] Enable avatars by default at install Enables avatars and local avatar upload by default. PHPBB3-10836 --- phpBB/install/schemas/schema_data.sql | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index efc81e37c0..ba2d18da00 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -8,10 +8,10 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('active_sessions', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_attachments', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_autologin', '1'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_avatar', '0'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_avatar', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_avatar_local', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_avatar_remote', '0'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_avatar_upload', '0'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_avatar_upload', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_avatar_remote_upload', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_bbcode', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('allow_birthdays', '1'); -- cgit v1.2.1 From 1a8db76a200bd0de0bf17acd89e87e4875513d4c Mon Sep 17 00:00:00 2001 From: galaxyAbstractor Date: Sat, 21 Apr 2012 22:52:11 +0200 Subject: [ticket/10836] Check if avatar directory is writable after install Check if the avatar directory is writeable after the installation is complete. If it isn't, disable avatars and avatar uploading by default. PHPBB3-10836 --- phpBB/install/install_install.php | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) (limited to 'phpBB') diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index 81dac9ecde..35fc0bb58e 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -105,6 +105,7 @@ class install_install extends module $this->add_language($mode, $sub); $this->add_bots($mode, $sub); $this->email_admin($mode, $sub); + $this->disable_avatars_if_unwritable(); // Remove the lock file @unlink($phpbb_root_path . 'cache/install_lock'); @@ -1941,6 +1942,21 @@ class install_install extends module )); } + /** + * Check if the avatar directory is writable and disable avatars + * if it isn't writable. + */ + function disable_avatars_if_unwritable() + { + global $phpbb_root_path; + + if (!phpbb_is_writable($phpbb_root_path . 'images/avatars/upload/')) + { + set_config('allow_avatar', 0); + set_config('allow_avatar_upload', 0); + } + } + /** * Generate a list of available mail server authentication methods */ -- cgit v1.2.1 From 02cc32b901d29df4b67c0d09c02370cbaf61170d Mon Sep 17 00:00:00 2001 From: Senky Date: Mon, 16 Apr 2012 15:19:10 +0200 Subject: [ticket/10161] coding-guidelines.html updated PHPBB3-10161 --- phpBB/docs/coding-guidelines.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html index 6d428916c7..e60d20cd43 100644 --- a/phpBB/docs/coding-guidelines.html +++ b/phpBB/docs/coding-guidelines.html @@ -356,7 +356,7 @@ phpbb_dir_subdir_class_name - includes/dir/subdir/class_name.php

    The basic philosophy here is to not hurt code clarity for the sake of laziness. This has to be balanced by a little bit of common sense, though; print_login_status_for_a_given_user() goes too far, for example -- that function would be better named print_user_login_status(), or just print_login_status().

    Special Namings:

    -

    For all emoticons use the term smiley in singular and smilies in plural.

    +

    For all emoticons use the term smiley in singular and smilies in plural. For emails we use the term email (without dash between “e†and “mâ€)

    2.ii. Code Layout

    -- cgit v1.2.1 From 0858a8023be7b01e308959383bc1f955dbd4bf2d Mon Sep 17 00:00:00 2001 From: Senky Date: Mon, 16 Apr 2012 23:53:11 +0200 Subject: [ticket/10161] added fullstop to the end of sentence PHPBB3-10161 --- phpBB/docs/coding-guidelines.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html index e60d20cd43..3f2c142ac6 100644 --- a/phpBB/docs/coding-guidelines.html +++ b/phpBB/docs/coding-guidelines.html @@ -356,7 +356,7 @@ phpbb_dir_subdir_class_name - includes/dir/subdir/class_name.php

    The basic philosophy here is to not hurt code clarity for the sake of laziness. This has to be balanced by a little bit of common sense, though; print_login_status_for_a_given_user() goes too far, for example -- that function would be better named print_user_login_status(), or just print_login_status().

    Special Namings:

    -

    For all emoticons use the term smiley in singular and smilies in plural. For emails we use the term email (without dash between “e†and “mâ€)

    +

    For all emoticons use the term smiley in singular and smilies in plural. For emails we use the term email (without dash between “e†and “mâ€).

    2.ii. Code Layout

    -- cgit v1.2.1 From 8d45901657801dcbf33ac2936559dbfe2ac373d8 Mon Sep 17 00:00:00 2001 From: galaxyAbstractor Date: Fri, 27 Apr 2012 22:19:41 +0200 Subject: [ticket/10849] Added missing helptext for listitem Added the missing helptext for list item in subsilver2. PHPBB3-10849 --- phpBB/styles/subsilver2/template/posting_buttons.html | 1 + 1 file changed, 1 insertion(+) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/posting_buttons.html b/phpBB/styles/subsilver2/template/posting_buttons.html index a9105b5eec..cfe69dee56 100644 --- a/phpBB/styles/subsilver2/template/posting_buttons.html +++ b/phpBB/styles/subsilver2/template/posting_buttons.html @@ -16,6 +16,7 @@ q: '{LA_BBCODE_Q_HELP}', c: '{LA_BBCODE_C_HELP}', l: '{LA_BBCODE_L_HELP}', + e: '{LA_BBCODE_LISTITEM_HELP}', o: '{LA_BBCODE_O_HELP}', p: '{LA_BBCODE_P_HELP}', w: '{LA_BBCODE_W_HELP}', -- cgit v1.2.1 From 53a47fdcc323a5d7dc3696215cc47285a0c99042 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 18 Apr 2012 17:03:24 +0200 Subject: [ticket/10811] Make subscribe/unsubscribe repeatable with AJAX PHPBB3-10811 --- phpBB/assets/javascript/core.js | 25 ++++++++++++++++++++++ .../styles/prosilver/template/overall_footer.html | 4 ++-- 2 files changed, 27 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 74c71fca79..3c1e39fca6 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -446,5 +446,30 @@ phpbb.add_ajax_callback('alt_text', function() { el.text(alt_text); }); +/** + * This callback is based on the alt_text callback. + * + * It replaces the current text with the text in the alt-text data attribute, + * and replaces the text in the attribute with the current text so that the + * process can be repeated. + * Additionally it replaces the icon of the link and changes the link itself. + */ +phpbb.add_ajax_callback('toggle_subscribe', function() { + var el = $(this), + alt_text; + + phpbb.ajax_callbacks['alt_text'].call(this); + + if (el.attr('href').indexOf('unwatch') !== -1) + { + el.attr('href', el.attr('href').replace('unwatch', 'watch')); + el.parent().attr('class', 'icon-subscribe'); + } + else + { + el.attr('href', el.attr('href').replace('watch', 'unwatch')); + el.parent().attr('class', 'icon-unsubscribe'); + } +}); })(jQuery); // Avoid conflicts with other libraries diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index 2cb721073f..972d90305e 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -8,8 +8,8 @@

    Where to put the braces:

    -

    This one is a bit of a holy war, but we're going to use a style that can be summed up in one sentence: Braces always go on their own line. The closing brace should also always be at the same column as the corresponding opening brace, examples:

    +

    In PHP code, braces always go on their own line. The closing brace should also always be at the same column as the corresponding opening brace, examples:

     if (condition)
    @@ -427,6 +427,30 @@ function do_stuff()
     	...
     }
     	
    + +

    In JavaScript code, braces always go on the same line:

    + +
    +if (condition) {
    +	while (condition2) {
    +		...
    +	}
    +} else {
    +	...
    +}
    +
    +for (var i = 0; i < size; i++) {
    +	...
    +}
    +
    +while (condition) {
    +	...
    +}
    +
    +function do_stuff() {
    +	...
    +}
    +	

    Use spaces between tokens:

    This is another simple, easy step that helps keep code readable without much effort. Whenever you write an assignment, expression, etc.. Always leave one space between the tokens. Basically, write code as if it was English. Put spaces between variable names and operators. Don't put spaces just after an opening bracket or before a closing bracket. Don't put spaces just before a comma or a semicolon. This is best shown with a few examples, examples:

    -- cgit v1.2.1 From b83fa0349ad30eefed3e8064d29793a9b3dd17f7 Mon Sep 17 00:00:00 2001 From: Senky Date: Mon, 30 Apr 2012 21:55:24 +0200 Subject: [ticket/10847] fixing all misspelled "dependant" to "dependent" PHPBB3-10847 --- phpBB/develop/create_schema_files.php | 2 +- phpBB/develop/mysql_upgrader.php | 2 +- phpBB/includes/db/db_tools.php | 2 +- phpBB/includes/utf/utf_tools.php | 2 +- phpBB/language/en/acp/board.php | 2 +- phpBB/viewtopic.php | 2 +- 6 files changed, 6 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/create_schema_files.php b/phpBB/develop/create_schema_files.php index 4088657743..7a9bda32a0 100644 --- a/phpBB/develop/create_schema_files.php +++ b/phpBB/develop/create_schema_files.php @@ -397,7 +397,7 @@ foreach ($supported_dbms as $dbms) } } - // Adjust default value if db-dependant specified + // Adjust default value if db-dependent specified if (is_array($column_data[1])) { $column_data[1] = (isset($column_data[1][$dbms])) ? $column_data[1][$dbms] : $column_data[1]['default']; diff --git a/phpBB/develop/mysql_upgrader.php b/phpBB/develop/mysql_upgrader.php index 88596e9461..e2d8c97e8b 100644 --- a/phpBB/develop/mysql_upgrader.php +++ b/phpBB/develop/mysql_upgrader.php @@ -176,7 +176,7 @@ foreach ($schema_data as $table_name => $table_data) $column_type = $dbms_type_map['mysql_41'][$column_data[0]]; } - // Adjust default value if db-dependant specified + // Adjust default value if db-dependent specified if (is_array($column_data[1])) { $column_data[1] = (isset($column_data[1][$dbms])) ? $column_data[1][$dbms] : $column_data[1]['default']; diff --git a/phpBB/includes/db/db_tools.php b/phpBB/includes/db/db_tools.php index efb8b3ebd7..73eae4e967 100644 --- a/phpBB/includes/db/db_tools.php +++ b/phpBB/includes/db/db_tools.php @@ -1503,7 +1503,7 @@ class phpbb_db_tools $column_type = $this->dbms_type_map[$this->sql_layer][$column_data[0]]; } - // Adjust default value if db-dependant specified + // Adjust default value if db-dependent specified if (is_array($column_data[1])) { $column_data[1] = (isset($column_data[1][$this->sql_layer])) ? $column_data[1][$this->sql_layer] : $column_data[1]['default']; diff --git a/phpBB/includes/utf/utf_tools.php b/phpBB/includes/utf/utf_tools.php index 9dc0634e5b..c402e15032 100644 --- a/phpBB/includes/utf/utf_tools.php +++ b/phpBB/includes/utf/utf_tools.php @@ -1933,7 +1933,7 @@ function utf8_wordwrap($string, $width = 75, $break = "\n", $cut = false) * UTF8-safe basename() function * * basename() has some limitations and is dependent on the locale setting -* according to the PHP manual. Therefore we provide our own locale independant +* according to the PHP manual. Therefore we provide our own locale independent * basename function. * * @param string $filename The filename basename() should be applied to diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php index 758ef8ed82..7e3c227893 100644 --- a/phpBB/language/en/acp/board.php +++ b/phpBB/language/en/acp/board.php @@ -411,7 +411,7 @@ $lang = array_merge($lang, array( // Server Settings $lang = array_merge($lang, array( - 'ACP_SERVER_SETTINGS_EXPLAIN' => 'Here you define server and domain dependant settings. Please ensure the data you enter is accurate, errors will result in emails containing incorrect information. When entering the domain name remember it does include http:// or other protocol term. Only alter the port number if you know your server uses a different value, port 80 is correct in most cases.', + 'ACP_SERVER_SETTINGS_EXPLAIN' => 'Here you define server and domain dependent settings. Please ensure the data you enter is accurate, errors will result in emails containing incorrect information. When entering the domain name remember it does include http:// or other protocol term. Only alter the port number if you know your server uses a different value, port 80 is correct in most cases.', 'ENABLE_GZIP' => 'Enable GZip compression', 'ENABLE_GZIP_EXPLAIN' => 'Generated content will be compressed prior to sending it to the user. This can reduce network traffic but will also increase CPU usage on both server and client side. Requires zlib PHP extension to be loaded.', diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 1f167ed722..b75f4aeccf 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -1099,7 +1099,7 @@ while ($row = $db->sql_fetchrow($result)) { $user_sig = ''; - // We add the signature to every posters entry because enable_sig is post dependant + // We add the signature to every posters entry because enable_sig is post dependent if ($row['user_sig'] && $config['allow_sig'] && $user->optionget('viewsigs')) { $user_sig = $row['user_sig']; -- cgit v1.2.1 From 665f38d42f8692f5eab76348568ddb46b372492d Mon Sep 17 00:00:00 2001 From: Senky Date: Mon, 30 Apr 2012 22:01:53 +0200 Subject: [ticket/10846] fixing SQL query bug in acp_main.php PHPBB3-10846 --- phpBB/includes/acp/acp_main.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_main.php b/phpBB/includes/acp/acp_main.php index e529ae0e5a..cffe296651 100644 --- a/phpBB/includes/acp/acp_main.php +++ b/phpBB/includes/acp/acp_main.php @@ -201,7 +201,7 @@ class acp_main // No maximum post id? :o if (!$max_post_id) { - $sql = 'SELECT MAX(post_id) + $sql = 'SELECT MAX(post_id) as max_post_id FROM ' . POSTS_TABLE; $result = $db->sql_query($sql); $max_post_id = (int) $db->sql_fetchfield('max_post_id'); -- cgit v1.2.1 From 2dd71f65204c8e484c81147e4966e33fcb7d1f42 Mon Sep 17 00:00:00 2001 From: Senky Date: Tue, 1 May 2012 09:52:48 +0200 Subject: [ticket/10835] fixing misleading message in UCP PHPBB3-10835 --- phpBB/language/en/ucp.php | 3 ++- phpBB/styles/prosilver/template/ucp_profile_reg_details.html | 4 ++-- phpBB/styles/subsilver2/template/ucp_profile_reg_details.html | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 3ebc863447..fb417a5742 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -137,7 +137,8 @@ $lang = array_merge($lang, array( 'CREATE_FOLDER' => 'Add folder…', 'CURRENT_IMAGE' => 'Current image', 'CURRENT_PASSWORD' => 'Current password', - 'CURRENT_PASSWORD_EXPLAIN' => 'You must confirm your current password if you wish to change it, alter your e-mail address or username.', + 'CURRENT_PASSWORD_EXPLAIN' => 'You must enter your current password if you wish to alter your e-mail address or username.', + 'CURRENT_CHANGE_PASSWORD_EXPLAIN' => 'You must enter your current password if you wish to change it, alter your e-mail address or username.', 'CUR_PASSWORD_EMPTY' => 'You did not enter your current password.', 'CUR_PASSWORD_ERROR' => 'The current password you entered is incorrect.', 'CUSTOM_DATEFORMAT' => 'Custom…', diff --git a/phpBB/styles/prosilver/template/ucp_profile_reg_details.html b/phpBB/styles/prosilver/template/ucp_profile_reg_details.html index edd58d5e25..5eb55dc71c 100644 --- a/phpBB/styles/prosilver/template/ucp_profile_reg_details.html +++ b/phpBB/styles/prosilver/template/ucp_profile_reg_details.html @@ -45,7 +45,7 @@
    -

    {L_CURRENT_PASSWORD_EXPLAIN}
    +

    {L_CURRENT_CHANGE_PASSWORD_EXPLAIN}{L_CURRENT_PASSWORD_EXPLAIN}
    @@ -54,7 +54,7 @@
    - {S_HIDDEN_FIELDS}  + {S_HIDDEN_FIELDS}  {S_FORM_TOKEN}
    diff --git a/phpBB/styles/subsilver2/template/ucp_profile_reg_details.html b/phpBB/styles/subsilver2/template/ucp_profile_reg_details.html index 78fb5a9628..09f60ad5a7 100644 --- a/phpBB/styles/subsilver2/template/ucp_profile_reg_details.html +++ b/phpBB/styles/subsilver2/template/ucp_profile_reg_details.html @@ -42,7 +42,7 @@ {L_CONFIRM_CHANGES} - {L_CURRENT_PASSWORD}:
    {L_CURRENT_PASSWORD_EXPLAIN} + {L_CURRENT_PASSWORD}:
    {L_CURRENT_CHANGE_PASSWORD_EXPLAIN}{L_CURRENT_PASSWORD_EXPLAIN} -- cgit v1.2.1 From 63b41913a472a688b5b85bdbbd01e45366449781 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Tue, 1 May 2012 18:25:11 +0300 Subject: [ticket/10799] Removing global variable from includejs Removing global $phpbb_root_path from includejs implementation PHPBB3-10799 --- phpBB/includes/template/filter.php | 4 ++-- phpBB/includes/template/template.php | 7 ++++++- 2 files changed, 8 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/template/filter.php b/phpBB/includes/template/filter.php index 4a2593b757..ad2e35de6a 100644 --- a/phpBB/includes/template/filter.php +++ b/phpBB/includes/template/filter.php @@ -905,12 +905,12 @@ class phpbb_template_filter extends php_user_filter if (substr($filename, 0, strlen($this->phpbb_root_path)) != $this->phpbb_root_path) { // Absolute path, include as is - return ' $_template->_js_include(\'' . addslashes($filename) . '\', false); '; + return ' $_template->_js_include(\'' . addslashes($filename) . '\', false, false); '; } // Relative path, remove root path from it $filename = substr($filename, strlen($this->phpbb_root_path)); - return ' global $phpbb_root_path; $_template->_js_include($phpbb_root_path . \'' . addslashes($filename) . '\', false); '; + return ' $_template->_js_include(\'' . addslashes($filename) . '\', false, true); '; } /** diff --git a/phpBB/includes/template/template.php b/phpBB/includes/template/template.php index e6512c8417..8ab3c44be3 100644 --- a/phpBB/includes/template/template.php +++ b/phpBB/includes/template/template.php @@ -496,14 +496,19 @@ class phpbb_template * * @param string $file file name * @param bool $locate True if file needs to be located + * @param bool $relative True if path is relative to phpBB root directory. Ignored if $locate == true */ - public function _js_include($file, $locate = false) + public function _js_include($file, $locate = false, $relative = false) { // Locate file if ($locate) { $file = $this->locator->get_first_file_location(array($file), true, true); } + else if ($relative) + { + $file = $this->phpbb_root_path . $file; + } $file .= (strpos($file, '?') === false) ? '?' : '&'; $file .= 'assets_version=' . $this->config['assets_version']; -- cgit v1.2.1 From 7294c7143144b06dde799936e7631493b1df4e6c Mon Sep 17 00:00:00 2001 From: Vinny Date: Thu, 26 Apr 2012 21:19:08 -0300 Subject: [ticket/10778] Remove extra space from close link in prosilver smilies window PHPBB3-10778 --- phpBB/styles/prosilver/template/posting_smilies.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/posting_smilies.html b/phpBB/styles/prosilver/template/posting_smilies.html index 84191588e2..d3d6293586 100644 --- a/phpBB/styles/prosilver/template/posting_smilies.html +++ b/phpBB/styles/prosilver/template/posting_smilies.html @@ -18,6 +18,6 @@
    {PAGINATION}
    -{L_CLOSE_WINDOW} +{L_CLOSE_WINDOW} -- cgit v1.2.1 From ed67dcf3d83d40623471fe191fdc415289c59c21 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 2 May 2012 21:12:18 +0200 Subject: [ticket/10818] Global Announcements Update Dialog should call exit_handler() PHPBB3-10818 --- phpBB/install/database_update.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index a0892005d2..665db1f2f0 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -260,7 +260,7 @@ if ($has_global && !$ga_forum_id) Date: Thu, 3 May 2012 22:30:22 +0100 Subject: [ticket/10855] Added array trailing commas info in js to guidelines. PHPBB3-10855 --- phpBB/docs/coding-guidelines.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html index fbec59a6ff..be78ad0b3b 100644 --- a/phpBB/docs/coding-guidelines.html +++ b/phpBB/docs/coding-guidelines.html @@ -526,7 +526,7 @@ $post_url = "{$phpbb_root_path}posting.$phpEx?mode=$mode&amp;start=$start";

    In SQL statements mixing single and double quotes is partly allowed (following the guidelines listed here about SQL formatting), else one should try to only use one method - mostly single quotes.

    Commas after every array element:

    -

    If an array is defined with each element on its own line, you still have to modify the previous line to add a comma when appending a new element. PHP allows for trailing (useless) commas in array definitions. These should always be used so each element including the comma can be appended with a single line

    +

    If an array is defined with each element on its own line, you still have to modify the previous line to add a comma when appending a new element. PHP allows for trailing (useless) commas in array definitions. These should always be used so each element including the comma can be appended with a single line. In JavaScript, you should not use the trailing comma, as IE doesn't like it.

    // wrong

    -- 
    cgit v1.2.1
    
    
    From 06efa6c0beac3cb4fed0e7412c3b60f91f4181bb Mon Sep 17 00:00:00 2001
    From: Callum Macrae 
    Date: Thu, 3 May 2012 22:34:35 +0100
    Subject: [ticket/10855] Added JS camelCaps info to guidelines.
    
    PHPBB3-10855
    ---
     phpBB/docs/coding-guidelines.html | 10 ++++++++--
     1 file changed, 8 insertions(+), 2 deletions(-)
    
    (limited to 'phpBB')
    
    diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html
    index be78ad0b3b..237bc18d20 100644
    --- a/phpBB/docs/coding-guidelines.html
    +++ b/phpBB/docs/coding-guidelines.html
    @@ -295,11 +295,17 @@ PHPBB_QA                   (Set board to QA-Mode, which means the updater also c
     	

    We will not be using any form of hungarian notation in our naming conventions. Many of us believe that hungarian naming is one of the primary code obfuscation techniques currently in use.

    Variable Names:

    -

    Variable names should be in all lowercase, with words separated by an underscore, example:

    +

    In PHP, variable names should be in all lowercase, with words separated by an underscore, example:

    $current_user is right, but $currentuser and $currentUser are not.

    + +

    In JavaScript, variable names should use camel caps:

    + +
    +

    currentUser is right, but currentuser and current_user are not.

    +

    Names should be descriptive, but concise. We don't want huge sentences as our variable names, but typing an extra couple of characters is always better than wondering what exactly a certain variable is for.

    @@ -317,7 +323,7 @@ for ($i = 0; $i < $outer_size; $i++)

    Function Names:

    -

    Functions should also be named descriptively. We're not programming in C here, we don't want to write functions called things like "stristr()". Again, all lower-case names with words separated by a single underscore character. Function names should preferably have a verb in them somewhere. Good function names are print_login_status(), get_user_data(), etc.

    +

    Functions should also be named descriptively. We're not programming in C here, we don't want to write functions called things like "stristr()". Again, all lower-case names with words separated by a single underscore character in PHP, and camel caps in JavaScript. Function names should preferably have a verb in them somewhere. Good function names are print_login_status(), get_user_data(), etc. Constructor functions in JavaScript should begin with a capital letter.

    Function Arguments:

    Arguments are subject to the same guidelines as variable names. We don't want a bunch of functions like: do_stuff($a, $b, $c). In most cases, we'd like to be able to tell how to use a function by just looking at its declaration.

    -- cgit v1.2.1 From fce0c5d436f7a2b3b8b39128b607e0e9d81018ea Mon Sep 17 00:00:00 2001 From: Bruno Ais Date: Fri, 4 May 2012 20:08:42 +0100 Subject: [ticket/10871] Delete the unwanted implode Deleted the implode that had no reason to be there PHPBB3-10871 --- phpBB/includes/mcp/mcp_queue.php | 2 -- 1 file changed, 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/mcp/mcp_queue.php b/phpBB/includes/mcp/mcp_queue.php index 59fa8b7263..4d720a435c 100644 --- a/phpBB/includes/mcp/mcp_queue.php +++ b/phpBB/includes/mcp/mcp_queue.php @@ -268,8 +268,6 @@ class mcp_queue trigger_error('NOT_MODERATOR'); } - $forum_list = implode(', ', $forum_list); - $sql = 'SELECT SUM(forum_topics) as sum_forum_topics FROM ' . FORUMS_TABLE . ' WHERE ' . $db->sql_in_set('forum_id', $forum_list); -- cgit v1.2.1 From 58842b5ca8020b16a99f5420381a2b095bba89de Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 5 May 2012 16:01:07 -0400 Subject: [ticket/10834] Backport general development language changes to 3.0. PHPBB3-10688 PHPBB3-10834 --- phpBB/docs/README.html | 29 +++++++++++++++++------------ 1 file changed, 17 insertions(+), 12 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/README.html b/phpBB/docs/README.html index aa60d7dd25..fb30ef5cba 100644 --- a/phpBB/docs/README.html +++ b/phpBB/docs/README.html @@ -106,6 +106,7 @@
    • Updates from phpBB3 RC1 to the latest version
    • +
    • Note: if using the Automatic Update Package, updates are supported from phpBB 3.0.2 onward. To update a pre-3.0.2 installation, first update to 3.0.2 and then update to the current version.
    • Conversions from phpBB 2.0.x to the latest version
    • New installations of phpBB3 - always only the latest released version
    @@ -136,13 +137,13 @@

    This is the official location for all supported language sets. If you download a package from a 3rd party site you do so with the understanding that we cannot offer support. So please, do not ask for help in these cases!

    -

    Installation of these packages is straightforward, simply download the required language pack and unarchive it into the languages/ folder. Please ensure you retain the directory structure when doing this! Once uploaded go to the Admin->System->Language Packs and install the now appeared new language pack. To install the style imageset you should download the imageset for your language and unarchive the file/s into the relevant imageset directory (styles/prosilver/imageset or styles/subsilver2/imageset), again you must retain the directory structure. Once installed the imageset will become immediately available.

    +

    Installation of these packages is straightforward, simply download the required language pack and unarchive it into the languages/ folder. Please ensure you retain the directory structure when doing this! Once uploaded go to the Admin->System->Language Packs and install the now appearing new language pack. To install the style imageset you should download the imageset for your language and unarchive the file/s into the relevant imageset directory (styles/prosilver/imageset or styles/subsilver2/imageset), again you must retain the directory structure. Once installed the imageset will become immediately available.

    If your language is not available please visit our forums where you will find a topic listing translations currently available or in preparation. This topic also gives you information should you wish to volunteer to translate a language not currently listed.

    2.ii. Styles

    -

    Although phpBB Group are rather proud of the included styles we realise that it may not be to everyones tastes. Therefore phpBB3 allows styles to be switched with relative ease. Firstly you need to locate and download a style you like. We maintain such a site at

    +

    Although phpBB Group are rather proud of the included styles we realise that they may not be to everyone's tastes. Therefore phpBB3 allows styles to be switched with relative ease. Firstly you need to locate and download a style you like. We maintain such a site at

    http://www.phpbb.com/styles/

    @@ -192,7 +193,7 @@

    phpBB Group maintains a thriving community where a number of people have generously decided to donate their time to help support users. This site can be found at:

    -

    http://www.phpbb.com/

    +

    http://www.phpbb.com/community/

    If you do seek help via our forums please be sure to do a Search before posting. This may well save both you and us time and allow the developer, moderator and support groups to spend more time responding to people with unknown issues and problems. Please also remember that phpBB is an entirely volunteer effort, no one receives any compensation for the time they give, this includes moderators as well as developers. So please be respectful and mindful when awaiting responses.

    @@ -200,6 +201,8 @@

    Another place you may find help is our IRC channel. This operates on the Freenode IRC network, irc.freenode.net and the channel is #phpbb and can be accessed by any good IRC client such as mIRC, XChat, etc. Again, please do not abuse this service and be respectful of other users.

    +

    There are other IRC channels available, please see http://www.phpbb.com/support/irc/ for the complete list.

    + @@ -216,9 +219,9 @@
    -

    This is the third stable release of phpBB. The 3.0.x line is essentially feature frozen, with only point releases seeing fixes for bugs and security issues, though feature alterations and minor feature additions may be done if deemed absolutely required. Our next major release will be phpBB 3.2 and the planning phase has begun (the unstable development version is 3.1). Please do not post questions asking when 3.2 will be available, no release date has been set.

    +

    This is the third stable release of phpBB. The 3.0.x line is essentially feature frozen, with only point releases seeing fixes for bugs and security issues, though feature alterations and minor feature additions may be done if deemed absolutely required. Our next major release will be phpBB 3.1. Please do not post questions asking when 3.1 will be available, no release date has been set.

    -

    For those interested in the development of phpBB should keep an eye on the community forums to see how things are progressing:

    +

    Those interested in the development of phpBB should keep an eye on the development forums to see how things are progressing:

    http://area51.phpbb.com/phpBB/

    @@ -240,17 +243,17 @@
    -

    The phpBB Group uses a bug tracking system to store, list and manage all reported bugs, it can be found at the location listed below. Please DO NOT post bug reports to our forums, they will be locked. In addition please DO NOT use the bug tracker for support requests. Posting such a request will only see you directed to the support forums (while taking time away from working on real bugs).

    +

    The phpBB Group uses a bug tracking system to store, list and manage all reported bugs, it can be found at the location listed below. Please DO NOT post bug reports to our forums. In addition please DO NOT use the bug tracker for support requests. Posting such a request will only see you directed to the support forums (while taking time away from working on real bugs).

    -

    http://tracker.phpbb.com/

    +

    http://tracker.phpbb.com/browse/PHPBB3

    While we very much appreciate receiving bug reports (the more reports the more stable phpBB will be) we ask you carry out a few steps before adding new entries:

      -
    • Firstly determine if your bug is reproduceable, how to determine this depends on the bug in question. Only if the bug is reproduceable it is likely to be a problem with phpBB3 (or in some way connected). If something cannot be reproduced it may turn out to have been your hosting provider working on something, a user doing something silly, etc. Bug reports for non-reproduceable events can slow down our attempts to fix real, reproduceable issues

    • +
    • Firstly determine if your bug is reproduceable, how to determine this depends on the bug in question. Only if the bug is reproduceable it is likely to be a problem with phpBB3 (or in some way connected). If something cannot be reproduced it may turn out to have been your hosting provider working on something, a user doing something silly, etc. Bug reports for non-reproduceable events can slow down our attempts to fix real, reproduceable issues.

    • Next please read or search through the existing bug reports to see if your bug (or one very similar to it) is already listed. If it is please add to that existing bug rather than creating a new duplicate entry (all this does is slow us down).

    • -
    • Check the forums (use search!) to see if people have discussed anything that sounds similar to what you are seeing. However, as noted above please DO NOT post your particular bug to the forum unless it's non-reproduceable or you are sure it's related to something you have done rather phpBB3

    • -
    • If no existing bug exists then please feel free to add it
    • +
    • Check the forums (use search!) to see if people have discussed anything that sounds similar to what you are seeing. However, as noted above please DO NOT post your particular bug to the forum unless it's non-reproduceable or you are sure it's related to something you have done rather phpBB3.

    • +
    • If no existing bug exists then please feel free to add it.

    If you do post a new bug (i.e. one that isn't already listed in the bug tracker) firstly make sure you have logged in (your username and password are the same as for the community forums) then please include the following details:

    @@ -261,10 +264,12 @@
  • DB type/version, e.g. MySQL 4.0.1, PostgreSQL 7.3.2, MSSQL Server 2000 SP1, etc.
  • -

    The relevant database type/version is listed within the administration control panel

    +

    The relevant database type/version is listed within the administration control panel.

    Please also be as detailed as you can in your report, if possible list the steps required to duplicate the problem. If you have a patch that fixes the issue, please attach it to the ticket or submit a pull request on GitHub.

    +

    If you create a patch, it is very much appreciated (but not required) if you follow the phpBB coding guidelines. Please note that the coding guidelines are somewhat different between different versions of phpBB. For phpBB 3.0.x the coding guidelines may be found here: http://area51.phpbb.com/docs/30x/coding-guidelines.html

    +

    Once a bug has been submitted you will be emailed any follow up comments added to it. Please if you are requested to supply additional information, do so! It is frustrating for us to receive bug reports, ask for additional information but get nothing. In these cases we have a policy of closing the bug, which may leave a very real problem in place. Obviously we would rather not have this situation arise.

    5.i. Security related bugs

    @@ -317,7 +322,7 @@

    Please remember that running any application on a developmental version of PHP can lead to strange/unexpected results which may appear to be bugs in the application (which may not be true). Therefore we recommend you upgrade to the newest stable version of PHP before running phpBB3. If you are running a developmental version of PHP please check any bugs you find on a system running a stable release before submitting.

    -

    This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MSSQL Server 2000, PostgreSQL 7.x, Oracle 8, SQLite and Firebird. Versions of PHP used range from 4.3.3 to 6.0.0-dev without problem.

    +

    This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MSSQL Server 2000, PostgreSQL 7.x, Oracle 8, SQLite and Firebird. Versions of PHP used range from 4.3.3 to 5.4.x without problem.

    7.i. Notice on PHP security issues

    -- cgit v1.2.1 From c34ee343ba1ff0c401f3a04216e9e7ffb9a1a859 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Sat, 5 May 2012 16:08:37 -0400 Subject: [ticket/10843] Backport changes to install language. PHPBB3-10688 PHPBB3-10843 --- phpBB/docs/INSTALL.html | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/INSTALL.html b/phpBB/docs/INSTALL.html index c54e408be2..6ab118e3ee 100644 --- a/phpBB/docs/INSTALL.html +++ b/phpBB/docs/INSTALL.html @@ -141,13 +141,13 @@
  • PostgreSQL 7.3+
  • SQLite 2.8.2+
  • Firebird 2.1+
  • -
  • MS SQL Server 2000 or above (directly or via ODBC)
  • +
  • MS SQL Server 2000 or above (directly or via ODBC or the native adapter)
  • Oracle
  • -
  • PHP 4.3.3+ (>=4.3.3, >4.4.x, >5.x.x, >6.0-dev (compatible)) with support for the database you intend to use.
  • +
  • PHP 4.3.3+ (>=4.3.3, >=4.4.x, >=5.x.x, >=5.4.x) with support for the database you intend to use.
  • getimagesize() function need to be enabled.
  • -
  • These optional presence of the following modules within PHP will provide access to additional features, but they are not required. +
  • Presence of the following modules within PHP will provide access to additional features, but they are not required:
    • zlib Compression support
    • Remote FTP support
    • @@ -182,7 +182,7 @@

      All .php, .inc, .sql, .cfg, .html and .txt files should be uploaded in ASCII mode, while all graphics should be uploaded in BINARY mode. If you are unfamiliar with what this means please refer to your FTP client documentation. In most cases this is all handled transparantly by your ftp client but if you encounter problems later you should be sure the files where uploaded correctly as described here.

      -

      phpBB3 comes supplied with english as its standard language. However a number of separate packs for different languages are available. If you are not a native english speaker you may wish to install one or more of these packages before continuing. The installation process below will allow you to select a default language from those available (you can of course change this default at a later stage). For more details of language packs, where to obtain them and how to install them please see the README.

      +

      phpBB3 comes supplied with British English as its standard language. However a number of separate packs for different languages are available. If you are not a native English speaker you may wish to install one or more of these packages before continuing. The installation process below will allow you to select a default language from those available (you can of course change this default at a later stage). For more details of language packs, where to obtain them and how to install them please see the README.

      Once all the files have been uploaded to your site you should point your browser at this location with the addition of install/. For example if your domain name is www.mydomain.tld and you placed phpBB3 in a directory /phpBB3 off your web root you would enter http://www.mydomain.tld/phpBB3/install/ or (alternatively) http://www.mydomain.tld/phpBB3/install/index.php into your browser. When you have done this you should see the phpBB3 Installation screen appear.

      -- cgit v1.2.1 From a960bd6790a60bd1023e632230848e9e786c8921 Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Sun, 6 May 2012 19:37:49 +0300 Subject: [ticket/10860] Fixing js error in updater Fixing javascript error in side-by-side diff styling in updater: resizing inner block instead of outer block and increasing height by inner/outer block difference. PHPBB3-10860 --- phpBB/adm/style/install_update_diff.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/install_update_diff.html b/phpBB/adm/style/install_update_diff.html index b65a014312..15ea00141d 100644 --- a/phpBB/adm/style/install_update_diff.html +++ b/phpBB/adm/style/install_update_diff.html @@ -15,12 +15,12 @@ // Date: Mon, 7 May 2012 08:18:50 +0200 Subject: [ticket/10835] changing CURRENT_CHANGE_PASSWORD_EXPLAIN language entry PHPBB3-10835 --- phpBB/language/en/ucp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index fb417a5742..6f6b319d48 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -138,7 +138,7 @@ $lang = array_merge($lang, array( 'CURRENT_IMAGE' => 'Current image', 'CURRENT_PASSWORD' => 'Current password', 'CURRENT_PASSWORD_EXPLAIN' => 'You must enter your current password if you wish to alter your e-mail address or username.', - 'CURRENT_CHANGE_PASSWORD_EXPLAIN' => 'You must enter your current password if you wish to change it, alter your e-mail address or username.', + 'CURRENT_CHANGE_PASSWORD_EXPLAIN' => 'To change your password, your email address, or your username, you must enter your current password.', 'CUR_PASSWORD_EMPTY' => 'You did not enter your current password.', 'CUR_PASSWORD_ERROR' => 'The current password you entered is incorrect.', 'CUSTOM_DATEFORMAT' => 'Custom…', -- cgit v1.2.1 From e52d23848a1b116d32fbad9dd384e0755553b829 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Tue, 8 May 2012 18:44:43 -0500 Subject: [ticket/10858] Fix MSSQL Native's row seeking behavior The result_mssqlnative class remains in case someone wants to use it PHPBB3-10858 --- phpBB/includes/db/mssqlnative.php | 31 ++++++++++++++++++++++++++++--- 1 file changed, 28 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 7fbc374e77..6391664a3e 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -447,14 +447,39 @@ class dbal_mssqlnative extends dbal { global $cache; + if ($query_id === false) + { + $query_id = $this->query_result; + } + if (isset($cache->sql_rowset[$query_id])) { return $cache->sql_rowseek($rownum, $query_id); } - $seek = new result_mssqlnative($query_id); - $row = $seek->seek($rownum); - return ($row = $seek->fetch()) ? $row : false; + if ($query_id === false) + { + return false; + } + + $this->sql_freeresult($query_id); + $query_id = $this->sql_query($this->last_query_text); + + if ($query_id === false) + { + return false; + } + + // We do not fetch the row for rownum == 0 because then the next resultset would be the second row + for ($i = 0; $i < $rownum; $i++) + { + if (!$this->sql_fetchrow($query_id)) + { + return false; + } + } + + return true; } /** -- cgit v1.2.1 From 09d49fb7b2be51a29f5a03c0a1a3816d7e55a466 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Tue, 8 May 2012 19:41:22 -0500 Subject: [ticket/10858] Move generic row seeking to DBAL Removed from: firebird, mssql_odbc, and mssqlnative PHPBB3-10858 --- phpBB/includes/db/dbal.php | 43 +++++++++++++++++++++++++++++++++++++++ phpBB/includes/db/firebird.php | 43 --------------------------------------- phpBB/includes/db/mssql_odbc.php | 43 --------------------------------------- phpBB/includes/db/mssqlnative.php | 43 --------------------------------------- 4 files changed, 43 insertions(+), 129 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 5d456c2ff0..358df50402 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -194,6 +194,49 @@ class dbal return false; } + /** + * Seek to given row number + * rownum is zero-based + */ + function sql_rowseek($rownum, &$query_id) + { + global $cache; + + if ($query_id === false) + { + $query_id = $this->query_result; + } + + if (isset($cache->sql_rowset[$query_id])) + { + return $cache->sql_rowseek($rownum, $query_id); + } + + if ($query_id === false) + { + return false; + } + + $this->sql_freeresult($query_id); + $query_id = $this->sql_query($this->last_query_text); + + if ($query_id === false) + { + return false; + } + + // We do not fetch the row for rownum == 0 because then the next resultset would be the second row + for ($i = 0; $i < $rownum; $i++) + { + if (!$this->sql_fetchrow($query_id)) + { + return false; + } + } + + return true; + } + /** * Fetch field * if rownum is false, the current row is used, else it is pointing to the row (zero-based) diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index 7e3f15ed1d..7072c58ac0 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -359,49 +359,6 @@ class dbal_firebird extends dbal return (sizeof($row)) ? $row : false; } - /** - * Seek to given row number - * rownum is zero-based - */ - function sql_rowseek($rownum, &$query_id) - { - global $cache; - - if ($query_id === false) - { - $query_id = $this->query_result; - } - - if (isset($cache->sql_rowset[$query_id])) - { - return $cache->sql_rowseek($rownum, $query_id); - } - - if ($query_id === false) - { - return; - } - - $this->sql_freeresult($query_id); - $query_id = $this->sql_query($this->last_query_text); - - if ($query_id === false) - { - return false; - } - - // We do not fetch the row for rownum == 0 because then the next resultset would be the second row - for ($i = 0; $i < $rownum; $i++) - { - if (!$this->sql_fetchrow($query_id)) - { - return false; - } - } - - return true; - } - /** * Get last inserted id after insert statement */ diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 75a080b1b7..34f7a87337 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -255,49 +255,6 @@ class dbal_mssql_odbc extends dbal return ($query_id !== false) ? @odbc_fetch_array($query_id) : false; } - /** - * Seek to given row number - * rownum is zero-based - */ - function sql_rowseek($rownum, &$query_id) - { - global $cache; - - if ($query_id === false) - { - $query_id = $this->query_result; - } - - if (isset($cache->sql_rowset[$query_id])) - { - return $cache->sql_rowseek($rownum, $query_id); - } - - if ($query_id === false) - { - return false; - } - - $this->sql_freeresult($query_id); - $query_id = $this->sql_query($this->last_query_text); - - if ($query_id === false) - { - return false; - } - - // We do not fetch the row for rownum == 0 because then the next resultset would be the second row - for ($i = 0; $i < $rownum; $i++) - { - if (!$this->sql_fetchrow($query_id)) - { - return false; - } - } - - return true; - } - /** * Get last inserted id after insert statement */ diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 6391664a3e..92ac9b1fb9 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -439,49 +439,6 @@ class dbal_mssqlnative extends dbal return $row; } - /** - * Seek to given row number - * rownum is zero-based - */ - function sql_rowseek($rownum, &$query_id) - { - global $cache; - - if ($query_id === false) - { - $query_id = $this->query_result; - } - - if (isset($cache->sql_rowset[$query_id])) - { - return $cache->sql_rowseek($rownum, $query_id); - } - - if ($query_id === false) - { - return false; - } - - $this->sql_freeresult($query_id); - $query_id = $this->sql_query($this->last_query_text); - - if ($query_id === false) - { - return false; - } - - // We do not fetch the row for rownum == 0 because then the next resultset would be the second row - for ($i = 0; $i < $rownum; $i++) - { - if (!$this->sql_fetchrow($query_id)) - { - return false; - } - } - - return true; - } - /** * Get last inserted id after insert statement */ -- cgit v1.2.1 From 226743d10bd1c31095c8bf970de8698789ca6e61 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 10 May 2012 11:43:25 +0200 Subject: [ticket/10881] Replace old (and unify) file headers in develop files. This especially also fixes the problem of the copyright symbol being represented using 0xA9, which is neither ASCII nor the appropriate UTF8 byte sequence for the copyright symbol. PHPBB3-10881 --- phpBB/develop/add_permissions.php | 18 +++++++----------- phpBB/develop/calc_email_hash.php | 18 +++++++----------- phpBB/develop/change_smiley_ref.php | 24 +++++++----------------- phpBB/develop/check_flash_bbcodes.php | 4 +--- phpBB/develop/create_variable_overview.php | 22 +++++++++------------- phpBB/develop/fill.php | 17 ++++++++--------- phpBB/develop/merge_attachment_tables.php | 18 +++++++----------- phpBB/develop/merge_post_tables.php | 25 +++++++------------------ phpBB/develop/mysql_upgrader.php | 1 - 9 files changed, 53 insertions(+), 94 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/add_permissions.php b/phpBB/develop/add_permissions.php index 035c23f49c..6f26bf6ac6 100644 --- a/phpBB/develop/add_permissions.php +++ b/phpBB/develop/add_permissions.php @@ -1,15 +1,11 @@ Date: Mon, 26 Mar 2012 22:59:35 +0530 Subject: [ticket/10308] disable retain/ delete posts option when deleting a user When deleting a user, it asks whether the posts by user should be retained or deleted. The selection should be disable if the user has no posts. PHPBB3-10308 --- phpBB/adm/style/acp_users_overview.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index 9237e45daf..0eeb7cde8b 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -140,7 +140,7 @@ {L_DELETE_USER}

      {L_DELETE_USER_EXPLAIN}
      -
      +

      -- cgit v1.2.1 From 239e6016a308cd80135ebe9d7057c2eb102af29d Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Mon, 9 Apr 2012 02:21:45 +0530 Subject: [ticket/10308] Displays message to user if there are no posts. While deletng the user, if the user has no posts in addition to the options being disabled an added message is displayed. PHPBB3-10308 --- phpBB/adm/style/acp_users_overview.html | 3 +++ phpBB/language/en/acp/users.php | 1 + 2 files changed, 4 insertions(+) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index 0eeb7cde8b..b158995563 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -141,6 +141,9 @@


      {L_DELETE_USER_EXPLAIN}
      + +
      {L_NO_POSTS}
      +

      diff --git a/phpBB/language/en/acp/users.php b/phpBB/language/en/acp/users.php index eda9659795..928699fd11 100644 --- a/phpBB/language/en/acp/users.php +++ b/phpBB/language/en/acp/users.php @@ -77,6 +77,7 @@ $lang = array_merge($lang, array( 'MOVE_POSTS_EXPLAIN' => 'Please select the forum to which you wish to move all the posts this user has made.', + 'NO_POSTS' => 'The user has no posts.', 'NO_SPECIAL_RANK' => 'No special rank assigned', 'NO_WARNINGS' => 'No warnings.', 'NOT_MANAGE_FOUNDER' => 'You tried to manage a user with founder status. Only founders are allowed to manage other founders.', -- cgit v1.2.1 From 8f7e85604bb36679db1baa37588fc5e39a8b853f Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Wed, 11 Apr 2012 03:00:16 +0530 Subject: [ticket/10308] fixes language entity. Language key has been changed and has been made more specific to avoid conflicts PHPBB3-10308 --- phpBB/adm/style/acp_users_overview.html | 2 +- phpBB/language/en/acp/users.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index b158995563..73be17c4c1 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -142,7 +142,7 @@


      {L_DELETE_USER_EXPLAIN}
      -
      {L_NO_POSTS}
      +
      {L_USER_NO_POSTS}

      diff --git a/phpBB/language/en/acp/users.php b/phpBB/language/en/acp/users.php index 928699fd11..25e172e55c 100644 --- a/phpBB/language/en/acp/users.php +++ b/phpBB/language/en/acp/users.php @@ -77,7 +77,6 @@ $lang = array_merge($lang, array( 'MOVE_POSTS_EXPLAIN' => 'Please select the forum to which you wish to move all the posts this user has made.', - 'NO_POSTS' => 'The user has no posts.', 'NO_SPECIAL_RANK' => 'No special rank assigned', 'NO_WARNINGS' => 'No warnings.', 'NOT_MANAGE_FOUNDER' => 'You tried to manage a user with founder status. Only founders are allowed to manage other founders.', @@ -125,6 +124,7 @@ $lang = array_merge($lang, array( 'USER_GROUP_SPECIAL' => 'Pre-defined groups user is a member of', 'USER_LIFTED_NR' => 'Successfully removed the user’s newly registered status.', 'USER_NO_ATTACHMENTS' => 'There are no attached files to display.', + 'USER_NO_POSTS' => 'The user has no posts.', 'USER_OUTBOX_EMPTIED' => 'Successfully emptied user’s private message outbox.', 'USER_OUTBOX_EMPTY' => 'The user’s private message outbox was already empty.', 'USER_OVERVIEW_UPDATED' => 'User details updated.', -- cgit v1.2.1 From 59177a86c4160a4879aaf77e602f91ccea0fb107 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Fri, 20 Apr 2012 17:11:07 +0530 Subject: [ticket/10308] fix language and user's total posts language modified to be clear and select box disappears in case no posts by user. user's total posts are fetched using a new query. PHPBB3-10308 --- phpBB/adm/style/acp_users_overview.html | 8 +++++--- phpBB/includes/acp/acp_users.php | 8 ++++++++ phpBB/language/en/acp/users.php | 2 +- 3 files changed, 14 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index 73be17c4c1..e6a1411bbb 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -140,9 +140,11 @@ {L_DELETE_USER}


      {L_DELETE_USER_EXPLAIN}
      -
      - -
      {L_USER_NO_POSTS}
      +
      + + {L_USER_NO_POSTS} + +

      diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 363c900edc..1f0f053a85 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1009,6 +1009,13 @@ class acp_users $user_row['posts_in_queue'] = (int) $db->sql_fetchfield('posts_in_queue'); $db->sql_freeresult($result); + $sql = 'SELECT COUNT(post_id) as user_total_posts + FROM ' . POSTS_TABLE . ' + WHERE poster_id = '. $user_id; + $result = $db->sql_query($sql); + $user_row['user_total_posts'] = (int) $db->sql_fetchfield('user_total_posts'); + $db->sql_freeresult($result); + $template->assign_vars(array( 'L_NAME_CHARS_EXPLAIN' => sprintf($user->lang[$config['allow_name_chars'] . '_EXPLAIN'], $config['min_name_chars'], $config['max_name_chars']), 'L_CHANGE_PASSWORD_EXPLAIN' => sprintf($user->lang[$config['pass_complex'] . '_EXPLAIN'], $config['min_pass_chars'], $config['max_pass_chars']), @@ -1036,6 +1043,7 @@ class acp_users 'USER_EMAIL' => $user_row['user_email'], 'USER_WARNINGS' => $user_row['user_warnings'], 'USER_POSTS' => $user_row['user_posts'], + 'USER_TOTAL_POSTS' => $user_row['user_total_posts'], 'USER_INACTIVE_REASON' => $inactive_reason, )); diff --git a/phpBB/language/en/acp/users.php b/phpBB/language/en/acp/users.php index 25e172e55c..7f3a3d2a48 100644 --- a/phpBB/language/en/acp/users.php +++ b/phpBB/language/en/acp/users.php @@ -124,7 +124,7 @@ $lang = array_merge($lang, array( 'USER_GROUP_SPECIAL' => 'Pre-defined groups user is a member of', 'USER_LIFTED_NR' => 'Successfully removed the user’s newly registered status.', 'USER_NO_ATTACHMENTS' => 'There are no attached files to display.', - 'USER_NO_POSTS' => 'The user has no posts.', + 'USER_NO_POSTS' => 'The user has no posts to retain or delete.', 'USER_OUTBOX_EMPTIED' => 'Successfully emptied user’s private message outbox.', 'USER_OUTBOX_EMPTY' => 'The user’s private message outbox was already empty.', 'USER_OVERVIEW_UPDATED' => 'User details updated.', -- cgit v1.2.1 From faf232219ef3b7a5dcc3d22639d4005040b0d8ad Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Fri, 20 Apr 2012 23:11:55 +0530 Subject: [ticket/10308] renames language key to USER_NO_POSTS_DELETE language key renamed to make its usability more clearer. PHPBB3-10308 --- phpBB/adm/style/acp_users_overview.html | 2 +- phpBB/language/en/acp/users.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index e6a1411bbb..2a27cc2a63 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -142,7 +142,7 @@


      {L_DELETE_USER_EXPLAIN}
      - {L_USER_NO_POSTS} + {L_USER_NO_POSTS_DELETE}
      diff --git a/phpBB/language/en/acp/users.php b/phpBB/language/en/acp/users.php index 7f3a3d2a48..52b7a35eac 100644 --- a/phpBB/language/en/acp/users.php +++ b/phpBB/language/en/acp/users.php @@ -124,7 +124,7 @@ $lang = array_merge($lang, array( 'USER_GROUP_SPECIAL' => 'Pre-defined groups user is a member of', 'USER_LIFTED_NR' => 'Successfully removed the user’s newly registered status.', 'USER_NO_ATTACHMENTS' => 'There are no attached files to display.', - 'USER_NO_POSTS' => 'The user has no posts to retain or delete.', + 'USER_NO_POSTS_DELETE' => 'The user has no posts to retain or delete.', 'USER_OUTBOX_EMPTIED' => 'Successfully emptied user’s private message outbox.', 'USER_OUTBOX_EMPTY' => 'The user’s private message outbox was already empty.', 'USER_OVERVIEW_UPDATED' => 'User details updated.', -- cgit v1.2.1 From cf303c34788b32e1c09f483e2760b77eff3e05ca Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Sat, 21 Apr 2012 14:29:21 +0530 Subject: [ticket/10308] fixes user deletion if no posts introduces a hidden input field with retain posts as the mode in case user has no posts. PHPBB3-10308 --- phpBB/adm/style/acp_users_overview.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index 2a27cc2a63..fdc1d55855 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -142,7 +142,7 @@

      {L_DELETE_USER_EXPLAIN}
      - {L_USER_NO_POSTS_DELETE} + {L_USER_NO_POSTS_DELETE}
      -- cgit v1.2.1 From 164054f0679caaa68fb8400d3469b1149022db29 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Sun, 22 Apr 2012 00:36:38 +0530 Subject: [ticket/10308] fixes sql query, limit it to 1 instead of fetching all posts by user we limit the query to 1 to check if a user has posts or not PHPBB3-10308 --- phpBB/adm/style/acp_users_overview.html | 2 +- phpBB/includes/acp/acp_users.php | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index fdc1d55855..ea2700e5e4 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -141,7 +141,7 @@

      {L_DELETE_USER_EXPLAIN}
      - + {L_USER_NO_POSTS_DELETE}
      diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 1f0f053a85..7565d43690 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1009,11 +1009,11 @@ class acp_users $user_row['posts_in_queue'] = (int) $db->sql_fetchfield('posts_in_queue'); $db->sql_freeresult($result); - $sql = 'SELECT COUNT(post_id) as user_total_posts + $sql = 'SELECT post_id FROM ' . POSTS_TABLE . ' WHERE poster_id = '. $user_id; - $result = $db->sql_query($sql); - $user_row['user_total_posts'] = (int) $db->sql_fetchfield('user_total_posts'); + $result = $db->sql_query_limit($sql, 1); + $user_row['user_has_posts'] = ($db->sql_fetchfield('post_id') ? 1 : 0); $db->sql_freeresult($result); $template->assign_vars(array( @@ -1043,7 +1043,7 @@ class acp_users 'USER_EMAIL' => $user_row['user_email'], 'USER_WARNINGS' => $user_row['user_warnings'], 'USER_POSTS' => $user_row['user_posts'], - 'USER_TOTAL_POSTS' => $user_row['user_total_posts'], + 'USER_HAS_POSTS' => $user_row['user_has_posts'], 'USER_INACTIVE_REASON' => $inactive_reason, )); -- cgit v1.2.1 From 23ea588880a6793b53f2f4da0eb0609bed3fc90c Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Wed, 9 May 2012 21:41:12 +0530 Subject: [ticket/10308] makes variable boolean makes user_row['user_has_posts'] boolean instead of 1 or 0. PHPBB3-10308 --- phpBB/includes/acp/acp_users.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 7565d43690..70e08f79f2 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1013,7 +1013,7 @@ class acp_users FROM ' . POSTS_TABLE . ' WHERE poster_id = '. $user_id; $result = $db->sql_query_limit($sql, 1); - $user_row['user_has_posts'] = ($db->sql_fetchfield('post_id') ? 1 : 0); + $user_row['user_has_posts'] = (bool) $db->sql_fetchfield('post_id'); $db->sql_freeresult($result); $template->assign_vars(array( -- cgit v1.2.1 From cf556f92c91816f6aef9028d911b5584f08842af Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Wed, 9 May 2012 21:46:27 +0530 Subject: [ticket/10308] fixes language variable name Language variable has be renamed for better understanding PHPBB3-10308 --- phpBB/adm/style/acp_users_overview.html | 2 +- phpBB/language/en/acp/users.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index ea2700e5e4..1969428e38 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -142,7 +142,7 @@

      {L_DELETE_USER_EXPLAIN}
      - {L_USER_NO_POSTS_DELETE} + {L_USER_NO_POSTS_TO_DELETE}
      diff --git a/phpBB/language/en/acp/users.php b/phpBB/language/en/acp/users.php index 52b7a35eac..785283faea 100644 --- a/phpBB/language/en/acp/users.php +++ b/phpBB/language/en/acp/users.php @@ -124,7 +124,7 @@ $lang = array_merge($lang, array( 'USER_GROUP_SPECIAL' => 'Pre-defined groups user is a member of', 'USER_LIFTED_NR' => 'Successfully removed the user’s newly registered status.', 'USER_NO_ATTACHMENTS' => 'There are no attached files to display.', - 'USER_NO_POSTS_DELETE' => 'The user has no posts to retain or delete.', + 'USER_NO_POSTS_TO_DELETE' => 'The user has no posts to retain or delete.', 'USER_OUTBOX_EMPTIED' => 'Successfully emptied user’s private message outbox.', 'USER_OUTBOX_EMPTY' => 'The user’s private message outbox was already empty.', 'USER_OVERVIEW_UPDATED' => 'User details updated.', -- cgit v1.2.1 From 8393b8e755150593dbf85f545ac7ca3d8798e58c Mon Sep 17 00:00:00 2001 From: Senky Date: Tue, 10 Apr 2012 11:14:05 +0200 Subject: [ticket/9896] Links changed Link to languaged updated to http://www.phpbb.com/languages/ Link to styles updated to http://www.phpbb.com/customise/db/styles-2/ Link to MODs updated to http://www.phpbb.com/customise/db/modifications-1/ Link to Community Forums updated to http://www.phpbb.com/community/ PHPBB3-9896 --- phpBB/docs/README.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/README.html b/phpBB/docs/README.html index aa60d7dd25..0bdf94d181 100644 --- a/phpBB/docs/README.html +++ b/phpBB/docs/README.html @@ -130,9 +130,9 @@

      2.i. Internationalisation (i18n)

      -

      A number of language packs and style localisations are available. You can find them on our official download page:

      +

      A number of language packs and style localisations are available. You can find them on our official language packs page:

      -

      http://www.phpbb.com/downloads/

      +

      http://www.phpbb.com/languages/

      This is the official location for all supported language sets. If you download a package from a 3rd party site you do so with the understanding that we cannot offer support. So please, do not ask for help in these cases!

      @@ -144,7 +144,7 @@

      Although phpBB Group are rather proud of the included styles we realise that it may not be to everyones tastes. Therefore phpBB3 allows styles to be switched with relative ease. Firstly you need to locate and download a style you like. We maintain such a site at

      -

      http://www.phpbb.com/styles/

      +

      http://www.phpbb.com/customise/db/styles-2/

      Please note that 3rd party styles downloaded for versions of phpBB2 will not work in phpBB3.

      @@ -156,7 +156,7 @@

      Although not officially supported by phpBB Group, phpBB has a thriving modification scene. These third party modifications to the standard phpBB extend its capabilities still further and can be found at:

      -

      http://www.phpbb.com/mods/

      +

      http://www.phpbb.com/customise/db/modifications-1/

      Please remember that any bugs or other issues that occur after you have added any modification should NOT be reported to the bug tracker (see below). First remove the modification and see if the problem is resolved.

      @@ -192,7 +192,7 @@

      phpBB Group maintains a thriving community where a number of people have generously decided to donate their time to help support users. This site can be found at:

      -

      http://www.phpbb.com/

      +

      http://www.phpbb.com/community/

      If you do seek help via our forums please be sure to do a Search before posting. This may well save both you and us time and allow the developer, moderator and support groups to spend more time responding to people with unknown issues and problems. Please also remember that phpBB is an entirely volunteer effort, no one receives any compensation for the time they give, this includes moderators as well as developers. So please be respectful and mindful when awaiting responses.

      -- cgit v1.2.1 From 041b7be77ecd4e52048b94b4e47ad8268716a032 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Fri, 11 May 2012 01:50:36 +0530 Subject: [ticket/10308] fixes indentation indentation is fixed and user_posts variable is compared as a boolean variable. PHPBB3-10308 --- phpBB/adm/style/acp_users_overview.html | 38 ++++++++++++++++----------------- 1 file changed, 19 insertions(+), 19 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index 1969428e38..e2dcdb6307 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -135,24 +135,24 @@ -
      -
      - {L_DELETE_USER} -
      -

      {L_DELETE_USER_EXPLAIN}
      -
      - - {L_USER_NO_POSTS_TO_DELETE} - -
      - -
      -

      - - - {S_FORM_TOKEN} -

      -
      -
      +
      +
      + {L_DELETE_USER} +
      +

      {L_DELETE_USER_EXPLAIN}
      +
      + +
      + + {L_USER_NO_POSTS_TO_DELETE} + +
      +

      + + + {S_FORM_TOKEN} +

      +
      +
      -- cgit v1.2.1 From 74e9245df3b6652db10e46302510d27a54db827e Mon Sep 17 00:00:00 2001 From: Senky Date: Fri, 11 May 2012 08:09:56 +0200 Subject: [ticket/10835] changing "e-mail" to "email" PHPBB3-10835 --- phpBB/language/en/ucp.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index 6f6b319d48..7df26e040f 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -137,7 +137,7 @@ $lang = array_merge($lang, array( 'CREATE_FOLDER' => 'Add folder…', 'CURRENT_IMAGE' => 'Current image', 'CURRENT_PASSWORD' => 'Current password', - 'CURRENT_PASSWORD_EXPLAIN' => 'You must enter your current password if you wish to alter your e-mail address or username.', + 'CURRENT_PASSWORD_EXPLAIN' => 'You must enter your current password if you wish to alter your email address or username.', 'CURRENT_CHANGE_PASSWORD_EXPLAIN' => 'To change your password, your email address, or your username, you must enter your current password.', 'CUR_PASSWORD_EMPTY' => 'You did not enter your current password.', 'CUR_PASSWORD_ERROR' => 'The current password you entered is incorrect.', -- cgit v1.2.1 From 47c6b32d874826e4994c6589ed21a4fd9b4556d5 Mon Sep 17 00:00:00 2001 From: Joseph Warner Date: Sun, 13 May 2012 13:05:20 -0400 Subject: [ticket/10893] Update the usage of Composer Changes 'vendor/.composer/autoload.php' to 'vendor/autoload.php' as per the change in the way that composer works as noted https://groups.google.com/forum/#!msg/composer-dev/fWIs3KocwoA/nU3aLko9LhQJ PHPBB3-10893 --- phpBB/includes/startup.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/startup.php b/phpBB/includes/startup.php index f75d70e366..441eaec6b1 100644 --- a/phpBB/includes/startup.php +++ b/phpBB/includes/startup.php @@ -150,7 +150,7 @@ if (function_exists('date_default_timezone_set') && function_exists('date_defaul // Autoloading of dependencies. // Three options are supported: // 1. If dependencies are installed with Composer, Composer will create a -// vendor/.composer/autoload.php. If this file exists it will be +// vendor/autoload.php. If this file exists it will be // automatically used by phpBB. This is the default mode that phpBB // will use when shipped. // 2. To disable composer autoloading, PHPBB_NO_COMPOSER_AUTOLOAD can be specified. @@ -171,11 +171,11 @@ if (getenv('PHPBB_NO_COMPOSER_AUTOLOAD')) } else { - if (!file_exists($phpbb_root_path . 'vendor/.composer/autoload.php')) + if (!file_exists($phpbb_root_path . 'vendor/autoload.php')) { trigger_error('You have not set up composer dependencies. See http://getcomposer.org/.', E_USER_ERROR); } - require($phpbb_root_path . 'vendor/.composer/autoload.php'); + require($phpbb_root_path . 'vendor/autoload.php'); } $starttime = explode(' ', microtime()); -- cgit v1.2.1 From f71a9d369c84ec938408a2134b09ea259f6cbbab Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 14 May 2012 00:34:42 +0200 Subject: [ticket/10605] Put end of array on its own line because start of array is too. PHPBB3-10605 --- phpBB/install/database_update.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 0737061887..2a361aae26 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -2043,7 +2043,8 @@ function change_database_data(&$no_updates, $version) 'ON' => 'p.msg_id = t.msg_id', ), ), - 'WHERE' => 't.user_id IS NULL'); + 'WHERE' => 't.user_id IS NULL', + ); $sql = $db->sql_build_query('SELECT', $sql_array); do -- cgit v1.2.1 From 95e1d4e9db8d2174c8ee5c6bb35be06abc57e3cf Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 14 May 2012 00:36:18 +0200 Subject: [ticket/10605] Use database updater function _sql() instead of $db->sql_query() PHPBB3-10605 --- phpBB/install/database_update.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 2a361aae26..95a0282878 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -2062,7 +2062,7 @@ function change_database_data(&$no_updates, $version) { $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' WHERE ' . $db->sql_in_set('msg_id', $delete_pms); - $db->sql_query($sql); + _sql($sql, $errored, $error_ary); } } while (sizeof($delete_pms) == $batch_size); -- cgit v1.2.1 From fc3a19567f1852389dfa78472cca4b1d01387bfa Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 16 May 2012 13:44:40 +0200 Subject: [ticket/10811] Make it easier for MODs/Extensions to define the alt-text PHPBB3-10811 --- phpBB/includes/functions_display.php | 1 + phpBB/styles/prosilver/template/overall_footer.html | 6 +++--- phpBB/styles/subsilver2/template/viewtopic_body.html | 4 ++-- phpBB/viewforum.php | 2 ++ phpBB/viewtopic.php | 10 ++++++---- 5 files changed, 14 insertions(+), 9 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 18db64cc68..7c1d007d55 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -1219,6 +1219,7 @@ function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id, { $s_watching['link'] = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&" . (($is_watching) ? 'unwatch' : 'watch') . "=$mode&start=$start&hash=" . generate_link_hash("{$mode}_$match_id")); $s_watching['title'] = $user->lang[(($is_watching) ? 'STOP' : 'START') . '_WATCHING_' . strtoupper($mode)]; + $s_watching['toggle'] = $user->lang[((!$is_watching) ? 'STOP' : 'START') . '_WATCHING_' . strtoupper($mode)]; $s_watching['is_watching'] = $is_watching; } diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index 972d90305e..1aab6528cd 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -8,9 +8,9 @@
  • diff --git a/phpBB/styles/subsilver2/template/ucp_profile_autologin_keys.html b/phpBB/styles/subsilver2/template/ucp_profile_autologin_keys.html index 365b6f4a52..2d3b9f98f8 100644 --- a/phpBB/styles/subsilver2/template/ucp_profile_autologin_keys.html +++ b/phpBB/styles/subsilver2/template/ucp_profile_autologin_keys.html @@ -13,29 +13,28 @@ - - - {L_PROFILE_AUTOLOGIN_KEYS} - - - {L_MARK} - {L_LOGIN_KEY} - {L_IP} - {L_LOGIN_TIME} + + + {L_PROFILE_AUTOLOGIN_KEYS} + + + {L_MARK} + {L_LOGIN_KEY} + {L_IP} + {L_LOGIN_TIME} + + + + + + {sessions.IP} + {sessions.LOGIN_TIME} - - - - - {sessions.IP} - {sessions.LOGIN_TIME} - - - + {L_PROFILE_NO_AUTOLOGIN_KEYS} - + -- cgit v1.2.1 From 73ca5edb296bfe2d599e001d593cc2d952be3941 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Thu, 17 May 2012 14:08:50 +0530 Subject: [feature/delete-auto-logins] fixes style removes reset button and some minor style fixes in subsilver2 and prosilver. PHPBB3-9647 --- phpBB/styles/prosilver/template/ucp_profile_autologin_keys.html | 5 ++--- phpBB/styles/subsilver2/template/ucp_profile_autologin_keys.html | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/ucp_profile_autologin_keys.html b/phpBB/styles/prosilver/template/ucp_profile_autologin_keys.html index a8af932cb6..a6c19508e2 100644 --- a/phpBB/styles/prosilver/template/ucp_profile_autologin_keys.html +++ b/phpBB/styles/prosilver/template/ucp_profile_autologin_keys.html @@ -34,7 +34,7 @@ {sessions.LOGIN_TIME} - {L_PROFILE_NO_AUTOLOGIN_KEYS} + {L_PROFILE_NO_AUTOLOGIN_KEYS} @@ -44,8 +44,7 @@
    - {S_HIDDEN_FIELDS}  - + {S_HIDDEN_FIELDS} {S_FORM_TOKEN}
    diff --git a/phpBB/styles/subsilver2/template/ucp_profile_autologin_keys.html b/phpBB/styles/subsilver2/template/ucp_profile_autologin_keys.html index 2d3b9f98f8..1dab9acb9c 100644 --- a/phpBB/styles/subsilver2/template/ucp_profile_autologin_keys.html +++ b/phpBB/styles/subsilver2/template/ucp_profile_autologin_keys.html @@ -32,15 +32,14 @@ - {L_PROFILE_NO_AUTOLOGIN_KEYS} + {L_PROFILE_NO_AUTOLOGIN_KEYS} - {S_HIDDEN_FIELDS}  - + {S_HIDDEN_FIELDS} {S_FORM_TOKEN} -- cgit v1.2.1 From 70be7e109f067d6f6d1add488338294dd59c7785 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Fri, 18 May 2012 11:15:53 +0200 Subject: [ticket/10898] Do not write ?> into config.php to avoid whitespace output. PHPBB3-10898 --- phpBB/includes/functions_install.php | 2 -- 1 file changed, 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_install.php b/phpBB/includes/functions_install.php index 633b2755f0..9e9c48ff58 100644 --- a/phpBB/includes/functions_install.php +++ b/phpBB/includes/functions_install.php @@ -559,8 +559,6 @@ function phpbb_create_config_file_data($data, $dbms, $load_extensions, $debug = $config_data .= "// @define('DEBUG_EXTRA', true);\n"; } - $config_data .= '?' . '>'; // Done this to prevent highlighting editors getting confused! - return $config_data; } -- cgit v1.2.1 From e2d286d9f133ffb5128262fc88bfd86766f7b50f Mon Sep 17 00:00:00 2001 From: Rahul R Date: Sat, 19 May 2012 01:59:25 +0530 Subject: [ticket/10650] Subject is cleared if no permissions exist The subject line will be cleared before passing to the template in case the user doesn't have sufficient permissions. PHPBB3-10650 --- phpBB/includes/functions_display.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 950c1f0cd8..0c5b80c609 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -465,8 +465,8 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod 'FORUM_FOLDER_IMG_ALT' => isset($user->lang[$folder_alt]) ? $user->lang[$folder_alt] : '', 'FORUM_IMAGE' => ($row['forum_image']) ? '' . $user->lang[$folder_alt] . '' : '', 'FORUM_IMAGE_SRC' => ($row['forum_image']) ? $phpbb_root_path . $row['forum_image'] : '', - 'LAST_POST_SUBJECT' => censor_text($last_post_subject), - 'LAST_POST_SUBJECT_TRUNCATED' => $last_post_subject_truncated, + 'LAST_POST_SUBJECT' => (!$row['forum_password'] && $auth->acl_get('f_read', $row['forum_id'])) ? censor_text($last_post_subject) : "", + 'LAST_POST_SUBJECT_TRUNCATED' => (!$row['forum_password'] && $auth->acl_get('f_read', $row['forum_id'])) ? $last_post_subject_truncated : "", 'LAST_POST_TIME' => $last_post_time, 'LAST_POSTER' => get_username_string('username', $row['forum_last_poster_id'], $row['forum_last_poster_name'], $row['forum_last_poster_colour']), 'LAST_POSTER_COLOUR' => get_username_string('colour', $row['forum_last_poster_id'], $row['forum_last_poster_name'], $row['forum_last_poster_colour']), -- cgit v1.2.1 From ee875c0a43ac734d1693cdd7393c8f4277233426 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 22 May 2012 02:24:31 +0200 Subject: [ticket/10790] Remove a (kind of) dead code section from submit_pm(). The type of $user->data['user_id'] is (almost) guranteed to be integer since session::session_create() casts it to integer. The type of $row['user_id'] is only an integer if the DB driver adjusts the PHP type according to the DB type. This is only done by some of our not-so-popular DB drivers and is not the case for MySQL. As such this comparison is (almost) never true and a PM is also sent to the author itself when it is sent to a group the author is also a member of. Since this behaviour seems to have been accepted by the communty, the dead code is removed and current behaviour is kept. Also, checking this in the loop seems to be a rather bad idea. Introduced by 78b1c4caaa17cc8760b685ad41c19f15f9d89b68. PHPBB3-10790 --- phpBB/includes/functions_privmsgs.php | 6 ------ 1 file changed, 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php index d2fce000aa..261ed45727 100644 --- a/phpBB/includes/functions_privmsgs.php +++ b/phpBB/includes/functions_privmsgs.php @@ -1522,12 +1522,6 @@ function submit_pm($mode, $subject, &$data, $put_in_outbox = true) while ($row = $db->sql_fetchrow($result)) { - // Additionally, do not include the sender if he is in the group he wants to send to. ;) - if ($row['user_id'] === $user->data['user_id']) - { - continue; - } - $field = ($data['address_list']['g'][$row['group_id']] == 'to') ? 'to' : 'bcc'; $recipients[$row['user_id']] = $field; } -- cgit v1.2.1 From efbf14f029b7e6a1724fb1c5aa32294eb33017bc Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 22 May 2012 03:08:39 +0200 Subject: [ticket/10565] update_forum_tracking_info(): Remove unnecessary GROUP BY clause PHPBB3-10565 --- phpBB/includes/functions.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index ce80dc4a66..b415b2742d 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1924,8 +1924,7 @@ function update_forum_tracking_info($forum_id, $forum_last_post_time, $f_mark_ti AND t.topic_last_post_time > ' . $mark_time_forum . ' AND t.topic_moved_id = 0 ' . $sql_update_unapproved . ' - AND (tt.topic_id IS NULL OR tt.mark_time < t.topic_last_post_time) - GROUP BY t.forum_id'; + AND (tt.topic_id IS NULL OR tt.mark_time < t.topic_last_post_time)'; $result = $db->sql_query_limit($sql, 1); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); -- cgit v1.2.1 From 896b43aa5b7fe439106beb50cf56d6f066928537 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 22 May 2012 03:11:53 +0200 Subject: [ticket/10565] Add line breaks to query in order to follow coding guidelines. PHPBB3-10565 --- phpBB/includes/functions.php | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index b415b2742d..bc811cc75b 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1918,13 +1918,17 @@ function update_forum_tracking_info($forum_id, $forum_last_post_time, $f_mark_ti } else { - $sql = 'SELECT t.forum_id FROM ' . TOPICS_TABLE . ' t - LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt ON (tt.topic_id = t.topic_id AND tt.user_id = ' . $user->data['user_id'] . ') + $sql = 'SELECT t.forum_id + FROM ' . TOPICS_TABLE . ' t + LEFT JOIN ' . TOPICS_TRACK_TABLE . ' tt + ON (tt.topic_id = t.topic_id + AND tt.user_id = ' . $user->data['user_id'] . ') WHERE t.forum_id = ' . $forum_id . ' AND t.topic_last_post_time > ' . $mark_time_forum . ' AND t.topic_moved_id = 0 ' . $sql_update_unapproved . ' - AND (tt.topic_id IS NULL OR tt.mark_time < t.topic_last_post_time)'; + AND (tt.topic_id IS NULL + OR tt.mark_time < t.topic_last_post_time)'; $result = $db->sql_query_limit($sql, 1); $row = $db->sql_fetchrow($result); $db->sql_freeresult($result); -- cgit v1.2.1 From ea1e2ed36280b8e3a4078885a07f7d3398ce5703 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 22 May 2012 03:32:54 +0200 Subject: [ticket/10401] Return correct type when ldap_bind() fails in ldap_login(). ldap_login() is supposed to return an array. PHPBB3-10401 --- phpBB/includes/auth/auth_ldap.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/auth/auth_ldap.php b/phpBB/includes/auth/auth_ldap.php index 5dfa74ddab..eebf147d48 100644 --- a/phpBB/includes/auth/auth_ldap.php +++ b/phpBB/includes/auth/auth_ldap.php @@ -156,7 +156,11 @@ function login_ldap(&$username, &$password) { if (!@ldap_bind($ldap, htmlspecialchars_decode($config['ldap_user']), htmlspecialchars_decode($config['ldap_password']))) { - return $user->lang['LDAP_NO_SERVER_CONNECTION']; + return array( + 'status' => LOGIN_ERROR_EXTERNAL_AUTH, + 'error_msg' => 'LDAP_NO_SERVER_CONNECTION', + 'user_row' => array('user_id' => ANONYMOUS), + ); } } -- cgit v1.2.1 From ffabfefe459c8fd94bf0706766134dd821d294a7 Mon Sep 17 00:00:00 2001 From: David King Date: Tue, 22 May 2012 10:14:20 -0400 Subject: [ticket/10906] Add setting for last post topic title in schema_data.sql PHPBB3-10906 --- phpBB/install/schemas/schema_data.sql | 1 + 1 file changed, 1 insertion(+) (limited to 'phpBB') diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index 2ea5eca768..5489fd4e3d 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -88,6 +88,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('dbms_version', '') INSERT INTO phpbb_config (config_name, config_value) VALUES ('default_dateformat', 'D M d, Y g:i a'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('default_style', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('display_last_edited', '1'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('display_last_subject', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('display_order', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('edit_time', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('delete_time', '0'); -- cgit v1.2.1 From a32a5925b357f78eb8735c0aaf1595935305c126 Mon Sep 17 00:00:00 2001 From: Vinny Date: Tue, 22 May 2012 15:34:39 -0300 Subject: [ticket/10905] Last topic title for subsilver2 PHPBB3-10905 --- phpBB/styles/subsilver2/template/forumlist_body.html | 3 +++ 1 file changed, 3 insertions(+) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/forumlist_body.html b/phpBB/styles/subsilver2/template/forumlist_body.html index 334fd7a968..be32d1fb77 100644 --- a/phpBB/styles/subsilver2/template/forumlist_body.html +++ b/phpBB/styles/subsilver2/template/forumlist_body.html @@ -56,6 +56,9 @@

    {forumrow.POSTS}

    + +

    {forumrow.LAST_POST_SUBJECT_TRUNCATED}

    +

    {UNAPPROVED_IMG} {forumrow.LAST_POST_TIME}

    {forumrow.LAST_POSTER_FULL} {LAST_POST_IMG} -- cgit v1.2.1 From 22cc7c73fdb26420bdf5b7a509da9a22925e274a Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Tue, 22 May 2012 19:38:30 +0100 Subject: [ticket/10855] Fixed a couple issues in coding guidelines. PHPBB3-10855 --- phpBB/docs/coding-guidelines.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/coding-guidelines.html b/phpBB/docs/coding-guidelines.html index 237bc18d20..ae4655e094 100644 --- a/phpBB/docs/coding-guidelines.html +++ b/phpBB/docs/coding-guidelines.html @@ -301,7 +301,7 @@ PHPBB_QA (Set board to QA-Mode, which means the updater also c

    $current_user is right, but $currentuser and $currentUser are not.

    -

    In JavaScript, variable names should use camel caps:

    +

    In JavaScript, variable names should use camel case:

    currentUser is right, but currentuser and current_user are not.

    @@ -532,7 +532,7 @@ $post_url = "{$phpbb_root_path}posting.$phpEx?mode=$mode&amp;start=$start";

    In SQL statements mixing single and double quotes is partly allowed (following the guidelines listed here about SQL formatting), else one should try to only use one method - mostly single quotes.

    Commas after every array element:

    -

    If an array is defined with each element on its own line, you still have to modify the previous line to add a comma when appending a new element. PHP allows for trailing (useless) commas in array definitions. These should always be used so each element including the comma can be appended with a single line. In JavaScript, you should not use the trailing comma, as IE doesn't like it.

    +

    If an array is defined with each element on its own line, you still have to modify the previous line to add a comma when appending a new element. PHP allows for trailing (useless) commas in array definitions. These should always be used so each element including the comma can be appended with a single line. In JavaScript, do not use the trailing comma, as it causes browsers to throw errors.

    // wrong

    -- 
    cgit v1.2.1
    
    
    From af3a730d9193307d908c3bd14329761cf2bbc098 Mon Sep 17 00:00:00 2001
    From: Vinny 
    Date: Wed, 11 Apr 2012 17:15:39 -0300
    Subject: [ticket/10789] Remove unnecessary variables from PM print - prosilver
    
    PHPBB3-10789
    ---
     phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html | 5 ++---
     1 file changed, 2 insertions(+), 3 deletions(-)
    
    (limited to 'phpBB')
    
    diff --git a/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html b/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html
    index ce2a376768..d92abb06dd 100644
    --- a/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html
    +++ b/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html
    @@ -23,10 +23,9 @@
     
     	
     
     	
    -- cgit v1.2.1 From c31996ea84fff5038328974b511c95d95fcd3fe7 Mon Sep 17 00:00:00 2001 From: David King Date: Sat, 26 May 2012 21:21:22 -0400 Subject: [ticket/10912] Default last post subject to empty lacking last post info PHPBB3-10912 --- phpBB/includes/functions_display.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 0c5b80c609..1f45d5e8e1 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -403,7 +403,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod } else { - $last_post_subject = $last_post_time = $last_post_url = ''; + $last_post_subject = $last_post_time = $last_post_url = $last_post_subject_truncated = ''; } // Output moderator listing ... if applicable -- cgit v1.2.1 From 13f30e8d9d05b69f8b7fda451fa6062b199dd7f7 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Tue, 29 May 2012 14:27:25 +0200 Subject: [ticket/10908] Download files only up to max_upload_filesize if limit is 0 PHPBB3-10908 --- phpBB/includes/functions_upload.php | 33 +++++++++++++++++++++++++++++---- 1 file changed, 29 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_upload.php b/phpBB/includes/functions_upload.php index d5bbd80242..73ac1df2d2 100644 --- a/phpBB/includes/functions_upload.php +++ b/phpBB/includes/functions_upload.php @@ -751,6 +751,31 @@ class fileupload $filename = $url['path']; $filesize = 0; + $remote_max_filesize = $this->max_filesize; + if (!$remote_max_filesize) + { + $max_filesize = @ini_get('upload_max_filesize'); + + if (!empty($max_filesize)) + { + $unit = strtolower(substr($max_filesize, -1, 1)); + $remote_max_filesize = (int) $max_filesize; + + switch ($unit) + { + case 'g': + $remote_max_filesize *= 1024; + // no break + case 'm': + $remote_max_filesize *= 1024; + // no break + case 'k': + $remote_max_filesize *= 1024; + // no break + } + } + } + $errno = 0; $errstr = ''; @@ -779,9 +804,9 @@ class fileupload $block = @fread($fsock, 1024); $filesize += strlen($block); - if ($this->max_filesize && $filesize > $this->max_filesize) + if ($remote_max_filesize && $filesize > $remote_max_filesize) { - $max_filesize = get_formatted_filesize($this->max_filesize, false); + $max_filesize = get_formatted_filesize($remote_max_filesize, false); $file = new fileerror(sprintf($user->lang[$this->error_prefix . 'WRONG_FILESIZE'], $max_filesize['value'], $max_filesize['unit'])); return $file; @@ -807,9 +832,9 @@ class fileupload { $length = (int) str_replace('content-length: ', '', strtolower($line)); - if ($length && $length > $this->max_filesize) + if ($remote_max_filesize && $length && $length > $remote_max_filesize) { - $max_filesize = get_formatted_filesize($this->max_filesize, false); + $max_filesize = get_formatted_filesize($remote_max_filesize, false); $file = new fileerror(sprintf($user->lang[$this->error_prefix . 'WRONG_FILESIZE'], $max_filesize['value'], $max_filesize['unit'])); return $file; -- cgit v1.2.1 From 42dd60edad6c3533f6b718e731d43661641fd1fc Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Tue, 29 May 2012 14:54:04 +0200 Subject: [ticket/10913] Redirect to index if session id is required but was not sent PHPBB3-10913 --- phpBB/includes/session.php | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/session.php b/phpBB/includes/session.php index a894242a39..496c12a0d1 100644 --- a/phpBB/includes/session.php +++ b/phpBB/includes/session.php @@ -322,8 +322,15 @@ class session } } - // Is session_id is set or session_id is set and matches the url param if required - if (!empty($this->session_id) && (!defined('NEED_SID') || (isset($_GET['sid']) && $this->session_id === $_GET['sid']))) + // if no session id is set, redirect to index.php + if (defined('NEED_SID') && (!isset($_GET['sid']) || $this->session_id !== $_GET['sid'])) + { + send_status_line(401, 'Not authorized'); + redirect(append_sid("{$phpbb_root_path}index.$phpEx")); + } + + // if session id is set + if (!empty($this->session_id)) { $sql = 'SELECT u.*, s.* FROM ' . SESSIONS_TABLE . ' s, ' . USERS_TABLE . " u -- cgit v1.2.1 From 701bf571dfffa171271d567759cf92c3830d159c Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Tue, 29 May 2012 15:29:31 +0200 Subject: [ticket/10550] Sort not installed styles list in the styles section of the ACP. PHPBB3-10550 --- phpBB/includes/acp/acp_styles.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_styles.php b/phpBB/includes/acp/acp_styles.php index d7b0484af8..47cd02bca7 100644 --- a/phpBB/includes/acp/acp_styles.php +++ b/phpBB/includes/acp/acp_styles.php @@ -667,7 +667,9 @@ inherit_from = {INHERIT_FROM} if ($name && !in_array($name, $installed)) { - $new_ary[] = array( + // The array key is used for sorting later on. + // $file is appended because $name doesn't have to be unique. + $new_ary[$name . $file] = array( 'path' => $file, 'name' => $name, 'copyright' => $items['copyright'], @@ -683,6 +685,8 @@ inherit_from = {INHERIT_FROM} if (sizeof($new_ary)) { + ksort($new_ary); + foreach ($new_ary as $cfg) { $template->assign_block_vars('uninstalled', array( -- cgit v1.2.1 From c494abc8c765f2398b0b782fc6979a5e033bb0f5 Mon Sep 17 00:00:00 2001 From: Nils Adermann Date: Tue, 29 May 2012 15:49:52 +0200 Subject: [ticket/10908] Document that 0 filesize configuration means limited by PHP PHPBB3-10908 --- phpBB/language/en/acp/attachments.php | 2 +- phpBB/language/en/acp/board.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/language/en/acp/attachments.php b/phpBB/language/en/acp/attachments.php index 1821b8c867..6aeb3c2188 100644 --- a/phpBB/language/en/acp/attachments.php +++ b/phpBB/language/en/acp/attachments.php @@ -57,7 +57,7 @@ $lang = array_merge($lang, array( 'ATTACH_EXT_GROUPS_URL' => 'Extension groups', 'ATTACH_ID' => 'ID', 'ATTACH_MAX_FILESIZE' => 'Maximum file size', - 'ATTACH_MAX_FILESIZE_EXPLAIN' => 'Maximum size of each file, with 0 being unlimited.', + 'ATTACH_MAX_FILESIZE_EXPLAIN' => 'Maximum size of each file. If this value is 0, the uploadable filesize is only limited by your PHP configuration.', 'ATTACH_MAX_PM_FILESIZE' => 'Maximum file size messaging', 'ATTACH_MAX_PM_FILESIZE_EXPLAIN' => 'Maximum size of each file, with 0 being unlimited, attached to a private message.', 'ATTACH_ORPHAN_URL' => 'Orphan attachments', diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php index 6e6d4302cd..f24376f8aa 100644 --- a/phpBB/language/en/acp/board.php +++ b/phpBB/language/en/acp/board.php @@ -108,7 +108,7 @@ $lang = array_merge($lang, array( 'MAX_AVATAR_SIZE' => 'Maximum avatar dimensions', 'MAX_AVATAR_SIZE_EXPLAIN' => 'Width x Height in pixels.', 'MAX_FILESIZE' => 'Maximum avatar file size', - 'MAX_FILESIZE_EXPLAIN' => 'For uploaded avatar files.', + 'MAX_FILESIZE_EXPLAIN' => 'For uploaded avatar files. If this value is 0, the uploaded filesize is only limited by your PHP configuration.', 'MIN_AVATAR_SIZE' => 'Minimum avatar dimensions', 'MIN_AVATAR_SIZE_EXPLAIN' => 'Width x Height in pixels.', )); -- cgit v1.2.1 From 6036b948ff8ff02f890d46000aafea5dd157d025 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 30 May 2012 13:38:41 +0200 Subject: [ticket/10611] Generate db_tools instance in acp_database module. PHPBB3-10611 --- phpBB/includes/acp/acp_database.php | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_database.php b/phpBB/includes/acp/acp_database.php index 62bcd43a47..6380f221f8 100644 --- a/phpBB/includes/acp/acp_database.php +++ b/phpBB/includes/acp/acp_database.php @@ -21,6 +21,7 @@ if (!defined('IN_PHPBB')) */ class acp_database { + var $db_tools; var $u_action; function main($id, $mode) @@ -28,6 +29,12 @@ class acp_database global $cache, $db, $user, $auth, $template, $table_prefix; global $config, $phpbb_root_path, $phpbb_admin_path, $phpEx; + if (!class_exists('phpbb_db_tools')) + { + require($phpbb_root_path . 'includes/db/db_tools.' . $phpEx); + } + $this->db_tools = new phpbb_db_tools($db); + $user->add_lang('acp/database'); $this->tpl_name = 'acp_database'; -- cgit v1.2.1 From 515c27270fe04b5e2f69a0cedc5007ef889fdf77 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 30 May 2012 13:41:36 +0200 Subject: [ticket/10611] Use phpbb_db_tools::sql_list_tables() instead of get_tables(). get_tables() was deprecated by phpbb_db_tools::sql_list_tables() This prevents unnecessarily loading functions_install.php PHPBB3-10611 --- phpBB/includes/acp/acp_database.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_database.php b/phpBB/includes/acp/acp_database.php index 6380f221f8..885760f859 100644 --- a/phpBB/includes/acp/acp_database.php +++ b/phpBB/includes/acp/acp_database.php @@ -180,8 +180,7 @@ class acp_database break; default: - include($phpbb_root_path . 'includes/functions_install.' . $phpEx); - $tables = get_tables($db); + $tables = $this->db_tools->sql_list_tables(); asort($tables); foreach ($tables as $table_name) { -- cgit v1.2.1 From 9240ddbfa7cc4deb2076dcb989e6bfb318652e47 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 30 May 2012 13:45:00 +0200 Subject: [ticket/10611] Filter out not existing database tables when making a backup. Using $this->db_tools->sql_list_tables() as the first argument gives us table names as array keys as a by-product which might be useful at some point. PHPBB3-10611 --- phpBB/includes/acp/acp_database.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_database.php b/phpBB/includes/acp/acp_database.php index 885760f859..758cd10434 100644 --- a/phpBB/includes/acp/acp_database.php +++ b/phpBB/includes/acp/acp_database.php @@ -57,7 +57,7 @@ class acp_database { case 'download': $type = request_var('type', ''); - $table = request_var('table', array('')); + $table = array_intersect($this->db_tools->sql_list_tables(), request_var('table', array(''))); $format = request_var('method', ''); $where = request_var('where', ''); -- cgit v1.2.1 From 037b95eccc1f039e687360d9f804f7323a65e9df Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 30 May 2012 21:09:30 +0200 Subject: [ticket/10162] Increase maximum length of email address TLD from 6 to 63. Increase maximum length of email address top level domains from 6 to 63. PHPBB3-10162 --- phpBB/includes/functions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index bc811cc75b..5914831539 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3456,7 +3456,7 @@ function get_preg_expression($mode) case 'email': // Regex written by James Watts and Francisco Jose Martin Moreno // http://fightingforalostcause.net/misc/2006/compare-email-regex.php - return '([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*(?:[\w\!\#$\%\'\*\+\-\/\=\?\^\`{\|\}\~]|&)+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,6})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)'; + return '([\w\!\#$\%\&\'\*\+\-\/\=\?\^\`{\|\}\~]+\.)*(?:[\w\!\#$\%\'\*\+\-\/\=\?\^\`{\|\}\~]|&)+@((((([a-z0-9]{1}[a-z0-9\-]{0,62}[a-z0-9]{1})|[a-z])\.)+[a-z]{2,63})|(\d{1,3}\.){3}\d{1,3}(\:\d{1,5})?)'; break; case 'bbcode_htm': -- cgit v1.2.1 From 643a86504a30f6b9fbe0f073bb03009b4fbd0f43 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 31 May 2012 11:44:41 +0200 Subject: [ticket/10751] Add sql_lower_text() to database abstraction layer. On MSSQL, LOWER() can only be called on bounded strings (i.e. varchar or char). So, in order to use it on a text column, we have to convert it to an appropriate type. We do so using the SUBSTRING function. PHPBB3-10751 --- phpBB/includes/db/dbal.php | 12 ++++++++++++ phpBB/includes/db/mssql.php | 8 ++++++++ phpBB/includes/db/mssql_odbc.php | 8 ++++++++ phpBB/includes/db/mssqlnative.php | 8 ++++++++ 4 files changed, 36 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 358df50402..9cc337955b 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -500,6 +500,18 @@ class dbal return $column_name . ' | ' . (1 << $bit) . (($compare) ? ' ' . $compare : ''); } + /** + * Run LOWER() on DB column of type text (i.e. neither varchar nor char). + * + * @param string $column_name The column name to use + * + * @return string A SQL statement like "LOWER($column_name)" + */ + function sql_lower_text($column_name) + { + return "LOWER($column_name)"; + } + /** * Run more than one insert statement. * diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index 6899a73902..b7178593dc 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -332,6 +332,14 @@ class dbal_mssql extends dbal return str_replace(array("'", "\0"), array("''", ''), $msg); } + /** + * {@inheritDoc} + */ + function sql_lower_text($column_name) + { + return "LOWER(SUBSTRING($column_name, 1, DATALENGTH($column_name)))"; + } + /** * Build LIKE expression * @access private diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index 34f7a87337..2ecc42cadf 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -310,6 +310,14 @@ class dbal_mssql_odbc extends dbal return str_replace(array("'", "\0"), array("''", ''), $msg); } + /** + * {@inheritDoc} + */ + function sql_lower_text($column_name) + { + return "LOWER(SUBSTRING($column_name, 1, DATALENGTH($column_name)))"; + } + /** * Build LIKE expression * @access private diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 92ac9b1fb9..c91cc188b0 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -492,6 +492,14 @@ class dbal_mssqlnative extends dbal return str_replace(array("'", "\0"), array("''", ''), $msg); } + /** + * {@inheritDoc} + */ + function sql_lower_text($column_name) + { + return "LOWER(SUBSTRING($column_name, 1, DATALENGTH($column_name)))"; + } + /** * Build LIKE expression * @access private -- cgit v1.2.1 From 9ab5ad2986a836554bbf137d577c38155540c0a8 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 31 May 2012 11:48:56 +0200 Subject: [ticket/10751] Use sql_lower_text() in view_log(). log_data is a text column. PHPBB3-10751 --- phpBB/includes/functions_admin.php | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 0e1a11b4aa..204fa9a43d 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -2557,7 +2557,8 @@ function view_log($mode, &$log, &$log_count, $limit = 0, $offset = 0, $forum_id { $sql_keywords .= $db->sql_in_set('l.log_operation', $operations) . ' OR '; } - $sql_keywords .= 'LOWER(l.log_data) ' . implode(' OR LOWER(l.log_data) ', $keywords) . ')'; + $sql_lower = $db->sql_lower_text('l.log_data'); + $sql_keywords .= "$sql_lower " . implode(" OR $sql_lower ", $keywords) . ')'; } if ($log_count !== false) -- cgit v1.2.1 From d22e7ce9df7d54591430fb542f2c2e14535c18cc Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 31 May 2012 19:57:13 +0200 Subject: [ticket/10788] Add Arty to the list of phpBB developers in docs/AUTHORS. PHPBB3-10788 --- phpBB/docs/AUTHORS | 1 + 1 file changed, 1 insertion(+) (limited to 'phpBB') diff --git a/phpBB/docs/AUTHORS b/phpBB/docs/AUTHORS index 57adec6a67..446b204a08 100644 --- a/phpBB/docs/AUTHORS +++ b/phpBB/docs/AUTHORS @@ -23,6 +23,7 @@ involved in phpBB. phpBB Lead Developer: naderman (Nils Adermann) phpBB Developers: Acyd Burn (Meik Sievertsen) [Lead 09/2005 - 01/2010] + Arty (Vjacheslav Trushkin) bantu (Andreas Fischer) imkingdavid (David King) igorw (Igor Wiedler) -- cgit v1.2.1 From d8ddda512180be56100a890410dece8046aade28 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 31 May 2012 20:19:28 +0200 Subject: [develop-olympus] Bumping version numbers to final for 3.0.11 releases. --- phpBB/docs/INSTALL.html | 4 ++-- phpBB/install/convertors/convert_phpbb20.php | 2 +- phpBB/styles/prosilver/imageset/imageset.cfg | 2 +- phpBB/styles/prosilver/style.cfg | 2 +- phpBB/styles/prosilver/template/template.cfg | 2 +- phpBB/styles/prosilver/theme/theme.cfg | 2 +- phpBB/styles/subsilver2/imageset/imageset.cfg | 2 +- phpBB/styles/subsilver2/style.cfg | 2 +- phpBB/styles/subsilver2/template/template.cfg | 2 +- phpBB/styles/subsilver2/theme/theme.cfg | 2 +- 10 files changed, 11 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/INSTALL.html b/phpBB/docs/INSTALL.html index 6ab118e3ee..e17f496c56 100644 --- a/phpBB/docs/INSTALL.html +++ b/phpBB/docs/INSTALL.html @@ -274,7 +274,7 @@

    This package is meant for those wanting to only replace changed files from a previous version to the latest version. This package normally contains the changed files from up to five previous versions.

    -

    This package contains a number of archives, each contains the files changed from a given release to the latest version. You should select the appropriate archive for your current version, e.g. if you currently have 3.0.9 you should select the phpBB-3.0.9_to_3.0.10.zip/tar.gz file.

    +

    This package contains a number of archives, each contains the files changed from a given release to the latest version. You should select the appropriate archive for your current version, e.g. if you currently have 3.0.10 you should select the phpBB-3.0.10_to_3.0.11.zip/tar.gz file.

    The directory structure has been preserved enabling you (if you wish) to simply upload the contents of the archive to the appropriate location on your server, i.e. simply overwrite the existing files with the new versions. Do not forget that if you have installed any MODs these files will overwrite the originals possibly destroying them in the process. You will need to re-add MODs to any affected file before uploading.

    @@ -286,7 +286,7 @@

    The patch file is one solution for those with many Modifications (MODs) or other changes who do not want to re-add them back to all the changed files if they use the method explained above. To use this you will need command line access to a standard UNIX type patch application. If you do not have access to such an application but still want to use this update approach, we strongly recommend the Automatic update package explained below. It is also the recommended update method.

    -

    A number of patch files are provided to allow you to update from previous stable releases. Select the correct patch, e.g. if your current version is 3.0.9 you need the phpBB-3.0.9_to_3.0.10.patch file. Place the correct patch in the parent directory containing the phpBB3 core files (i.e. index.php, viewforum.php, etc.). With this done you should run the following command: patch -cl -d [PHPBB DIRECTORY] -p1 < [PATCH NAME] (where PHPBB DIRECTORY is the directory name your phpBB Installation resides in, for example phpBB3, and where PATCH NAME is the relevant filename of the selected patch file). This should complete quickly, hopefully without any HUNK FAILED comments.

    +

    A number of patch files are provided to allow you to update from previous stable releases. Select the correct patch, e.g. if your current version is 3.0.10 you need the phpBB-3.0.10_to_3.0.11.patch file. Place the correct patch in the parent directory containing the phpBB3 core files (i.e. index.php, viewforum.php, etc.). With this done you should run the following command: patch -cl -d [PHPBB DIRECTORY] -p1 < [PATCH NAME] (where PHPBB DIRECTORY is the directory name your phpBB Installation resides in, for example phpBB3, and where PATCH NAME is the relevant filename of the selected patch file). This should complete quickly, hopefully without any HUNK FAILED comments.

    If you do get failures you should look at using the Changed files only package to replace the files which failed to patch, please note that you will need to manually re-add any Modifications (MODs) to these particular files. Alternatively if you know how you can examine the .rej files to determine what failed where and make manual adjustments to the relevant source.

    diff --git a/phpBB/install/convertors/convert_phpbb20.php b/phpBB/install/convertors/convert_phpbb20.php index 81cc2f68f3..7d6fed6164 100644 --- a/phpBB/install/convertors/convert_phpbb20.php +++ b/phpBB/install/convertors/convert_phpbb20.php @@ -32,7 +32,7 @@ unset($dbpasswd); $convertor_data = array( 'forum_name' => 'phpBB 2.0.x', 'version' => '1.0.3', - 'phpbb_version' => '3.0.10', + 'phpbb_version' => '3.0.11', 'author' => 'phpBB Group', 'dbms' => $dbms, 'dbhost' => $dbhost, diff --git a/phpBB/styles/prosilver/imageset/imageset.cfg b/phpBB/styles/prosilver/imageset/imageset.cfg index 5a703d9e47..d7ba7690f6 100644 --- a/phpBB/styles/prosilver/imageset/imageset.cfg +++ b/phpBB/styles/prosilver/imageset/imageset.cfg @@ -19,7 +19,7 @@ # General Information about this style name = prosilver copyright = © phpBB Group, 2007 -version = 3.0.10 +version = 3.0.11 # Images img_site_logo = site_logo.gif*52*139 diff --git a/phpBB/styles/prosilver/style.cfg b/phpBB/styles/prosilver/style.cfg index 95d8d287e4..97e8aced01 100644 --- a/phpBB/styles/prosilver/style.cfg +++ b/phpBB/styles/prosilver/style.cfg @@ -19,4 +19,4 @@ # General Information about this style name = prosilver copyright = © phpBB Group, 2007 -version = 3.0.10 \ No newline at end of file +version = 3.0.11 \ No newline at end of file diff --git a/phpBB/styles/prosilver/template/template.cfg b/phpBB/styles/prosilver/template/template.cfg index 0b0533573a..eb3df8bfd3 100644 --- a/phpBB/styles/prosilver/template/template.cfg +++ b/phpBB/styles/prosilver/template/template.cfg @@ -19,7 +19,7 @@ # General Information about this template name = prosilver copyright = © phpBB Group, 2007 -version = 3.0.10 +version = 3.0.11 # Defining a different template bitfield template_bitfield = lNg= diff --git a/phpBB/styles/prosilver/theme/theme.cfg b/phpBB/styles/prosilver/theme/theme.cfg index e8698f7fe4..ec489d0b3d 100644 --- a/phpBB/styles/prosilver/theme/theme.cfg +++ b/phpBB/styles/prosilver/theme/theme.cfg @@ -21,7 +21,7 @@ # General Information about this theme name = prosilver copyright = © phpBB Group, 2007 -version = 3.0.10 +version = 3.0.11 # Some configuration options diff --git a/phpBB/styles/subsilver2/imageset/imageset.cfg b/phpBB/styles/subsilver2/imageset/imageset.cfg index 75a4aad038..c943db6735 100644 --- a/phpBB/styles/subsilver2/imageset/imageset.cfg +++ b/phpBB/styles/subsilver2/imageset/imageset.cfg @@ -19,7 +19,7 @@ # General Information about this style name = subsilver2 copyright = © phpBB Group, 2003 -version = 3.0.10 +version = 3.0.11 # Images img_site_logo = site_logo.gif*94*170 diff --git a/phpBB/styles/subsilver2/style.cfg b/phpBB/styles/subsilver2/style.cfg index 13e44435c6..4c40ee4438 100644 --- a/phpBB/styles/subsilver2/style.cfg +++ b/phpBB/styles/subsilver2/style.cfg @@ -19,4 +19,4 @@ # General Information about this style name = subsilver2 copyright = © 2005 phpBB Group -version = 3.0.10 +version = 3.0.11 diff --git a/phpBB/styles/subsilver2/template/template.cfg b/phpBB/styles/subsilver2/template/template.cfg index d557edba87..6568aeca08 100644 --- a/phpBB/styles/subsilver2/template/template.cfg +++ b/phpBB/styles/subsilver2/template/template.cfg @@ -19,7 +19,7 @@ # General Information about this template name = subsilver2 copyright = © phpBB Group, 2003 -version = 3.0.10 +version = 3.0.11 # Template inheritance # See http://blog.phpbb.com/2008/07/31/templating-just-got-easier/ diff --git a/phpBB/styles/subsilver2/theme/theme.cfg b/phpBB/styles/subsilver2/theme/theme.cfg index d7837a3766..5bd4480eef 100644 --- a/phpBB/styles/subsilver2/theme/theme.cfg +++ b/phpBB/styles/subsilver2/theme/theme.cfg @@ -21,7 +21,7 @@ # General Information about this theme name = subsilver2 copyright = © phpBB Group, 2003 -version = 3.0.10 +version = 3.0.11 # Some configuration options -- cgit v1.2.1 From 2011085c29d3141d66d390449b52ba6bd069ab69 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 31 May 2012 20:26:28 +0200 Subject: [develop-olympus] Bump version numbers for 3.0.11-RC1 release. --- phpBB/includes/constants.php | 2 +- phpBB/install/database_update.php | 6 +++--- phpBB/install/schemas/schema_data.sql | 2 +- 3 files changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php index a0444ea594..5b72d89795 100644 --- a/phpBB/includes/constants.php +++ b/phpBB/includes/constants.php @@ -25,7 +25,7 @@ if (!defined('IN_PHPBB')) */ // phpBB Version -define('PHPBB_VERSION', '3.0.11-dev'); +define('PHPBB_VERSION', '3.0.11-RC1'); // QA-related // define('PHPBB_QA', 1); diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index c700b483a5..c1fe144c62 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -8,7 +8,7 @@ * */ -define('UPDATES_TO_VERSION', '3.0.11-dev'); +define('UPDATES_TO_VERSION', '3.0.11-RC1'); // Enter any version to update from to test updates. The version within the db will not be updated. define('DEBUG_FROM_VERSION', false); @@ -951,7 +951,7 @@ function database_update_info() // this column was removed from the database updater // after 3.0.9-RC3 was released. It might still exist // in 3.0.9-RCX installations and has to be dropped in - // 3.0.11 after the db_tools class is capable of properly + // 3.0.12 after the db_tools class is capable of properly // removing a primary key. // 'attempt_id' => array('UINT', NULL, 'auto_increment'), 'attempt_ip' => array('VCHAR:40', ''), @@ -996,7 +996,7 @@ function database_update_info() // No changes from 3.0.10 to 3.0.11-RC1 '3.0.10' => array(), - /** @todo DROP LOGIN_ATTEMPT_TABLE.attempt_id in 3.0.11-RC1 */ + /** @todo DROP LOGIN_ATTEMPT_TABLE.attempt_id in 3.0.12-RC1 */ ); } diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index ba2d18da00..99b8f7f96d 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -246,7 +246,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_page', INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.11-dev'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.11-RC1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400'); -- cgit v1.2.1 From 19a47dfbbc4265e33c14d6679b5693d80120db4b Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 31 May 2012 20:56:40 +0200 Subject: [develop-olympus] Add changelog for 3.0.11 release. --- phpBB/docs/CHANGELOG.html | 155 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 136 insertions(+), 19 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/CHANGELOG.html b/phpBB/docs/CHANGELOG.html index 2d3b6a6809..71e28be9bc 100644 --- a/phpBB/docs/CHANGELOG.html +++ b/phpBB/docs/CHANGELOG.html @@ -53,6 +53,7 @@
    1. Changelog
        +
      1. Changes since 3.0.10
      2. Changes since 3.0.9
      3. Changes since 3.0.8
      4. Changes since 3.0.7-PL1
      5. @@ -91,7 +92,123 @@
        -

        1.i. Changes since 3.0.9

        +

        1.i. Changes since 3.0.10

        + +

        Bug

        +
          +
        • [PHPBB3-7432] - Unclear language for Inactive Users on ACP main page
        • +
        • [PHPBB3-8652] - Duplicate Emails Sent When Subscribed to Forum and Topic
        • +
        • [PHPBB3-9079] - Display backtrace on all E_USER_ERROR errors, not only SQL errors (when DEBUG_EXTRA is enabled)
        • +
        • [PHPBB3-9084] - Unable to display 'option equal to non entered value' if dropdown CPF is not required
        • +
        • [PHPBB3-9089] - PM message title box not accessible via Tab key
        • +
        • [PHPBB3-9220] - Blue border width when table in a div
        • +
        • [PHPBB3-9681] - Password length not in security settings
        • +
        • [PHPBB3-9813] - fulltext_native.php on innodb loading deadly slow for big indexes
        • +
        • [PHPBB3-9831] - Cannot change default of Boolean checkbox custom profile field
        • +
        • [PHPBB3-10094] - Clear cache before phpBB installation
        • +
        • [PHPBB3-10129] - Missing apostrophes in ACP user management -> permissions
        • +
        • [PHPBB3-10349] - Unit tests do not remove comments from schemas
        • +
        • [PHPBB3-10399] - Special characters aren't parsed in style component variables
        • +
        • [PHPBB3-10401] - auth_ldap has an incorrect return value in login_ldap()
        • +
        • [PHPBB3-10407] - Incorrect check for empty image file paths during conversion
        • +
        • [PHPBB3-10428] - optionget/optionset functions in session.php and acp_users.php incorrectly check whether $data is at its default value
        • +
        • [PHPBB3-10456] - Subsilver2 does not define $CAPTCHA_TAB_INDEX
        • +
        • [PHPBB3-10508] - Marking forums as read displays misleading language
        • +
        • [PHPBB3-10511] - Grammar defect in permissions language
        • +
        • [PHPBB3-10512] - Test failure when no default timezone is set in php
        • +
        • [PHPBB3-10532] - Out of range $start causes a page with no search results but with pagination
        • +
        • [PHPBB3-10538] - Special character are not correctly parsed for SMTP protocol
        • +
        • [PHPBB3-10542] - Incorrect class="postlink" in styles/subsilver2/template/faq_body.html
        • +
        • [PHPBB3-10546] - Argument missing for adm_back_link() in acp_captcha.php
        • +
        • [PHPBB3-10561] - All users can choose deactivated styles.
        • +
        • [PHPBB3-10569] - template/ucp_main_front.html does not correctly handle active topic with the name "0"
        • +
        • [PHPBB3-10580] - Default tz in registration dropdown not the same as the board default tz
        • +
        • [PHPBB3-10589] - user_birthday does not use table alias in $leap_year_birthdays variable definition
        • +
        • [PHPBB3-10605] - Orpahned privmsgs are left in the prvmsgs table, with no ties in privmsgs_to table
        • +
        • [PHPBB3-10606] - $s_hidden_fields -> incorrect array name (3 files affected)
        • +
        • [PHPBB3-10611] - Add a check for selected tables existence for ACP database backup tool
        • +
        • [PHPBB3-10615] - Static calls in utf normalizer yield E_STRICT spam on php 5.4
        • +
        • [PHPBB3-10630] - Prune Users produced unnecessarily long query; Got a packet bigger than 'max_allowed_packet' bytes
        • +
        • [PHPBB3-10633] - Users are able to get the real filename of attachment
        • +
        • [PHPBB3-10639] - negative value of ranks message
        • +
        • [PHPBB3-10658] - Rank-item is not shown on team-list
        • +
        • [PHPBB3-10675] - Use more descriptive message when disk is out of space
        • +
        • [PHPBB3-10684] - Function user_notification() prevents notifications for users with stale bans
        • +
        • [PHPBB3-10689] - Bug in the popup " Find a member" when select by letter.
        • +
        • [PHPBB3-10691] - Search index creation CLI script incorrectly calculates indexing speed
        • +
        • [PHPBB3-10699] - Long h2 title breaks div.minitabs in MCP
        • +
        • [PHPBB3-10708] - After a conversion, passwords with UTF8 characters do not work when user_pass_convert is set.
        • +
        • [PHPBB3-10717] - memberlist_view.html: including admin defined profile fields doesnt work
        • +
        • [PHPBB3-10723] - Do not use SQLite on PHP 5.4 in Tests on Travis
        • +
        • [PHPBB3-10731] - JS function addquote() works incorrectly in Opera
        • +
        • [PHPBB3-10751] - MS SQL Error when searching Admin Log
        • +
        • [PHPBB3-10760] - In pre-commit git hook, syntax error is thrown, but is not specifically described
        • +
        • [PHPBB3-10767] - Git hooks do not work properly with git GUIs
        • +
        • [PHPBB3-10774] - db_tools::create_unique_index does not use specified index names on MySQL
        • +
        • [PHPBB3-10790] - Strict comparison on user_id for sending pms
        • +
        • [PHPBB3-10797] - Template var for user rank not filled
        • +
        • [PHPBB3-10835] - Misleading message in UCP when no permission to change password
        • +
        • [PHPBB3-10846] - Missing alias for MAX(post_id) in SQL query in acp_main.php
        • +
        • [PHPBB3-10849] - Missing BBCode Help Text in subsilver2
        • +
        • [PHPBB3-10858] - $db->sql_fetchfield returns false with mssqlnative
        • +
        • [PHPBB3-10860] - Side-by-side diff styling javascript bug
        • +
        • [PHPBB3-10881] - Some files use 0xA9 as the copyright symbol which is neither ASCII nor the UTF8 copyright symbol.
        • +
        • [PHPBB3-10887] - Auto increment tests depend on varbinary handling
        • +
        • [PHPBB3-10889] - Default value for c_char_size in database unit tests is an empty string instead of a char(4)
        • +
        • [PHPBB3-10890] - test_sql_fetchrow_returns_false_when_empty() fails on MSSQL and Oracle
        • +
        • [PHPBB3-10908] - No remote avatar size limit results in files limited only by PHP memory limit
        • +
        • [PHPBB3-10913] - Admin is logged out when accessing any url under adm/ without session id
        • +
        +

        Improvement

        +
          +
        • [PHPBB3-8599] - Add "Select All" to "Add multiple smilies" screen
        • +
        • [PHPBB3-8636] - Add resync option to topic_view moderation page
        • +
        • [PHPBB3-9876] - Names and descriptions for roles "Newly registered User" in "User roles" and "Forum roles" must be different
        • +
        • [PHPBB3-9914] - Add backup warning to Automatic DB Updater
        • +
        • [PHPBB3-9916] - License in header not linking to version 2 of GNU GPL
        • +
        • [PHPBB3-10093] - Make commit-msg hook always not fatal
        • +
        • [PHPBB3-10162] - Allow TLDs over 6 characters in email addresses
        • +
        • [PHPBB3-10280] - Change the ACP user activation display
        • +
        • [PHPBB3-10308] - Disable Retain/Delete Posts selection if the user has no posts.
        • +
        • [PHPBB3-10453] - PM viewmessage page is misplacing the online icon
        • +
        • [PHPBB3-10492] - Port functional tests to develop-olympus
        • +
        • [PHPBB3-10507] - Sort installed styles list in admin control panel - styles
        • +
        • [PHPBB3-10550] - Sort not installed styles list in admin control panel - styles
        • +
        • [PHPBB3-10563] - ACP usability improvement: show deactivated styles below active styles in styles list
        • +
        • [PHPBB3-10565] - Performance: Unneeded GROUP BY in update_forum_tracking_info
        • +
        • [PHPBB3-10607] - phpBB Credit Line Hardcoded
        • +
        • [PHPBB3-10653] - Add ability to count table rows to database abstraction layer
        • +
        • [PHPBB3-10730] - Add label tags around "select" text in post splitting UI in MCP
        • +
        • [PHPBB3-10764] - FAQ mentions SourceForge
        • +
        • [PHPBB3-10812] - Installer should not display register globals UI for php 5.4+
        • +
        • [PHPBB3-10815] - Enable Feeds by default
        • +
        • [PHPBB3-10819] - Improve side-by-side diff styling
        • +
        • [PHPBB3-10834] - Backport general development language changes in readme files
        • +
        • [PHPBB3-10836] - Enable Avatars by default
        • +
        • [PHPBB3-10891] - Allow specifying test config file name via environment variable
        • +
        • [PHPBB3-10892] - Cosmetic improvements to RUNNING_TESTS.txt
        • +
        • [PHPBB3-10898] - Do not write ?> into config.php to avoid whitespace output
        • +
        +

        New Feature

        + +

        Sub-task

        +
          +
        • [PHPBB3-10907] - Mark (var)binary tests as incomplete on non-MySQL DBMSes
        • +
        +

        Task

        +
          +
        • [PHPBB3-9896] - Update links in docs/readme.html
        • +
        • [PHPBB3-10434] - Add a script that allows creating a search index from CLI
        • +
        • [PHPBB3-10455] - Remove NOTE from header files
        • +
        • [PHPBB3-10694] - Update notification in ACP (Olympus) for increase of minimum PHP version to 5.3.2
        • +
        • [PHPBB3-10718] - Add Travis CI
        • +
        • [PHPBB3-10788] - Update docs/AUTHORS for 3.0.11-RC1
        • +
        • [PHPBB3-10909] - Update Travis Test Configuration: Travis no longer supports PHP 5.3.2
        • +
        + +

        1.ii. Changes since 3.0.9

        Bug

          @@ -227,7 +344,7 @@
        • [PHPBB3-10480] - Automate changelog building
        -

        1.ii. Changes since 3.0.8

        +

        1.iii. Changes since 3.0.8

        Bug

        @@ -595,7 +712,7 @@ -

        1.iii. Changes since 3.0.7-PL1

        +

        1.iv. Changes since 3.0.7-PL1

        Security

          @@ -1053,13 +1170,13 @@
        -

        1.iiv. Changes since 3.0.7

        +

        1.iv. Changes since 3.0.7

        • [Sec] Do not expose forum content of forums with ACL entries but no actual permission in ATOM Feeds. (Bug #58595)
        -

        1.v. Changes since 3.0.6

        +

        1.vi. Changes since 3.0.6

        • [Fix] Allow ban reason and length to be selected and copied in ACP and subsilver2 MCP. (Bug #51095)
        • @@ -1163,7 +1280,7 @@
        -

        1.vi. Changes since 3.0.5

        +

        1.vii. Changes since 3.0.5

        • [Fix] Allow whitespaces in avatar gallery names. (Bug #44955)
        • @@ -1385,7 +1502,7 @@
        • [Feature] Send anonymous statistical information to phpBB on installation and update (optional).
        -

        1.vii. Changes since 3.0.4

        +

        1.viii. Changes since 3.0.4

        • [Fix] Delete user entry from ban list table upon user deletion (Bug #40015 - Patch by TerraFrost)
        • @@ -1474,7 +1591,7 @@
        • [Sec] Only use forum id supplied for posting if global announcement detected. (Reported by nickvergessen)
        -

        1.viii. Changes since 3.0.3

        +

        1.ix. Changes since 3.0.3

        • [Fix] Allow mixed-case template directories to be inherited (Bug #36725)
        • @@ -1506,7 +1623,7 @@
        • [Sec] Ask for forum password if post within passworded forum quoted in private message. (Reported by nickvergessen)
        -

        1.ix. Changes since 3.0.2

        +

        1.x. Changes since 3.0.2

        • [Fix] Correctly set topic starter if first post in topic removed (Bug #30575 - Patch by blueray2048)
        • @@ -1605,7 +1722,7 @@
        • [Sec Precaution] Stricter validation of the HTTP_HOST header (Thanks to Techie-Micheal et al for pointing out possible issues in derived code)
        -

        1.x. Changes since 3.0.1

        +

        1.xi. Changes since 3.0.1

        • [Fix] Ability to set permissions on non-mysql dbms (Bug #24955)
        • @@ -1653,7 +1770,7 @@
        • [Sec] Only allow urls gone through redirect() being used within login_box(). (thanks nookieman)
        -

        1.xi Changes since 3.0.0

        +

        1.xii Changes since 3.0.0

        • [Change] Validate birthdays (Bug #15004)
        • @@ -1724,7 +1841,7 @@
        • [Fix] Find and display colliding usernames correctly when converting from one database to another (Bug #23925)
        -

        1.xii. Changes since 3.0.RC8

        +

        1.xiii. Changes since 3.0.RC8

        • [Fix] Cleaned usernames contain only single spaces, so "a_name" and "a__name" are treated as the same name (Bug #15634)
        • @@ -1733,7 +1850,7 @@
        • [Fix] Call garbage_collection() within database updater to correctly close connections (affects Oracle for example)
        -

        1.xiii. Changes since 3.0.RC7

        +

        1.xiv. Changes since 3.0.RC7

        • [Fix] Fixed MSSQL related bug in the update system
        • @@ -1768,7 +1885,7 @@
        • [Fix] No duplication of active topics (Bug #15474)
        -

        1.xiv. Changes since 3.0.RC6

        +

        1.xv. Changes since 3.0.RC6

        • [Fix] Submitting language changes using acp_language (Bug #14736)
        • @@ -1778,7 +1895,7 @@
        • [Fix] Able to request new password (Bug #14743)
        -

        1.xv. Changes since 3.0.RC5

        +

        1.xvi. Changes since 3.0.RC5

        • [Feature] Removing constant PHPBB_EMBEDDED in favor of using an exit_handler(); the constant was meant to achive this more or less.
        • @@ -1841,7 +1958,7 @@
        • [Sec] New password hashing mechanism for storing passwords (#i42)
        -

        1.xvi. Changes since 3.0.RC4

        +

        1.xvii. Changes since 3.0.RC4

        • [Fix] MySQL, PostgreSQL and SQLite related database fixes (Bug #13862)
        • @@ -1892,7 +2009,7 @@
        • [Fix] odbc_autocommit causing existing result sets to be dropped (Bug #14182)
        -

        1.xvii. Changes since 3.0.RC3

        +

        1.xviii. Changes since 3.0.RC3

        • [Fix] Fixing some subsilver2 and prosilver style issues
        • @@ -2001,7 +2118,7 @@
        -

        1.xviii. Changes since 3.0.RC2

        +

        1.xviv. Changes since 3.0.RC2

        • [Fix] Re-allow searching within the memberlist
        • @@ -2047,7 +2164,7 @@
        -

        1.xix. Changes since 3.0.RC1

        +

        1.xx. Changes since 3.0.RC1

        • [Fix] (X)HTML issues within the templates (Bug #11255, #11255)
        • -- cgit v1.2.1 From 118c5d90daa783ff55319e6121c0fc77166fe58c Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Thu, 31 May 2012 22:07:34 +0200 Subject: [develop-olympus] Incrementing the version to 3.0.12-dev in develop-olympus. --- phpBB/includes/constants.php | 2 +- phpBB/install/database_update.php | 2 +- phpBB/install/schemas/schema_data.sql | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/constants.php b/phpBB/includes/constants.php index 5b72d89795..17c25ee3c6 100644 --- a/phpBB/includes/constants.php +++ b/phpBB/includes/constants.php @@ -25,7 +25,7 @@ if (!defined('IN_PHPBB')) */ // phpBB Version -define('PHPBB_VERSION', '3.0.11-RC1'); +define('PHPBB_VERSION', '3.0.12-dev'); // QA-related // define('PHPBB_QA', 1); diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index c1fe144c62..a52a329f20 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -8,7 +8,7 @@ * */ -define('UPDATES_TO_VERSION', '3.0.11-RC1'); +define('UPDATES_TO_VERSION', '3.0.12-dev'); // Enter any version to update from to test updates. The version within the db will not be updated. define('DEBUG_FROM_VERSION', false); diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index 99b8f7f96d..b139857d28 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -246,7 +246,7 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('topics_per_page', INSERT INTO phpbb_config (config_name, config_value) VALUES ('tpl_allow_php', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_icons_path', 'images/upload_icons'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('upload_path', 'files'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.11-RC1'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('version', '3.0.12-dev'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_expire_days', '90'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('warnings_gc', '14400'); -- cgit v1.2.1 From a9549cbe6ab66732fcf9c321496b74943e2972e7 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Sun, 3 Jun 2012 15:56:55 +0530 Subject: [feature-delete-auto-logins] adds module to database update ucp delete auto-login keys module is added to database_update.php under 3.1-dev --- phpBB/install/database_update.php | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 665db1f2f0..a5bd5e7bfe 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -2305,6 +2305,13 @@ function change_database_data(&$no_updates, $version) 'auth' => 'acl_a_styles', 'cat' => 'ACP_STYLE_MANAGEMENT', ), + 'autologin_keys' => array( + 'base' => 'ucp_profile', + 'class' => 'ucp', + 'title' => 'UCP_PROFILE_AUTOLOGIN_KEYS', + 'auth' => '', + 'cat' => 'UCP_PROFILE', + ), ); _add_modules($modules_to_install); -- cgit v1.2.1 From 0191e1313ca8179bb09a2fc6f3d06de95768bc96 Mon Sep 17 00:00:00 2001 From: wagnerch Date: Sun, 22 Jul 2007 22:23:00 +0000 Subject: [feature/postgresql-fulltext-search] PostgreSQL fulltext search, version 1. PHPBB3-9730 --- phpBB/includes/search/fulltext_postgres.php | 893 ++++++++++++++++++++++++++++ phpBB/install/schemas/fulltext_postgres.sql | 3 + phpBB/language/en/acp/search.php | 14 + 3 files changed, 910 insertions(+) create mode 100644 phpBB/includes/search/fulltext_postgres.php create mode 100644 phpBB/install/schemas/fulltext_postgres.sql (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_postgres.php b/phpBB/includes/search/fulltext_postgres.php new file mode 100644 index 0000000000..5f70ec2b24 --- /dev/null +++ b/phpBB/includes/search/fulltext_postgres.php @@ -0,0 +1,893 @@ +word_length = array('min' => $config['fulltext_postgres_min_word_len'], 'max' => $config['fulltext_postgres_max_word_len']); + + if (version_compare(PHP_VERSION, '5.1.0', '>=') || (version_compare(PHP_VERSION, '5.0.0-dev', '<=') && version_compare(PHP_VERSION, '4.4.0', '>='))) + { + // While this is the proper range of PHP versions, PHP may not be linked with the bundled PCRE lib and instead with an older version + if (@preg_match('/\p{L}/u', 'a') !== false) + { + $this->pcre_properties = true; + } + } + + if (function_exists('mb_ereg')) + { + $this->mbstring_regex = true; + } + + if ($db->sql_layer == 'postgres') + { + $pgsql_version = explode('.', substr($db->sql_server_info(), 10)); + if ($pgsql_version[0] >= 8 && $pgsql_version[1] >= 3) + { + $this->tsearch_builtin = true; + } + + + if (!$this->tsearch_builtin) { + $db->sql_query("SELECT set_curcfg('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "')"); + } + } + + $error = false; + } + + /** + * Checks for correct PostgreSQL version and stores min/max word length in the config + */ + function init() + { + global $db; + + if ($db->sql_layer != 'postgres') + { + return $user->lang['FULLTEXT_POSTGRES_INCOMPATIBLE_VERSION']; + } + + if (!$this->tsearch_builtin) { + $sql = "SELECT c.relname + FROM pg_catalog.pg_class c + WHERE c.relkind = 'r' + AND c.relname = 'pg_ts_cfg' + AND pg_catalog.pg_table_is_visible(c.oid)"; + $result = $db->sql_query($sql); + $row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); + + if (empty ($row['relname'])) + { + return $user->lang['FULLTEXT_POSTGRES_TS_NOT_FOUND']; + } + } + + return false; + } + + /** + * Splits keywords entered by a user into an array of words stored in $this->split_words + * Stores the tidied search query in $this->search_query + * + * @param string &$keywords Contains the keyword as entered by the user + * @param string $terms is either 'all' or 'any' + * @return bool false if no valid keywords were found and otherwise true + */ + function split_keywords(&$keywords, $terms) + { + global $config; + + if ($terms == 'all') + { + $match = array('#\sand\s#iu', '#\sor\s#iu', '#\snot\s#iu', '#\+#', '#-#', '#\|#'); + $replace = array(' +', ' |', ' -', ' +', ' -', ' |'); + + $keywords = preg_replace($match, $replace, $keywords); + } + + // Filter out as above + $split_keywords = preg_replace("#[\"\n\r\t]+#", ' ', trim(htmlspecialchars_decode($keywords))); + + // Split words + if ($this->pcre_properties) + { + $split_keywords = preg_replace('#([^\p{L}\p{N}\'*"()])#u', '$1$1', str_replace('\'\'', '\' \'', trim($split_keywords))); + } + else if ($this->mbstring_regex) + { + $split_keywords = mb_ereg_replace('([^\w\'*"()])', '\\1\\1', str_replace('\'\'', '\' \'', trim($split_keywords))); + } + else + { + $split_keywords = preg_replace('#([^\w\'*"()])#u', '$1$1', str_replace('\'\'', '\' \'', trim($split_keywords))); + } + + if ($this->pcre_properties) + { + $matches = array(); + preg_match_all('#(?:[^\p{L}\p{N}*"()]|^)([+\-|]?(?:[\p{L}\p{N}*"()]+\'?)*[\p{L}\p{N}*"()])(?:[^\p{L}\p{N}*"()]|$)#u', $split_keywords, $matches); + $this->split_words = $matches[1]; + } + else if ($this->mbstring_regex) + { + mb_regex_encoding('UTF-8'); + mb_ereg_search_init($split_keywords, '(?:[^\w*"()]|^)([+\-|]?(?:[\w*"()]+\'?)*[\w*"()])(?:[^\w*"()]|$)'); + + while (($word = mb_ereg_search_regs())) + { + $this->split_words[] = $word[1]; + } + } + else + { + $matches = array(); + preg_match_all('#(?:[^\w*"()]|^)([+\-|]?(?:[\w*"()]+\'?)*[\w*"()])(?:[^\w*"()]|$)#u', $split_keywords, $matches); + $this->split_words = $matches[1]; + } + + // to allow phrase search, we need to concatenate quoted words + $tmp_split_words = array(); + $phrase = ''; + foreach ($this->split_words as $word) + { + if ($phrase) + { + $phrase .= ' ' . $word; + if (strpos($word, '"') !== false && substr_count($word, '"') % 2 == 1) + { + $tmp_split_words[] = $phrase; + $phrase = ''; + } + } + else if (strpos($word, '"') !== false && substr_count($word, '"') % 2 == 1) + { + $phrase = $word; + } + else + { + $tmp_split_words[] = $word . ' '; + } + } + if ($phrase) + { + $tmp_split_words[] = $phrase; + } + + $this->split_words = $tmp_split_words; + + unset($tmp_split_words); + unset($phrase); + + foreach ($this->split_words as $i => $word) + { + $clean_word = preg_replace('#^[+\-|"]#', '', $word); + + // check word length + $clean_len = utf8_strlen(str_replace('*', '', $clean_word)); + if (($clean_len < $config['fulltext_postgres_min_word_len']) || ($clean_len > $config['fulltext_postgres_max_word_len'])) + { + $this->common_words[] = $word; + unset($this->split_words[$i]); + } + } + + if ($terms == 'any') + { + $this->search_query = ''; + $this->tsearch_query = ''; + foreach ($this->split_words as $word) + { + if ((strpos($word, '+') === 0) || (strpos($word, '-') === 0) || (strpos($word, '|') === 0)) + { + $word = substr($word, 1); + } + $this->search_query .= $word . ' '; + $this->tsearch_query .= '|' . $word . ' '; + } + } + else + { + $this->search_query = ''; + $this->tsearch_query = ''; + foreach ($this->split_words as $word) + { + if (strpos($word, '+') === 0) + { + $this->search_query .= $word . ' '; + $this->tsearch_query .= '&' . substr($word, 1) . ' '; + } + elseif (strpos($word, '-') === 0) + { + $this->search_query .= $word . ' '; + $this->tsearch_query .= '&!' . substr($word, 1) . ' '; + } + elseif (strpos($word, '|') === 0) + { + $this->search_query .= $word . ' '; + $this->tsearch_query .= '|' . substr($word, 1) . ' '; + } + else + { + $this->search_query .= '+' . $word . ' '; + $this->tsearch_query .= '&' . $word . ' '; + } + } + } + + $this->tsearch_query = substr($this->tsearch_query, 1); + $this->search_query = utf8_htmlspecialchars($this->search_query); + + if ($this->search_query) + { + $this->split_words = array_values($this->split_words); + sort($this->split_words); + return true; + } + return false; + } + + /** + * Turns text into an array of words + */ + function split_message($text) + { + global $config; + + // Split words + if ($this->pcre_properties) + { + $text = preg_replace('#([^\p{L}\p{N}\'*])#u', '$1$1', str_replace('\'\'', '\' \'', trim($text))); + } + else if ($this->mbstring_regex) + { + $text = mb_ereg_replace('([^\w\'*])', '\\1\\1', str_replace('\'\'', '\' \'', trim($text))); + } + else + { + $text = preg_replace('#([^\w\'*])#u', '$1$1', str_replace('\'\'', '\' \'', trim($text))); + } + + if ($this->pcre_properties) + { + $matches = array(); + preg_match_all('#(?:[^\p{L}\p{N}*]|^)([+\-|]?(?:[\p{L}\p{N}*]+\'?)*[\p{L}\p{N}*])(?:[^\p{L}\p{N}*]|$)#u', $text, $matches); + $text = $matches[1]; + } + else if ($this->mbstring_regex) + { + mb_regex_encoding('UTF-8'); + mb_ereg_search_init($text, '(?:[^\w*]|^)([+\-|]?(?:[\w*]+\'?)*[\w*])(?:[^\w*]|$)'); + + $text = array(); + while (($word = mb_ereg_search_regs())) + { + $text[] = $word[1]; + } + } + else + { + $matches = array(); + preg_match_all('#(?:[^\w*]|^)([+\-|]?(?:[\w*]+\'?)*[\w*])(?:[^\w*]|$)#u', $text, $matches); + $text = $matches[1]; + } + + // remove too short or too long words + $text = array_values($text); + for ($i = 0, $n = sizeof($text); $i < $n; $i++) + { + $text[$i] = trim($text[$i]); + if (utf8_strlen($text[$i]) < $config['fulltext_postgres_min_word_len'] || utf8_strlen($text[$i]) > $config['fulltext_postgres_max_word_len']) + { + unset($text[$i]); + } + } + + return array_values($text); + } + + /** + * Performs a search on keywords depending on display specific params. You have to run split_keywords() first. + * + * @param string $type contains either posts or topics depending on what should be searched for + * @param string &$fields contains either titleonly (topic titles should be searched), msgonly (only message bodies should be searched), firstpost (only subject and body of the first post should be searched) or all (all post bodies and subjects should be searched) + * @param string &$terms is either 'all' (use query as entered, words without prefix should default to "have to be in field") or 'any' (ignore search query parts and just return all posts that contain any of the specified words) + * @param array &$sort_by_sql contains SQL code for the ORDER BY part of a query + * @param string &$sort_key is the key of $sort_by_sql for the selected sorting + * @param string &$sort_dir is either a or d representing ASC and DESC + * @param string &$sort_days specifies the maximum amount of days a post may be old + * @param array &$ex_fid_ary specifies an array of forum ids which should not be searched + * @param array &$m_approve_fid_ary specifies an array of forum ids in which the searcher is allowed to view unapproved posts + * @param int &$topic_id is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched + * @param array &$author_ary an array of author ids if the author should be ignored during the search the array is empty + * @param array &$id_ary passed by reference, to be filled with ids for the page specified by $start and $per_page, should be ordered + * @param int $start indicates the first index of the page + * @param int $per_page number of ids each page is supposed to contain + * @return boolean|int total number of results + * + * @access public + */ + function keyword_search($type, &$fields, &$terms, &$sort_by_sql, &$sort_key, &$sort_dir, &$sort_days, &$ex_fid_ary, &$m_approve_fid_ary, &$topic_id, &$author_ary, &$id_ary, $start, $per_page) + { + global $config, $db; + + // No keywords? No posts. + if (!$this->search_query) + { + return false; + } + + // generate a search_key from all the options to identify the results + $search_key = md5(implode('#', array( + implode(', ', $this->split_words), + $type, + $fields, + $terms, + $sort_days, + $sort_key, + $topic_id, + implode(',', $ex_fid_ary), + implode(',', $m_approve_fid_ary), + implode(',', $author_ary) + ))); + + // try reading the results from cache + $result_count = 0; + if ($this->obtain_ids($search_key, $result_count, $id_ary, $start, $per_page, $sort_dir) == SEARCH_RESULT_IN_CACHE) + { + return $result_count; + } + + $id_ary = array(); + + $join_topic = ($type == 'posts') ? false : true; + + // Build sql strings for sorting + $sql_sort = $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC'); + $sql_sort_table = $sql_sort_join = ''; + + switch ($sql_sort[0]) + { + case 'u': + $sql_sort_table = USERS_TABLE . ' u, '; + $sql_sort_join = ($type == 'posts') ? ' AND u.user_id = p.poster_id ' : ' AND u.user_id = t.topic_poster '; + break; + + case 't': + $join_topic = true; + break; + + case 'f': + $sql_sort_table = FORUMS_TABLE . ' f, '; + $sql_sort_join = ' AND f.forum_id = p.forum_id '; + break; + } + + // Build some display specific sql strings + switch ($fields) + { + case 'titleonly': + $sql_match = 'p.post_subject'; + $sql_match_where = ' AND p.post_id = t.topic_first_post_id'; + $join_topic = true; + break; + + case 'msgonly': + $sql_match = 'p.post_text'; + $sql_match_where = ''; + break; + + case 'firstpost': + $sql_match = 'p.post_subject, p.post_text'; + $sql_match_where = ' AND p.post_id = t.topic_first_post_id'; + $join_topic = true; + break; + + default: + $sql_match = 'p.post_subject, p.post_text'; + $sql_match_where = ''; + break; + } + + if (!sizeof($m_approve_fid_ary)) + { + $m_approve_fid_sql = ' AND p.post_approved = 1'; + } + else if ($m_approve_fid_ary === array(-1)) + { + $m_approve_fid_sql = ''; + } + else + { + $m_approve_fid_sql = ' AND (p.post_approved = 1 OR ' . $db->sql_in_set('p.forum_id', $m_approve_fid_ary, true) . ')'; + } + + $sql_select = ($type == 'posts') ? 'p.post_id' : 'DISTINCT t.topic_id'; + $sql_from = ($join_topic) ? TOPICS_TABLE . ' t, ' : ''; + $field = ($type == 'posts') ? 'post_id' : 'topic_id'; + $sql_author = (sizeof($author_ary) == 1) ? ' = ' . $author_ary[0] : 'IN (' . implode(', ', $author_ary) . ')'; + + $sql_where_options = $sql_sort_join; + $sql_where_options .= ($topic_id) ? ' AND p.topic_id = ' . $topic_id : ''; + $sql_where_options .= ($join_topic) ? ' AND t.topic_id = p.topic_id' : ''; + $sql_where_options .= (sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : ''; + $sql_where_options .= $m_approve_fid_sql; + $sql_where_options .= (sizeof($author_ary)) ? ' AND p.poster_id ' . $sql_author : ''; + $sql_where_options .= ($sort_days) ? ' AND p.post_time >= ' . (time() - ($sort_days * 86400)) : ''; + $sql_where_options .= $sql_match_where; + + $tmp_sql_match = array(); + foreach (explode(',', $sql_match) as $sql_match_column) + { + if ($this->tsearch_builtin) + { + $tmp_sql_match[] = "to_tsvector ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', " . $sql_match_column . ") @@ to_tsquery ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', '" . $db->sql_escape($this->tsearch_query) . "')"; + } + else + { + $tmp_sql_match[] = "to_tsvector (" . $sql_match_column . ") @@ to_tsquery ('" . $db->sql_escape($this->tsearch_query) . "')"; + } + } + + $sql = "SELECT $sql_select + FROM $sql_from$sql_sort_table" . POSTS_TABLE . " p + WHERE (" . implode(' OR ', $tmp_sql_match) . ") + $sql_where_options + ORDER BY $sql_sort"; + $result = $db->sql_query_limit($sql, $config['search_block_size'], $start); + + while ($row = $db->sql_fetchrow($result)) + { + $id_ary[] = $row[$field]; + } + $db->sql_freeresult($result); + + $id_ary = array_unique($id_ary); + + if (!sizeof($id_ary)) + { + return false; + } + + // if the total result count is not cached yet, retrieve it from the db + if (!$result_count) + { + $result_count = sizeof ($id_ary); + + if (!$result_count) + { + return false; + } + } + + // store the ids, from start on then delete anything that isn't on the current page because we only need ids for one page + $this->save_ids($search_key, implode(' ', $this->split_words), $author_ary, $result_count, $id_ary, $start, $sort_dir); + $id_ary = array_slice($id_ary, 0, (int) $per_page); + + return $result_count; + } + + /** + * Performs a search on an author's posts without caring about message contents. Depends on display specific params + * + * @param array &$id_ary passed by reference, to be filled with ids for the page specified by $start and $per_page, should be ordered + * @param int $start indicates the first index of the page + * @param int $per_page number of ids each page is supposed to contain + * @return total number of results + */ + function author_search($type, $firstpost_only, &$sort_by_sql, &$sort_key, &$sort_dir, &$sort_days, &$ex_fid_ary, &$m_approve_fid_ary, &$topic_id, &$author_ary, &$id_ary, $start, $per_page) + { + global $config, $db; + + // No author? No posts. + if (!sizeof($author_ary)) + { + return 0; + } + + // generate a search_key from all the options to identify the results + $search_key = md5(implode('#', array( + '', + $type, + ($firstpost_only) ? 'firstpost' : '', + '', + '', + $sort_days, + $sort_key, + $topic_id, + implode(',', $ex_fid_ary), + implode(',', $m_approve_fid_ary), + implode(',', $author_ary) + ))); + + // try reading the results from cache + $result_count = 0; + if ($this->obtain_ids($search_key, $result_count, $id_ary, $start, $per_page, $sort_dir) == SEARCH_RESULT_IN_CACHE) + { + return $result_count; + } + + $id_ary = array(); + + // Create some display specific sql strings + $sql_author = $db->sql_in_set('p.poster_id', $author_ary); + $sql_fora = (sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : ''; + $sql_topic_id = ($topic_id) ? ' AND p.topic_id = ' . (int) $topic_id : ''; + $sql_time = ($sort_days) ? ' AND p.post_time >= ' . (time() - ($sort_days * 86400)) : ''; + $sql_firstpost = ($firstpost_only) ? ' AND p.post_id = t.topic_first_post_id' : ''; + + // Build sql strings for sorting + $sql_sort = $sort_by_sql[$sort_key] . (($sort_dir == 'a') ? ' ASC' : ' DESC'); + $sql_sort_table = $sql_sort_join = ''; + switch ($sql_sort[0]) + { + case 'u': + $sql_sort_table = USERS_TABLE . ' u, '; + $sql_sort_join = ($type == 'posts') ? ' AND u.user_id = p.poster_id ' : ' AND u.user_id = t.topic_poster '; + break; + + case 't': + $sql_sort_table = ($type == 'posts') ? TOPICS_TABLE . ' t, ' : ''; + $sql_sort_join = ($type == 'posts') ? ' AND t.topic_id = p.topic_id ' : ''; + break; + + case 'f': + $sql_sort_table = FORUMS_TABLE . ' f, '; + $sql_sort_join = ' AND f.forum_id = p.forum_id '; + break; + } + + if (!sizeof($m_approve_fid_ary)) + { + $m_approve_fid_sql = ' AND p.post_approved = 1'; + } + else if ($m_approve_fid_ary == array(-1)) + { + $m_approve_fid_sql = ''; + } + else + { + $m_approve_fid_sql = ' AND (p.post_approved = 1 OR ' . $db->sql_in_set('p.forum_id', $m_approve_fid_ary, true) . ')'; + } + + // Build the query for really selecting the post_ids + if ($type == 'posts') + { + $sql = "SELECT p.post_id + FROM " . $sql_sort_table . POSTS_TABLE . ' p' . (($firstpost_only) ? ', ' . TOPICS_TABLE . ' t ' : ' ') . " + WHERE $sql_author + $sql_topic_id + $sql_firstpost + $m_approve_fid_sql + $sql_fora + $sql_sort_join + $sql_time + ORDER BY $sql_sort"; + $field = 'post_id'; + } + else + { + $sql = "SELECT t.topic_id + FROM " . $sql_sort_table . TOPICS_TABLE . ' t, ' . POSTS_TABLE . " p + WHERE $sql_author + $sql_topic_id + $sql_firstpost + $m_approve_fid_sql + $sql_fora + AND t.topic_id = p.topic_id + $sql_sort_join + $sql_time + GROUP BY t.topic_id, $sort_by_sql[$sort_key] + ORDER BY $sql_sort"; + $field = 'topic_id'; + } + + // Only read one block of posts from the db and then cache it + $result = $db->sql_query_limit($sql, $config['search_block_size'], $start); + + while ($row = $db->sql_fetchrow($result)) + { + $id_ary[] = $row[$field]; + } + $db->sql_freeresult($result); + + // retrieve the total result count if needed + if (!$result_count) + { + $result_count = sizeof ($id_ary); + + if (!$result_count) + { + return false; + } + } + + if (sizeof($id_ary)) + { + $this->save_ids($search_key, '', $author_ary, $result_count, $id_ary, $start, $sort_dir); + $id_ary = array_slice($id_ary, 0, $per_page); + + return $result_count; + } + return false; + } + + /** + * Destroys cached search results, that contained one of the new words in a post so the results won't be outdated. + * + * @param string $mode contains the post mode: edit, post, reply, quote ... + */ + function index($mode, $post_id, &$message, &$subject, $poster_id, $forum_id) + { + global $db; + + // Split old and new post/subject to obtain array of words + $split_text = $this->split_message($message); + $split_title = ($subject) ? $this->split_message($subject) : array(); + + $words = array_unique(array_merge($split_text, $split_title)); + + unset($split_text); + unset($split_title); + + // destroy cached search results containing any of the words removed or added + $this->destroy_cache($words, array($poster_id)); + + unset($words); + } + + /** + * Destroy cached results, that might be outdated after deleting a post + */ + function index_remove($post_ids, $author_ids, $forum_ids) + { + $this->destroy_cache(array(), $author_ids); + } + + /** + * Destroy old cache entries + */ + function tidy() + { + global $db, $config; + + // destroy too old cached search results + $this->destroy_cache(array()); + + set_config('search_last_gc', time(), true); + } + + /** + * Create fulltext index + */ + function create_index($acp_module, $u_action) + { + global $db, $config; + + // Make sure we can actually use PostgreSQL with fulltext indexes + if ($error = $this->init()) + { + return $error; + } + + if (empty($this->stats)) + { + $this->get_stats(); + } + + if (!isset($this->stats['post_subject'])) + { + $db->sql_query("CREATE INDEX " . POSTS_TABLE . "_" . $config['fulltext_postgres_ts_name'] . "_post_subject ON " . POSTS_TABLE . " USING gin (to_tsvector ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', post_subject))"); + } + + if (!isset($this->stats['post_text'])) + { + $db->sql_query("CREATE INDEX " . POSTS_TABLE . "_" . $config['fulltext_postgres_ts_name'] . "_post_text ON " . POSTS_TABLE . " USING gin (to_tsvector ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', post_text))"); + } + + $db->sql_query('TRUNCATE TABLE ' . SEARCH_RESULTS_TABLE); + + return false; + } + + /** + * Drop fulltext index + */ + function delete_index($acp_module, $u_action) + { + global $db; + + // Make sure we can actually use PostgreSQL with fulltext indexes + if ($error = $this->init()) + { + return $error; + } + + if (empty($this->stats)) + { + $this->get_stats(); + } + + if (isset($this->stats['post_subject'])) + { + $db->sql_query('DROP INDEX ' . $this->stats['post_subject']['relname']); + } + + if (isset($this->stats['post_text'])) + { + $db->sql_query('DROP INDEX ' . $this->stats['post_text']['relname']); + } + + $db->sql_query('TRUNCATE TABLE ' . SEARCH_RESULTS_TABLE); + + return false; + } + + /** + * Returns true if both FULLTEXT indexes exist + */ + function index_created() + { + if (empty($this->stats)) + { + $this->get_stats(); + } + + return (isset($this->stats['post_text']) && isset($this->stats['post_subject'])) ? true : false; + } + + /** + * Returns an associative array containing information about the indexes + */ + function index_stats() + { + global $user; + + if (empty($this->stats)) + { + $this->get_stats(); + } + + return array( + $user->lang['FULLTEXT_POSTGRES_TOTAL_POSTS'] => ($this->index_created()) ? $this->stats['total_posts'] : 0, + ); + } + + function get_stats() + { + global $db, $config; + + $sql = "SELECT c2.relname, pg_catalog.pg_get_indexdef(i.indexrelid, 0, true) AS indexdef + FROM pg_catalog.pg_class c1, pg_catalog.pg_index i, pg_catalog.pg_class c2 + WHERE c1.relname = '" . POSTS_TABLE . "' + AND pg_catalog.pg_table_is_visible(c1.oid) + AND c1.oid = i.indrelid + AND i.indexrelid = c2.oid"; + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) + { + // deal with older PostgreSQL versions which didn't use Index_type + if (strpos($row['indexdef'], 'to_tsvector') !== false) + { + if ($row['relname'] == POSTS_TABLE . '_' . $config['fulltext_postgres_ts_name'] . '_post_text' || $row['relname'] == POSTS_TABLE . '_post_text') + { + $this->stats['post_text'] = $row; + } + else if ($row['relname'] == POSTS_TABLE . '_' . $config['fulltext_postgres_ts_name'] . '_post_subject' || $row['relname'] == POSTS_TABLE . '_post_subject') + { + $this->stats['post_subject'] = $row; + } + } + } + $db->sql_freeresult($result); + + $this->stats['total_posts'] = $config['num_posts']; + } + + /** + * Display a note, that UTF-8 support is not available with certain versions of PHP + */ + function acp() + { + global $user, $config, $db; + + $tpl = ' +
          +

          ' . $user->lang['FULLTEXT_POSTGRES_PCRE_EXPLAIN'] . '
          +
          ' . (($this->pcre_properties) ? $user->lang['YES'] : $user->lang['NO']) . ' (PHP ' . PHP_VERSION . ')
          +
          +
          +

          ' . $user->lang['FULLTEXT_POSTGRES_MBSTRING_EXPLAIN'] . '
          +
          ' . (($this->mbstring_regex) ? $user->lang['YES'] : $user->lang['NO']). '
          +
          +
          +

          ' . $user->lang['FULLTEXT_POSTGRES_TS_NAME_EXPLAIN'] . '
          +
          +
          +
          +

          ' . $user->lang['FULLTEXT_POSTGRES_MIN_WORD_LEN_EXPLAIN'] . '
          +
          +
          +
          +

          ' . $user->lang['FULLTEXT_POSTGRES_MAX_WORD_LEN_EXPLAIN'] . '
          +
          +
          + '; + + // These are fields required in the config table + return array( + 'tpl' => $tpl, + 'config' => array('fulltext_postgres_ts_name' => 'string', 'fulltext_postgres_min_word_len' => 'integer:0:255', 'fulltext_postgres_max_word_len' => 'integer:0:255') + ); + } +} + +?> diff --git a/phpBB/install/schemas/fulltext_postgres.sql b/phpBB/install/schemas/fulltext_postgres.sql new file mode 100644 index 0000000000..0be6648d0c --- /dev/null +++ b/phpBB/install/schemas/fulltext_postgres.sql @@ -0,0 +1,3 @@ +INSERT INTO phpbb_config (config_name, config_value) VALUES ('fulltext_postgres_max_word_len', '254'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('fulltext_postgres_min_word_len', '4'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('fulltext_postgres_ts_name', 'default'); diff --git a/phpBB/language/en/acp/search.php b/phpBB/language/en/acp/search.php index 3dc89570bf..5fa5acbe40 100644 --- a/phpBB/language/en/acp/search.php +++ b/phpBB/language/en/acp/search.php @@ -61,6 +61,20 @@ $lang = array_merge($lang, array( 'FULLTEXT_MYSQL_MIN_SEARCH_CHARS_EXPLAIN' => 'Words with at least this many characters will be indexed for searching. You or your host can only change this setting by changing the mysql configuration.', 'FULLTEXT_MYSQL_MAX_SEARCH_CHARS_EXPLAIN' => 'Words with no more than this many characters will be indexed for searching. You or your host can only change this setting by changing the mysql configuration.', + 'FULLTEXT_POSTGRES_INCOMPATIBLE_VERSION' => 'The PostgreSQL fulltext backend can only be used with PostgreSQL.', + 'FULLTEXT_POSTGRES_TS_NOT_FOUND' => 'The PostgreSQL fulltext backend can only be used with Tsearch2.', + 'FULLTEXT_POSTGRES_TOTAL_POSTS' => 'Total number of indexed posts', + 'FULLTEXT_POSTGRES_MBSTRING' => 'Support for non-latin UTF-8 characters using mbstring:', + 'FULLTEXT_POSTGRES_PCRE' => 'Support for non-latin UTF-8 characters using PCRE:', + 'FULLTEXT_POSTGRES_TS_NAME' => 'Tsearch2 Configuration Profile:', + 'FULLTEXT_POSTGRES_MIN_WORD_LEN' => 'Minimum word length for keywords', + 'FULLTEXT_POSTGRES_MAX_WORD_LEN' => 'Maximum word length for keywords', + 'FULLTEXT_POSTGRES_MBSTRING_EXPLAIN' => 'If PCRE does not have unicode character properties, the search backend will try to use mbstring’s regular expression engine.', + 'FULLTEXT_POSTGRES_PCRE_EXPLAIN' => 'This search backend requires PCRE unicode character properties, only available in PHP 4.4, 5.1 and above, if you want to search for non-latin characters.', + 'FULLTEXT_POSTGRES_TS_NAME_EXPLAIN' => 'The Tsearch2 configuration profile used to determine the parser and dictionary.', + 'FULLTEXT_POSTGRES_MIN_WORD_LEN_EXPLAIN' => 'Words with at least this many characters will be included in the query to the database.', + 'FULLTEXT_POSTGRES_MAX_WORD_LEN_EXPLAIN' => 'Words with no more than this many characters will be included in the query to the database.', + 'GENERAL_SEARCH_SETTINGS' => 'General search settings', 'GO_TO_SEARCH_INDEX' => 'Go to search index page', -- cgit v1.2.1 From fa470c3792b1030c48f6eaa8216a2bcbb975cb11 Mon Sep 17 00:00:00 2001 From: wagnerch Date: Tue, 7 Aug 2007 03:52:00 +0000 Subject: [feature/postgresql-fulltext-search] PostgreSQL fulltext search, version 2. PHPBB3-9730 --- phpBB/includes/search/fulltext_postgres.php | 76 +++++++++-------------------- 1 file changed, 24 insertions(+), 52 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_postgres.php b/phpBB/includes/search/fulltext_postgres.php index 5f70ec2b24..0de456c2cd 100644 --- a/phpBB/includes/search/fulltext_postgres.php +++ b/phpBB/includes/search/fulltext_postgres.php @@ -35,7 +35,6 @@ class fulltext_postgres extends search_backend var $common_words = array(); var $pcre_properties = false; var $mbstring_regex = false; - var $tsearch_builtin = false; function fulltext_postgres(&$error) { @@ -59,16 +58,7 @@ class fulltext_postgres extends search_backend if ($db->sql_layer == 'postgres') { - $pgsql_version = explode('.', substr($db->sql_server_info(), 10)); - if ($pgsql_version[0] >= 8 && $pgsql_version[1] >= 3) - { - $this->tsearch_builtin = true; - } - - - if (!$this->tsearch_builtin) { - $db->sql_query("SELECT set_curcfg('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "')"); - } + $db->sql_query("SELECT set_curcfg('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "')"); } $error = false; @@ -86,20 +76,18 @@ class fulltext_postgres extends search_backend return $user->lang['FULLTEXT_POSTGRES_INCOMPATIBLE_VERSION']; } - if (!$this->tsearch_builtin) { - $sql = "SELECT c.relname - FROM pg_catalog.pg_class c - WHERE c.relkind = 'r' - AND c.relname = 'pg_ts_cfg' - AND pg_catalog.pg_table_is_visible(c.oid)"; - $result = $db->sql_query($sql); - $row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); + $sql = "SELECT c.relname + FROM pg_catalog.pg_class c + WHERE c.relkind = 'r' + AND c.relname = 'pg_ts_cfg' + AND pg_catalog.pg_table_is_visible(c.oid)"; + $result = $db->sql_query($sql); + $row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); - if (empty ($row['relname'])) - { - return $user->lang['FULLTEXT_POSTGRES_TS_NOT_FOUND']; - } + if (empty ($row['relname'])) + { + return $user->lang['FULLTEXT_POSTGRES_TS_NOT_FOUND']; } return false; @@ -126,7 +114,7 @@ class fulltext_postgres extends search_backend } // Filter out as above - $split_keywords = preg_replace("#[\"\n\r\t]+#", ' ', trim(htmlspecialchars_decode($keywords))); + $split_keywords = preg_replace("#[\n\r\t]+#", ' ', trim(htmlspecialchars_decode($keywords))); // Split words if ($this->pcre_properties) @@ -458,14 +446,7 @@ class fulltext_postgres extends search_backend $tmp_sql_match = array(); foreach (explode(',', $sql_match) as $sql_match_column) { - if ($this->tsearch_builtin) - { - $tmp_sql_match[] = "to_tsvector ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', " . $sql_match_column . ") @@ to_tsquery ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', '" . $db->sql_escape($this->tsearch_query) . "')"; - } - else - { - $tmp_sql_match[] = "to_tsvector (" . $sql_match_column . ") @@ to_tsquery ('" . $db->sql_escape($this->tsearch_query) . "')"; - } + $tmp_sql_match[] = "to_tsvector (" . $sql_match_column . ") @@ to_tsquery ('" . $db->sql_escape($this->tsearch_query) . "')"; } $sql = "SELECT $sql_select @@ -616,7 +597,7 @@ class fulltext_postgres extends search_backend AND t.topic_id = p.topic_id $sql_sort_join $sql_time - GROUP BY t.topic_id, $sort_by_sql[$sort_key] + GROUP BY t.topic_id ORDER BY $sql_sort"; $field = 'topic_id'; } @@ -701,7 +682,7 @@ class fulltext_postgres extends search_backend */ function create_index($acp_module, $u_action) { - global $db, $config; + global $db; // Make sure we can actually use PostgreSQL with fulltext indexes if ($error = $this->init()) @@ -716,12 +697,12 @@ class fulltext_postgres extends search_backend if (!isset($this->stats['post_subject'])) { - $db->sql_query("CREATE INDEX " . POSTS_TABLE . "_" . $config['fulltext_postgres_ts_name'] . "_post_subject ON " . POSTS_TABLE . " USING gin (to_tsvector ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', post_subject))"); + $db->sql_query('CREATE INDEX ' . POSTS_TABLE . '_post_subject ON ' . POSTS_TABLE . ' USING gist (to_tsvector (post_subject))'); } if (!isset($this->stats['post_text'])) { - $db->sql_query("CREATE INDEX " . POSTS_TABLE . "_" . $config['fulltext_postgres_ts_name'] . "_post_text ON " . POSTS_TABLE . " USING gin (to_tsvector ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', post_text))"); + $db->sql_query('CREATE INDEX ' . POSTS_TABLE . '_post_text ON ' . POSTS_TABLE . ' USING gist (to_tsvector (post_text))'); } $db->sql_query('TRUNCATE TABLE ' . SEARCH_RESULTS_TABLE); @@ -749,12 +730,12 @@ class fulltext_postgres extends search_backend if (isset($this->stats['post_subject'])) { - $db->sql_query('DROP INDEX ' . $this->stats['post_subject']['relname']); + $db->sql_query('DROP INDEX ' . POSTS_TABLE . '_post_subject'); } if (isset($this->stats['post_text'])) { - $db->sql_query('DROP INDEX ' . $this->stats['post_text']['relname']); + $db->sql_query('DROP INDEX ' . POSTS_TABLE . '_post_text'); } $db->sql_query('TRUNCATE TABLE ' . SEARCH_RESULTS_TABLE); @@ -809,11 +790,11 @@ class fulltext_postgres extends search_backend // deal with older PostgreSQL versions which didn't use Index_type if (strpos($row['indexdef'], 'to_tsvector') !== false) { - if ($row['relname'] == POSTS_TABLE . '_' . $config['fulltext_postgres_ts_name'] . '_post_text' || $row['relname'] == POSTS_TABLE . '_post_text') + if ($row['relname'] == POSTS_TABLE . '_post_text') { $this->stats['post_text'] = $row; } - else if ($row['relname'] == POSTS_TABLE . '_' . $config['fulltext_postgres_ts_name'] . '_post_subject' || $row['relname'] == POSTS_TABLE . '_post_subject') + else if ($row['relname'] == POSTS_TABLE . '_post_subject') { $this->stats['post_subject'] = $row; } @@ -846,17 +827,8 @@ class fulltext_postgres extends search_backend if ($db->sql_layer == 'postgres') { - if ($this->tsearch_builtin) - { - $sql = 'SELECT cfgname AS ts_name - FROM pg_ts_config'; - } - else - { - $sql = 'SELECT * - FROM pg_ts_cfg'; - } - + $sql = 'SELECT * + FROM pg_ts_cfg'; $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) -- cgit v1.2.1 From 07e946c1893751e9a9ede5297ed85df0f43cad1c Mon Sep 17 00:00:00 2001 From: we3b Date: Wed, 10 Feb 2010 10:31:00 +0000 Subject: [feature/postgresql-fulltext-search] PostgreSQL fulltext search, version 3. PHPBB3-9730 --- phpBB/includes/search/fulltext_postgres.php | 163 +++++++++++++++++++--------- 1 file changed, 114 insertions(+), 49 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_postgres.php b/phpBB/includes/search/fulltext_postgres.php index 0de456c2cd..64ff923692 100644 --- a/phpBB/includes/search/fulltext_postgres.php +++ b/phpBB/includes/search/fulltext_postgres.php @@ -2,7 +2,7 @@ /** * * @package search -* @version $Id: fulltext_postgres.php,v 1.47 2007/06/09 11:08:57 acydburn Exp $ +* @version $Id: fulltext_postgres.php,v 1.49 2010/02/12 10:10:36 frantic Exp $ * @copyright (c) 2005 phpBB Group * @license http://opensource.org/licenses/gpl-license.php GNU Public License * @@ -35,6 +35,7 @@ class fulltext_postgres extends search_backend var $common_words = array(); var $pcre_properties = false; var $mbstring_regex = false; + var $tsearch_builtin = false; function fulltext_postgres(&$error) { @@ -58,7 +59,16 @@ class fulltext_postgres extends search_backend if ($db->sql_layer == 'postgres') { - $db->sql_query("SELECT set_curcfg('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "')"); + $pgsql_version = explode('.', substr($db->sql_server_info(), 10)); + if ($pgsql_version[0] >= 8 && $pgsql_version[1] >= 3) + { + $this->tsearch_builtin = true; + } + + + if (!$this->tsearch_builtin) { + $db->sql_query("SELECT set_curcfg('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "')"); + } } $error = false; @@ -76,18 +86,20 @@ class fulltext_postgres extends search_backend return $user->lang['FULLTEXT_POSTGRES_INCOMPATIBLE_VERSION']; } - $sql = "SELECT c.relname - FROM pg_catalog.pg_class c - WHERE c.relkind = 'r' - AND c.relname = 'pg_ts_cfg' - AND pg_catalog.pg_table_is_visible(c.oid)"; - $result = $db->sql_query($sql); - $row = $db->sql_fetchrow($result); - $db->sql_freeresult($result); + if (!$this->tsearch_builtin) { + $sql = "SELECT c.relname + FROM pg_catalog.pg_class c + WHERE c.relkind = 'r' + AND c.relname = 'pg_ts_cfg' + AND pg_catalog.pg_table_is_visible(c.oid)"; + $result = $db->sql_query($sql); + $row = $db->sql_fetchrow($result); + $db->sql_freeresult($result); - if (empty ($row['relname'])) - { - return $user->lang['FULLTEXT_POSTGRES_TS_NOT_FOUND']; + if (empty ($row['relname'])) + { + return $user->lang['FULLTEXT_POSTGRES_TS_NOT_FOUND']; + } } return false; @@ -114,7 +126,7 @@ class fulltext_postgres extends search_backend } // Filter out as above - $split_keywords = preg_replace("#[\n\r\t]+#", ' ', trim(htmlspecialchars_decode($keywords))); + $split_keywords = preg_replace("#[\"\n\r\t]+#", ' ', trim(htmlspecialchars_decode($keywords))); // Split words if ($this->pcre_properties) @@ -317,16 +329,17 @@ class fulltext_postgres extends search_backend * Performs a search on keywords depending on display specific params. You have to run split_keywords() first. * * @param string $type contains either posts or topics depending on what should be searched for - * @param string &$fields contains either titleonly (topic titles should be searched), msgonly (only message bodies should be searched), firstpost (only subject and body of the first post should be searched) or all (all post bodies and subjects should be searched) - * @param string &$terms is either 'all' (use query as entered, words without prefix should default to "have to be in field") or 'any' (ignore search query parts and just return all posts that contain any of the specified words) - * @param array &$sort_by_sql contains SQL code for the ORDER BY part of a query - * @param string &$sort_key is the key of $sort_by_sql for the selected sorting - * @param string &$sort_dir is either a or d representing ASC and DESC - * @param string &$sort_days specifies the maximum amount of days a post may be old - * @param array &$ex_fid_ary specifies an array of forum ids which should not be searched - * @param array &$m_approve_fid_ary specifies an array of forum ids in which the searcher is allowed to view unapproved posts - * @param int &$topic_id is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched - * @param array &$author_ary an array of author ids if the author should be ignored during the search the array is empty + * @param string $fields contains either titleonly (topic titles should be searched), msgonly (only message bodies should be searched), firstpost (only subject and body of the first post should be searched) or all (all post bodies and subjects should be searched) + * @param string $terms is either 'all' (use query as entered, words without prefix should default to "have to be in field") or 'any' (ignore search query parts and just return all posts that contain any of the specified words) + * @param array $sort_by_sql contains SQL code for the ORDER BY part of a query + * @param string $sort_key is the key of $sort_by_sql for the selected sorting + * @param string $sort_dir is either a or d representing ASC and DESC + * @param string $sort_days specifies the maximum amount of days a post may be old + * @param array $ex_fid_ary specifies an array of forum ids which should not be searched + * @param array $m_approve_fid_ary specifies an array of forum ids in which the searcher is allowed to view unapproved posts + * @param int $topic_id is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched + * @param array $author_ary an array of author ids if the author should be ignored during the search the array is empty + * @param string $author_name specifies the author match, when ANONYMOUS is also a search-match * @param array &$id_ary passed by reference, to be filled with ids for the page specified by $start and $per_page, should be ordered * @param int $start indicates the first index of the page * @param int $per_page number of ids each page is supposed to contain @@ -334,7 +347,7 @@ class fulltext_postgres extends search_backend * * @access public */ - function keyword_search($type, &$fields, &$terms, &$sort_by_sql, &$sort_key, &$sort_dir, &$sort_days, &$ex_fid_ary, &$m_approve_fid_ary, &$topic_id, &$author_ary, &$id_ary, $start, $per_page) + function keyword_search($type, $fields, $terms, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $m_approve_fid_ary, $topic_id, $author_ary, $author_name, &$id_ary, $start, $per_page) { global $config, $db; @@ -433,20 +446,41 @@ class fulltext_postgres extends search_backend $sql_from = ($join_topic) ? TOPICS_TABLE . ' t, ' : ''; $field = ($type == 'posts') ? 'post_id' : 'topic_id'; $sql_author = (sizeof($author_ary) == 1) ? ' = ' . $author_ary[0] : 'IN (' . implode(', ', $author_ary) . ')'; - + + if (sizeof($author_ary) && $author_name) + { + // first one matches post of registered users, second one guests and deleted users + $sql_author = '(' . $db->sql_in_set('p.poster_id', array_diff($author_ary, array(ANONYMOUS)), false, true) . ' OR p.post_username ' . $author_name . ')'; + } + else if (sizeof($author_ary)) + { + $sql_author = ' AND ' . $db->sql_in_set('p.poster_id', $author_ary); + } + else + { + $sql_author = ''; + } + $sql_where_options = $sql_sort_join; $sql_where_options .= ($topic_id) ? ' AND p.topic_id = ' . $topic_id : ''; $sql_where_options .= ($join_topic) ? ' AND t.topic_id = p.topic_id' : ''; $sql_where_options .= (sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : ''; $sql_where_options .= $m_approve_fid_sql; - $sql_where_options .= (sizeof($author_ary)) ? ' AND p.poster_id ' . $sql_author : ''; + $sql_where_options .= $sql_author; $sql_where_options .= ($sort_days) ? ' AND p.post_time >= ' . (time() - ($sort_days * 86400)) : ''; $sql_where_options .= $sql_match_where; $tmp_sql_match = array(); foreach (explode(',', $sql_match) as $sql_match_column) { - $tmp_sql_match[] = "to_tsvector (" . $sql_match_column . ") @@ to_tsquery ('" . $db->sql_escape($this->tsearch_query) . "')"; + if ($this->tsearch_builtin) + { + $tmp_sql_match[] = "to_tsvector ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', " . $sql_match_column . ") @@ to_tsquery ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', '" . $db->sql_escape($this->tsearch_query) . "')"; + } + else + { + $tmp_sql_match[] = "to_tsvector (" . $sql_match_column . ") @@ to_tsquery ('" . $db->sql_escape($this->tsearch_query) . "')"; + } } $sql = "SELECT $sql_select @@ -490,12 +524,25 @@ class fulltext_postgres extends search_backend /** * Performs a search on an author's posts without caring about message contents. Depends on display specific params * - * @param array &$id_ary passed by reference, to be filled with ids for the page specified by $start and $per_page, should be ordered - * @param int $start indicates the first index of the page - * @param int $per_page number of ids each page is supposed to contain - * @return total number of results + * @param string $type contains either posts or topics depending on what should be searched for + * @param boolean $firstpost_only if true, only topic starting posts will be considered + * @param array $sort_by_sql contains SQL code for the ORDER BY part of a query + * @param string $sort_key is the key of $sort_by_sql for the selected sorting + * @param string $sort_dir is either a or d representing ASC and DESC + * @param string $sort_days specifies the maximum amount of days a post may be old + * @param array $ex_fid_ary specifies an array of forum ids which should not be searched + * @param array $m_approve_fid_ary specifies an array of forum ids in which the searcher is allowed to view unapproved posts + * @param int $topic_id is set to 0 or a topic id, if it is not 0 then only posts in this topic should be searched + * @param array $author_ary an array of author ids + * @param string $author_name specifies the author match, when ANONYMOUS is also a search-match + * @param array &$id_ary passed by reference, to be filled with ids for the page specified by $start and $per_page, should be ordered + * @param int $start indicates the first index of the page + * @param int $per_page number of ids each page is supposed to contain + * @return boolean|int total number of results + * + * @access public */ - function author_search($type, $firstpost_only, &$sort_by_sql, &$sort_key, &$sort_dir, &$sort_days, &$ex_fid_ary, &$m_approve_fid_ary, &$topic_id, &$author_ary, &$id_ary, $start, $per_page) + function author_search($type, $firstpost_only, $sort_by_sql, $sort_key, $sort_dir, $sort_days, $ex_fid_ary, $m_approve_fid_ary, $topic_id, $author_ary, $author_name, &$id_ary, $start, $per_page) { global $config, $db; @@ -517,7 +564,8 @@ class fulltext_postgres extends search_backend $topic_id, implode(',', $ex_fid_ary), implode(',', $m_approve_fid_ary), - implode(',', $author_ary) + implode(',', $author_ary), + $author_name, ))); // try reading the results from cache @@ -528,9 +576,17 @@ class fulltext_postgres extends search_backend } $id_ary = array(); - + // Create some display specific sql strings - $sql_author = $db->sql_in_set('p.poster_id', $author_ary); + if ($author_name) + { + // first one matches post of registered users, second one guests and deleted users + $sql_author = '(' . $db->sql_in_set('p.poster_id', array_diff($author_ary, array(ANONYMOUS)), false, true) . ' OR p.post_username ' . $author_name . ')'; + } + else + { + $sql_author = $db->sql_in_set('p.poster_id', $author_ary); + } $sql_fora = (sizeof($ex_fid_ary)) ? ' AND ' . $db->sql_in_set('p.forum_id', $ex_fid_ary, true) : ''; $sql_topic_id = ($topic_id) ? ' AND p.topic_id = ' . (int) $topic_id : ''; $sql_time = ($sort_days) ? ' AND p.post_time >= ' . (time() - ($sort_days * 86400)) : ''; @@ -547,8 +603,8 @@ class fulltext_postgres extends search_backend break; case 't': - $sql_sort_table = ($type == 'posts') ? TOPICS_TABLE . ' t, ' : ''; - $sql_sort_join = ($type == 'posts') ? ' AND t.topic_id = p.topic_id ' : ''; + $sql_sort_table = ($type == 'posts' && !$firstpost_only) ? TOPICS_TABLE . ' t, ' : ''; + $sql_sort_join = ($type == 'posts' && !$firstpost_only) ? ' AND t.topic_id = p.topic_id ' : ''; break; case 'f': @@ -569,7 +625,7 @@ class fulltext_postgres extends search_backend { $m_approve_fid_sql = ' AND (p.post_approved = 1 OR ' . $db->sql_in_set('p.forum_id', $m_approve_fid_ary, true) . ')'; } - + // Build the query for really selecting the post_ids if ($type == 'posts') { @@ -597,7 +653,7 @@ class fulltext_postgres extends search_backend AND t.topic_id = p.topic_id $sql_sort_join $sql_time - GROUP BY t.topic_id + GROUP BY t.topic_id, $sort_by_sql[$sort_key] ORDER BY $sql_sort"; $field = 'topic_id'; } @@ -682,7 +738,7 @@ class fulltext_postgres extends search_backend */ function create_index($acp_module, $u_action) { - global $db; + global $db, $config; // Make sure we can actually use PostgreSQL with fulltext indexes if ($error = $this->init()) @@ -697,12 +753,12 @@ class fulltext_postgres extends search_backend if (!isset($this->stats['post_subject'])) { - $db->sql_query('CREATE INDEX ' . POSTS_TABLE . '_post_subject ON ' . POSTS_TABLE . ' USING gist (to_tsvector (post_subject))'); + $db->sql_query("CREATE INDEX " . POSTS_TABLE . "_" . $config['fulltext_postgres_ts_name'] . "_post_subject ON " . POSTS_TABLE . " USING gin (to_tsvector ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', post_subject))"); } if (!isset($this->stats['post_text'])) { - $db->sql_query('CREATE INDEX ' . POSTS_TABLE . '_post_text ON ' . POSTS_TABLE . ' USING gist (to_tsvector (post_text))'); + $db->sql_query("CREATE INDEX " . POSTS_TABLE . "_" . $config['fulltext_postgres_ts_name'] . "_post_text ON " . POSTS_TABLE . " USING gin (to_tsvector ('" . $db->sql_escape($config['fulltext_postgres_ts_name']) . "', post_text))"); } $db->sql_query('TRUNCATE TABLE ' . SEARCH_RESULTS_TABLE); @@ -730,12 +786,12 @@ class fulltext_postgres extends search_backend if (isset($this->stats['post_subject'])) { - $db->sql_query('DROP INDEX ' . POSTS_TABLE . '_post_subject'); + $db->sql_query('DROP INDEX ' . $this->stats['post_subject']['relname']); } if (isset($this->stats['post_text'])) { - $db->sql_query('DROP INDEX ' . POSTS_TABLE . '_post_text'); + $db->sql_query('DROP INDEX ' . $this->stats['post_text']['relname']); } $db->sql_query('TRUNCATE TABLE ' . SEARCH_RESULTS_TABLE); @@ -790,11 +846,11 @@ class fulltext_postgres extends search_backend // deal with older PostgreSQL versions which didn't use Index_type if (strpos($row['indexdef'], 'to_tsvector') !== false) { - if ($row['relname'] == POSTS_TABLE . '_post_text') + if ($row['relname'] == POSTS_TABLE . '_' . $config['fulltext_postgres_ts_name'] . '_post_text' || $row['relname'] == POSTS_TABLE . '_post_text') { $this->stats['post_text'] = $row; } - else if ($row['relname'] == POSTS_TABLE . '_post_subject') + else if ($row['relname'] == POSTS_TABLE . '_' . $config['fulltext_postgres_ts_name'] . '_post_subject' || $row['relname'] == POSTS_TABLE . '_post_subject') { $this->stats['post_subject'] = $row; } @@ -827,8 +883,17 @@ class fulltext_postgres extends search_backend if ($db->sql_layer == 'postgres') { - $sql = 'SELECT * - FROM pg_ts_cfg'; + if ($this->tsearch_builtin) + { + $sql = 'SELECT cfgname AS ts_name + FROM pg_ts_config'; + } + else + { + $sql = 'SELECT * + FROM pg_ts_cfg'; + } + $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) -- cgit v1.2.1 From ca974e2f2a3fc49564d0a595b2d55d04006b9ce5 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 11 Jun 2012 13:18:00 +0200 Subject: [ticket/10931] Add wrapper class for ini_get function. Provides easier handling of the different interpretations of ini values. PHPBB3-10931 --- phpBB/includes/php/ini.php | 165 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 165 insertions(+) create mode 100644 phpBB/includes/php/ini.php (limited to 'phpBB') diff --git a/phpBB/includes/php/ini.php b/phpBB/includes/php/ini.php new file mode 100644 index 0000000000..5c2cadb052 --- /dev/null +++ b/phpBB/includes/php/ini.php @@ -0,0 +1,165 @@ +get($varname); + + if ($value === false) + { + return false; + } + + return trim($value); + } + + /** + * Gets configuration option value as a boolean. + * Interprets the string value 'off' as false. + * + * @param string $varname The configuration option name. + * @return bool False if configuration option does not exist. + * False if configuration option is disabled. + * True otherwise. + */ + public function get_bool($varname) + { + $value = strtolower($this->get_string($varname)); + + if (empty($value) || $value == 'off') + { + return false; + } + + return true; + } + + /** + * Gets configuration option value as an integer. + * + * @param string $varname The configuration option name. + * @return bool|int False if configuration option does not exist, + * the configuration option value (integer) otherwise. + */ + public function get_int($varname) + { + $value = $this->get_string($varname); + + if (!is_numeric($value)) + { + return false; + } + + return (int) $value; + } + + /** + * Gets configuration option value as a float. + * + * @param string $varname The configuration option name. + * @return bool|float False if configuration option does not exist, + * the configuration option value (float) otherwise. + */ + public function get_float($varname) + { + $value = $this->get_string($varname); + + if (!is_numeric($value)) + { + return false; + } + + return (float) $value; + } + + /** + * Gets configuration option value in bytes. + * Converts strings like '128M' to bytes (integer or float). + * + * @param string $varname The configuration option name. + * @return bool|int|float False if configuration option does not exist, + * the configuration option value otherwise. + */ + public function get_bytes($varname) + { + $value = strtolower($this->get_string($varname)); + + if ($value === false) + { + return false; + } + + if (is_numeric($value)) + { + return $value; + } + else if (strlen($value) < 2) + { + return false; + } + + $value_numeric = (int) $value; + + switch ($value[strlen($value) - 1]) + { + case 'g': + $value_numeric *= 1024; + case 'm': + $value_numeric *= 1024; + case 'k': + $value_numeric *= 1024; + break; + + default: + // It's not already in bytes (and thus numeric) + // and does not carry a unit. + return false; + } + + return $value_numeric; + } +} -- cgit v1.2.1 From 5bea6ed94658d3302dda54eceaeb326e6f888286 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 11 Jun 2012 13:40:14 +0200 Subject: [ticket/10931] Let us try ini_get() without error suppression. PHPBB3-10931 --- phpBB/includes/php/ini.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/php/ini.php b/phpBB/includes/php/ini.php index 5c2cadb052..92965e7f94 100644 --- a/phpBB/includes/php/ini.php +++ b/phpBB/includes/php/ini.php @@ -34,7 +34,7 @@ class phpbb_php_ini */ public function get($varname) { - return @ini_get($varname); + return ini_get($varname); } /** -- cgit v1.2.1 From 63b2e364929c941d814f6ba493551d458076941a Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 11 Jun 2012 13:45:39 +0200 Subject: [ticket/10931] Correct method description of get_string(). PHPBB3-10931 --- phpBB/includes/php/ini.php | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/php/ini.php b/phpBB/includes/php/ini.php index 92965e7f94..3910700163 100644 --- a/phpBB/includes/php/ini.php +++ b/phpBB/includes/php/ini.php @@ -38,8 +38,7 @@ class phpbb_php_ini } /** - * Gets configuration option value as a string and performs various - * normalisation on the returned value. + * Gets the configuration option value as a trimmed string. * * @param string $varname The configuration option name. * @return bool|string False if configuration option does not exist, -- cgit v1.2.1 From 7501ea825af8d25309f81ed0159c45597086b78b Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 11 Jun 2012 13:53:17 +0200 Subject: [ticket/10931] Document that false is also returned if value is not well formed PHPBB3-10931 --- phpBB/includes/php/ini.php | 3 +++ 1 file changed, 3 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/php/ini.php b/phpBB/includes/php/ini.php index 3910700163..baafee5273 100644 --- a/phpBB/includes/php/ini.php +++ b/phpBB/includes/php/ini.php @@ -82,6 +82,7 @@ class phpbb_php_ini * * @param string $varname The configuration option name. * @return bool|int False if configuration option does not exist, + * false if configuration option value is not numeric, * the configuration option value (integer) otherwise. */ public function get_int($varname) @@ -101,6 +102,7 @@ class phpbb_php_ini * * @param string $varname The configuration option name. * @return bool|float False if configuration option does not exist, + * false if configuration option value is not numeric, * the configuration option value (float) otherwise. */ public function get_float($varname) @@ -121,6 +123,7 @@ class phpbb_php_ini * * @param string $varname The configuration option name. * @return bool|int|float False if configuration option does not exist, + * false if configuration option value is not well-formed, * the configuration option value otherwise. */ public function get_bytes($varname) -- cgit v1.2.1 From 80dfa53ee3f04dfdba11efe9eb3f49d739bb602b Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 11 Jun 2012 14:24:30 +0200 Subject: [ticket/10931] Correctly use GNU GPL version 2. PHPBB3-10931 --- phpBB/includes/php/ini.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/php/ini.php b/phpBB/includes/php/ini.php index baafee5273..882464275b 100644 --- a/phpBB/includes/php/ini.php +++ b/phpBB/includes/php/ini.php @@ -3,7 +3,7 @@ * * @package phpBB * @copyright (c) 2011 phpBB Group -* @license http://opensource.org/licenses/gpl-license.php GNU Public License +* @license http://opensource.org/licenses/gpl-2.0.php GNU General Public License v2 * */ -- cgit v1.2.1 From e9348b172a5b0661b26a8f3a0fe3368568539edb Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 11 Jun 2012 15:06:52 +0200 Subject: [ticket/10931] Correctly handle inputs such as '-k' as invalid in get_bytes(). PHPBB3-10931 --- phpBB/includes/php/ini.php | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/php/ini.php b/phpBB/includes/php/ini.php index 882464275b..de1cb5096c 100644 --- a/phpBB/includes/php/ini.php +++ b/phpBB/includes/php/ini.php @@ -137,10 +137,17 @@ class phpbb_php_ini if (is_numeric($value)) { + // Already in bytes. return $value; } else if (strlen($value) < 2) { + // Single character. + return false; + } + else if (strlen($value) < 3 && $value[0] === '-') + { + // Two characters but the first one is a minus. return false; } -- cgit v1.2.1 From 09fb9a9efe048cef102471d1ce79cdeff932776a Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 11 Jun 2012 15:15:08 +0200 Subject: [ticket/10931] Make sure get_bytes() always returns either an int or a float. PHPBB3-10931 --- phpBB/includes/php/ini.php | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/php/ini.php b/phpBB/includes/php/ini.php index de1cb5096c..bbe592a7df 100644 --- a/phpBB/includes/php/ini.php +++ b/phpBB/includes/php/ini.php @@ -138,7 +138,7 @@ class phpbb_php_ini if (is_numeric($value)) { // Already in bytes. - return $value; + return $this->to_numeric($value); } else if (strlen($value) < 2) { @@ -151,7 +151,7 @@ class phpbb_php_ini return false; } - $value_numeric = (int) $value; + $value_numeric = $this->to_numeric($value); switch ($value[strlen($value) - 1]) { @@ -171,4 +171,17 @@ class phpbb_php_ini return $value_numeric; } + + /** + * Casts a numeric string $input to an appropriate numeric type (i.e. integer or float) + * + * @param string $input A numeric string. + * + * @return int|float Integer $input if $input fits integer, + * float $input otherwise. + */ + protected function to_numeric($input) + { + return ($input > PHP_INT_MAX) ? (float) $input : (int) $input; + } } -- cgit v1.2.1 From cbff02db4f84c83c62bdd1f7450b8afbf39a5270 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 11 Jun 2012 15:22:55 +0200 Subject: [ticket/10931] Make to_numeric function globally available. PHPBB3-10931 --- phpBB/includes/functions.php | 13 +++++++++++++ phpBB/includes/php/ini.php | 17 ++--------------- 2 files changed, 15 insertions(+), 15 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 95f2cf8d26..ad64471388 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4987,3 +4987,16 @@ function phpbb_pcre_utf8_support() } return $utf8_pcre_properties; } + +/** +* Casts a numeric string $input to an appropriate numeric type (i.e. integer or float) +* +* @param string $input A numeric string. +* +* @return int|float Integer $input if $input fits integer, +* float $input otherwise. +*/ +function phpbb_to_numeric($input) +{ + return ($input > PHP_INT_MAX) ? (float) $input : (int) $input; +} diff --git a/phpBB/includes/php/ini.php b/phpBB/includes/php/ini.php index bbe592a7df..02c2b7ccc6 100644 --- a/phpBB/includes/php/ini.php +++ b/phpBB/includes/php/ini.php @@ -138,7 +138,7 @@ class phpbb_php_ini if (is_numeric($value)) { // Already in bytes. - return $this->to_numeric($value); + return phpbb_to_numeric($value); } else if (strlen($value) < 2) { @@ -151,7 +151,7 @@ class phpbb_php_ini return false; } - $value_numeric = $this->to_numeric($value); + $value_numeric = phpbb_to_numeric($value); switch ($value[strlen($value) - 1]) { @@ -171,17 +171,4 @@ class phpbb_php_ini return $value_numeric; } - - /** - * Casts a numeric string $input to an appropriate numeric type (i.e. integer or float) - * - * @param string $input A numeric string. - * - * @return int|float Integer $input if $input fits integer, - * float $input otherwise. - */ - protected function to_numeric($input) - { - return ($input > PHP_INT_MAX) ? (float) $input : (int) $input; - } } -- cgit v1.2.1 From 4468847107103c44936468e6e3c1badeb333ff52 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Mon, 11 Jun 2012 15:45:30 +0200 Subject: [ticket/10931] Apply strtolower() correctly, i.e. not on false. PHPBB3-10931 --- phpBB/includes/php/ini.php | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/php/ini.php b/phpBB/includes/php/ini.php index 02c2b7ccc6..17e8c54a57 100644 --- a/phpBB/includes/php/ini.php +++ b/phpBB/includes/php/ini.php @@ -67,9 +67,9 @@ class phpbb_php_ini */ public function get_bool($varname) { - $value = strtolower($this->get_string($varname)); + $value = $this->get_string($varname); - if (empty($value) || $value == 'off') + if (empty($value) || strtolower($value) == 'off') { return false; } @@ -128,7 +128,7 @@ class phpbb_php_ini */ public function get_bytes($varname) { - $value = strtolower($this->get_string($varname)); + $value = $this->get_string($varname); if ($value === false) { @@ -151,9 +151,10 @@ class phpbb_php_ini return false; } + $value_lower = strtolower($value); $value_numeric = phpbb_to_numeric($value); - switch ($value[strlen($value) - 1]) + switch ($value_lower[strlen($value_lower) - 1]) { case 'g': $value_numeric *= 1024; -- cgit v1.2.1 From 33b72ec62bd8b6e6c890e4c474d28389f048632a Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Mon, 2 Apr 2012 11:45:26 +0300 Subject: [ticket/10743] Changing obtain_cfg_items Changing obtain_cfg_items to work only with style because other components no longer exist PHPBB3-10743 --- phpBB/includes/cache/service.php | 55 ++++++++++++++++------------------------ phpBB/includes/user.php | 3 --- 2 files changed, 22 insertions(+), 36 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/cache/service.php b/phpBB/includes/cache/service.php index aa225ade69..37f32aa753 100644 --- a/phpBB/includes/cache/service.php +++ b/phpBB/includes/cache/service.php @@ -321,50 +321,39 @@ class phpbb_cache_service /** * Obtain cfg file data */ - function obtain_cfg_items($theme) + function obtain_cfg_items($style) { global $config, $phpbb_root_path; - $parsed_items = array( - 'theme' => array(), - 'template' => array(), - 'imageset' => array() - ); + $parsed_array = $this->driver->get('_cfg_' . $style['style_path']); - foreach ($parsed_items as $key => $parsed_array) + if ($parsed_array === false) { - $parsed_array = $this->driver->get('_cfg_' . $key . '_' . $theme[$key . '_path']); - - if ($parsed_array === false) - { - $parsed_array = array(); - } + $parsed_array = array(); + } - $reparse = false; - $filename = $phpbb_root_path . 'styles/' . $theme[$key . '_path'] . '/' . $key . '/' . $key . '.cfg'; + $reparse = false; + $filename = $phpbb_root_path . 'styles/' . $style['style_path'] . '/style.cfg'; - if (!file_exists($filename)) - { - continue; - } + if (!file_exists($filename)) + { + continue; + } - if (!isset($parsed_array['filetime']) || (($config['load_tplcompile'] && @filemtime($filename) > $parsed_array['filetime']))) - { - $reparse = true; - } + if (!isset($parsed_array['filetime']) || (($config['load_tplcompile'] && @filemtime($filename) > $parsed_array['filetime']))) + { + $reparse = true; + } - // Re-parse cfg file - if ($reparse) - { - $parsed_array = parse_cfg_file($filename); - $parsed_array['filetime'] = @filemtime($filename); + // Re-parse cfg file + if ($reparse) + { + $parsed_array = parse_cfg_file($filename); + $parsed_array['filetime'] = @filemtime($filename); - $this->driver->put('_cfg_' . $key . '_' . $theme[$key . '_path'], $parsed_array); - } - $parsed_items[$key] = $parsed_array; + $this->driver->put('_cfg_' . $style['style_path'], $parsed_array); } - - return $parsed_items; + return $parsed_array; } /** diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index ce9c804f23..1db2364f76 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -188,9 +188,6 @@ class phpbb_user extends phpbb_session // Now parse the cfg file and cache it $parsed_items = $cache->obtain_cfg_items($this->theme); - // We are only interested in the theme configuration for now - $parsed_items = $parsed_items['theme']; - $check_for = array( 'pagination_sep' => (string) ', ' ); -- cgit v1.2.1 From 71ca9b4fe69dea8150a5d3c6f30dd177c488ff2b Mon Sep 17 00:00:00 2001 From: Vjacheslav Trushkin Date: Mon, 2 Apr 2012 11:50:13 +0300 Subject: [ticket/10743] Renaming user->theme Renaming user->theme to user->style PHPBB3-10743 --- phpBB/includes/bbcode.php | 2 +- phpBB/includes/functions.php | 18 +++++++++--------- phpBB/includes/style/style.php | 4 ++-- phpBB/includes/user.php | 18 +++++++++--------- 4 files changed, 21 insertions(+), 21 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/bbcode.php b/phpBB/includes/bbcode.php index fde917e5b1..444446e9c3 100644 --- a/phpBB/includes/bbcode.php +++ b/phpBB/includes/bbcode.php @@ -130,7 +130,7 @@ class bbcode if (empty($this->template_filename)) { - $this->template_bitfield = new bitfield($user->theme['bbcode_bitfield']); + $this->template_bitfield = new bitfield($user->style['bbcode_bitfield']); $style_resource_locator = new phpbb_style_resource_locator(); $style_path_provider = new phpbb_style_extension_path_provider($phpbb_extension_manager, new phpbb_style_path_provider()); diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index ad64471388..ddbe1c2c36 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4772,9 +4772,9 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'T_ASSETS_VERSION' => $config['assets_version'], 'T_ASSETS_PATH' => "{$web_path}assets", - 'T_THEME_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/theme', - 'T_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/template', - 'T_SUPER_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/template', + 'T_THEME_PATH' => "{$web_path}styles/" . rawurlencode($user->style['style_path']) . '/theme', + 'T_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->style['style_path']) . '/template', + 'T_SUPER_TEMPLATE_PATH' => "{$web_path}styles/" . rawurlencode($user->style['style_path']) . '/template', 'T_IMAGES_PATH' => "{$web_path}images/", 'T_SMILIES_PATH' => "{$web_path}{$config['smilies_path']}/", 'T_AVATAR_PATH' => "{$web_path}{$config['avatar_path']}/", @@ -4782,16 +4782,16 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'T_ICONS_PATH' => "{$web_path}{$config['icons_path']}/", 'T_RANKS_PATH' => "{$web_path}{$config['ranks_path']}/", 'T_UPLOAD_PATH' => "{$web_path}{$config['upload_path']}/", - 'T_STYLESHEET_LINK' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/theme/stylesheet.css?assets_version=' . $config['assets_version'], - 'T_STYLESHEET_LANG_LINK' => "{$web_path}styles/" . rawurlencode($user->theme['style_path']) . '/theme/' . $user->lang_name . '/stylesheet.css?assets_version=' . $config['assets_version'], - 'T_STYLESHEET_NAME' => $user->theme['style_name'], + 'T_STYLESHEET_LINK' => "{$web_path}styles/" . rawurlencode($user->style['style_path']) . '/theme/stylesheet.css?assets_version=' . $config['assets_version'], + 'T_STYLESHEET_LANG_LINK' => "{$web_path}styles/" . rawurlencode($user->style['style_path']) . '/theme/' . $user->lang_name . '/stylesheet.css?assets_version=' . $config['assets_version'], + 'T_STYLESHEET_NAME' => $user->style['style_name'], 'T_JQUERY_LINK' => ($config['load_jquery_cdn'] && !empty($config['load_jquery_url'])) ? $config['load_jquery_url'] : "{$web_path}assets/javascript/jquery.js?assets_version=" . $config['assets_version'], 'S_JQUERY_FALLBACK' => ($config['load_jquery_cdn']) ? true : false, - 'T_THEME_NAME' => rawurlencode($user->theme['style_path']), + 'T_THEME_NAME' => rawurlencode($user->style['style_path']), 'T_THEME_LANG_NAME' => $user->data['user_lang'], - 'T_TEMPLATE_NAME' => $user->theme['style_path'], - 'T_SUPER_TEMPLATE_NAME' => rawurlencode((isset($user->theme['style_parent_tree']) && $user->theme['style_parent_tree']) ? $user->theme['style_parent_tree'] : $user->theme['style_path']), + 'T_TEMPLATE_NAME' => $user->style['style_path'], + 'T_SUPER_TEMPLATE_NAME' => rawurlencode((isset($user->style['style_parent_tree']) && $user->style['style_parent_tree']) ? $user->style['style_parent_tree'] : $user->style['style_path']), 'T_IMAGES' => 'images', 'T_SMILIES' => $config['smilies_path'], 'T_AVATAR' => $config['avatar_path'], diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php index 3f470015f6..8d38deb85c 100644 --- a/phpBB/includes/style/style.php +++ b/phpBB/includes/style/style.php @@ -89,8 +89,8 @@ class phpbb_style */ public function set_style() { - $style_name = $this->user->theme['style_path']; - $style_dirs = ($this->user->theme['style_parent_id']) ? array_reverse(explode('/', $this->user->theme['style_parent_tree'])) : array(); + $style_name = $this->user->style['style_path']; + $style_dirs = ($this->user->style['style_parent_id']) ? array_reverse(explode('/', $this->user->style['style_parent_tree'])) : array(); $paths = array($this->get_style_path($style_name)); foreach ($style_dirs as $dir) { diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index 1db2364f76..cf9e6b9994 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -27,7 +27,7 @@ class phpbb_user extends phpbb_session { var $lang = array(); var $help = array(); - var $theme = array(); + var $style = array(); var $date_format; var $timezone; var $dst; @@ -159,11 +159,11 @@ class phpbb_user extends phpbb_session FROM ' . STYLES_TABLE . " s WHERE s.style_id = $style_id"; $result = $db->sql_query($sql, 3600); - $this->theme = $db->sql_fetchrow($result); + $this->style = $db->sql_fetchrow($result); $db->sql_freeresult($result); // User has wrong style - if (!$this->theme && $style_id == $this->data['user_style']) + if (!$this->style && $style_id == $this->data['user_style']) { $style_id = $this->data['user_style'] = $config['default_style']; @@ -176,17 +176,17 @@ class phpbb_user extends phpbb_session FROM ' . STYLES_TABLE . " s WHERE s.style_id = $style_id"; $result = $db->sql_query($sql, 3600); - $this->theme = $db->sql_fetchrow($result); + $this->style = $db->sql_fetchrow($result); $db->sql_freeresult($result); } - if (!$this->theme) + if (!$this->style) { trigger_error('Could not get style data', E_USER_ERROR); } // Now parse the cfg file and cache it - $parsed_items = $cache->obtain_cfg_items($this->theme); + $parsed_items = $cache->obtain_cfg_items($this->style); $check_for = array( 'pagination_sep' => (string) ', ' @@ -194,12 +194,12 @@ class phpbb_user extends phpbb_session foreach ($check_for as $key => $default_value) { - $this->theme[$key] = (isset($parsed_items[$key])) ? $parsed_items[$key] : $default_value; - settype($this->theme[$key], gettype($default_value)); + $this->style[$key] = (isset($parsed_items[$key])) ? $parsed_items[$key] : $default_value; + settype($this->style[$key], gettype($default_value)); if (is_string($default_value)) { - $this->theme[$key] = htmlspecialchars($this->theme[$key]); + $this->style[$key] = htmlspecialchars($this->style[$key]); } } -- cgit v1.2.1 From 699aab8e8e52bf5980a8078fc460d30cedd65347 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Mon, 11 Jun 2012 21:00:22 -0400 Subject: [ticket/10829] $style_name -> $style_path in style class. Here the style path is taken and the variable name should be $style_path. PHPBB3-10829 --- phpBB/includes/style/style.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/style/style.php b/phpBB/includes/style/style.php index 8d38deb85c..22e0f1d67a 100644 --- a/phpBB/includes/style/style.php +++ b/phpBB/includes/style/style.php @@ -89,9 +89,9 @@ class phpbb_style */ public function set_style() { - $style_name = $this->user->style['style_path']; + $style_path = $this->user->style['style_path']; $style_dirs = ($this->user->style['style_parent_id']) ? array_reverse(explode('/', $this->user->style['style_parent_tree'])) : array(); - $paths = array($this->get_style_path($style_name)); + $paths = array($this->get_style_path($style_path)); foreach ($style_dirs as $dir) { $paths[] = $this->get_style_path($dir); @@ -100,7 +100,7 @@ class phpbb_style // Add 'all' path, used as last fallback path by hooks and extensions $paths[] = $this->get_style_path('all'); - return $this->set_custom_style($style_name, $paths); + return $this->set_custom_style($style_path, $paths); } /** -- cgit v1.2.1 From 2a9698a13a5df8ff6c3b62df0674de07ebebdfc9 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Mon, 11 Jun 2012 21:03:12 -0400 Subject: [ticket/10829] Delete T_STYLESHEET_NAME - no longer used. PHPBB3-10829 --- phpBB/includes/functions.php | 1 - 1 file changed, 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index ddbe1c2c36..e40df93194 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4784,7 +4784,6 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'T_UPLOAD_PATH' => "{$web_path}{$config['upload_path']}/", 'T_STYLESHEET_LINK' => "{$web_path}styles/" . rawurlencode($user->style['style_path']) . '/theme/stylesheet.css?assets_version=' . $config['assets_version'], 'T_STYLESHEET_LANG_LINK' => "{$web_path}styles/" . rawurlencode($user->style['style_path']) . '/theme/' . $user->lang_name . '/stylesheet.css?assets_version=' . $config['assets_version'], - 'T_STYLESHEET_NAME' => $user->style['style_name'], 'T_JQUERY_LINK' => ($config['load_jquery_cdn'] && !empty($config['load_jquery_url'])) ? $config['load_jquery_url'] : "{$web_path}assets/javascript/jquery.js?assets_version=" . $config['assets_version'], 'S_JQUERY_FALLBACK' => ($config['load_jquery_cdn']) ? true : false, -- cgit v1.2.1 From e127ba17ea3259d1fa9a135b8ae5ab9136bc7712 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Tue, 12 Jun 2012 18:40:48 +0530 Subject: [ticket/10936] fix language key Language key changes from INCOMPATIBLE_VERSION to INCOMPATIBLE_DATABASE to make it more meaningfull. PHPBB3-10936 --- phpBB/includes/search/fulltext_mysql.php | 2 +- phpBB/language/en/acp/search.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_mysql.php b/phpBB/includes/search/fulltext_mysql.php index 7c94038cc9..c84bfcdcb0 100644 --- a/phpBB/includes/search/fulltext_mysql.php +++ b/phpBB/includes/search/fulltext_mysql.php @@ -70,7 +70,7 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base if ($db->sql_layer != 'mysql4' && $db->sql_layer != 'mysqli') { - return $user->lang['FULLTEXT_MYSQL_INCOMPATIBLE_VERSION']; + return $user->lang['FULLTEXT_MYSQL_INCOMPATIBLE_DATABASE']; } $result = $db->sql_query('SHOW TABLE STATUS LIKE \'' . POSTS_TABLE . '\''); diff --git a/phpBB/language/en/acp/search.php b/phpBB/language/en/acp/search.php index 3dc89570bf..2badb082d6 100644 --- a/phpBB/language/en/acp/search.php +++ b/phpBB/language/en/acp/search.php @@ -51,7 +51,7 @@ $lang = array_merge($lang, array( 'DELETING_INDEX_IN_PROGRESS' => 'Deleting the index in progress', 'DELETING_INDEX_IN_PROGRESS_EXPLAIN' => 'The search backend is currently cleaning its index. This can take a few minutes.', - 'FULLTEXT_MYSQL_INCOMPATIBLE_VERSION' => 'The MySQL fulltext backend can only be used with MySQL4 and above.', + 'FULLTEXT_MYSQL_INCOMPATIBLE_DATABASE' => 'The MySQL fulltext backend can only be used with MySQL4 and above.', 'FULLTEXT_MYSQL_NOT_MYISAM' => 'MySQL fulltext indexes can only be used with MyISAM tables.', 'FULLTEXT_MYSQL_TOTAL_POSTS' => 'Total number of indexed posts', 'FULLTEXT_MYSQL_MBSTRING' => 'Support for non-latin UTF-8 characters using mbstring:', -- cgit v1.2.1 From 96cb75dedb73dc0e36b842492f6a176db9147023 Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Wed, 13 Jun 2012 01:43:32 +0530 Subject: [ticket/10936] remove PCRE and mbstring support check Since PCRE UTF8 support already has a global check no need for mbstring or PCRE check here. PHPBB3-10936 --- phpBB/includes/search/fulltext_mysql.php | 99 +++----------------------------- phpBB/language/en/acp/search.php | 4 -- 2 files changed, 8 insertions(+), 95 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_mysql.php b/phpBB/includes/search/fulltext_mysql.php index c84bfcdcb0..b59d9908c3 100644 --- a/phpBB/includes/search/fulltext_mysql.php +++ b/phpBB/includes/search/fulltext_mysql.php @@ -27,8 +27,6 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base var $split_words = array(); var $search_query; var $common_words = array(); - var $pcre_properties = false; - var $mbstring_regex = false; public function __construct(&$error) { @@ -36,18 +34,6 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base $this->word_length = array('min' => $config['fulltext_mysql_min_word_len'], 'max' => $config['fulltext_mysql_max_word_len']); - // PHP may not be linked with the bundled PCRE lib and instead with an older version - if (phpbb_pcre_utf8_support()) - { - $this->pcre_properties = true; - } - - if (function_exists('mb_ereg')) - { - $this->mbstring_regex = true; - mb_regex_encoding('UTF-8'); - } - $error = false; } @@ -133,40 +119,10 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base $split_keywords = preg_replace("#[\n\r\t]+#", ' ', trim(htmlspecialchars_decode($keywords))); // Split words - if ($this->pcre_properties) - { - $split_keywords = preg_replace('#([^\p{L}\p{N}\'*"()])#u', '$1$1', str_replace('\'\'', '\' \'', trim($split_keywords))); - } - else if ($this->mbstring_regex) - { - $split_keywords = mb_ereg_replace('([^\w\'*"()])', '\\1\\1', str_replace('\'\'', '\' \'', trim($split_keywords))); - } - else - { - $split_keywords = preg_replace('#([^\w\'*"()])#u', '$1$1', str_replace('\'\'', '\' \'', trim($split_keywords))); - } - - if ($this->pcre_properties) - { - $matches = array(); - preg_match_all('#(?:[^\p{L}\p{N}*"()]|^)([+\-|]?(?:[\p{L}\p{N}*"()]+\'?)*[\p{L}\p{N}*"()])(?:[^\p{L}\p{N}*"()]|$)#u', $split_keywords, $matches); - $this->split_words = $matches[1]; - } - else if ($this->mbstring_regex) - { - mb_ereg_search_init($split_keywords, '(?:[^\w*"()]|^)([+\-|]?(?:[\w*"()]+\'?)*[\w*"()])(?:[^\w*"()]|$)'); - - while (($word = mb_ereg_search_regs())) - { - $this->split_words[] = $word[1]; - } - } - else - { - $matches = array(); - preg_match_all('#(?:[^\w*"()]|^)([+\-|]?(?:[\w*"()]+\'?)*[\w*"()])(?:[^\w*"()]|$)#u', $split_keywords, $matches); - $this->split_words = $matches[1]; - } + $split_keywords = preg_replace('#([^\p{L}\p{N}\'*"()])#u', '$1$1', str_replace('\'\'', '\' \'', trim($split_keywords))); + $matches = array(); + preg_match_all('#(?:[^\p{L}\p{N}*"()]|^)([+\-|]?(?:[\p{L}\p{N}*"()]+\'?)*[\p{L}\p{N}*"()])(?:[^\p{L}\p{N}*"()]|$)#u', $split_keywords, $matches); + $this->split_words = $matches[1]; // We limit the number of allowed keywords to minimize load on the database if ($config['max_num_search_keywords'] && sizeof($this->split_words) > $config['max_num_search_keywords']) @@ -271,41 +227,10 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base global $config; // Split words - if ($this->pcre_properties) - { - $text = preg_replace('#([^\p{L}\p{N}\'*])#u', '$1$1', str_replace('\'\'', '\' \'', trim($text))); - } - else if ($this->mbstring_regex) - { - $text = mb_ereg_replace('([^\w\'*])', '\\1\\1', str_replace('\'\'', '\' \'', trim($text))); - } - else - { - $text = preg_replace('#([^\w\'*])#u', '$1$1', str_replace('\'\'', '\' \'', trim($text))); - } - - if ($this->pcre_properties) - { - $matches = array(); - preg_match_all('#(?:[^\p{L}\p{N}*]|^)([+\-|]?(?:[\p{L}\p{N}*]+\'?)*[\p{L}\p{N}*])(?:[^\p{L}\p{N}*]|$)#u', $text, $matches); - $text = $matches[1]; - } - else if ($this->mbstring_regex) - { - mb_ereg_search_init($text, '(?:[^\w*]|^)([+\-|]?(?:[\w*]+\'?)*[\w*])(?:[^\w*]|$)'); - - $text = array(); - while (($word = mb_ereg_search_regs())) - { - $text[] = $word[1]; - } - } - else - { - $matches = array(); - preg_match_all('#(?:[^\w*]|^)([+\-|]?(?:[\w*]+\'?)*[\w*])(?:[^\w*]|$)#u', $text, $matches); - $text = $matches[1]; - } + $text = preg_replace('#([^\p{L}\p{N}\'*])#u', '$1$1', str_replace('\'\'', '\' \'', trim($text))); + $matches = array(); + preg_match_all('#(?:[^\p{L}\p{N}*]|^)([+\-|]?(?:[\p{L}\p{N}*]+\'?)*[\p{L}\p{N}*])(?:[^\p{L}\p{N}*]|$)#u', $text, $matches); + $text = $matches[1]; // remove too short or too long words $text = array_values($text); @@ -908,14 +833,6 @@ class phpbb_search_fulltext_mysql extends phpbb_search_base global $user, $config; $tpl = ' -
          -

          ' . $user->lang['FULLTEXT_MYSQL_PCRE_EXPLAIN'] . '
          -
          ' . (($this->pcre_properties) ? $user->lang['YES'] : $user->lang['NO']) . ' (PHP ' . PHP_VERSION . ')
          -
          -
          -

          ' . $user->lang['FULLTEXT_MYSQL_MBSTRING_EXPLAIN'] . '
          -
          ' . (($this->mbstring_regex) ? $user->lang['YES'] : $user->lang['NO']). '
          -

          ' . $user->lang['FULLTEXT_MYSQL_MIN_SEARCH_CHARS_EXPLAIN'] . '
          ' . $config['fulltext_mysql_min_word_len'] . '
          diff --git a/phpBB/language/en/acp/search.php b/phpBB/language/en/acp/search.php index 2badb082d6..2f46856557 100644 --- a/phpBB/language/en/acp/search.php +++ b/phpBB/language/en/acp/search.php @@ -54,10 +54,6 @@ $lang = array_merge($lang, array( 'FULLTEXT_MYSQL_INCOMPATIBLE_DATABASE' => 'The MySQL fulltext backend can only be used with MySQL4 and above.', 'FULLTEXT_MYSQL_NOT_MYISAM' => 'MySQL fulltext indexes can only be used with MyISAM tables.', 'FULLTEXT_MYSQL_TOTAL_POSTS' => 'Total number of indexed posts', - 'FULLTEXT_MYSQL_MBSTRING' => 'Support for non-latin UTF-8 characters using mbstring:', - 'FULLTEXT_MYSQL_PCRE' => 'Support for non-latin UTF-8 characters using PCRE:', - 'FULLTEXT_MYSQL_MBSTRING_EXPLAIN' => 'If PCRE does not have unicode character properties, the search backend will try to use mbstring’s regular expression engine.', - 'FULLTEXT_MYSQL_PCRE_EXPLAIN' => 'This search backend requires PCRE unicode character properties, only available in PHP 4.4, 5.1 and above, if you want to search for non-latin characters.', 'FULLTEXT_MYSQL_MIN_SEARCH_CHARS_EXPLAIN' => 'Words with at least this many characters will be indexed for searching. You or your host can only change this setting by changing the mysql configuration.', 'FULLTEXT_MYSQL_MAX_SEARCH_CHARS_EXPLAIN' => 'Words with no more than this many characters will be indexed for searching. You or your host can only change this setting by changing the mysql configuration.', -- cgit v1.2.1 From 53d846477665ea6b8a3463318f03050282aec89a Mon Sep 17 00:00:00 2001 From: Michael Cullum Date: Sat, 11 Feb 2012 21:12:36 +0000 Subject: [ticket/10640] Change maximum subject length PHPBB3-10640 --- phpBB/includes/functions_content.php | 2 +- phpBB/styles/prosilver/template/posting_editor.html | 2 +- phpBB/styles/prosilver/template/quickreply_editor.html | 2 +- phpBB/styles/subsilver2/template/posting_body.html | 2 +- phpBB/styles/subsilver2/template/quickreply_editor.html | 2 +- 5 files changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php index 6b2ee98d7a..752ebe0f13 100644 --- a/phpBB/includes/functions_content.php +++ b/phpBB/includes/functions_content.php @@ -1107,7 +1107,7 @@ function extension_allowed($forum_id, $extension, &$extensions) * NOTE: This parameter can cause undesired behavior (returning strings longer than $max_store_length) and is deprecated. * @param string $append String to be appended */ -function truncate_string($string, $max_length = 60, $max_store_length = 255, $allow_reply = false, $append = '') +function truncate_string($string, $max_length = 120, $max_store_length = 255, $allow_reply = false, $append = '') { $chars = array(); diff --git a/phpBB/styles/prosilver/template/posting_editor.html b/phpBB/styles/prosilver/template/posting_editor.html index 60766495c6..d1c86e7e13 100644 --- a/phpBB/styles/prosilver/template/posting_editor.html +++ b/phpBB/styles/prosilver/template/posting_editor.html @@ -103,7 +103,7 @@
          -
          +
          diff --git a/phpBB/styles/prosilver/template/quickreply_editor.html b/phpBB/styles/prosilver/template/quickreply_editor.html index 724fdb85b8..5fcdf0f5d4 100644 --- a/phpBB/styles/prosilver/template/quickreply_editor.html +++ b/phpBB/styles/prosilver/template/quickreply_editor.html @@ -5,7 +5,7 @@
          -
          +
          diff --git a/phpBB/styles/subsilver2/template/posting_body.html b/phpBB/styles/subsilver2/template/posting_body.html index 712c02b856..ae7d2f88d6 100644 --- a/phpBB/styles/subsilver2/template/posting_body.html +++ b/phpBB/styles/subsilver2/template/posting_body.html @@ -173,7 +173,7 @@ {L_SUBJECT}: - + {L_MESSAGE_BODY}:
          {L_MESSAGE_BODY_EXPLAIN} 

          diff --git a/phpBB/styles/subsilver2/template/quickreply_editor.html b/phpBB/styles/subsilver2/template/quickreply_editor.html index 4c3f7a3d0b..7a68a8f605 100644 --- a/phpBB/styles/subsilver2/template/quickreply_editor.html +++ b/phpBB/styles/subsilver2/template/quickreply_editor.html @@ -6,7 +6,7 @@ {L_SUBJECT}: - + {L_MESSAGE}: -- cgit v1.2.1 From a259db71058cd20eb54ac3b45a88b558c66e4cb5 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 2 May 2012 13:13:20 +0200 Subject: [ticket/10640] Do not change default value of truncate_string() The default value should be kept, so we do not change the behaviour for MODs and Extensions that use the function with its default values. PHPBB3-10640 --- phpBB/includes/functions_content.php | 2 +- phpBB/includes/functions_posting.php | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_content.php b/phpBB/includes/functions_content.php index 752ebe0f13..6b2ee98d7a 100644 --- a/phpBB/includes/functions_content.php +++ b/phpBB/includes/functions_content.php @@ -1107,7 +1107,7 @@ function extension_allowed($forum_id, $extension, &$extensions) * NOTE: This parameter can cause undesired behavior (returning strings longer than $max_store_length) and is deprecated. * @param string $append String to be appended */ -function truncate_string($string, $max_length = 120, $max_store_length = 255, $allow_reply = false, $append = '') +function truncate_string($string, $max_length = 60, $max_store_length = 255, $allow_reply = false, $append = '') { $chars = array(); diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index f77f54679f..c549f99091 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -1657,8 +1657,8 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u // First of all make sure the subject and topic title are having the correct length. // To achieve this without cutting off between special chars we convert to an array and then count the elements. - $subject = truncate_string($subject); - $data['topic_title'] = truncate_string($data['topic_title']); + $subject = truncate_string($subject, 120); + $data['topic_title'] = truncate_string($data['topic_title'], 120); // Collect some basic information about which tables and which rows to update/insert $sql_data = $topic_row = array(); -- cgit v1.2.1 From 7a6a5738db3c43b385a15a84c6956c2b295cc709 Mon Sep 17 00:00:00 2001 From: Michael Cullum Date: Sun, 17 Jun 2012 19:01:17 +0100 Subject: [ticket/10640] Change subject length in MCP PHPBB3-10640 --- phpBB/styles/prosilver/template/mcp_topic.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/mcp_topic.html b/phpBB/styles/prosilver/template/mcp_topic.html index 2a6de3ce9d..8d0294d226 100644 --- a/phpBB/styles/prosilver/template/mcp_topic.html +++ b/phpBB/styles/prosilver/template/mcp_topic.html @@ -67,7 +67,7 @@ onload_functions.push('subPanels()');
          -
          +
          -- cgit v1.2.1 From a41f86f2f724c31b2bb6e55d278b65e2660697c1 Mon Sep 17 00:00:00 2001 From: Michael Cullum Date: Sun, 17 Jun 2012 19:22:50 +0100 Subject: [ticket/10640] Change subject length in mcp in subsilver PHPBB3-10640 --- phpBB/styles/subsilver2/template/mcp_topic.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/mcp_topic.html b/phpBB/styles/subsilver2/template/mcp_topic.html index 8ff648da39..6bbf13e12c 100644 --- a/phpBB/styles/subsilver2/template/mcp_topic.html +++ b/phpBB/styles/subsilver2/template/mcp_topic.html @@ -12,7 +12,7 @@ {L_SPLIT_SUBJECT} - + {L_SPLIT_FORUM} -- cgit v1.2.1 From 50936cb2eff3f80d99390c76ef6ac535e73f6cc3 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 4 Jun 2012 19:06:46 +0200 Subject: [feature/new-tz-handling] Fix selecting and validating of timezone in UCP PHPBB3-9558 --- phpBB/includes/functions.php | 24 ++++++++++++++---------- phpBB/includes/functions_user.php | 16 ++++++++++++++++ phpBB/includes/ucp/ucp_prefs.php | 4 ++-- phpBB/language/en/ucp.php | 1 + 4 files changed, 33 insertions(+), 12 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 3ec4b76091..55f7f0531c 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1139,34 +1139,38 @@ function tz_select($default = '', $truncate = false) if (!isset($timezones)) { - $timezones = DateTimeZone::listIdentifiers(); + $unsorted_timezones = DateTimeZone::listIdentifiers(); + $timezones = array(); - foreach ($timezones as &$timezone) + foreach ($unsorted_timezones as $timezone) { $tz = new DateTimeZone($timezone); $dt = new phpbb_datetime('now', $tz); $offset = $dt->getOffset(); $offset_string = phpbb_format_timezone_offset($offset); - $timezone = 'GMT' . $offset_string . ' - ' . $timezone; + $timezones['GMT' . $offset_string . ' - ' . $timezone] = array( + 'tz' => $timezone, + 'label' => 'GMT' . $offset_string . ' - ' . $timezone, + ); } - unset($timezone); + unset($unsorted_timezones); - usort($timezones, 'tz_select_compare'); + uksort($timezones, 'tz_select_compare'); } $tz_select = ''; foreach ($timezones as $timezone) { - if (isset($user->lang['timezones'][$timezone])) + if (isset($user->lang['timezones'][$timezone['tz']])) { - $title = $label = $user->lang['timezones'][$timezone]; + $title = $label = $user->lang['timezones'][$timezone['tz']]; } else { // No label, we'll figure one out // @todo rtl languages? - $bits = explode('/', str_replace('_', ' ', $timezone)); + $bits = explode('/', str_replace('_', ' ', $timezone['label'])); $title = $label = implode(' - ', $bits); } @@ -1176,8 +1180,8 @@ function tz_select($default = '', $truncate = false) $label = truncate_string($label, 50, 255, false, '...'); } - $selected = ($timezone === $default) ? ' selected="selected"' : ''; - $tz_select .= ''; + $selected = ($timezone['tz'] === $default) ? ' selected="selected"' : ''; + $tz_select .= ''; } return $tz_select; diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 9b102b7387..3a77407c20 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -1395,6 +1395,22 @@ function validate_language_iso_name($lang_iso) return ($lang_id) ? false : 'WRONG_DATA'; } +/** +* Validate Timezone Name +* +* Tests whether a timezone name is valid +* +* @param string $timezone The timezone string to test +* +* @return bool|string Either false if validation succeeded or +* a string which will be used as the error message +* (with the variable name appended) +*/ +function validate_timezone($timezone) +{ + return (in_array($timezone, DateTimeZone::listIdentifiers())) ? false : 'TIMEZONE_INVALID'; +} + /** * Check to see if the username has been taken, or if it is disallowed. * Also checks if it includes the " character, which we don't allow in usernames. diff --git a/phpBB/includes/ucp/ucp_prefs.php b/phpBB/includes/ucp/ucp_prefs.php index 0c9f20f266..45e3bb8951 100644 --- a/phpBB/includes/ucp/ucp_prefs.php +++ b/phpBB/includes/ucp/ucp_prefs.php @@ -41,7 +41,7 @@ class ucp_prefs 'dateformat' => request_var('dateformat', $user->data['user_dateformat'], true), 'lang' => basename(request_var('lang', $user->data['user_lang'])), 'style' => request_var('style', (int) $user->data['user_style']), - 'tz' => request_var('tz', (float) $user->data['user_timezone']), + 'tz' => request_var('tz', $user->data['user_timezone']), 'dst' => request_var('dst', (bool) $user->data['user_dst']), 'viewemail' => request_var('viewemail', (bool) $user->data['user_allow_viewemail']), @@ -72,7 +72,7 @@ class ucp_prefs $error = validate_data($data, array( 'dateformat' => array('string', false, 1, 30), 'lang' => array('language_iso_name'), - 'tz' => array('num', false, -14, 14), + 'tz' => array('timezone'), )); if (!check_form_key('ucp_prefs_personal')) diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index a80862890a..f9558bc6d3 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -422,6 +422,7 @@ $lang = array_merge($lang, array( 'SORT_SIZE' => 'File size', 'TIMEZONE' => 'Timezone', + 'TIMEZONE_INVALID' => 'The timezone you selected is invalid.', 'TO' => 'To', 'TOO_MANY_RECIPIENTS' => 'You tried to send a private message to too many recipients.', 'TOO_MANY_REGISTERS' => 'You have exceeded the maximum number of registration attempts for this session. Please try again later.', -- cgit v1.2.1 From 00b5e5345dc44c99340bba932522b6b05b48dab2 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 4 Jun 2012 19:19:34 +0200 Subject: [feature/new-tz-handling] Fix displaying of "All times are" string PHPBB3-9558 --- phpBB/includes/functions.php | 10 +++++++++- phpBB/language/en/common.php | 2 +- 2 files changed, 10 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 55f7f0531c..44346c7795 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4769,6 +4769,14 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 } } + $dt = new phpbb_datetime('now', $user->tz); + $timezone_offset = 'GMT' . phpbb_format_timezone_offset($dt->getOffset()); + $timezone_name = $user->tz->getName(); + if (isset($user->lang['timezones'][$timezone_name])) + { + $timezone_name = $user->lang['timezones'][$timezone_name]; + } + // The following assigns all _common_ variables that may be used at any point in a template. $template->assign_vars(array( 'SITENAME' => $config['sitename'], @@ -4836,7 +4844,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'S_CONTENT_FLOW_BEGIN' => ($user->lang['DIRECTION'] == 'ltr') ? 'left' : 'right', 'S_CONTENT_FLOW_END' => ($user->lang['DIRECTION'] == 'ltr') ? 'right' : 'left', 'S_CONTENT_ENCODING' => 'UTF-8', - 'S_TIMEZONE' => ($user->data['user_dst'] || ($user->data['user_id'] == ANONYMOUS && $config['board_dst'])) ? sprintf($user->lang['ALL_TIMES'], $user->lang['tz'][$tz], $user->lang['tz']['dst']) : sprintf($user->lang['ALL_TIMES'], $user->lang['tz'][$tz], ''), + 'S_TIMEZONE' => sprintf($user->lang['ALL_TIMES'], $timezone_offset, $timezone_name), 'S_DISPLAY_ONLINE_LIST' => ($l_online_time) ? 1 : 0, 'S_DISPLAY_SEARCH' => (!$config['load_search']) ? 0 : (isset($auth) ? ($auth->acl_get('u_search') && $auth->acl_getf_global('f_search')) : 1), 'S_DISPLAY_PM' => ($config['allow_privmsg'] && !empty($user->data['is_registered']) && ($auth->acl_get('u_readpm') || $auth->acl_get('u_sendpm'))) ? true : false, diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index 023ee2c89f..bbafb54108 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -74,7 +74,7 @@ $lang = array_merge($lang, array( 'ALL_FORUMS' => 'All forums', 'ALL_MESSAGES' => 'All messages', 'ALL_POSTS' => 'All posts', - 'ALL_TIMES' => 'All times are %1$s %2$s', + 'ALL_TIMES' => 'All times are %1$s', 'ALL_TOPICS' => 'All Topics', 'AND' => 'And', 'ARE_WATCHING_FORUM' => 'You have subscribed to be notified of new posts in this forum.', -- cgit v1.2.1 From 09499fb128802bd19cee1550bf6e9af80a9388e2 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 4 Jun 2012 22:33:03 +0200 Subject: [feature/new-tz-handling] Fix handling of timezone and dst in dateformat_select PHPBB3-9558 --- phpBB/includes/acp/acp_board.php | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php index d537885ef1..ce2ddc3b0b 100644 --- a/phpBB/includes/acp/acp_board.php +++ b/phpBB/includes/acp/acp_board.php @@ -906,11 +906,13 @@ class acp_board global $user, $config; // Let the format_date function operate with the acp values - $old_tz = $user->timezone; - $old_dst = $user->dst; - - $user->timezone = $config['board_timezone'] * 3600; - $user->dst = $config['board_dst'] * 3600; + $old_tz = $user->tz; + if (is_numeric($config['board_timezone'])) + { + // Might still be numeric by chance + $config['board_timezone'] = sprintf('Etc/GMT%+d', $config['board_timezone']); + } + $user->tz = new DateTimeZone($config['board_timezone']); $dateformat_options = ''; @@ -929,8 +931,7 @@ class acp_board $dateformat_options .= '>' . $user->lang['CUSTOM_DATEFORMAT'] . ''; // Reset users date options - $user->timezone = $old_tz; - $user->dst = $old_dst; + $user->tz = $old_tz; return " "; -- cgit v1.2.1 From 66ae9ee2ea8b65ddb4c39b4bc9add8d2aca2e73d Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 4 Jun 2012 22:39:35 +0200 Subject: [feature/new-tz-handling] Fix timezone selection on registration page PHPBB3-9558 --- phpBB/includes/ucp/ucp_register.php | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index 5d85029e62..aee55711b2 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -100,7 +100,7 @@ class ucp_register 'username' => utf8_normalize_nfc(request_var('username', '', true)), 'email' => strtolower(request_var('email', '')), 'lang' => $user->lang_name, - 'tz' => request_var('tz', (float) $config['board_timezone']), + 'tz' => request_var('tz', $config['board_timezone']), )); } @@ -172,7 +172,7 @@ class ucp_register 'password_confirm' => request_var('password_confirm', '', true), 'email' => strtolower(request_var('email', '')), 'lang' => basename(request_var('lang', $user->lang_name)), - 'tz' => request_var('tz', (float) $timezone), + 'tz' => request_var('tz', $timezone), ); // Check and initialize some variables if needed @@ -189,7 +189,7 @@ class ucp_register 'email' => array( array('string', false, 6, 60), array('email')), - 'tz' => array('num', false, -14, 14), + 'tz' => array('timezone'), 'lang' => array('language_iso_name'), )); @@ -279,7 +279,7 @@ class ucp_register 'user_password' => phpbb_hash($data['new_password']), 'user_email' => $data['email'], 'group_id' => (int) $group_id, - 'user_timezone' => (float) $data['tz'], + 'user_timezone' => $data['tz'], 'user_dst' => $is_dst, 'user_lang' => $data['lang'], 'user_type' => $user_type, @@ -453,7 +453,7 @@ class ucp_register 'L_PASSWORD_EXPLAIN' => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_pass_chars']), $user->lang('CHARACTERS', (int) $config['max_pass_chars'])), 'S_LANG_OPTIONS' => language_select($data['lang']), - 'S_TZ_OPTIONS' => tz_select($data['tz']), + 'S_TZ_OPTIONS' => tz_select($data['tz'], true), 'S_CONFIRM_REFRESH' => ($config['enable_confirm'] && $config['confirm_refresh']) ? true : false, 'S_REGISTRATION' => true, 'S_COPPA' => $coppa, -- cgit v1.2.1 From f9bc8252641ec69983acfc6d392770934b7a37a4 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 4 Jun 2012 22:40:09 +0200 Subject: [feature/new-tz-handling] Fix timezone validation in ACP user section PHPBB3-9558 --- phpBB/includes/acp/acp_users.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 17687b05c7..825bba514f 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1458,7 +1458,7 @@ class acp_users $data = array( 'dateformat' => utf8_normalize_nfc(request_var('dateformat', $user_row['user_dateformat'], true)), 'lang' => basename(request_var('lang', $user_row['user_lang'])), - 'tz' => request_var('tz', (float) $user_row['user_timezone']), + 'tz' => request_var('tz', $user_row['user_timezone']), 'style' => request_var('style', $user_row['user_style']), 'dst' => request_var('dst', $user_row['user_dst']), 'viewemail' => request_var('viewemail', $user_row['user_allow_viewemail']), @@ -1495,7 +1495,7 @@ class acp_users $error = validate_data($data, array( 'dateformat' => array('string', false, 1, 30), 'lang' => array('match', false, '#^[a-z_\-]{2,}$#i'), - 'tz' => array('num', false, -14, 14), + 'tz' => array('timezone'), 'topic_sk' => array('string', false, 1, 1), 'topic_sd' => array('string', false, 1, 1), -- cgit v1.2.1 From 963d4afc2cf5fb2903ed02ada20cdbf0188d57db Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 4 Jun 2012 23:14:41 +0200 Subject: [feature/new-tz-handling] Replace gmmktime() and mktime() with phpbb_datetime PHPBB3-9558 --- phpBB/includes/functions_user.php | 7 ++++--- phpBB/includes/ucp/ucp_register.php | 7 ++++--- 2 files changed, 8 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_user.php b/phpBB/includes/functions_user.php index 3a77407c20..f235b2be55 100644 --- a/phpBB/includes/functions_user.php +++ b/phpBB/includes/functions_user.php @@ -197,7 +197,6 @@ function user_add($user_row, $cp_data = false) 'user_lastpost_time' => 0, 'user_lastpage' => '', 'user_posts' => 0, - 'user_dst' => (int) $config['board_dst'], 'user_colour' => '', 'user_occ' => '', 'user_interests' => '', @@ -677,8 +676,10 @@ function user_ban($mode, $ban, $ban_len, $ban_len_other, $ban_exclude, $ban_reas if (sizeof($ban_other) == 3 && ((int)$ban_other[0] < 9999) && (strlen($ban_other[0]) == 4) && (strlen($ban_other[1]) == 2) && (strlen($ban_other[2]) == 2)) { - $time_offset = (isset($user->timezone) && isset($user->dst)) ? (int) $user->timezone + (int) $user->dst : 0; - $ban_end = max($current_time, gmmktime(0, 0, 0, (int)$ban_other[1], (int)$ban_other[2], (int)$ban_other[0]) - $time_offset); + $ban_end = max($current_time, $user->create_datetime() + ->setDate((int) $ban_other[0], (int) $ban_other[1], (int) $ban_other[2]) + ->setTime(0, 0, 0) + ->getTimestamp() + $user->tz->getOffset(new DateTime('UTC'))); } else { diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index aee55711b2..ac002a26c2 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -120,7 +120,10 @@ class ucp_register if ($coppa === false && $config['coppa_enable']) { $now = getdate(); - $coppa_birthday = $user->format_date(mktime($now['hours'] + $user->data['user_dst'], $now['minutes'], $now['seconds'], $now['mon'], $now['mday'] - 1, $now['year'] - 13), $user->lang['DATE_FORMAT']); + $coppa_birthday = $user->create_datetime() + ->setDate($now['year'] - 13, $now['mon'], $now['mday'] - 1) + ->setTime(0, 0, 0) + ->format($user->lang['DATE_FORMAT'], true); unset($now); $template->assign_vars(array( @@ -163,7 +166,6 @@ class ucp_register $captcha->init(CONFIRM_REG); } - $is_dst = $config['board_dst']; $timezone = $config['board_timezone']; $data = array( @@ -280,7 +282,6 @@ class ucp_register 'user_email' => $data['email'], 'group_id' => (int) $group_id, 'user_timezone' => $data['tz'], - 'user_dst' => $is_dst, 'user_lang' => $data['lang'], 'user_type' => $user_type, 'user_actkey' => $user_actkey, -- cgit v1.2.1 From 3c6272ff0475dc19cc67553f370ce227214d0613 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 4 Jun 2012 23:28:48 +0200 Subject: [feature/new-tz-handling] Remove appearances of board_dst and user_dst PHPBB3-9558 --- phpBB/develop/mysql_upgrader.php | 3 +-- phpBB/develop/repair_bots.php | 2 +- phpBB/includes/acp/acp_board.php | 1 - phpBB/includes/acp/acp_users.php | 3 --- phpBB/includes/functions_convert.php | 2 +- phpBB/includes/questionnaire/questionnaire.php | 1 - phpBB/includes/ucp/ucp_prefs.php | 3 --- phpBB/includes/user.php | 2 +- phpBB/install/database_update.php | 2 +- phpBB/install/install_install.php | 2 +- phpBB/install/schemas/schema_data.sql | 3 +-- 11 files changed, 7 insertions(+), 17 deletions(-) (limited to 'phpBB') diff --git a/phpBB/develop/mysql_upgrader.php b/phpBB/develop/mysql_upgrader.php index 0498f826ab..7f82ebfeab 100644 --- a/phpBB/develop/mysql_upgrader.php +++ b/phpBB/develop/mysql_upgrader.php @@ -1229,8 +1229,7 @@ function get_schema_struct() 'user_inactive_time' => array('TIMESTAMP', 0), 'user_posts' => array('UINT', 0), 'user_lang' => array('VCHAR:30', ''), - 'user_timezone' => array('DECIMAL', 0), - 'user_dst' => array('BOOL', 0), + 'user_timezone' => array('VCHAR:100', 'UTC'), 'user_dateformat' => array('VCHAR_UNI:30', 'd M Y H:i'), 'user_style' => array('UINT', 0), 'user_rank' => array('UINT', 0), diff --git a/phpBB/develop/repair_bots.php b/phpBB/develop/repair_bots.php index 790d3d9f2f..2c6e9ce091 100644 --- a/phpBB/develop/repair_bots.php +++ b/phpBB/develop/repair_bots.php @@ -128,7 +128,7 @@ function add_bots($bots) 'user_email' => '', 'user_lang' => $config['default_lang'], 'user_style' => 1, - 'user_timezone' => 0, + 'user_timezone' => 'UTC', 'user_allow_massemail' => 0, ); diff --git a/phpBB/includes/acp/acp_board.php b/phpBB/includes/acp/acp_board.php index ce2ddc3b0b..e018655407 100644 --- a/phpBB/includes/acp/acp_board.php +++ b/phpBB/includes/acp/acp_board.php @@ -58,7 +58,6 @@ class acp_board 'default_lang' => array('lang' => 'DEFAULT_LANGUAGE', 'validate' => 'lang', 'type' => 'select', 'function' => 'language_select', 'params' => array('{CONFIG_VALUE}'), 'explain' => false), 'default_dateformat' => array('lang' => 'DEFAULT_DATE_FORMAT', 'validate' => 'string', 'type' => 'custom', 'method' => 'dateformat_select', 'explain' => true), 'board_timezone' => array('lang' => 'SYSTEM_TIMEZONE', 'validate' => 'string', 'type' => 'select', 'function' => 'tz_select', 'params' => array('{CONFIG_VALUE}', 1), 'explain' => true), - 'board_dst' => array('lang' => 'SYSTEM_DST', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => false), 'default_style' => array('lang' => 'DEFAULT_STYLE', 'validate' => 'int', 'type' => 'select', 'function' => 'style_select', 'params' => array('{CONFIG_VALUE}', false), 'explain' => false), 'override_user_style' => array('lang' => 'OVERRIDE_STYLE', 'validate' => 'bool', 'type' => 'radio:yes_no', 'explain' => true), diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 825bba514f..b863a9ed80 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1460,7 +1460,6 @@ class acp_users 'lang' => basename(request_var('lang', $user_row['user_lang'])), 'tz' => request_var('tz', $user_row['user_timezone']), 'style' => request_var('style', $user_row['user_style']), - 'dst' => request_var('dst', $user_row['user_dst']), 'viewemail' => request_var('viewemail', $user_row['user_allow_viewemail']), 'massemail' => request_var('massemail', $user_row['user_allow_massemail']), 'hideonline' => request_var('hideonline', !$user_row['user_allow_viewonline']), @@ -1531,7 +1530,6 @@ class acp_users 'user_notify_type' => $data['notifymethod'], 'user_notify_pm' => $data['notifypm'], - 'user_dst' => $data['dst'], 'user_dateformat' => $data['dateformat'], 'user_lang' => $data['lang'], 'user_timezone' => $data['tz'], @@ -1654,7 +1652,6 @@ class acp_users 'NOTIFY_BOTH' => ($data['notifymethod'] == NOTIFY_BOTH) ? true : false, 'NOTIFY_PM' => $data['notifypm'], 'POPUP_PM' => $data['popuppm'], - 'DST' => $data['dst'], 'BBCODE' => $data['bbcode'], 'SMILIES' => $data['smilies'], 'ATTACH_SIG' => $data['sig'], diff --git a/phpBB/includes/functions_convert.php b/phpBB/includes/functions_convert.php index e9ec153c50..ac791e0d9b 100644 --- a/phpBB/includes/functions_convert.php +++ b/phpBB/includes/functions_convert.php @@ -1884,7 +1884,7 @@ function add_bots() 'user_email' => '', 'user_lang' => $config['default_lang'], 'user_style' => 1, - 'user_timezone' => 0, + 'user_timezone' => 'UTC', 'user_allow_massemail' => 0, ); diff --git a/phpBB/includes/questionnaire/questionnaire.php b/phpBB/includes/questionnaire/questionnaire.php index 46a743d7e9..5cb441d536 100644 --- a/phpBB/includes/questionnaire/questionnaire.php +++ b/phpBB/includes/questionnaire/questionnaire.php @@ -304,7 +304,6 @@ class phpbb_questionnaire_phpbb_data_provider 'avatar_max_width' => true, 'avatar_min_height' => true, 'avatar_min_width' => true, - 'board_dst' => true, 'board_email_form' => true, 'board_hide_emails' => true, 'board_timezone' => true, diff --git a/phpBB/includes/ucp/ucp_prefs.php b/phpBB/includes/ucp/ucp_prefs.php index 45e3bb8951..3f5f573389 100644 --- a/phpBB/includes/ucp/ucp_prefs.php +++ b/phpBB/includes/ucp/ucp_prefs.php @@ -43,7 +43,6 @@ class ucp_prefs 'style' => request_var('style', (int) $user->data['user_style']), 'tz' => request_var('tz', $user->data['user_timezone']), - 'dst' => request_var('dst', (bool) $user->data['user_dst']), 'viewemail' => request_var('viewemail', (bool) $user->data['user_allow_viewemail']), 'massemail' => request_var('massemail', (bool) $user->data['user_allow_massemail']), 'hideonline' => request_var('hideonline', (bool) !$user->data['user_allow_viewonline']), @@ -93,7 +92,6 @@ class ucp_prefs 'user_notify_pm' => $data['notifypm'], 'user_options' => $user->data['user_options'], - 'user_dst' => $data['dst'], 'user_dateformat' => $data['dateformat'], 'user_lang' => $data['lang'], 'user_timezone' => $data['tz'], @@ -145,7 +143,6 @@ class ucp_prefs 'S_HIDE_ONLINE' => $data['hideonline'], 'S_NOTIFY_PM' => $data['notifypm'], 'S_POPUP_PM' => $data['popuppm'], - 'S_DST' => $data['dst'], 'DATE_FORMAT' => $data['dateformat'], 'A_DATE_FORMAT' => addslashes($data['dateformat']), diff --git a/phpBB/includes/user.php b/phpBB/includes/user.php index 4c62dd93d7..a36d837fbd 100644 --- a/phpBB/includes/user.php +++ b/phpBB/includes/user.php @@ -126,7 +126,7 @@ class phpbb_user extends phpbb_session if (is_numeric($this->tz)) { // Might still be numeric by chance - $this->tz = sprintf('Etc/GMT%+d', ($this->tz + ($this->data['user_id'] != ANONYMOUS ? $this->data['user_dst'] : $config['board_dst']))); + $this->tz = sprintf('Etc/GMT%+d', $this->tz); } $this->tz = new DateTimeZone($this->tz); diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 9758ad3b2b..b6f7f82785 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -1971,7 +1971,7 @@ function change_database_data(&$no_updates, $version) 'user_email' => '', 'user_lang' => $config['default_lang'], 'user_style' => $config['default_style'], - 'user_timezone' => 0, + 'user_timezone' => 'UTC', 'user_dateformat' => $config['default_dateformat'], 'user_allow_massemail' => 0, ); diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index ef384edb78..bafcefe3f5 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -1795,7 +1795,7 @@ class install_install extends module 'user_email' => '', 'user_lang' => $data['default_lang'], 'user_style' => 1, - 'user_timezone' => 0, + 'user_timezone' => 'UTC', 'user_dateformat' => $lang['default_dateformat'], 'user_allow_massemail' => 0, ); diff --git a/phpBB/install/schemas/schema_data.sql b/phpBB/install/schemas/schema_data.sql index 5489fd4e3d..307864825c 100644 --- a/phpBB/install/schemas/schema_data.sql +++ b/phpBB/install/schemas/schema_data.sql @@ -54,12 +54,11 @@ INSERT INTO phpbb_config (config_name, config_value) VALUES ('avatar_salt', 'php INSERT INTO phpbb_config (config_name, config_value) VALUES ('board_contact', 'contact@yourdomain.tld'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('board_disable', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('board_disable_msg', ''); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('board_dst', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('board_email', 'address@yourdomain.tld'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('board_email_form', '0'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('board_email_sig', '{L_CONFIG_BOARD_EMAIL_SIG}'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('board_hide_emails', '1'); -INSERT INTO phpbb_config (config_name, config_value) VALUES ('board_timezone', '0'); +INSERT INTO phpbb_config (config_name, config_value) VALUES ('board_timezone', 'UTC'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('browser_check', '1'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('bump_interval', '10'); INSERT INTO phpbb_config (config_name, config_value) VALUES ('bump_type', 'd'); -- cgit v1.2.1 From 66f7d45603417df7619323977de62aebce0bf676 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 5 Jun 2012 21:44:44 +0200 Subject: [feature/new-tz-handling] Introduce 2 step timezone selection using javascript PHPBB3-9558 --- phpBB/includes/functions.php | 43 +++++++++++---- phpBB/includes/ucp/ucp_prefs.php | 4 +- phpBB/language/en/common.php | 1 + phpBB/language/en/ucp.php | 3 ++ phpBB/styles/prosilver/template/timezone.js | 61 ++++++++++++++++++---- .../prosilver/template/ucp_prefs_personal.html | 10 +++- phpBB/styles/prosilver/theme/forms.css | 5 ++ 7 files changed, 106 insertions(+), 21 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 44346c7795..9263833b4c 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1129,14 +1129,14 @@ function tz_select_compare($a, $b) /** * Pick a timezone -* @todo Possible HTML escaping */ -function tz_select($default = '', $truncate = false) +function tz_select($default = '', $truncate = false, $return_tzs_only = true) { global $user; static $timezones; + $default_offset = ''; if (!isset($timezones)) { $unsorted_timezones = DateTimeZone::listIdentifiers(); @@ -1147,21 +1147,37 @@ function tz_select($default = '', $truncate = false) $tz = new DateTimeZone($timezone); $dt = new phpbb_datetime('now', $tz); $offset = $dt->getOffset(); + $current_time = $dt->format($user->lang['DATETIME_FORMAT'], true); $offset_string = phpbb_format_timezone_offset($offset); $timezones['GMT' . $offset_string . ' - ' . $timezone] = array( 'tz' => $timezone, - 'label' => 'GMT' . $offset_string . ' - ' . $timezone, + 'offest' => 'GMT' . $offset_string, + 'current' => $current_time, ); + if ($timezone === $default) + { + $default_offset = 'GMT' . $offset_string; + } } unset($unsorted_timezones); uksort($timezones, 'tz_select_compare'); } - $tz_select = ''; + $tz_select = $tz_dates = $opt_group = ''; foreach ($timezones as $timezone) { + if ($opt_group != $timezone['offest']) + { + $tz_select .= ($opt_group) ? '' : ''; + $tz_select .= ''; + $opt_group = $timezone['offest']; + + $selected = ($default_offset == $timezone['offest']) ? ' selected="selected"' : ''; + $tz_dates .= ''; + } + if (isset($user->lang['timezones'][$timezone['tz']])) { $title = $label = $user->lang['timezones'][$timezone['tz']]; @@ -1169,10 +1185,10 @@ function tz_select($default = '', $truncate = false) else { // No label, we'll figure one out - // @todo rtl languages? - $bits = explode('/', str_replace('_', ' ', $timezone['label'])); + $bits = explode('/', str_replace('_', ' ', $timezone['tz'])); - $title = $label = implode(' - ', $bits); + $label = implode(' - ', $bits); + $title = $timezone['offest'] . ' - ' . $label; } if ($truncate) @@ -1181,10 +1197,19 @@ function tz_select($default = '', $truncate = false) } $selected = ($timezone['tz'] === $default) ? ' selected="selected"' : ''; - $tz_select .= ''; + $tz_select .= ''; } + $tz_select .= ''; - return $tz_select; + if ($return_tzs_only) + { + return $tz_select; + } + + return array( + 'tz_select' => $tz_select, + 'tz_dates' => $tz_dates, + ); } // Functions handling topic/post tracking/marking diff --git a/phpBB/includes/ucp/ucp_prefs.php b/phpBB/includes/ucp/ucp_prefs.php index 3f5f573389..4239afc96e 100644 --- a/phpBB/includes/ucp/ucp_prefs.php +++ b/phpBB/includes/ucp/ucp_prefs.php @@ -131,6 +131,7 @@ class ucp_prefs } $dateformat_options .= '>' . $user->lang['CUSTOM_DATEFORMAT'] . ''; + $tz_select = tz_select($data['tz'], true, false); $template->assign_vars(array( 'ERROR' => (sizeof($error)) ? implode('
          ', $error) : '', @@ -153,7 +154,8 @@ class ucp_prefs 'S_LANG_OPTIONS' => language_select($data['lang']), 'S_STYLE_OPTIONS' => ($config['override_user_style']) ? '' : style_select($data['style']), - 'S_TZ_OPTIONS' => tz_select($data['tz'], true), + 'S_TZ_OPTIONS' => $tz_select['tz_select'], + 'S_TZ_DATE_OPTIONS' => $tz_select['tz_dates'], 'S_CAN_HIDE_ONLINE' => ($auth->acl_get('u_hideonline')) ? true : false, 'S_SELECT_NOTIFY' => ($config['jab_enable'] && $user->data['user_jabber'] && @extension_loaded('xml')) ? true : false) ); diff --git a/phpBB/language/en/common.php b/phpBB/language/en/common.php index bbafb54108..d0afb846b4 100644 --- a/phpBB/language/en/common.php +++ b/phpBB/language/en/common.php @@ -42,6 +42,7 @@ $lang = array_merge($lang, array( 'TRANSLATION_INFO' => '', 'DIRECTION' => 'ltr', 'DATE_FORMAT' => '|d M Y|', // 01 Jan 2007 (with Relative days enabled) + 'DATETIME_FORMAT' => '|d M Y, H:i|', // 01 Jan 2007, 13:37 (with Relative days enabled) 'USER_LANG' => 'en-gb', // You can define different rules for the determination of plural forms here. diff --git a/phpBB/language/en/ucp.php b/phpBB/language/en/ucp.php index f9558bc6d3..64a434d89c 100644 --- a/phpBB/language/en/ucp.php +++ b/phpBB/language/en/ucp.php @@ -412,6 +412,7 @@ $lang = array_merge($lang, array( 'SIGNATURE_EXPLAIN' => 'This is a block of text that can be added to posts you make. There is a %d character limit.', 'SIGNATURE_PREVIEW' => 'Your signature will appear like this in posts', 'SIGNATURE_TOO_LONG' => 'Your signature is too long.', + 'SELECT_CURRENT_TIME' => 'Select current time', 'SELECT_TIMEZONE' => 'Select timezone', 'SORT' => 'Sort', 'SORT_COMMENT' => 'File comment', @@ -422,7 +423,9 @@ $lang = array_merge($lang, array( 'SORT_SIZE' => 'File size', 'TIMEZONE' => 'Timezone', + 'TIMEZONE_DATE_SUGGESTION' => 'Suggestion: %s', 'TIMEZONE_INVALID' => 'The timezone you selected is invalid.', + 'TIMEZONE_SELECTED' => '(currently selected)', 'TO' => 'To', 'TOO_MANY_RECIPIENTS' => 'You tried to send a private message to too many recipients.', 'TOO_MANY_REGISTERS' => 'You have exceeded the maximum number of registration attempts for this session. Please try again later.', diff --git a/phpBB/styles/prosilver/template/timezone.js b/phpBB/styles/prosilver/template/timezone.js index 5d07b1d3ad..deebbf36a8 100644 --- a/phpBB/styles/prosilver/template/timezone.js +++ b/phpBB/styles/prosilver/template/timezone.js @@ -1,10 +1,37 @@ -function phpbb_preselect_tz_select() +function phpbb_switch_tz_date(keep_selection) { - var selector = document.getElementsByClassName('tz_select')[0]; - if (selector.value) + var timezone_groups = document.getElementById("timezone"); + for (var i = 0; i < timezone_groups.childElementCount; i++) { + if (timezone_groups.children[i].tagName == "OPTGROUP" && + timezone_groups.children[i].label != document.getElementById("tz_date").value) + { + timezone_groups.children[i].style.display = "none"; + } + else if (timezone_groups.children[i].tagName == "OPTGROUP") + { + // Display other options + timezone_groups.children[i].style.display = "block"; + } + } + if (typeof keep_selection !== 'undefined') { - return; + if (!keep_selection) + { + timezone_groups.children[0].selected = true; + } } +} + +function phpbb_enable_tz_dates() +{ + var tz_select_date = document.getElementById("tz_select_date"); + tz_select_date.style.display = "block"; +} + +function phpbb_preselect_tz_select(force_selector, l_suggestion) +{ + + var selector = document.getElementById('tz_date'); // The offset returned here is in minutes and negated. // http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp var offset = (new Date()).getTimezoneOffset(); @@ -42,12 +69,26 @@ function phpbb_preselect_tz_select() var option = selector.options[i]; if (option.value.substring(0, prefix_length) == prefix) { - // Firefox scrolls the selector only to put the option into view; - // for negative-offset timezones, this means the first timezone - // of a particular offset will be the bottom one, and selected, - // with all other timezones not visible. Not much can be done - // about that here unfortunately. - option.selected = true; + if (selector.value && selector.value != option.value && !force_selector) + { + // We do not select the option for the user, but notify him, + // that we would suggest a different setting. + document.getElementById("tz_select_date_suggest").style.display = "inline"; + document.getElementById("tz_select_date_suggest").title = l_suggestion.replace("%s", option.innerHTML); + document.getElementById("tz_select_date_suggest").innerHTML = l_suggestion.replace("%s", option.innerHTML.substring(0, 9)); + phpbb_switch_tz_date(true); + } + else + { + // Firefox scrolls the selector only to put the option into view; + // for negative-offset timezones, this means the first timezone + // of a particular offset will be the bottom one, and selected, + // with all other timezones not visible. Not much can be done + // about that here unfortunately. + option.selected = true; + phpbb_switch_tz_date(!force_selector); + document.getElementById("tz_select_date_suggest").style.display = "none"; + } break; } } diff --git a/phpBB/styles/prosilver/template/ucp_prefs_personal.html b/phpBB/styles/prosilver/template/ucp_prefs_personal.html index b09e7b1591..c798b1a1f2 100644 --- a/phpBB/styles/prosilver/template/ucp_prefs_personal.html +++ b/phpBB/styles/prosilver/template/ucp_prefs_personal.html @@ -75,6 +75,13 @@
          +
          + + {S_TZ_DATE_OPTIONS} + + +
          + +
          + + + + + +
          +
          diff --git a/phpBB/styles/prosilver/template/ucp_prefs_personal.html b/phpBB/styles/prosilver/template/ucp_prefs_personal.html index c798b1a1f2..29c01e03b9 100644 --- a/phpBB/styles/prosilver/template/ucp_prefs_personal.html +++ b/phpBB/styles/prosilver/template/ucp_prefs_personal.html @@ -73,22 +73,7 @@
          -
          -
          - -
          - -
          -
          +

          {L_BOARD_DATE_FORMAT_EXPLAIN}
          @@ -146,8 +131,4 @@ // ]]> - - - - diff --git a/phpBB/styles/prosilver/template/ucp_register.html b/phpBB/styles/prosilver/template/ucp_register.html index 95e125fdea..994356efe6 100644 --- a/phpBB/styles/prosilver/template/ucp_register.html +++ b/phpBB/styles/prosilver/template/ucp_register.html @@ -53,15 +53,8 @@
          -
          -
          -
          - -
          -
          + +
          {L_ITEMS_REQUIRED}
          -- cgit v1.2.1 From a6bace039ab18ce5138a7f6ffa6d74c543bd6222 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 12 Jun 2012 19:51:55 +0200 Subject: [feature/new-tz-handling] Fix timezone selection in subsilver2 PHPBB3-9558 --- phpBB/styles/subsilver2/template/timezone.js | 95 ++++++++++++++++++++++ .../subsilver2/template/timezone_option.html | 22 +++++ .../subsilver2/template/ucp_prefs_personal.html | 7 +- phpBB/styles/subsilver2/template/ucp_register.html | 7 +- 4 files changed, 121 insertions(+), 10 deletions(-) create mode 100644 phpBB/styles/subsilver2/template/timezone.js create mode 100644 phpBB/styles/subsilver2/template/timezone_option.html (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/timezone.js b/phpBB/styles/subsilver2/template/timezone.js new file mode 100644 index 0000000000..deebbf36a8 --- /dev/null +++ b/phpBB/styles/subsilver2/template/timezone.js @@ -0,0 +1,95 @@ +function phpbb_switch_tz_date(keep_selection) +{ + var timezone_groups = document.getElementById("timezone"); + for (var i = 0; i < timezone_groups.childElementCount; i++) { + if (timezone_groups.children[i].tagName == "OPTGROUP" && + timezone_groups.children[i].label != document.getElementById("tz_date").value) + { + timezone_groups.children[i].style.display = "none"; + } + else if (timezone_groups.children[i].tagName == "OPTGROUP") + { + // Display other options + timezone_groups.children[i].style.display = "block"; + } + } + if (typeof keep_selection !== 'undefined') + { + if (!keep_selection) + { + timezone_groups.children[0].selected = true; + } + } +} + +function phpbb_enable_tz_dates() +{ + var tz_select_date = document.getElementById("tz_select_date"); + tz_select_date.style.display = "block"; +} + +function phpbb_preselect_tz_select(force_selector, l_suggestion) +{ + + var selector = document.getElementById('tz_date'); + // The offset returned here is in minutes and negated. + // http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp + var offset = (new Date()).getTimezoneOffset(); + if (offset < 0) + { + var sign = '+'; + offset = -offset; + } + else + { + var sign = '-'; + } + var minutes = offset % 60; + var hours = (offset - minutes) / 60; + if (hours < 10) + { + hours = '0' + hours.toString(); + } + else + { + hours = hours.toString(); + } + if (minutes < 10) + { + minutes = '0' + minutes.toString(); + } + else + { + minutes = minutes.toString(); + } + var prefix = 'GMT' + sign + hours + ':' + minutes; + var prefix_length = prefix.length; + for (var i = 0; i < selector.options.length; ++i) + { + var option = selector.options[i]; + if (option.value.substring(0, prefix_length) == prefix) + { + if (selector.value && selector.value != option.value && !force_selector) + { + // We do not select the option for the user, but notify him, + // that we would suggest a different setting. + document.getElementById("tz_select_date_suggest").style.display = "inline"; + document.getElementById("tz_select_date_suggest").title = l_suggestion.replace("%s", option.innerHTML); + document.getElementById("tz_select_date_suggest").innerHTML = l_suggestion.replace("%s", option.innerHTML.substring(0, 9)); + phpbb_switch_tz_date(true); + } + else + { + // Firefox scrolls the selector only to put the option into view; + // for negative-offset timezones, this means the first timezone + // of a particular offset will be the bottom one, and selected, + // with all other timezones not visible. Not much can be done + // about that here unfortunately. + option.selected = true; + phpbb_switch_tz_date(!force_selector); + document.getElementById("tz_select_date_suggest").style.display = "none"; + } + break; + } + } +} diff --git a/phpBB/styles/subsilver2/template/timezone_option.html b/phpBB/styles/subsilver2/template/timezone_option.html new file mode 100644 index 0000000000..184722ef7e --- /dev/null +++ b/phpBB/styles/subsilver2/template/timezone_option.html @@ -0,0 +1,22 @@ + + {L_BOARD_TIMEZONE}: + + + + + + + + + + + diff --git a/phpBB/styles/subsilver2/template/ucp_prefs_personal.html b/phpBB/styles/subsilver2/template/ucp_prefs_personal.html index 357e1fe100..bf0e67d68b 100644 --- a/phpBB/styles/subsilver2/template/ucp_prefs_personal.html +++ b/phpBB/styles/subsilver2/template/ucp_prefs_personal.html @@ -71,12 +71,7 @@ - - {L_BOARD_TIMEZONE}: - - - - + {L_BOARD_DATE_FORMAT}:
          {L_BOARD_DATE_FORMAT_EXPLAIN} diff --git a/phpBB/styles/subsilver2/template/ucp_register.html b/phpBB/styles/subsilver2/template/ucp_register.html index 0c3533292d..095c97ed49 100644 --- a/phpBB/styles/subsilver2/template/ucp_register.html +++ b/phpBB/styles/subsilver2/template/ucp_register.html @@ -53,10 +53,9 @@ {L_LANGUAGE}: - - {L_TIMEZONE}: - - + + + {L_ITEMS_REQUIRED} -- cgit v1.2.1 From 435573a9cb82060ddae673aa1e1572bd78c7741d Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 12 Jun 2012 19:52:33 +0200 Subject: [feature/new-tz-handling] Fix Timezone selection on registration page PHPBB3-9558 --- phpBB/includes/ucp/ucp_register.php | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index ac002a26c2..804bd2e0e2 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -442,6 +442,7 @@ class ucp_register break; } + $tz_select = tz_select($data['tz'], true, false); $template->assign_vars(array( 'ERROR' => (sizeof($error)) ? implode('
          ', $error) : '', 'USERNAME' => $data['username'], @@ -454,7 +455,8 @@ class ucp_register 'L_PASSWORD_EXPLAIN' => $user->lang($config['pass_complex'] . '_EXPLAIN', $user->lang('CHARACTERS', (int) $config['min_pass_chars']), $user->lang('CHARACTERS', (int) $config['max_pass_chars'])), 'S_LANG_OPTIONS' => language_select($data['lang']), - 'S_TZ_OPTIONS' => tz_select($data['tz'], true), + 'S_TZ_OPTIONS' => $tz_select['tz_select'], + 'S_TZ_DATE_OPTIONS' => $tz_select['tz_dates'], 'S_CONFIRM_REFRESH' => ($config['enable_confirm'] && $config['confirm_refresh']) ? true : false, 'S_REGISTRATION' => true, 'S_COPPA' => $coppa, -- cgit v1.2.1 From 5f96e5d374d1702d3d81591b7c69ede1cafebfa7 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Tue, 12 Jun 2012 19:54:26 +0200 Subject: [feature/new-tz-handling] Fix timezone option when editing a user in the ACP PHPBB3-9558 --- phpBB/adm/style/acp_users_prefs.html | 5 +---- phpBB/adm/style/timezone.js | 29 +++++++++++++++++++++++++++++ phpBB/adm/style/timezone_option.html | 20 ++++++++++++++++++++ phpBB/includes/acp/acp_users.php | 4 +++- phpBB/language/en/acp/common.php | 2 ++ 5 files changed, 55 insertions(+), 5 deletions(-) create mode 100644 phpBB/adm/style/timezone.js create mode 100644 phpBB/adm/style/timezone_option.html (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_prefs.html b/phpBB/adm/style/acp_users_prefs.html index 90db62984e..9439f0cf03 100644 --- a/phpBB/adm/style/acp_users_prefs.html +++ b/phpBB/adm/style/acp_users_prefs.html @@ -52,10 +52,7 @@
          -
          -
          -
          -
          +

          {L_BOARD_DATE_FORMAT_EXPLAIN}
          diff --git a/phpBB/adm/style/timezone.js b/phpBB/adm/style/timezone.js new file mode 100644 index 0000000000..d02c965ab5 --- /dev/null +++ b/phpBB/adm/style/timezone.js @@ -0,0 +1,29 @@ +function phpbb_switch_tz_date(keep_selection) +{ + var timezone_groups = document.getElementById("timezone"); + for (var i = 0; i < timezone_groups.childElementCount; i++) { + if (timezone_groups.children[i].tagName == "OPTGROUP" && + timezone_groups.children[i].label != document.getElementById("tz_date").value) + { + timezone_groups.children[i].style.display = "none"; + } + else if (timezone_groups.children[i].tagName == "OPTGROUP") + { + // Display other options + timezone_groups.children[i].style.display = "block"; + } + } + if (typeof keep_selection !== 'undefined') + { + if (!keep_selection) + { + timezone_groups.children[0].selected = true; + } + } +} + +function phpbb_enable_tz_dates() +{ + var tz_select_date = document.getElementById("tz_select_date"); + tz_select_date.style.display = "block"; +} diff --git a/phpBB/adm/style/timezone_option.html b/phpBB/adm/style/timezone_option.html new file mode 100644 index 0000000000..12e6e3700a --- /dev/null +++ b/phpBB/adm/style/timezone_option.html @@ -0,0 +1,20 @@ +
          +
          + + + +
          + + + + +
          +
          diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index b863a9ed80..949109abaf 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1639,6 +1639,7 @@ class acp_users ${'s_sort_' . $sort_option . '_dir'} .= ''; } + $tz_select = tz_select($data['tz'], true, false); $template->assign_vars(array( 'S_PREFS' => true, 'S_JABBER_DISABLED' => ($config['jab_enable'] && $user_row['user_jabber'] && @extension_loaded('xml')) ? false : true, @@ -1678,7 +1679,8 @@ class acp_users 'S_LANG_OPTIONS' => language_select($data['lang']), 'S_STYLE_OPTIONS' => style_select($data['style']), - 'S_TZ_OPTIONS' => tz_select($data['tz'], true), + 'S_TZ_OPTIONS' => $tz_select['tz_select'], + 'S_TZ_DATE_OPTIONS' => $tz_select['tz_dates'], ) ); diff --git a/phpBB/language/en/acp/common.php b/phpBB/language/en/acp/common.php index dc35969955..5cebcc89d7 100644 --- a/phpBB/language/en/acp/common.php +++ b/phpBB/language/en/acp/common.php @@ -401,6 +401,8 @@ $lang = array_merge($lang, array( 'STATISTIC' => 'Statistic', 'STATISTIC_RESYNC_OPTIONS' => 'Resynchronise or reset statistics', + 'TIMEZONE_INVALID' => 'The timezone you selected is invalid.', + 'TIMEZONE_SELECTED' => '(currently selected)', 'TOPICS_PER_DAY' => 'Topics per day', 'UPLOAD_DIR_SIZE' => 'Size of posted attachments', -- cgit v1.2.1 From 5441ee1ee489ef9ad1727f110c440dde5417cc1f Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sun, 17 Jun 2012 16:54:12 +0200 Subject: [feature/new-tz-handling] Use jQuery and INCLUDEJS for javascript PHPBB3-9558 --- phpBB/adm/style/timezone.js | 28 ++++++------- phpBB/adm/style/timezone_option.html | 3 +- phpBB/styles/prosilver/template/timezone.js | 47 +++++++++++----------- .../styles/prosilver/template/timezone_option.html | 8 ++-- phpBB/styles/subsilver2/template/timezone.js | 47 +++++++++++----------- .../subsilver2/template/timezone_option.html | 8 ++-- 6 files changed, 72 insertions(+), 69 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/timezone.js b/phpBB/adm/style/timezone.js index d02c965ab5..a1ffeb17c5 100644 --- a/phpBB/adm/style/timezone.js +++ b/phpBB/adm/style/timezone.js @@ -1,29 +1,27 @@ function phpbb_switch_tz_date(keep_selection) { - var timezone_groups = document.getElementById("timezone"); - for (var i = 0; i < timezone_groups.childElementCount; i++) { - if (timezone_groups.children[i].tagName == "OPTGROUP" && - timezone_groups.children[i].label != document.getElementById("tz_date").value) - { - timezone_groups.children[i].style.display = "none"; - } - else if (timezone_groups.children[i].tagName == "OPTGROUP") - { - // Display other options - timezone_groups.children[i].style.display = "block"; - } + $('#timezone > optgroup').css("display", "none"); + $("#timezone > optgroup[label='" + $('#tz_date').val() + "']").css("display", "block"); + + if ($("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option").size() == 1) + { + // If there is only one timezone for the selected date, we just select that automatically. + $("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option:first").attr("selected", true); + keep_selection = true; } + if (typeof keep_selection !== 'undefined') { if (!keep_selection) { - timezone_groups.children[0].selected = true; + $('#timezone > option:first').attr("selected", true); } } } function phpbb_enable_tz_dates() { - var tz_select_date = document.getElementById("tz_select_date"); - tz_select_date.style.display = "block"; + $('#tz_select_date').css("display", "block"); } + +phpbb_enable_tz_dates(); diff --git a/phpBB/adm/style/timezone_option.html b/phpBB/adm/style/timezone_option.html index 12e6e3700a..e12219b1c0 100644 --- a/phpBB/adm/style/timezone_option.html +++ b/phpBB/adm/style/timezone_option.html @@ -14,7 +14,6 @@ {S_TZ_OPTIONS} - - +
          diff --git a/phpBB/styles/prosilver/template/timezone.js b/phpBB/styles/prosilver/template/timezone.js index deebbf36a8..f73a82a063 100644 --- a/phpBB/styles/prosilver/template/timezone.js +++ b/phpBB/styles/prosilver/template/timezone.js @@ -1,37 +1,32 @@ function phpbb_switch_tz_date(keep_selection) { - var timezone_groups = document.getElementById("timezone"); - for (var i = 0; i < timezone_groups.childElementCount; i++) { - if (timezone_groups.children[i].tagName == "OPTGROUP" && - timezone_groups.children[i].label != document.getElementById("tz_date").value) - { - timezone_groups.children[i].style.display = "none"; - } - else if (timezone_groups.children[i].tagName == "OPTGROUP") - { - // Display other options - timezone_groups.children[i].style.display = "block"; - } + $('#timezone > optgroup').css("display", "none"); + $("#timezone > optgroup[label='" + $('#tz_date').val() + "']").css("display", "block"); + + if ($("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option").size() == 1) + { + // If there is only one timezone for the selected date, we just select that automatically. + $("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option:first").attr("selected", true); + keep_selection = true; } + if (typeof keep_selection !== 'undefined') { if (!keep_selection) { - timezone_groups.children[0].selected = true; + $('#timezone > option:first').attr("selected", true); } } } function phpbb_enable_tz_dates() { - var tz_select_date = document.getElementById("tz_select_date"); - tz_select_date.style.display = "block"; + $('#tz_select_date').css("display", "block"); } function phpbb_preselect_tz_select(force_selector, l_suggestion) { - var selector = document.getElementById('tz_date'); // The offset returned here is in minutes and negated. // http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp var offset = (new Date()).getTimezoneOffset(); @@ -62,20 +57,23 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion) { minutes = minutes.toString(); } + var prefix = 'GMT' + sign + hours + ':' + minutes; var prefix_length = prefix.length; - for (var i = 0; i < selector.options.length; ++i) + + var selector_options = $('#tz_date > option'); + for (var i = 0; i < selector_options.length; ++i) { - var option = selector.options[i]; + var option = selector_options[i]; if (option.value.substring(0, prefix_length) == prefix) { - if (selector.value && selector.value != option.value && !force_selector) + if ($('#tz_date').val() != option.value && !force_selector) { // We do not select the option for the user, but notify him, // that we would suggest a different setting. - document.getElementById("tz_select_date_suggest").style.display = "inline"; - document.getElementById("tz_select_date_suggest").title = l_suggestion.replace("%s", option.innerHTML); - document.getElementById("tz_select_date_suggest").innerHTML = l_suggestion.replace("%s", option.innerHTML.substring(0, 9)); + $('#tz_select_date_suggest').css("display", "inline"); + $('#tz_select_date_suggest').attr("title", l_suggestion.replace("%s", option.innerHTML)); + $('#tz_select_date_suggest').html(l_suggestion.replace("%s", option.innerHTML.substring(0, 9))); phpbb_switch_tz_date(true); } else @@ -87,9 +85,12 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion) // about that here unfortunately. option.selected = true; phpbb_switch_tz_date(!force_selector); - document.getElementById("tz_select_date_suggest").style.display = "none"; + $('#tz_select_date_suggest').css("display", "none"); } break; } } } + +phpbb_enable_tz_dates(); +phpbb_preselect_tz_select(is_registration, l_timezone_date_suggestion); diff --git a/phpBB/styles/prosilver/template/timezone_option.html b/phpBB/styles/prosilver/template/timezone_option.html index 6a6a937977..3a08de1a46 100644 --- a/phpBB/styles/prosilver/template/timezone_option.html +++ b/phpBB/styles/prosilver/template/timezone_option.html @@ -15,8 +15,10 @@ {S_TZ_OPTIONS} - - - + + diff --git a/phpBB/styles/subsilver2/template/timezone.js b/phpBB/styles/subsilver2/template/timezone.js index deebbf36a8..f73a82a063 100644 --- a/phpBB/styles/subsilver2/template/timezone.js +++ b/phpBB/styles/subsilver2/template/timezone.js @@ -1,37 +1,32 @@ function phpbb_switch_tz_date(keep_selection) { - var timezone_groups = document.getElementById("timezone"); - for (var i = 0; i < timezone_groups.childElementCount; i++) { - if (timezone_groups.children[i].tagName == "OPTGROUP" && - timezone_groups.children[i].label != document.getElementById("tz_date").value) - { - timezone_groups.children[i].style.display = "none"; - } - else if (timezone_groups.children[i].tagName == "OPTGROUP") - { - // Display other options - timezone_groups.children[i].style.display = "block"; - } + $('#timezone > optgroup').css("display", "none"); + $("#timezone > optgroup[label='" + $('#tz_date').val() + "']").css("display", "block"); + + if ($("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option").size() == 1) + { + // If there is only one timezone for the selected date, we just select that automatically. + $("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option:first").attr("selected", true); + keep_selection = true; } + if (typeof keep_selection !== 'undefined') { if (!keep_selection) { - timezone_groups.children[0].selected = true; + $('#timezone > option:first').attr("selected", true); } } } function phpbb_enable_tz_dates() { - var tz_select_date = document.getElementById("tz_select_date"); - tz_select_date.style.display = "block"; + $('#tz_select_date').css("display", "block"); } function phpbb_preselect_tz_select(force_selector, l_suggestion) { - var selector = document.getElementById('tz_date'); // The offset returned here is in minutes and negated. // http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp var offset = (new Date()).getTimezoneOffset(); @@ -62,20 +57,23 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion) { minutes = minutes.toString(); } + var prefix = 'GMT' + sign + hours + ':' + minutes; var prefix_length = prefix.length; - for (var i = 0; i < selector.options.length; ++i) + + var selector_options = $('#tz_date > option'); + for (var i = 0; i < selector_options.length; ++i) { - var option = selector.options[i]; + var option = selector_options[i]; if (option.value.substring(0, prefix_length) == prefix) { - if (selector.value && selector.value != option.value && !force_selector) + if ($('#tz_date').val() != option.value && !force_selector) { // We do not select the option for the user, but notify him, // that we would suggest a different setting. - document.getElementById("tz_select_date_suggest").style.display = "inline"; - document.getElementById("tz_select_date_suggest").title = l_suggestion.replace("%s", option.innerHTML); - document.getElementById("tz_select_date_suggest").innerHTML = l_suggestion.replace("%s", option.innerHTML.substring(0, 9)); + $('#tz_select_date_suggest').css("display", "inline"); + $('#tz_select_date_suggest').attr("title", l_suggestion.replace("%s", option.innerHTML)); + $('#tz_select_date_suggest').html(l_suggestion.replace("%s", option.innerHTML.substring(0, 9))); phpbb_switch_tz_date(true); } else @@ -87,9 +85,12 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion) // about that here unfortunately. option.selected = true; phpbb_switch_tz_date(!force_selector); - document.getElementById("tz_select_date_suggest").style.display = "none"; + $('#tz_select_date_suggest').css("display", "none"); } break; } } } + +phpbb_enable_tz_dates(); +phpbb_preselect_tz_select(is_registration, l_timezone_date_suggestion); diff --git a/phpBB/styles/subsilver2/template/timezone_option.html b/phpBB/styles/subsilver2/template/timezone_option.html index 184722ef7e..0806186c9c 100644 --- a/phpBB/styles/subsilver2/template/timezone_option.html +++ b/phpBB/styles/subsilver2/template/timezone_option.html @@ -15,8 +15,10 @@ {S_TZ_OPTIONS} - - - + + -- cgit v1.2.1 From 8d65f1f7d263d9f6e76cbac2765da02a0877c87f Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 18 Jun 2012 10:20:15 +0200 Subject: [feature/new-tz-handling] Add doc blocks to js functions PHPBB3-9558 --- phpBB/adm/style/timezone.js | 8 ++++++++ phpBB/styles/prosilver/template/timezone.js | 19 ++++++++++++++----- phpBB/styles/subsilver2/template/timezone.js | 19 ++++++++++++++----- 3 files changed, 36 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/timezone.js b/phpBB/adm/style/timezone.js index a1ffeb17c5..d1667699da 100644 --- a/phpBB/adm/style/timezone.js +++ b/phpBB/adm/style/timezone.js @@ -1,3 +1,8 @@ +/** +* Hide the optgroups that are not the selected timezone +* +* @param bool keep_selection Shall we keep the value selected, or shall the user be forced to repick one. +*/ function phpbb_switch_tz_date(keep_selection) { $('#timezone > optgroup').css("display", "none"); @@ -19,6 +24,9 @@ function phpbb_switch_tz_date(keep_selection) } } +/** +* Display the date/time select +*/ function phpbb_enable_tz_dates() { $('#tz_select_date').css("display", "block"); diff --git a/phpBB/styles/prosilver/template/timezone.js b/phpBB/styles/prosilver/template/timezone.js index f73a82a063..b91aae6244 100644 --- a/phpBB/styles/prosilver/template/timezone.js +++ b/phpBB/styles/prosilver/template/timezone.js @@ -1,3 +1,8 @@ +/** +* Hide the optgroups that are not the selected timezone +* +* @param bool keep_selection Shall we keep the value selected, or shall the user be forced to repick one. +*/ function phpbb_switch_tz_date(keep_selection) { $('#timezone > optgroup').css("display", "none"); @@ -19,11 +24,20 @@ function phpbb_switch_tz_date(keep_selection) } } +/** +* Display the date/time select +*/ function phpbb_enable_tz_dates() { $('#tz_select_date').css("display", "block"); } +/** +* Preselect a date/time or suggest one, if it is not picked. +* +* @param bool force_selector Shall we select the suggestion? +* @param string l_suggestion The language string which we use, to display the selection +*/ function phpbb_preselect_tz_select(force_selector, l_suggestion) { @@ -78,11 +92,6 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion) } else { - // Firefox scrolls the selector only to put the option into view; - // for negative-offset timezones, this means the first timezone - // of a particular offset will be the bottom one, and selected, - // with all other timezones not visible. Not much can be done - // about that here unfortunately. option.selected = true; phpbb_switch_tz_date(!force_selector); $('#tz_select_date_suggest').css("display", "none"); diff --git a/phpBB/styles/subsilver2/template/timezone.js b/phpBB/styles/subsilver2/template/timezone.js index f73a82a063..b91aae6244 100644 --- a/phpBB/styles/subsilver2/template/timezone.js +++ b/phpBB/styles/subsilver2/template/timezone.js @@ -1,3 +1,8 @@ +/** +* Hide the optgroups that are not the selected timezone +* +* @param bool keep_selection Shall we keep the value selected, or shall the user be forced to repick one. +*/ function phpbb_switch_tz_date(keep_selection) { $('#timezone > optgroup').css("display", "none"); @@ -19,11 +24,20 @@ function phpbb_switch_tz_date(keep_selection) } } +/** +* Display the date/time select +*/ function phpbb_enable_tz_dates() { $('#tz_select_date').css("display", "block"); } +/** +* Preselect a date/time or suggest one, if it is not picked. +* +* @param bool force_selector Shall we select the suggestion? +* @param string l_suggestion The language string which we use, to display the selection +*/ function phpbb_preselect_tz_select(force_selector, l_suggestion) { @@ -78,11 +92,6 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion) } else { - // Firefox scrolls the selector only to put the option into view; - // for negative-offset timezones, this means the first timezone - // of a particular offset will be the bottom one, and selected, - // with all other timezones not visible. Not much can be done - // about that here unfortunately. option.selected = true; phpbb_switch_tz_date(!force_selector); $('#tz_select_date_suggest').css("display", "none"); -- cgit v1.2.1 From c21275fa951bd4d8608cc335a5c39d9a05bc4904 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 18 Jun 2012 10:53:47 +0200 Subject: [feature/new-tz-handling] Use js and data attributes to create the events PHPBB3-9558 --- phpBB/styles/prosilver/template/timezone.js | 13 ++++++++----- phpBB/styles/prosilver/template/timezone_option.html | 6 +----- phpBB/styles/subsilver2/template/timezone.js | 13 ++++++++----- phpBB/styles/subsilver2/template/timezone_option.html | 2 +- 4 files changed, 18 insertions(+), 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/timezone.js b/phpBB/styles/prosilver/template/timezone.js index b91aae6244..b8d3c2f152 100644 --- a/phpBB/styles/prosilver/template/timezone.js +++ b/phpBB/styles/prosilver/template/timezone.js @@ -36,9 +36,8 @@ function phpbb_enable_tz_dates() * Preselect a date/time or suggest one, if it is not picked. * * @param bool force_selector Shall we select the suggestion? -* @param string l_suggestion The language string which we use, to display the selection */ -function phpbb_preselect_tz_select(force_selector, l_suggestion) +function phpbb_preselect_tz_select(force_selector) { // The offset returned here is in minutes and negated. @@ -86,8 +85,8 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion) // We do not select the option for the user, but notify him, // that we would suggest a different setting. $('#tz_select_date_suggest').css("display", "inline"); - $('#tz_select_date_suggest').attr("title", l_suggestion.replace("%s", option.innerHTML)); - $('#tz_select_date_suggest').html(l_suggestion.replace("%s", option.innerHTML.substring(0, 9))); + $('#tz_select_date_suggest').attr("title", $('#tz_select_date_suggest').attr('data-l-suggestion').replace("%s", option.innerHTML)); + $('#tz_select_date_suggest').attr("value", $('#tz_select_date_suggest').attr('data-l-suggestion').replace("%s", option.innerHTML.substring(0, 9))); phpbb_switch_tz_date(true); } else @@ -101,5 +100,9 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion) } } +$('#tz_select_date_suggest').click(function(){ + phpbb_preselect_tz_select(true, ''); +}); + phpbb_enable_tz_dates(); -phpbb_preselect_tz_select(is_registration, l_timezone_date_suggestion); +phpbb_preselect_tz_select($('#tz_select_date_suggest').attr('data-is-registration') == "true"); diff --git a/phpBB/styles/prosilver/template/timezone_option.html b/phpBB/styles/prosilver/template/timezone_option.html index 3a08de1a46..8840e9e5e8 100644 --- a/phpBB/styles/prosilver/template/timezone_option.html +++ b/phpBB/styles/prosilver/template/timezone_option.html @@ -6,7 +6,7 @@ {S_TZ_DATE_OPTIONS} - +
          @@ -15,10 +15,6 @@ {S_TZ_OPTIONS} -
          diff --git a/phpBB/styles/subsilver2/template/timezone.js b/phpBB/styles/subsilver2/template/timezone.js index b91aae6244..b8d3c2f152 100644 --- a/phpBB/styles/subsilver2/template/timezone.js +++ b/phpBB/styles/subsilver2/template/timezone.js @@ -36,9 +36,8 @@ function phpbb_enable_tz_dates() * Preselect a date/time or suggest one, if it is not picked. * * @param bool force_selector Shall we select the suggestion? -* @param string l_suggestion The language string which we use, to display the selection */ -function phpbb_preselect_tz_select(force_selector, l_suggestion) +function phpbb_preselect_tz_select(force_selector) { // The offset returned here is in minutes and negated. @@ -86,8 +85,8 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion) // We do not select the option for the user, but notify him, // that we would suggest a different setting. $('#tz_select_date_suggest').css("display", "inline"); - $('#tz_select_date_suggest').attr("title", l_suggestion.replace("%s", option.innerHTML)); - $('#tz_select_date_suggest').html(l_suggestion.replace("%s", option.innerHTML.substring(0, 9))); + $('#tz_select_date_suggest').attr("title", $('#tz_select_date_suggest').attr('data-l-suggestion').replace("%s", option.innerHTML)); + $('#tz_select_date_suggest').attr("value", $('#tz_select_date_suggest').attr('data-l-suggestion').replace("%s", option.innerHTML.substring(0, 9))); phpbb_switch_tz_date(true); } else @@ -101,5 +100,9 @@ function phpbb_preselect_tz_select(force_selector, l_suggestion) } } +$('#tz_select_date_suggest').click(function(){ + phpbb_preselect_tz_select(true, ''); +}); + phpbb_enable_tz_dates(); -phpbb_preselect_tz_select(is_registration, l_timezone_date_suggestion); +phpbb_preselect_tz_select($('#tz_select_date_suggest').attr('data-is-registration') == "true"); diff --git a/phpBB/styles/subsilver2/template/timezone_option.html b/phpBB/styles/subsilver2/template/timezone_option.html index 0806186c9c..affeee91ac 100644 --- a/phpBB/styles/subsilver2/template/timezone_option.html +++ b/phpBB/styles/subsilver2/template/timezone_option.html @@ -7,7 +7,7 @@ {S_TZ_DATE_OPTIONS}
          -
          +
        + -- cgit v1.2.1 From bbd3204a9cf15155ccbc1c9270575d2ba44097cb Mon Sep 17 00:00:00 2001 From: Dhruv Goel Date: Tue, 19 Jun 2012 20:03:57 +0530 Subject: [ticket/9551] uncomment line and change length to 255 incase of partial collation change post_subject field will be changed back to the default collation and length 255. PHPBB3-9551 --- phpBB/includes/search/fulltext_mysql.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_mysql.php b/phpBB/includes/search/fulltext_mysql.php index 779ec1d216..bd4c003397 100644 --- a/phpBB/includes/search/fulltext_mysql.php +++ b/phpBB/includes/search/fulltext_mysql.php @@ -747,7 +747,7 @@ class fulltext_mysql extends search_backend { if ($db->sql_layer == 'mysqli' || version_compare($db->sql_server_info(true), '4.1.3', '>=')) { - //$alter[] = 'MODIFY post_subject varchar(100) COLLATE utf8_unicode_ci DEFAULT \'\' NOT NULL'; + $alter[] = 'MODIFY post_subject varchar(255) COLLATE utf8_unicode_ci DEFAULT \'\' NOT NULL'; } else { -- cgit v1.2.1 From 3f7d55a0533d0f8e935cb7da4495817a2a76a163 Mon Sep 17 00:00:00 2001 From: Callum Macrae Date: Tue, 19 Jun 2012 17:16:42 +0100 Subject: [ticket/10801] Fixed quickmod tools. Fixes 10801, 10802, 10807 and 10808. PHPBB3-10801 --- phpBB/styles/prosilver/template/viewtopic_body.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html index 9110cea4e9..1af512732d 100644 --- a/phpBB/styles/prosilver/template/viewtopic_body.html +++ b/phpBB/styles/prosilver/template/viewtopic_body.html @@ -263,7 +263,7 @@ -
        +
        + diff --git a/phpBB/styles/subsilver2/template/timezone.js b/phpBB/styles/subsilver2/template/timezone.js index b8d3c2f152..da0a2b0bfd 100644 --- a/phpBB/styles/subsilver2/template/timezone.js +++ b/phpBB/styles/subsilver2/template/timezone.js @@ -1,108 +1,19 @@ -/** -* Hide the optgroups that are not the selected timezone -* -* @param bool keep_selection Shall we keep the value selected, or shall the user be forced to repick one. -*/ -function phpbb_switch_tz_date(keep_selection) -{ - $('#timezone > optgroup').css("display", "none"); - $("#timezone > optgroup[label='" + $('#tz_date').val() + "']").css("display", "block"); +(function($) { // Avoid conflicts with other libraries - if ($("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option").size() == 1) - { - // If there is only one timezone for the selected date, we just select that automatically. - $("#timezone > optgroup[label='" + $('#tz_date').val() + "'] > option:first").attr("selected", true); - keep_selection = true; - } - - if (typeof keep_selection !== 'undefined') - { - if (!keep_selection) - { - $('#timezone > option:first').attr("selected", true); - } - } -} - -/** -* Display the date/time select -*/ -function phpbb_enable_tz_dates() -{ - $('#tz_select_date').css("display", "block"); -} - -/** -* Preselect a date/time or suggest one, if it is not picked. -* -* @param bool force_selector Shall we select the suggestion? -*/ -function phpbb_preselect_tz_select(force_selector) -{ - - // The offset returned here is in minutes and negated. - // http://www.w3schools.com/jsref/jsref_getTimezoneOffset.asp - var offset = (new Date()).getTimezoneOffset(); - if (offset < 0) - { - var sign = '+'; - offset = -offset; - } - else - { - var sign = '-'; - } - var minutes = offset % 60; - var hours = (offset - minutes) / 60; - if (hours < 10) - { - hours = '0' + hours.toString(); - } - else - { - hours = hours.toString(); - } - if (minutes < 10) - { - minutes = '0' + minutes.toString(); - } - else - { - minutes = minutes.toString(); - } - - var prefix = 'GMT' + sign + hours + ':' + minutes; - var prefix_length = prefix.length; - - var selector_options = $('#tz_date > option'); - for (var i = 0; i < selector_options.length; ++i) - { - var option = selector_options[i]; - if (option.value.substring(0, prefix_length) == prefix) - { - if ($('#tz_date').val() != option.value && !force_selector) - { - // We do not select the option for the user, but notify him, - // that we would suggest a different setting. - $('#tz_select_date_suggest').css("display", "inline"); - $('#tz_select_date_suggest').attr("title", $('#tz_select_date_suggest').attr('data-l-suggestion').replace("%s", option.innerHTML)); - $('#tz_select_date_suggest').attr("value", $('#tz_select_date_suggest').attr('data-l-suggestion').replace("%s", option.innerHTML.substring(0, 9))); - phpbb_switch_tz_date(true); - } - else - { - option.selected = true; - phpbb_switch_tz_date(!force_selector); - $('#tz_select_date_suggest').css("display", "none"); - } - break; - } - } -} +$('#tz_date').change(function() { + phpbb.timezone_switch_date(false); +}); $('#tz_select_date_suggest').click(function(){ - phpbb_preselect_tz_select(true, ''); + phpbb.timezone_preselect_select(true); }); -phpbb_enable_tz_dates(); -phpbb_preselect_tz_select($('#tz_select_date_suggest').attr('data-is-registration') == "true"); +$(document).ready( + phpbb.timezone_enable_date_selection +); + +$(document).ready( + phpbb.timezone_preselect_select($('#tz_select_date_suggest').attr('data-is-registration') == 'true') +); + +})(jQuery); // Avoid conflicts with other libraries diff --git a/phpBB/styles/subsilver2/template/timezone_option.html b/phpBB/styles/subsilver2/template/timezone_option.html index affeee91ac..3f1e14b33d 100644 --- a/phpBB/styles/subsilver2/template/timezone_option.html +++ b/phpBB/styles/subsilver2/template/timezone_option.html @@ -3,7 +3,7 @@ @@ -250,13 +257,13 @@

        While we very much appreciate receiving bug reports (the more reports the more stable phpBB will be) we ask you carry out a few steps before adding new entries:

          -
        • Firstly determine if your bug is reproduceable, how to determine this depends on the bug in question. Only if the bug is reproduceable it is likely to be a problem with phpBB3 (or in some way connected). If something cannot be reproduced it may turn out to have been your hosting provider working on something, a user doing something silly, etc. Bug reports for non-reproduceable events can slow down our attempts to fix real, reproduceable issues.

        • -
        • Next please read or search through the existing bug reports to see if your bug (or one very similar to it) is already listed. If it is please add to that existing bug rather than creating a new duplicate entry (all this does is slow us down).

        • -
        • Check the forums (use search!) to see if people have discussed anything that sounds similar to what you are seeing. However, as noted above please DO NOT post your particular bug to the forum unless it's non-reproduceable or you are sure it's related to something you have done rather phpBB3.

        • -
        • If no existing bug exists then please feel free to add it.
        • +
        • First, determine if your bug is reproduceable; how to determine this depends on the bug in question. Only if the bug is reproduceable is it likely to be a problem with phpBB3 (or in some way connected). If something cannot be reproduced it may turn out to have been your hosting provider working on something, a user doing something silly, etc. Bug reports for non-reproduceable events can slow down our attempts to fix real, reproduceable issues

        • +
        • Next, please read or search through the existing bug reports to see if your bug (or one very similar to it) is already listed. If it is please add to that existing bug rather than creating a new duplicate entry (all this does is slow us down).

        • +
        • Check the forums (use search!) to see if people have discussed anything that sounds similar to what you are seeing. However, as noted above please DO NOT post your particular bug to the forum unless it's non-reproduceable or you are sure it’s related to something you have done rather than phpBB3

        • +
        • If no existing bug exists then please feel free to add it
        -

        If you do post a new bug (i.e. one that isn't already listed in the bug tracker) firstly make sure you have logged in (your username and password are the same as for the community forums) then please include the following details:

        +

        If you do post a new bug (i.e. one that isn't already listed in the bug tracker) first make sure that you have logged in (your username and password are the same as for the community forums) then please include the following details:

        • Your server type/version, e.g. Apache 1.3.28, IIS 4, Sambar, etc.
        • @@ -294,7 +301,7 @@
          -

          This list is not complete but does represent those bugs which may effect users on a wider scale. Other bugs listed in the tracker have typically been shown to be limited to certain setups or methods of installation, updating and/or conversions.

          +

          This list is not complete but does represent those bugs which may affect users on a wider scale. Other bugs listed in the tracker have typically been shown to be limited to certain setups or methods of installation, updating and/or conversions.

          • Conversions may fail to complete on large boards under some hosts
          • @@ -322,7 +329,7 @@

            Please remember that running any application on a developmental version of PHP can lead to strange/unexpected results which may appear to be bugs in the application (which may not be true). Therefore we recommend you upgrade to the newest stable version of PHP before running phpBB3. If you are running a developmental version of PHP please check any bugs you find on a system running a stable release before submitting.

            -

            This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MSSQL Server 2000, PostgreSQL 7.x, Oracle 8, SQLite and Firebird. Versions of PHP used range from 4.3.3 to 5.4.x without problem.

            +

            This board has been developed and tested under Linux and Windows (amongst others) running Apache using MySQL 3.23, 4.x, 5.x, MSSQL Server 2000, PostgreSQL 7.x, Oracle 8, SQLite 2 and Firebird. Versions of PHP used range from 4.3.3 to 5.4.x without problem.

            7.i. Notice on PHP security issues

            @@ -344,7 +351,7 @@
            -

            This application is opensource software released under the GNU General Public License v2. Please see source code and the docs directory for more details. This package and its contents are Copyright (c) phpBB Group, All Rights Reserved.

            +

            This application is opensource software released under the GNU General Public License v2. Please see source code and the docs directory for more details. This package and its contents are Copyright © phpBB Group, All Rights Reserved.

            -- cgit v1.2.1 From 6203ef0c61b2896d85922d99edebf9df03896126 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Fri, 29 Jun 2012 12:10:14 -0500 Subject: [ticket/10441] Typo PHPBB3-10441 --- phpBB/docs/README.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/docs/README.html b/phpBB/docs/README.html index a4cbe65254..6b6b21d8ae 100644 --- a/phpBB/docs/README.html +++ b/phpBB/docs/README.html @@ -232,7 +232,7 @@

            http://area51.phpbb.com/phpBB/

            -

            Please note that the devolopment forums should NOT be used to seek support for or ask questions about phpBB 2.0.x or phpBB 3.0.x, the main community forums are the place for this. Any such posts will be locked and go unanswered.

            +

            Please note that the development forums should NOT be used to seek support for or ask questions about phpBB 2.0.x or phpBB 3.0.x, the main community forums are the place for this. Any such posts will be locked and go unanswered.

          -- cgit v1.2.1 From 625333ea2ed4b89ea479786f599948d5530c7202 Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Sat, 30 Jun 2012 12:21:37 -0500 Subject: [ticket/10773] ACP logo with registered trademark symbol PHPBB3-10773 --- phpBB/adm/images/phpbb_logo.gif | Bin 3883 -> 0 bytes phpBB/adm/images/phpbb_logo.png | Bin 0 -> 9313 bytes phpBB/adm/style/admin.css | 6 +++--- 3 files changed, 3 insertions(+), 3 deletions(-) delete mode 100644 phpBB/adm/images/phpbb_logo.gif create mode 100644 phpBB/adm/images/phpbb_logo.png (limited to 'phpBB') diff --git a/phpBB/adm/images/phpbb_logo.gif b/phpBB/adm/images/phpbb_logo.gif deleted file mode 100644 index 239993182b..0000000000 Binary files a/phpBB/adm/images/phpbb_logo.gif and /dev/null differ diff --git a/phpBB/adm/images/phpbb_logo.png b/phpBB/adm/images/phpbb_logo.png new file mode 100644 index 0000000000..c3f9248ed7 Binary files /dev/null and b/phpBB/adm/images/phpbb_logo.png differ diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css index 666f4921ba..b9996fd1d1 100644 --- a/phpBB/adm/style/admin.css +++ b/phpBB/adm/style/admin.css @@ -142,15 +142,15 @@ li { #page-header { clear: both; text-align: right; - background: url("../images/phpbb_logo.gif") top left no-repeat; - height: 49px; + background: url("../images/phpbb_logo.png") top left no-repeat; + height: 54px; font-size: 0.85em; margin-bottom: 10px; } .rtl #page-header { text-align: left; - background: url("../images/phpbb_logo.gif") top right no-repeat; + background: url("../images/phpbb_logo.png") top right no-repeat; } #page-header h1 { -- cgit v1.2.1 From a8cf926566c32097c61c14210990f2a7229ddfc7 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 2 Jul 2012 11:10:02 +0200 Subject: [ticket/10942] Require same data type and do not cast expressions automatically PHPBB3-10942 --- phpBB/includes/db/dbal.php | 2 ++ phpBB/includes/db/mssql.php | 13 ------------- phpBB/includes/db/mssql_odbc.php | 13 ------------- phpBB/includes/db/mssqlnative.php | 13 ------------- phpBB/includes/db/oracle.php | 13 ------------- phpBB/includes/db/postgres.php | 13 ------------- 6 files changed, 2 insertions(+), 65 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 9eb74ab617..8dbcd73b58 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -286,6 +286,8 @@ class dbal /** * Build a case expression * + * Note: The two statements action_true and action_false must have the same data type (int, vchar, ...) in the database! + * * @param string $condition The condition which must be true, to use action_true rather then action_else * @param string $action_true SQL expression that is used, if the condition is true * @param string $action_else SQL expression that is used, if the condition is false, optional diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index 8888bb3939..d24cbf329f 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -91,19 +91,6 @@ class dbal_mssql extends dbal return ($this->sql_server_version) ? 'MSSQL
          ' . $this->sql_server_version : 'MSSQL'; } - /** - * {@inheritDoc} - */ - function sql_case($condition, $action_true, $action_false = false) - { - // To ensure, that both expressions have the same type, we cast them to varchar manually - $sql_case = 'CASE WHEN ' . $condition; - $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; - $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; - $sql_case .= ' END'; - return $sql_case; - } - /** * {@inheritDoc} */ diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index a14d6adb14..d64264470e 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -109,19 +109,6 @@ class dbal_mssql_odbc extends dbal return ($this->sql_server_version) ? 'MSSQL (ODBC)
          ' . $this->sql_server_version : 'MSSQL (ODBC)'; } - /** - * {@inheritDoc} - */ - function sql_case($condition, $action_true, $action_false = false) - { - // To ensure, that both expressions have the same type, we cast them to varchar manually - $sql_case = 'CASE WHEN ' . $condition; - $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; - $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; - $sql_case .= ' END'; - return $sql_case; - } - /** * {@inheritDoc} */ diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 0001bc4ba7..31c3a3721a 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -257,19 +257,6 @@ class dbal_mssqlnative extends dbal return ($this->sql_server_version) ? 'MSSQL
          ' . $this->sql_server_version : 'MSSQL'; } - /** - * {@inheritDoc} - */ - function sql_case($condition, $action_true, $action_false = false) - { - // To ensure, that both expressions have the same type, we cast them to varchar manually - $sql_case = 'CASE WHEN ' . $condition; - $sql_case .= ' THEN CAST(' . $action_true . ' AS VARCHAR)'; - $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS VARCHAR)' : ''; - $sql_case .= ' END'; - return $sql_case; - } - /** * {@inheritDoc} */ diff --git a/phpBB/includes/db/oracle.php b/phpBB/includes/db/oracle.php index dc405ab08a..2e801532f0 100644 --- a/phpBB/includes/db/oracle.php +++ b/phpBB/includes/db/oracle.php @@ -89,19 +89,6 @@ class dbal_oracle extends dbal return $this->sql_server_version; } - /** - * {@inheritDoc} - */ - function sql_case($condition, $action_true, $action_false = false) - { - // To ensure, that both expressions have the same type, we cast them to clob manually - $sql_case = 'CASE WHEN ' . $condition; - $sql_case .= ' THEN CAST(' . $action_true . ' AS clob)'; - $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS clob)' : ''; - $sql_case .= ' END'; - return $sql_case; - } - /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index c3116601ae..a31181b4d4 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -154,19 +154,6 @@ class dbal_postgres extends dbal return ($raw) ? $this->sql_server_version : 'PostgreSQL ' . $this->sql_server_version; } - /** - * {@inheritDoc} - */ - function sql_case($condition, $action_true, $action_false = false) - { - // To ensure, that both expressions have the same type, we cast them to text manually - $sql_case = 'CASE WHEN ' . $condition; - $sql_case .= ' THEN CAST(' . $action_true . ' AS TEXT)'; - $sql_case .= ($action_false !== false) ? ' ELSE CAST(' . $action_false . ' AS TEXT)' : ''; - $sql_case .= ' END'; - return $sql_case; - } - /** * {@inheritDoc} */ -- cgit v1.2.1 From fe1f21d1a55ac15b278d99c3a73a8e3424a38fd5 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Mon, 2 Jul 2012 23:11:21 +0200 Subject: [ticket/10942] Use ANSI SQL standard || in dbal.php PHPBB3-10942 --- phpBB/includes/db/dbal.php | 2 +- phpBB/includes/db/firebird.php | 8 -------- phpBB/includes/db/mysql.php | 8 ++++++++ phpBB/includes/db/mysqli.php | 8 ++++++++ phpBB/includes/db/postgres.php | 8 -------- phpBB/includes/db/sqlite.php | 8 -------- 6 files changed, 17 insertions(+), 25 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index 8dbcd73b58..fded27a001 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -311,7 +311,7 @@ class dbal */ function sql_concatenate($expr1, $expr2) { - return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; + return $expr1 . ' || ' . $expr2; } /** diff --git a/phpBB/includes/db/firebird.php b/phpBB/includes/db/firebird.php index d6b16d0342..7709e8fdf5 100644 --- a/phpBB/includes/db/firebird.php +++ b/phpBB/includes/db/firebird.php @@ -110,14 +110,6 @@ class dbal_firebird extends dbal return ($raw) ? '2.1' : 'Firebird/Interbase'; } - /** - * {@inheritDoc} - */ - function sql_concatenate($expr1, $expr2) - { - return $expr1 . ' || ' . $expr2; - } - /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index eb38e3e913..3cda5cc1e0 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -119,6 +119,14 @@ class dbal_mysql extends dbal return ($raw) ? $this->sql_server_version : 'MySQL ' . $this->sql_server_version; } + /** + * {@inheritDoc} + */ + function sql_concatenate($expr1, $expr2) + { + return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; + } + /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index 4210a58002..e3828d9599 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -122,6 +122,14 @@ class dbal_mysqli extends dbal return ($raw) ? $this->sql_server_version : 'MySQL(i) ' . $this->sql_server_version; } + /** + * {@inheritDoc} + */ + function sql_concatenate($expr1, $expr2) + { + return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; + } + /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/postgres.php b/phpBB/includes/db/postgres.php index a31181b4d4..bf22cffafa 100644 --- a/phpBB/includes/db/postgres.php +++ b/phpBB/includes/db/postgres.php @@ -154,14 +154,6 @@ class dbal_postgres extends dbal return ($raw) ? $this->sql_server_version : 'PostgreSQL ' . $this->sql_server_version; } - /** - * {@inheritDoc} - */ - function sql_concatenate($expr1, $expr2) - { - return $expr1 . ' || ' . $expr2; - } - /** * SQL Transaction * @access private diff --git a/phpBB/includes/db/sqlite.php b/phpBB/includes/db/sqlite.php index 6eb77e5a70..86bfa75a13 100644 --- a/phpBB/includes/db/sqlite.php +++ b/phpBB/includes/db/sqlite.php @@ -72,14 +72,6 @@ class dbal_sqlite extends dbal return ($raw) ? $this->sql_server_version : 'SQLite ' . $this->sql_server_version; } - /** - * {@inheritDoc} - */ - function sql_concatenate($expr1, $expr2) - { - return $expr1 . ' || ' . $expr2; - } - /** * SQL Transaction * @access private -- cgit v1.2.1 From 03ddfbbaf1ba078df16638c642f8a3a9d8ca8c1c Mon Sep 17 00:00:00 2001 From: Fyorl Date: Fri, 15 Jun 2012 14:10:20 +0100 Subject: [ticket/10963] Modified filespec::is_image() to check actual mimetype Modified filespec::is_image() to check the Fileinfo mimetype rather than trusting the browser. PHPBB3-10963 --- phpBB/includes/functions_upload.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_upload.php b/phpBB/includes/functions_upload.php index f70e20e616..f3ae9d6cc4 100644 --- a/phpBB/includes/functions_upload.php +++ b/phpBB/includes/functions_upload.php @@ -151,7 +151,10 @@ class filespec */ function is_image() { - return (strpos($this->mimetype, 'image/') !== false) ? true : false; + $finfo = new finfo(FILEINFO_MIME_TYPE); + $mimetype = $finfo->file($this->filename); + + return (strpos($mimetype, 'image/') !== false) ? true : false; } /** @@ -342,6 +345,7 @@ class filespec // Remove temporary filename @unlink($this->filename); + $this->filename = $this->destination_file; if (sizeof($this->error)) { -- cgit v1.2.1 From f208b59c5984e686a3589eb83d5edb0b69bc020b Mon Sep 17 00:00:00 2001 From: Fyorl Date: Tue, 19 Jun 2012 13:27:27 +0100 Subject: [ticket/10963] Removed superfluous ternary statement and strpos now stricter PHPBB3-10963 --- phpBB/includes/functions_upload.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_upload.php b/phpBB/includes/functions_upload.php index f3ae9d6cc4..aedf361000 100644 --- a/phpBB/includes/functions_upload.php +++ b/phpBB/includes/functions_upload.php @@ -154,7 +154,7 @@ class filespec $finfo = new finfo(FILEINFO_MIME_TYPE); $mimetype = $finfo->file($this->filename); - return (strpos($mimetype, 'image/') !== false) ? true : false; + return (strpos($mimetype, 'image/') === 0); } /** -- cgit v1.2.1 From 81d5327e4411a7044f1c90e002505cad309372d6 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Wed, 20 Jun 2012 13:56:11 +0200 Subject: [ticket/10937] Comment removal functions: Restore backward compatibility PHPBB3-10937 --- phpBB/includes/functions_admin.php | 15 +++++++++++++ phpBB/includes/functions_install.php | 42 +++++++++++++++++++++++++++++++----- phpBB/install/install_install.php | 4 ++-- 3 files changed, 54 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_admin.php b/phpBB/includes/functions_admin.php index 204fa9a43d..7352b3d1f3 100644 --- a/phpBB/includes/functions_admin.php +++ b/phpBB/includes/functions_admin.php @@ -2293,6 +2293,21 @@ function auto_prune($forum_id, $prune_mode, $prune_flags, $prune_days, $prune_fr return; } +/** +* remove_comments will strip the sql comment lines out of an uploaded sql file +* specifically for mssql and postgres type files in the install.... +* +* @deprecated Use phpbb_remove_comments() instead. +*/ +function remove_comments(&$output) +{ + // Remove /* */ comments (http://ostermiller.org/findcomment.html) + $output = preg_replace('#/\*(.|[\r\n])*?\*/#', "\n", $output); + + // Return by reference and value. + return $output; +} + /** * Cache moderators, called whenever permissions are changed via admin_permissions. Changes of username * and group names must be carried through for the moderators table diff --git a/phpBB/includes/functions_install.php b/phpBB/includes/functions_install.php index 9e9c48ff58..f8437e0055 100644 --- a/phpBB/includes/functions_install.php +++ b/phpBB/includes/functions_install.php @@ -50,6 +50,7 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20 'SCHEMA' => 'firebird', 'MODULE' => 'interbase', 'DELIM' => ';;', + 'COMMENTS' => 'remove_remarks', 'DRIVER' => 'firebird', 'AVAILABLE' => true, '2.0.x' => false, @@ -59,6 +60,7 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20 'SCHEMA' => 'mysql_41', 'MODULE' => 'mysqli', 'DELIM' => ';', + 'COMMENTS' => 'remove_remarks', 'DRIVER' => 'mysqli', 'AVAILABLE' => true, '2.0.x' => true, @@ -68,6 +70,7 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20 'SCHEMA' => 'mysql', 'MODULE' => 'mysql', 'DELIM' => ';', + 'COMMENTS' => 'remove_remarks', 'DRIVER' => 'mysql', 'AVAILABLE' => true, '2.0.x' => true, @@ -77,6 +80,7 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20 'SCHEMA' => 'mssql', 'MODULE' => 'mssql', 'DELIM' => 'GO', + 'COMMENTS' => 'remove_comments', 'DRIVER' => 'mssql', 'AVAILABLE' => true, '2.0.x' => true, @@ -86,6 +90,7 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20 'SCHEMA' => 'mssql', 'MODULE' => 'odbc', 'DELIM' => 'GO', + 'COMMENTS' => 'remove_comments', 'DRIVER' => 'mssql_odbc', 'AVAILABLE' => true, '2.0.x' => true, @@ -95,6 +100,7 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20 'SCHEMA' => 'mssql', 'MODULE' => 'sqlsrv', 'DELIM' => 'GO', + 'COMMENTS' => 'remove_comments', 'DRIVER' => 'mssqlnative', 'AVAILABLE' => true, '2.0.x' => false, @@ -104,6 +110,7 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20 'SCHEMA' => 'oracle', 'MODULE' => 'oci8', 'DELIM' => '/', + 'COMMENTS' => 'remove_comments', 'DRIVER' => 'oracle', 'AVAILABLE' => true, '2.0.x' => false, @@ -113,6 +120,7 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20 'SCHEMA' => 'postgres', 'MODULE' => 'pgsql', 'DELIM' => ';', + 'COMMENTS' => 'remove_comments', 'DRIVER' => 'postgres', 'AVAILABLE' => true, '2.0.x' => true, @@ -122,6 +130,7 @@ function get_available_dbms($dbms = false, $return_unavailable = false, $only_20 'SCHEMA' => 'sqlite', 'MODULE' => 'sqlite', 'DELIM' => ';', + 'COMMENTS' => 'remove_remarks', 'DRIVER' => 'sqlite', 'AVAILABLE' => true, '2.0.x' => false, @@ -465,16 +474,39 @@ function connect_check_db($error_connect, &$error, $dbms_details, $table_prefix, /** * Removes comments from schema files +* +* @deprecated Use phpbb_remove_comments() instead. */ -function remove_comments($sql) +function remove_remarks(&$sql) { - // Remove /* */ comments (http://ostermiller.org/findcomment.html) - $sql = preg_replace('#/\*(.|[\r\n])*?\*/#', "\n", $sql); - // Remove # style comments $sql = preg_replace('/\n{2,}/', "\n", preg_replace('/^#.*$/m', "\n", $sql)); - return $sql; + // Return by reference +} + +/** +* Removes comments from $input. +* +* @param string $input Input string +* +* @return string Input string with comments removed +*/ +function phpbb_remove_comments($input) +{ + if (!function_exists('remove_comments')) + { + global $phpbb_root_path, $phpEx; + require($phpbb_root_path . 'includes/functions_admin.' . $phpEx); + } + + // Remove /* */ comments + remove_comments($input); + + // Remove # style comments + remove_remarks($input); + + return $input; } /** diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index 8e3fe0387c..f1003b07d7 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -1164,7 +1164,7 @@ class install_install extends module $sql_query = preg_replace('#phpbb_#i', $data['table_prefix'], $sql_query); - $sql_query = remove_comments($sql_query); + $sql_query = phpbb_remove_comments($sql_query); $sql_query = split_sql_file($sql_query, $delimiter); @@ -1202,7 +1202,7 @@ class install_install extends module // Change language strings... $sql_query = preg_replace_callback('#\{L_([A-Z0-9\-_]*)\}#s', 'adjust_language_keys_callback', $sql_query); - $sql_query = remove_comments($sql_query); + $sql_query = phpbb_remove_comments($sql_query); $sql_query = split_sql_file($sql_query, ';'); foreach ($sql_query as $sql) -- cgit v1.2.1 From 2c12f31cdf5f4c459d4f282acb92829e11accfd2 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 1 Jul 2012 00:48:40 +0200 Subject: [ticket/10937] Update documentation to say which comment styles are removed. PHPBB3-10937 --- phpBB/includes/functions_install.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_install.php b/phpBB/includes/functions_install.php index f8437e0055..89dfb7cd2f 100644 --- a/phpBB/includes/functions_install.php +++ b/phpBB/includes/functions_install.php @@ -486,7 +486,7 @@ function remove_remarks(&$sql) } /** -* Removes comments from $input. +* Removes "/* style" as well as "# style" comments from $input. * * @param string $input Input string * -- cgit v1.2.1 From 5d0aa8e516d15122fcdcee351aa44cacf02ca4ff Mon Sep 17 00:00:00 2001 From: Patrick Webster Date: Mon, 2 Jul 2012 21:38:27 -0500 Subject: [ticket/10441] Make CDB linking more consistent PHPBB3-10441 --- phpBB/docs/README.html | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/docs/README.html b/phpBB/docs/README.html index 6b6b21d8ae..86340ac882 100644 --- a/phpBB/docs/README.html +++ b/phpBB/docs/README.html @@ -134,7 +134,7 @@

          A number of language packs with included style localisations are available. You can find them listed in the Language Packs pages of our downloads section or from the Language Packs section of the Customisation Database.

          -

          http://www.phpbb.com/languages/

          +

          For more information about language packs, please see: http://www.phpbb.com/languages/

          This is the official location for all supported language sets. If you download a package from a 3rd party site you do so with the understanding that we cannot offer support. So please, do not ask for help in these cases!

          @@ -144,9 +144,9 @@

          2.ii. Styles

          -

          Although the phpBB Group is rather proud of the included styles, we realise that they may not be to everyone's taste. Therefore, phpBB3 allows styles to be switched with relative ease. First, you need to locate and download a style you like. We maintain such a section in the Customisation Database.

          +

          Although the phpBB Group is rather proud of the included styles, we realise that they may not be to everyone's taste. Therefore, phpBB3 allows styles to be switched with relative ease. First, you need to locate and download a style you like. You can find them listed in the Styles section of our Customisation Database.

          -

          http://www.phpbb.com/customise/db/styles-2/

          +

          For more information about styles, please see: http://www.phpbb.com/styles/

          Please note that 3rd party styles downloaded for versions of phpBB2 will not work in phpBB3. It is also important to ensure that the style is updated to match the current version of the phpBB software you are using.

          @@ -156,9 +156,9 @@

          2.iii. Modifications

          -

          Although not officially supported by the phpBB Group, phpBB has a thriving modification scene. These third party modifications to the standard phpBB software, known as MODs, extend its capabilities still further. Information on MODs can be found at:

          +

          Although not officially supported by the phpBB Group, phpBB has a thriving modification scene. These third party modifications to the standard phpBB software, known as MODs, extend its capabilities still further. You can browse through many of the MODs in the Modifications section of our Customisation Database.

          -

          http://www.phpbb.com/mods

          +

          For more information about MODs, please see: http://www.phpbb.com/mods/

          Please remember that any bugs or other issues that occur after you have added any modification should NOT be reported to the bug tracker (see below). First remove the MOD and see if the problem is resolved. Any support for a MOD should only be sought in the "Discussion/Support" forum for that MOD.

          -- cgit v1.2.1 From 5c8c7b1352454fc8d1bb6e689d52d31b346d5fdb Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 4 Jul 2012 13:10:15 +0200 Subject: [ticket/10950] Recreated the behaviour of phpbb_delete_user_pms() - Get delete_ids, pms of the user as receipt - Get undelivered_msg, pms of the user as sender - Delete undelivered_msg, if there are only NO_BOX, OUTBOX and SENTBOX links - Correct the _new and _unread user values for the receipts - Delete delete_ids, if there are no links to them anymore - Reset _new and _unread values for the user we delete PHPBB3-10950 --- phpBB/includes/functions_privmsgs.php | 132 +++++++++++++++++++--------------- 1 file changed, 74 insertions(+), 58 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php index afd254d6ea..88388841ed 100644 --- a/phpBB/includes/functions_privmsgs.php +++ b/phpBB/includes/functions_privmsgs.php @@ -1103,10 +1103,10 @@ function phpbb_delete_user_pms($user_id) // Get PM Information for later deleting // The two queries where split, so we can use our indexes - $undelivered_msg = $undelivered_user = $delete_ids = array(); + $undelivered_msg = $delete_ids = array(); // Part 1: get PMs the user received - $sql = 'SELECT msg_id, user_id, author_id, folder_id + $sql = 'SELECT msg_id FROM ' . PRIVMSGS_TO_TABLE . ' WHERE user_id = ' . $user_id; $result = $db->sql_query($sql); @@ -1115,26 +1115,13 @@ function phpbb_delete_user_pms($user_id) { $msg_id = (int) $row['msg_id']; $delete_ids[$msg_id] = $msg_id; - - if ($row['author_id'] == $user_id && $row['folder_id'] == PRIVMSGS_NO_BOX) - { - // Undelivered messages - $undelivered_msg[] = $msg_id; - - if (isset($undelivered_user[$row['user_id']])) - { - ++$undelivered_user[$row['user_id']]; - } - else - { - $undelivered_user[$row['user_id']] = 1; - } - } } $db->sql_freeresult($result); // Part 2: get PMs the user sent, but has yet to be received - $sql = 'SELECT msg_id, user_id + // We can not simply delete them. First we have to check, + // whether another user already received and read the message. + $sql = 'SELECT msg_id FROM ' . PRIVMSGS_TO_TABLE . ' WHERE author_id = ' . $user_id . ' AND folder_id = ' . PRIVMSGS_NO_BOX; @@ -1143,61 +1130,90 @@ function phpbb_delete_user_pms($user_id) while ($row = $db->sql_fetchrow($result)) { $msg_id = (int) $row['msg_id']; - $delete_ids[$msg_id] = $msg_id; - - // Undelivered messages - $undelivered_msg[] = $msg_id; - - if (isset($undelivered_user[$row['user_id']])) - { - ++$undelivered_user[$row['user_id']]; - } - else - { - $undelivered_user[$row['user_id']] = 1; - } + $undelivered_msg[$msg_id] = $msg_id; } $db->sql_freeresult($result); - if (empty($delete_ids)) + if (empty($delete_ids) && empty($undelivered_msg)) { return false; } $db->sql_transaction('begin'); - if (sizeof($undelivered_msg)) + if (!empty($undelivered_msg)) { - $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' - WHERE ' . $db->sql_in_set('msg_id', $undelivered_msg); - $db->sql_query($sql); - } + // A pm is not undelivered, if for any receipt the message was moved + // from their NO_BOX to another folder. + $sql = 'SELECT msg_id + FROM ' . PRIVMSGS_TO_TABLE . ' + WHERE author_id = ' . $user_id . ' + AND folder_id <> ' . PRIVMSGS_NO_BOX . ' + AND folder_id <> ' . PRIVMSGS_OUTBOX . ' + AND folder_id <> ' . PRIVMSGS_SENTBOX; + $result = $db->sql_query($sql); - // Reset the user's pm count to 0 - if (isset($undelivered_user[$user_id])) - { - $sql = 'UPDATE ' . USERS_TABLE . ' - SET user_new_privmsg = 0, - user_unread_privmsg = 0 - WHERE user_id = ' . $user_id; - $db->sql_query($sql); + while ($row = $db->sql_fetchrow($result)) + { + $msg_id = (int) $row['msg_id']; + unset($undelivered_msg[$msg_id]); + } + $db->sql_freeresult($result); - unset($undelivered_user[$user_id]); - } + if (!empty($undelivered_msg)) + { + $undelivered_user = array(); - foreach ($undelivered_user as $_user_id => $count) - { - $sql = 'UPDATE ' . USERS_TABLE . ' - SET user_new_privmsg = user_new_privmsg - ' . $count . ', - user_unread_privmsg = user_unread_privmsg - ' . $count . ' - WHERE user_id = ' . $_user_id; - $db->sql_query($sql); + // Count the messages we delete, so we can correct the user pm data + $sql = 'SELECT user_id + FROM ' . PRIVMSGS_TO_TABLE . ' + WHERE author_id = ' . $user_id . ' + AND folder_id = ' . PRIVMSGS_NO_BOX . ' + AND ' . $db->sql_in_set('msg_id', $undelivered_msg); + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) + { + if (isset($undelivered_user[$row['user_id']])) + { + ++$undelivered_user[$row['user_id']]; + } + else + { + $undelivered_user[$row['user_id']] = 1; + } + } + $db->sql_freeresult($result); + + foreach ($undelivered_user as $undelivered_user_id => $count) + { + $sql = 'UPDATE ' . USERS_TABLE . ' + SET user_new_privmsg = user_new_privmsg - ' . $count . ', + user_unread_privmsg = user_unread_privmsg - ' . $count . ' + WHERE user_id = ' . $undelivered_user_id; + $db->sql_query($sql); + } + + $sql = 'DELETE FROM ' . PRIVMSGS_TO_TABLE . ' + WHERE ' . $db->sql_in_set('msg_id', $undelivered_msg); + $db->sql_query($sql); + + $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' + WHERE ' . $db->sql_in_set('msg_id', $undelivered_msg); + $db->sql_query($sql); + } } - // Delete private message data - $sql = 'DELETE FROM ' . PRIVMSGS_TO_TABLE . " - WHERE user_id = $user_id - AND " . $db->sql_in_set('msg_id', $delete_ids); + // Reset the user's pm count to 0 + $sql = 'UPDATE ' . USERS_TABLE . ' + SET user_new_privmsg = 0, + user_unread_privmsg = 0 + WHERE user_id = ' . $user_id; + $db->sql_query($sql); + + // Delete private message data of the user + $sql = 'DELETE FROM ' . PRIVMSGS_TO_TABLE . ' + WHERE user_id = ' . (int) $user_id; $db->sql_query($sql); // Now we have to check which messages we can delete completely -- cgit v1.2.1 From 338d29072fd5581968f404576c6faa2dffc4f883 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 4 Jul 2012 13:14:19 +0200 Subject: [ticket/10950] Check $delete_ids to be not empty PHPBB3-10950 --- phpBB/includes/functions_privmsgs.php | 41 +++++++++++++++++++---------------- 1 file changed, 22 insertions(+), 19 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_privmsgs.php b/phpBB/includes/functions_privmsgs.php index 88388841ed..6c0adccbed 100644 --- a/phpBB/includes/functions_privmsgs.php +++ b/phpBB/includes/functions_privmsgs.php @@ -1216,31 +1216,34 @@ function phpbb_delete_user_pms($user_id) WHERE user_id = ' . (int) $user_id; $db->sql_query($sql); - // Now we have to check which messages we can delete completely - $sql = 'SELECT msg_id - FROM ' . PRIVMSGS_TO_TABLE . ' - WHERE ' . $db->sql_in_set('msg_id', $delete_ids); - $result = $db->sql_query($sql); - - while ($row = $db->sql_fetchrow($result)) - { - unset($delete_ids[$row['msg_id']]); - } - $db->sql_freeresult($result); - if (!empty($delete_ids)) { - // Check if there are any attachments we need to remove - if (!function_exists('delete_attachments')) + // Now we have to check which messages we can delete completely + $sql = 'SELECT msg_id + FROM ' . PRIVMSGS_TO_TABLE . ' + WHERE ' . $db->sql_in_set('msg_id', $delete_ids); + $result = $db->sql_query($sql); + + while ($row = $db->sql_fetchrow($result)) { - include($phpbb_root_path . 'includes/functions_admin.' . $phpEx); + unset($delete_ids[$row['msg_id']]); } + $db->sql_freeresult($result); - delete_attachments('message', $delete_ids, false); + if (!empty($delete_ids)) + { + // Check if there are any attachments we need to remove + if (!function_exists('delete_attachments')) + { + include($phpbb_root_path . 'includes/functions_admin.' . $phpEx); + } - $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' - WHERE ' . $db->sql_in_set('msg_id', $delete_ids); - $db->sql_query($sql); + delete_attachments('message', $delete_ids, false); + + $sql = 'DELETE FROM ' . PRIVMSGS_TABLE . ' + WHERE ' . $db->sql_in_set('msg_id', $delete_ids); + $db->sql_query($sql); + } } // Set the remaining author id to anonymous -- cgit v1.2.1 From 6776feb0de667340d640744462d00436f893c45f Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 4 Jul 2012 14:05:03 +0200 Subject: [ticket/10942] Add access modifiers PHPBB3-10942 --- phpBB/includes/db/dbal.php | 4 ++-- phpBB/includes/db/mssql.php | 2 +- phpBB/includes/db/mssql_odbc.php | 2 +- phpBB/includes/db/mssqlnative.php | 2 +- phpBB/includes/db/mysql.php | 2 +- phpBB/includes/db/mysqli.php | 2 +- 6 files changed, 7 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/db/dbal.php b/phpBB/includes/db/dbal.php index fded27a001..159703d3be 100644 --- a/phpBB/includes/db/dbal.php +++ b/phpBB/includes/db/dbal.php @@ -293,7 +293,7 @@ class dbal * @param string $action_else SQL expression that is used, if the condition is false, optional * @return string CASE expression including the condition and statements */ - function sql_case($condition, $action_true, $action_false = false) + public function sql_case($condition, $action_true, $action_false = false) { $sql_case = 'CASE WHEN ' . $condition; $sql_case .= ' THEN ' . $action_true; @@ -309,7 +309,7 @@ class dbal * @param string $expr2 SQL expression that is appended to the first expression * @return string Concatenated string */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return $expr1 . ' || ' . $expr2; } diff --git a/phpBB/includes/db/mssql.php b/phpBB/includes/db/mssql.php index d24cbf329f..fb044b492f 100644 --- a/phpBB/includes/db/mssql.php +++ b/phpBB/includes/db/mssql.php @@ -94,7 +94,7 @@ class dbal_mssql extends dbal /** * {@inheritDoc} */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return $expr1 . ' + ' . $expr2; } diff --git a/phpBB/includes/db/mssql_odbc.php b/phpBB/includes/db/mssql_odbc.php index d64264470e..64fa9634d1 100644 --- a/phpBB/includes/db/mssql_odbc.php +++ b/phpBB/includes/db/mssql_odbc.php @@ -112,7 +112,7 @@ class dbal_mssql_odbc extends dbal /** * {@inheritDoc} */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return $expr1 . ' + ' . $expr2; } diff --git a/phpBB/includes/db/mssqlnative.php b/phpBB/includes/db/mssqlnative.php index 31c3a3721a..7878615acc 100644 --- a/phpBB/includes/db/mssqlnative.php +++ b/phpBB/includes/db/mssqlnative.php @@ -260,7 +260,7 @@ class dbal_mssqlnative extends dbal /** * {@inheritDoc} */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return $expr1 . ' + ' . $expr2; } diff --git a/phpBB/includes/db/mysql.php b/phpBB/includes/db/mysql.php index 3cda5cc1e0..8d1f805870 100644 --- a/phpBB/includes/db/mysql.php +++ b/phpBB/includes/db/mysql.php @@ -122,7 +122,7 @@ class dbal_mysql extends dbal /** * {@inheritDoc} */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; } diff --git a/phpBB/includes/db/mysqli.php b/phpBB/includes/db/mysqli.php index e3828d9599..e07cd35e24 100644 --- a/phpBB/includes/db/mysqli.php +++ b/phpBB/includes/db/mysqli.php @@ -125,7 +125,7 @@ class dbal_mysqli extends dbal /** * {@inheritDoc} */ - function sql_concatenate($expr1, $expr2) + public function sql_concatenate($expr1, $expr2) { return 'CONCAT(' . $expr1 . ', ' . $expr2 . ')'; } -- cgit v1.2.1 From 4fbcf4eaadea0425c7f8bf0ff02a60bd2165136b Mon Sep 17 00:00:00 2001 From: Fyorl Date: Wed, 4 Jul 2012 13:27:55 +0100 Subject: [ticket/10963] filespec::get_mimetype now used filespec::get_mimetype now uses the finfo class in order to detect the mimetype of a given filename. filespec::is_image() now uses this method. PHPBB3-10963 --- phpBB/includes/functions_upload.php | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_upload.php b/phpBB/includes/functions_upload.php index aedf361000..33cb585b19 100644 --- a/phpBB/includes/functions_upload.php +++ b/phpBB/includes/functions_upload.php @@ -151,9 +151,7 @@ class filespec */ function is_image() { - $finfo = new finfo(FILEINFO_MIME_TYPE); - $mimetype = $finfo->file($this->filename); - + $mimetype = $this->get_mimetype($this->filename); return (strpos($mimetype, 'image/') === 0); } @@ -203,17 +201,12 @@ class filespec } /** - * Get mimetype. Utilize mime_content_type if the function exist. - * Not used at the moment... + * Get mimetype. Utilises the finfo class. */ function get_mimetype($filename) { - $mimetype = ''; - - if (function_exists('mime_content_type')) - { - $mimetype = mime_content_type($filename); - } + $finfo = new finfo(FILEINFO_MIME_TYPE); + $mimetype = $finfo->file($filename); // Some browsers choke on a mimetype of application/octet-stream if (!$mimetype || $mimetype == 'application/octet-stream') -- cgit v1.2.1 From f1056a9b2fd6e4ff7bc107372e9210bae9e077f0 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Thu, 5 Jul 2012 00:30:02 +0200 Subject: [ticket/10811] Make toogle_subscribe more generic so it can toogle all links PHPBB3-10811 --- phpBB/assets/javascript/core.js | 39 +++++++++++++--------- phpBB/includes/functions_display.php | 3 +- .../styles/prosilver/template/overall_footer.html | 4 +-- .../styles/subsilver2/template/viewforum_body.html | 2 +- phpBB/viewforum.php | 8 +++-- phpBB/viewtopic.php | 6 ++-- 6 files changed, 37 insertions(+), 25 deletions(-) (limited to 'phpBB') diff --git a/phpBB/assets/javascript/core.js b/phpBB/assets/javascript/core.js index 3c1e39fca6..76615eb051 100644 --- a/phpBB/assets/javascript/core.js +++ b/phpBB/assets/javascript/core.js @@ -452,24 +452,31 @@ phpbb.add_ajax_callback('alt_text', function() { * It replaces the current text with the text in the alt-text data attribute, * and replaces the text in the attribute with the current text so that the * process can be repeated. - * Additionally it replaces the icon of the link and changes the link itself. + * Additionally it replaces the class of the link's parent + * and changes the link itself. */ -phpbb.add_ajax_callback('toggle_subscribe', function() { +phpbb.add_ajax_callback('toggle_link', function() { var el = $(this), - alt_text; - - phpbb.ajax_callbacks['alt_text'].call(this); - - if (el.attr('href').indexOf('unwatch') !== -1) - { - el.attr('href', el.attr('href').replace('unwatch', 'watch')); - el.parent().attr('class', 'icon-subscribe'); - } - else - { - el.attr('href', el.attr('href').replace('watch', 'unwatch')); - el.parent().attr('class', 'icon-unsubscribe'); - } + toggle_text, + toggle_url, + toggle_class; + + // Toggle link text + + toggle_text = el.attr('data-toggle-text'); + el.attr('data-toggle-text', el.text()); + el.attr('title', toggle_text); + el.text(toggle_text); + + // Toggle link url + toggle_url = el.attr('data-toggle-url'); + el.attr('data-toggle-url', el.attr('href')); + el.attr('href', toggle_url); + + // Toggle class of link parent + toggle_class = el.attr('data-toggle-class'); + el.attr('data-toggle-class', el.parent().attr('class')); + el.parent().attr('class', toggle_class); }); })(jQuery); // Avoid conflicts with other libraries diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 7c1d007d55..bbfd6fd6b6 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -1218,8 +1218,9 @@ function watch_topic_forum($mode, &$s_watching, $user_id, $forum_id, $topic_id, if ($can_watch) { $s_watching['link'] = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&" . (($is_watching) ? 'unwatch' : 'watch') . "=$mode&start=$start&hash=" . generate_link_hash("{$mode}_$match_id")); + $s_watching['link_toggle'] = append_sid("{$phpbb_root_path}view$mode.$phpEx", "$u_url=$match_id&" . ((!$is_watching) ? 'unwatch' : 'watch') . "=$mode&start=$start&hash=" . generate_link_hash("{$mode}_$match_id")); $s_watching['title'] = $user->lang[(($is_watching) ? 'STOP' : 'START') . '_WATCHING_' . strtoupper($mode)]; - $s_watching['toggle'] = $user->lang[((!$is_watching) ? 'STOP' : 'START') . '_WATCHING_' . strtoupper($mode)]; + $s_watching['title_toggle'] = $user->lang[((!$is_watching) ? 'STOP' : 'START') . '_WATCHING_' . strtoupper($mode)]; $s_watching['is_watching'] = $is_watching; } diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index 1aab6528cd..b473e7022c 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -8,8 +8,8 @@
    diff --git a/phpBB/adm/style/acp_groups.html b/phpBB/adm/style/acp_groups.html index ed94fa985e..ca68bc7528 100644 --- a/phpBB/adm/style/acp_groups.html +++ b/phpBB/adm/style/acp_groups.html @@ -239,11 +239,21 @@
    - + + {S_ON_PAGE} • + +
    diff --git a/phpBB/adm/style/acp_icons.html b/phpBB/adm/style/acp_icons.html index a8864d42f7..6f42165414 100644 --- a/phpBB/adm/style/acp_icons.html +++ b/phpBB/adm/style/acp_icons.html @@ -255,7 +255,20 @@ -
    {PAGINATION}
    +

       

    diff --git a/phpBB/adm/style/acp_inactive.html b/phpBB/adm/style/acp_inactive.html index 0889eaf400..12cc11d742 100644 --- a/phpBB/adm/style/acp_inactive.html +++ b/phpBB/adm/style/acp_inactive.html @@ -10,11 +10,21 @@
    - + + {S_ON_PAGE} • + +
    diff --git a/phpBB/adm/style/acp_logs.html b/phpBB/adm/style/acp_logs.html index f1c770d33b..3b2d448a44 100644 --- a/phpBB/adm/style/acp_logs.html +++ b/phpBB/adm/style/acp_logs.html @@ -12,11 +12,21 @@ {L_SEARCH_KEYWORDS}:   - + + {S_ON_PAGE} • + +
     

    diff --git a/phpBB/adm/style/acp_users.html b/phpBB/adm/style/acp_users.html index a8794176a9..02cdab55b2 100644 --- a/phpBB/adm/style/acp_users.html +++ b/phpBB/adm/style/acp_users.html @@ -157,11 +157,21 @@ - + + {S_ON_PAGE} • + +
    @@ -196,11 +206,21 @@
    - + + {S_ON_PAGE} • + +
    diff --git a/phpBB/adm/style/acp_users_feedback.html b/phpBB/adm/style/acp_users_feedback.html index aa92353807..6b7761ed46 100644 --- a/phpBB/adm/style/acp_users_feedback.html +++ b/phpBB/adm/style/acp_users_feedback.html @@ -1,10 +1,20 @@ - + + {S_ON_PAGE} • + +
    @@ -44,11 +54,21 @@
    - + + {S_ON_PAGE} • + +
    diff --git a/phpBB/includes/acp/acp_attachments.php b/phpBB/includes/acp/acp_attachments.php index abe304c282..4b621cb18d 100644 --- a/phpBB/includes/acp/acp_attachments.php +++ b/phpBB/includes/acp/acp_attachments.php @@ -1222,10 +1222,11 @@ class acp_attachments } $db->sql_freeresult($result); + generate_pagination($this->u_action . "&$u_sort_param", $num_files, $attachments_per_page, $start); + $template->assign_vars(array( 'TOTAL_FILES' => $num_files, 'TOTAL_SIZE' => get_formatted_filesize($total_size), - 'PAGINATION' => generate_pagination($this->u_action . "&$u_sort_param", $num_files, $attachments_per_page, $start, true), 'S_ON_PAGE' => on_page($num_files, $attachments_per_page, $start), 'S_LIMIT_DAYS' => $s_limit_days, diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php index 607254adb5..ded28252dc 100644 --- a/phpBB/includes/acp/acp_groups.php +++ b/phpBB/includes/acp/acp_groups.php @@ -682,13 +682,14 @@ class acp_groups $s_action_options .= ''; } + generate_pagination($this->u_action . "&action=$action&g=$group_id", $total_members, $config['topics_per_page'], $start); + $template->assign_vars(array( 'S_LIST' => true, 'S_GROUP_SPECIAL' => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false, 'S_ACTION_OPTIONS' => $s_action_options, 'S_ON_PAGE' => on_page($total_members, $config['topics_per_page'], $start), - 'PAGINATION' => generate_pagination($this->u_action . "&action=$action&g=$group_id", $total_members, $config['topics_per_page'], $start, true), 'GROUP_NAME' => ($group_row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $group_row['group_name']] : $group_row['group_name'], 'U_ACTION' => $this->u_action . "&g=$group_id", diff --git a/phpBB/includes/acp/acp_icons.php b/phpBB/includes/acp/acp_icons.php index bfe17c5007..fdf0fbde2f 100644 --- a/phpBB/includes/acp/acp_icons.php +++ b/phpBB/includes/acp/acp_icons.php @@ -927,10 +927,8 @@ class acp_icons } } $db->sql_freeresult($result); - - $template->assign_var('PAGINATION', - generate_pagination($this->u_action, $item_count, $config['smilies_per_page'], $pagination_start, true) - ); + + generate_pagination($this->u_action, $item_count, $config['smilies_per_page'], $pagination_start); } /** diff --git a/phpBB/includes/acp/acp_inactive.php b/phpBB/includes/acp/acp_inactive.php index f098b772ee..c7f9e5398e 100644 --- a/phpBB/includes/acp/acp_inactive.php +++ b/phpBB/includes/acp/acp_inactive.php @@ -288,6 +288,8 @@ class acp_inactive $option_ary += array('remind' => 'REMIND'); } + generate_pagination($this->u_action . "&$u_sort_param&users_per_page=$per_page", $inactive_count, $per_page, $start); + $template->assign_vars(array( 'S_INACTIVE_USERS' => true, 'S_INACTIVE_OPTIONS' => build_select($option_ary), @@ -296,7 +298,7 @@ class acp_inactive 'S_SORT_KEY' => $s_sort_key, 'S_SORT_DIR' => $s_sort_dir, 'S_ON_PAGE' => on_page($inactive_count, $per_page, $start), - 'PAGINATION' => generate_pagination($this->u_action . "&$u_sort_param&users_per_page=$per_page", $inactive_count, $per_page, $start, true), + 'USERS_PER_PAGE' => $per_page, 'U_ACTION' => $this->u_action . "&$u_sort_param&users_per_page=$per_page&start=$start", diff --git a/phpBB/includes/acp/acp_logs.php b/phpBB/includes/acp/acp_logs.php index 6b67175220..43cf15cb4d 100644 --- a/phpBB/includes/acp/acp_logs.php +++ b/phpBB/includes/acp/acp_logs.php @@ -129,13 +129,14 @@ class acp_logs $log_count = 0; $start = view_log($mode, $log_data, $log_count, $config['topics_per_page'], $start, $forum_id, 0, 0, $sql_where, $sql_sort, $keywords); + generate_pagination($this->u_action . "&$u_sort_param$keywords_param", $log_count, $config['topics_per_page'], $start); + $template->assign_vars(array( 'L_TITLE' => $l_title, 'L_EXPLAIN' => $l_title_explain, 'U_ACTION' => $this->u_action . "&$u_sort_param$keywords_param&start=$start", 'S_ON_PAGE' => on_page($log_count, $config['topics_per_page'], $start), - 'PAGINATION' => generate_pagination($this->u_action . "&$u_sort_param$keywords_param", $log_count, $config['topics_per_page'], $start, true), 'S_LIMIT_DAYS' => $s_limit_days, 'S_SORT_KEY' => $s_sort_key, diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 17687b05c7..e98c015f8b 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1120,10 +1120,11 @@ class acp_users $log_count = 0; $start = view_log('user', $log_data, $log_count, $config['topics_per_page'], $start, 0, 0, $user_id, $sql_where, $sql_sort); + generate_pagination($this->u_action . "&u=$user_id&$u_sort_param", $log_count, $config['topics_per_page'], $start); + $template->assign_vars(array( 'S_FEEDBACK' => true, 'S_ON_PAGE' => on_page($log_count, $config['topics_per_page'], $start), - 'PAGINATION' => generate_pagination($this->u_action . "&u=$user_id&$u_sort_param", $log_count, $config['topics_per_page'], $start, true), 'S_LIMIT_DAYS' => $s_limit_days, 'S_SORT_KEY' => $s_sort_key, @@ -2035,14 +2036,14 @@ class acp_users } $db->sql_freeresult($result); + generate_pagination($this->u_action . "&u=$user_id&sk=$sort_key&sd=$sort_dir", $num_attachments, $config['topics_per_page'], $start); + $template->assign_vars(array( 'S_ATTACHMENTS' => true, 'S_ON_PAGE' => on_page($num_attachments, $config['topics_per_page'], $start), 'S_SORT_KEY' => $s_sort_key, 'S_SORT_DIR' => $s_sort_dir, - - 'PAGINATION' => generate_pagination($this->u_action . "&u=$user_id&sk=$sort_key&sd=$sort_dir", $num_attachments, $config['topics_per_page'], $start, true)) - ); + )); break; diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index e40df93194..b7b8ccda0f 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1884,85 +1884,99 @@ function tracking_unserialize($string, $max_depth = 3) * Pagination routine, generates page number sequence * tpl_prefix is for using different pagination blocks at one page */ -function generate_pagination($base_url, $num_items, $per_page, $start_item, $add_prevnext_text = false, $tpl_prefix = '') +function generate_pagination($base_url, $num_items, $per_page, $start_item = 1, $tpl_prefix = '', $reverse_count = false, $ignore_on_page = false, $block_var_name = '') { global $template, $user; // Make sure $per_page is a valid value $per_page = ($per_page <= 0) ? 1 : $per_page; - $separator = '' . $user->lang['COMMA_SEPARATOR'] . ''; $total_pages = ceil($num_items / $per_page); if ($total_pages == 1 || !$num_items) { - return false; + return; } $on_page = floor($start_item / $per_page) + 1; $url_delim = (strpos($base_url, '?') === false) ? '?' : ((strpos($base_url, '?') === strlen($base_url) - 1) ? '' : '&'); - - $page_string = ($on_page == 1) ? '1' : '1'; - - if ($total_pages > 5) + $block_var_name = ($block_var_name) ? $block_var_name . '.pagination' : 'pagination'; + + if ($reverse_count) { - $start_cnt = min(max(1, $on_page - 4), $total_pages - 5); - $end_cnt = max(min($total_pages, $on_page + 4), 6); - - $page_string .= ($start_cnt > 1) ? ' ... ' : $separator; - - for ($i = $start_cnt + 1; $i < $end_cnt; $i++) - { - $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; - if ($i < $end_cnt - 1) - { - $page_string .= $separator; - } - } - - $page_string .= ($end_cnt < $total_pages) ? ' ... ' : $separator; + $start_cnt = ($total_pages > 5) ? $total_pages - 3 : 1; + $end_cnt = $total_pages; } else { - $page_string .= $separator; - - for ($i = 2; $i < $total_pages; $i++) - { - $page_string .= ($i == $on_page) ? '' . $i . '' : '' . $i . ''; - if ($i < $total_pages) - { - $page_string .= $separator; - } - } + $start_cnt = ($total_pages > 5) ? min(max(1, $on_page - 4), $total_pages - 5) : 1; + $end_cnt = ($total_pages > 5) ? max(min($total_pages, $on_page + 4), 6) : $total_pages; } - $page_string .= ($on_page == $total_pages) ? '' . $total_pages . '' : '' . $total_pages . ''; - - if ($add_prevnext_text) + if ($on_page != $total_pages) + { + $template->assign_block_vars($block_var_name, array( + 'PAGE_NUMBER' => '', + 'PAGE_URL' => $base_url . "{$url_delim}start=" . ($on_page * $per_page), + 'S_IS_CURRENT' => false, + 'S_IS_PREV' => false, + 'S_IS_NEXT' => true, + 'S_IS_ELLIPSIS' => false, + )); + } + + $i = 1; + do { - if ($on_page != 1) + $page_url = $base_url . (($i == 1) ? '' : $url_delim . 'start=' . (($i - 1) * $per_page)); + + $template->assign_block_vars($block_var_name, array( + 'PAGE_NUMBER' => $i, + 'PAGE_URL' => $page_url, + 'S_IS_CURRENT' => (!$ignore_on_page && $i == $on_page) ? true : false, + 'S_IS_NEXT' => false, + 'S_IS_PREV' => false, + 'S_IS_ELLIPSIS' => ($i == 2 && $start_cnt > 1) || ($i == $total_pages - 1 && $end_cnt < $total_pages) ? true : false, + )); + + if ($i > 1 && $i < $start_cnt - 1) { - $page_string = '' . $user->lang['PREVIOUS'] . '  ' . $page_string; + $i = $start_cnt; } - - if ($on_page != $total_pages) + elseif ($i == $end_cnt && $end_cnt < $total_pages - 1) + { + $i = $total_pages - 1; + } + else { - $page_string .= '  ' . $user->lang['NEXT'] . ''; + $i++; } } + while ($i <= $total_pages); + if ($on_page != 1) + { + $template->assign_block_vars($block_var_name, array( + 'PAGE_NUMBER' => '', + 'PAGE_URL' => $base_url . "{$url_delim}start=" . (($on_page - 2) * $per_page), + 'S_IS_CURRENT' => false, + 'S_IS_PREV' => true, + 'S_IS_NEXT' => false, + 'S_IS_ELLIPSIS' => false, + )); + } + $template->assign_vars(array( $tpl_prefix . 'BASE_URL' => $base_url, 'A_' . $tpl_prefix . 'BASE_URL' => addslashes($base_url), $tpl_prefix . 'PER_PAGE' => $per_page, - $tpl_prefix . 'PREVIOUS_PAGE' => ($on_page == 1) ? '' : $base_url . "{$url_delim}start=" . (($on_page - 2) * $per_page), $tpl_prefix . 'NEXT_PAGE' => ($on_page == $total_pages) ? '' : $base_url . "{$url_delim}start=" . ($on_page * $per_page), $tpl_prefix . 'TOTAL_PAGES' => $total_pages, $tpl_prefix . 'CURRENT_PAGE' => $on_page, )); - return $page_string; + return; } /** diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 545f75ad67..00efd281c0 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -639,48 +639,6 @@ function get_forum_parents(&$forum_data) return $forum_parents; } -/** -* Generate topic pagination -*/ -function topic_generate_pagination($replies, $url) -{ - global $config, $user; - - // Make sure $per_page is a valid value - $per_page = ($config['posts_per_page'] <= 0) ? 1 : $config['posts_per_page']; - - if (($replies + 1) > $per_page) - { - $total_pages = ceil(($replies + 1) / $per_page); - $pagination = ''; - - $times = 1; - for ($j = 0; $j < $replies + 1; $j += $per_page) - { - $pagination .= '' . $times . ''; - if ($times == 1 && $total_pages > 5) - { - $pagination .= ' ... '; - - // Display the last three pages - $times = $total_pages - 3; - $j += ($total_pages - 4) * $per_page; - } - else if ($times < $total_pages) - { - $pagination .= '' . $user->lang['COMMA_SEPARATOR'] . ''; - } - $times++; - } - } - else - { - $pagination = ''; - } - - return $pagination; -} - /** * Obtain list of moderators of each forum */ diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index c549f99091..6c21b0f412 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -61,10 +61,7 @@ function generate_smilies($mode, $forum_id) 'body' => 'posting_smilies.html') ); - $template->assign_var('PAGINATION', - generate_pagination(append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=smilies&f=' . $forum_id), - $smiley_count, $config['smilies_per_page'], $start, true) - ); + generate_pagination(append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=smilies&f=' . $forum_id), $smiley_count, $config['smilies_per_page'], $start); } $display_link = false; diff --git a/phpBB/includes/mcp/mcp_forum.php b/phpBB/includes/mcp/mcp_forum.php index fec1edc872..936f85ccc2 100644 --- a/phpBB/includes/mcp/mcp_forum.php +++ b/phpBB/includes/mcp/mcp_forum.php @@ -101,6 +101,8 @@ function mcp_forum_view($id, $mode, $action, $forum_info) $forum_topics = ($total == -1) ? $forum_info['forum_topics'] : $total; $limit_time_sql = ($sort_days) ? 'AND t.topic_last_post_time >= ' . (time() - ($sort_days * 86400)) : ''; + generate_pagination($url . "&i=$id&action=$action&mode=$mode&sd=$sort_dir&sk=$sort_key&st=$sort_days" . (($merge_select) ? $selected_ids : ''), $forum_topics, $topics_per_page, $start); + $template->assign_vars(array( 'ACTION' => $action, 'FORUM_NAME' => $forum_info['forum_name'], @@ -129,7 +131,6 @@ function mcp_forum_view($id, $mode, $action, $forum_info) 'S_MCP_ACTION' => $url . "&i=$id&forum_action=$action&mode=$mode&start=$start" . (($merge_select) ? $selected_ids : ''), - 'PAGINATION' => generate_pagination($url . "&i=$id&action=$action&mode=$mode&sd=$sort_dir&sk=$sort_key&st=$sort_days" . (($merge_select) ? $selected_ids : ''), $forum_topics, $topics_per_page, $start), 'PAGE_NUMBER' => on_page($forum_topics, $topics_per_page, $start), 'TOTAL_TOPICS' => $user->lang('VIEW_FORUM_TOPICS', (int) $forum_topics), )); diff --git a/phpBB/includes/mcp/mcp_logs.php b/phpBB/includes/mcp/mcp_logs.php index 848bad40a3..2b5e847e26 100644 --- a/phpBB/includes/mcp/mcp_logs.php +++ b/phpBB/includes/mcp/mcp_logs.php @@ -171,10 +171,11 @@ class mcp_logs $log_count = 0; $start = view_log('mod', $log_data, $log_count, $config['topics_per_page'], $start, $forum_list, $topic_id, 0, $sql_where, $sql_sort, $keywords); + generate_pagination($this->u_action . "&$u_sort_param$keywords_param", $log_count, $config['topics_per_page'], $start); + $template->assign_vars(array( 'PAGE_NUMBER' => on_page($log_count, $config['topics_per_page'], $start), 'TOTAL' => $user->lang('TOTAL_LOGS', (int) $log_count), - 'PAGINATION' => generate_pagination($this->u_action . "&$u_sort_param$keywords_param", $log_count, $config['topics_per_page'], $start), 'L_TITLE' => $user->lang['MCP_LOGS'], diff --git a/phpBB/includes/mcp/mcp_notes.php b/phpBB/includes/mcp/mcp_notes.php index 99dbb8d86d..7e0dd69a2f 100644 --- a/phpBB/includes/mcp/mcp_notes.php +++ b/phpBB/includes/mcp/mcp_notes.php @@ -215,6 +215,8 @@ class mcp_notes } } + generate_pagination($this->u_action . "&$u_sort_param$keywords_param", $log_count, $config['topics_per_page'], $start); + $template->assign_vars(array( 'U_POST_ACTION' => $this->u_action, 'S_CLEAR_ALLOWED' => ($auth->acl_get('a_clearlogs')) ? true : false, @@ -226,7 +228,6 @@ class mcp_notes 'L_TITLE' => $user->lang['MCP_NOTES_USER'], 'PAGE_NUMBER' => on_page($log_count, $config['topics_per_page'], $start), - 'PAGINATION' => generate_pagination($this->u_action . "&$u_sort_param$keywords_param", $log_count, $config['topics_per_page'], $start), 'TOTAL_REPORTS' => $user->lang('LIST_REPORTS', (int) $log_count), 'RANK_TITLE' => $rank_title, diff --git a/phpBB/includes/mcp/mcp_pm_reports.php b/phpBB/includes/mcp/mcp_pm_reports.php index d242929a80..3e2ce4bfd3 100644 --- a/phpBB/includes/mcp/mcp_pm_reports.php +++ b/phpBB/includes/mcp/mcp_pm_reports.php @@ -298,6 +298,8 @@ class mcp_pm_reports } } + generate_pagination($this->u_action . "&st=$sort_days&sk=$sort_key&sd=$sort_dir", $total, $config['topics_per_page'], $start); + // Now display the page $template->assign_vars(array( 'L_EXPLAIN' => ($mode == 'pm_reports') ? $user->lang['MCP_PM_REPORTS_OPEN_EXPLAIN'] : $user->lang['MCP_PM_REPORTS_CLOSED_EXPLAIN'], @@ -307,7 +309,6 @@ class mcp_pm_reports 'S_MCP_ACTION' => $this->u_action, 'S_CLOSED' => ($mode == 'pm_reports_closed') ? true : false, - 'PAGINATION' => generate_pagination($this->u_action . "&st=$sort_days&sk=$sort_key&sd=$sort_dir", $total, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($total, $config['topics_per_page'], $start), 'TOTAL' => $total, 'TOTAL_REPORTS' => $user->lang('LIST_REPORTS', (int) $total), diff --git a/phpBB/includes/mcp/mcp_queue.php b/phpBB/includes/mcp/mcp_queue.php index 4d720a435c..86fffbcf93 100644 --- a/phpBB/includes/mcp/mcp_queue.php +++ b/phpBB/includes/mcp/mcp_queue.php @@ -419,6 +419,8 @@ class mcp_queue } unset($rowset, $forum_names); + generate_pagination($this->u_action . "&f=$forum_id&st=$sort_days&sk=$sort_key&sd=$sort_dir", $total, $config['topics_per_page'], $start); + // Now display the page $template->assign_vars(array( 'L_DISPLAY_ITEMS' => ($mode == 'unapproved_posts') ? $user->lang['DISPLAY_POSTS'] : $user->lang['DISPLAY_TOPICS'], @@ -430,7 +432,6 @@ class mcp_queue 'S_MCP_ACTION' => build_url(array('t', 'f', 'sd', 'st', 'sk')), 'S_TOPICS' => ($mode == 'unapproved_posts') ? false : true, - 'PAGINATION' => generate_pagination($this->u_action . "&f=$forum_id&st=$sort_days&sk=$sort_key&sd=$sort_dir", $total, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($total, $config['topics_per_page'], $start), 'TOPIC_ID' => $topic_id, 'TOTAL' => $user->lang((($mode == 'unapproved_posts') ? 'VIEW_TOPIC_POSTS' : 'VIEW_FORUM_TOPICS'), (int) $total), diff --git a/phpBB/includes/mcp/mcp_reports.php b/phpBB/includes/mcp/mcp_reports.php index 69c6a4cfff..3c5f51ee05 100644 --- a/phpBB/includes/mcp/mcp_reports.php +++ b/phpBB/includes/mcp/mcp_reports.php @@ -411,6 +411,8 @@ class mcp_reports unset($report_ids, $row); } + generate_pagination($this->u_action . "&f=$forum_id&t=$topic_id&st=$sort_days&sk=$sort_key&sd=$sort_dir", $total, $config['topics_per_page'], $start); + // Now display the page $template->assign_vars(array( 'L_EXPLAIN' => ($mode == 'reports') ? $user->lang['MCP_REPORTS_OPEN_EXPLAIN'] : $user->lang['MCP_REPORTS_CLOSED_EXPLAIN'], @@ -421,7 +423,6 @@ class mcp_reports 'S_FORUM_OPTIONS' => $forum_options, 'S_CLOSED' => ($mode == 'reports_closed') ? true : false, - 'PAGINATION' => generate_pagination($this->u_action . "&f=$forum_id&t=$topic_id&st=$sort_days&sk=$sort_key&sd=$sort_dir", $total, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($total, $config['topics_per_page'], $start), 'TOPIC_ID' => $topic_id, 'TOTAL' => $total, diff --git a/phpBB/includes/mcp/mcp_topic.php b/phpBB/includes/mcp/mcp_topic.php index d4ba89b04c..c2f44bd360 100644 --- a/phpBB/includes/mcp/mcp_topic.php +++ b/phpBB/includes/mcp/mcp_topic.php @@ -306,6 +306,11 @@ function mcp_topic_view($id, $mode, $action) 'post_ids' => $post_id_list, )); + if ($posts_per_page) + { + generate_pagination(append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&t={$topic_info['topic_id']}&mode=$mode&action=$action&to_topic_id=$to_topic_id&posts_per_page=$posts_per_page&st=$sort_days&sk=$sort_key&sd=$sort_dir"), $total, $posts_per_page, $start); + } + $template->assign_vars(array( 'TOPIC_TITLE' => $topic_info['topic_title'], 'U_VIEW_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $topic_info['forum_id'] . '&t=' . $topic_info['topic_id']), @@ -345,7 +350,6 @@ function mcp_topic_view($id, $mode, $action) 'RETURN_FORUM' => sprintf($user->lang['RETURN_FORUM'], '', ''), 'PAGE_NUMBER' => on_page($total, $posts_per_page, $start), - 'PAGINATION' => (!$posts_per_page) ? '' : generate_pagination(append_sid("{$phpbb_root_path}mcp.$phpEx", "i=$id&t={$topic_info['topic_id']}&mode=$mode&action=$action&to_topic_id=$to_topic_id&posts_per_page=$posts_per_page&st=$sort_days&sk=$sort_key&sd=$sort_dir"), $total, $posts_per_page, $start), 'TOTAL_POSTS' => $user->lang('VIEW_TOPIC_POSTS', (int) $total), )); } diff --git a/phpBB/includes/mcp/mcp_warn.php b/phpBB/includes/mcp/mcp_warn.php index c614beea3b..31822dd147 100644 --- a/phpBB/includes/mcp/mcp_warn.php +++ b/phpBB/includes/mcp/mcp_warn.php @@ -175,6 +175,8 @@ class mcp_warn )); } + generate_pagination(append_sid("{$phpbb_root_path}mcp.$phpEx", "i=warn&mode=list&st=$st&sk=$sk&sd=$sd"), $user_count, $config['topics_per_page'], $start); + $template->assign_vars(array( 'U_POST_ACTION' => $this->u_action, 'S_CLEAR_ALLOWED' => ($auth->acl_get('a_clearlogs')) ? true : false, @@ -183,7 +185,6 @@ class mcp_warn 'S_SELECT_SORT_DAYS' => $s_limit_days, 'PAGE_NUMBER' => on_page($user_count, $config['topics_per_page'], $start), - 'PAGINATION' => generate_pagination(append_sid("{$phpbb_root_path}mcp.$phpEx", "i=warn&mode=list&st=$st&sk=$sk&sd=$sd"), $user_count, $config['topics_per_page'], $start), 'TOTAL_USERS' => $user->lang('LIST_USERS', (int) $user_count), )); } diff --git a/phpBB/includes/ucp/ucp_attachments.php b/phpBB/includes/ucp/ucp_attachments.php index 836185f105..fb2dfaabee 100644 --- a/phpBB/includes/ucp/ucp_attachments.php +++ b/phpBB/includes/ucp/ucp_attachments.php @@ -170,9 +170,10 @@ class ucp_attachments } $db->sql_freeresult($result); + generate_pagination($this->u_action . "&sk=$sort_key&sd=$sort_dir", $num_attachments, $config['topics_per_page'], $start); + $template->assign_vars(array( 'PAGE_NUMBER' => on_page($num_attachments, $config['topics_per_page'], $start), - 'PAGINATION' => generate_pagination($this->u_action . "&sk=$sort_key&sd=$sort_dir", $num_attachments, $config['topics_per_page'], $start), 'TOTAL_ATTACHMENTS' => $num_attachments, 'L_TITLE' => $user->lang['UCP_ATTACHMENTS'], diff --git a/phpBB/includes/ucp/ucp_groups.php b/phpBB/includes/ucp/ucp_groups.php index a7c6479759..d919208aca 100644 --- a/phpBB/includes/ucp/ucp_groups.php +++ b/phpBB/includes/ucp/ucp_groups.php @@ -844,11 +844,12 @@ class ucp_groups $s_action_options .= ''; } + generate_pagination($this->u_action . "&action=$action&g=$group_id", $total_members, $config['topics_per_page'], $start); + $template->assign_vars(array( 'S_LIST' => true, 'S_ACTION_OPTIONS' => $s_action_options, 'S_ON_PAGE' => on_page($total_members, $config['topics_per_page'], $start), - 'PAGINATION' => generate_pagination($this->u_action . "&action=$action&g=$group_id", $total_members, $config['topics_per_page'], $start), 'U_ACTION' => $this->u_action . "&g=$group_id", 'S_UCP_ACTION' => $this->u_action . "&g=$group_id", diff --git a/phpBB/includes/ucp/ucp_main.php b/phpBB/includes/ucp/ucp_main.php index 00b7b55f27..fed844de96 100644 --- a/phpBB/includes/ucp/ucp_main.php +++ b/phpBB/includes/ucp/ucp_main.php @@ -670,8 +670,9 @@ class ucp_main if ($topics_count) { + generate_pagination($this->u_action, $topics_count, $config['topics_per_page'], $start); + $template->assign_vars(array( - 'PAGINATION' => generate_pagination($this->u_action, $topics_count, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($topics_count, $config['topics_per_page'], $start), 'TOTAL_TOPICS' => $user->lang('VIEW_FORUM_TOPICS', (int) $topics_count), )); @@ -813,7 +814,6 @@ class ucp_main 'S_DELETED_TOPIC' => (!$row['topic_id']) ? true : false, - 'PAGINATION' => topic_generate_pagination($replies, append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . "&t=$topic_id")), 'REPLIES' => $replies, 'VIEWS' => $row['topic_views'], 'TOPIC_TITLE' => censor_text($row['topic_title']), @@ -837,6 +837,8 @@ class ucp_main 'U_VIEW_TOPIC' => $view_topic_url, 'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id), )); + + generate_pagination(append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $row['forum_id'] . "&t=$topic_id"), $replies + 1, $config['posts_per_page'], 1, '', true, true, 'topicrow'); } } } diff --git a/phpBB/includes/ucp/ucp_pm_viewfolder.php b/phpBB/includes/ucp/ucp_pm_viewfolder.php index 8b1cd419f4..168280bd96 100644 --- a/phpBB/includes/ucp/ucp_pm_viewfolder.php +++ b/phpBB/includes/ucp/ucp_pm_viewfolder.php @@ -451,8 +451,9 @@ function get_pm_from($folder_id, $folder, $user_id) $sql_limit_time = ''; } + generate_pagination(append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=view&action=view_folder&f=$folder_id&$u_sort_param"), $pm_count, $config['topics_per_page'], $start); + $template->assign_vars(array( - 'PAGINATION' => generate_pagination(append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=view&action=view_folder&f=$folder_id&$u_sort_param"), $pm_count, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($pm_count, $config['topics_per_page'], $start), 'TOTAL_MESSAGES' => $user->lang('VIEW_PM_MESSAGES', (int) $pm_count), diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index ed87b6c448..f837a21666 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -1572,9 +1572,10 @@ switch ($mode) } } + generate_pagination($pagination_url, $total_users, $config['topics_per_page'], $start); + // Generate page $template->assign_vars(array( - 'PAGINATION' => generate_pagination($pagination_url, $total_users, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($total_users, $config['topics_per_page'], $start), 'TOTAL_USERS' => $user->lang('LIST_USERS', (int) $total_users), diff --git a/phpBB/search.php b/phpBB/search.php index 93cd0c31fd..fefe7f9b0e 100644 --- a/phpBB/search.php +++ b/phpBB/search.php @@ -603,13 +603,14 @@ if ($keywords || $author || $author_id || $search_id || $submit) $phrase_search_disabled = $search->supports_phrase_search() ? false : true; } + generate_pagination($u_search, $total_match_count, $per_page, $start); + $template->assign_vars(array( 'SEARCH_TITLE' => $l_search_title, 'SEARCH_MATCHES' => $l_search_matches, 'SEARCH_WORDS' => $keywords, 'SEARCHED_QUERY' => $search->search_query, 'IGNORED_WORDS' => (sizeof($search->common_words)) ? implode(' ', $search->common_words) : '', - 'PAGINATION' => generate_pagination($u_search, $total_match_count, $per_page, $start), 'PAGE_NUMBER' => on_page($total_match_count, $per_page, $start), 'PHRASE_SEARCH_DISABLED' => $phrase_search_disabled, @@ -899,7 +900,6 @@ if ($keywords || $author || $author_id || $search_id || $submit) 'LAST_POST_AUTHOR_COLOUR' => get_username_string('colour', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']), 'LAST_POST_AUTHOR_FULL' => get_username_string('full', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']), - 'PAGINATION' => topic_generate_pagination($replies, $view_topic_url), 'TOPIC_TYPE' => $topic_type, 'TOPIC_IMG_STYLE' => $folder_img, @@ -1003,6 +1003,11 @@ if ($keywords || $author || $author_id || $search_id || $submit) 'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id), 'U_VIEW_POST' => (!empty($row['post_id'])) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=" . $row['topic_id'] . '&p=' . $row['post_id'] . (($u_hilit) ? '&hilit=' . $u_hilit : '')) . '#p' . $row['post_id'] : '') )); + + if ($show_results == 'topics') + { + generate_pagination($view_topic_url, $replies + 1, $config['posts_per_page'], 1, '', true, true, 'searchresults'); + } } if ($topic_id && ($topic_id == $result_topic_id)) diff --git a/phpBB/styles/prosilver/template/mcp_forum.html b/phpBB/styles/prosilver/template/mcp_forum.html index afd4f2308a..a31e0fc74a 100644 --- a/phpBB/styles/prosilver/template/mcp_forum.html +++ b/phpBB/styles/prosilver/template/mcp_forum.html @@ -10,11 +10,28 @@
    - + @@ -42,7 +59,20 @@ {REPORTED_IMG}  [ {L_DELETE_SHADOW_TOPIC} ]
    - {topicrow.PAGINATION} + + + {topicrow.ATTACH_ICON_IMG} {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
    {topicrow.REPLIES} {L_REPLIES}
    {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL}
    {topicrow.LAST_POST_TIME}
    @@ -72,11 +102,28 @@
    - + diff --git a/phpBB/styles/prosilver/template/mcp_logs.html b/phpBB/styles/prosilver/template/mcp_logs.html index b5561687b2..af101f8d24 100644 --- a/phpBB/styles/prosilver/template/mcp_logs.html +++ b/phpBB/styles/prosilver/template/mcp_logs.html @@ -12,8 +12,25 @@ {L_SEARCH_KEYWORDS}:   @@ -62,8 +79,25 @@ {S_FORM_TOKEN} diff --git a/phpBB/styles/prosilver/template/mcp_notes_user.html b/phpBB/styles/prosilver/template/mcp_notes_user.html index afe904dab3..ea484e5628 100644 --- a/phpBB/styles/prosilver/template/mcp_notes_user.html +++ b/phpBB/styles/prosilver/template/mcp_notes_user.html @@ -55,8 +55,25 @@ {L_SEARCH_KEYWORDS}:   @@ -102,8 +119,25 @@ diff --git a/phpBB/styles/prosilver/template/mcp_queue.html b/phpBB/styles/prosilver/template/mcp_queue.html index e9a477a24c..5dd4308f7a 100644 --- a/phpBB/styles/prosilver/template/mcp_queue.html +++ b/phpBB/styles/prosilver/template/mcp_queue.html @@ -18,8 +18,25 @@
      @@ -73,8 +90,25 @@ diff --git a/phpBB/styles/prosilver/template/mcp_reports.html b/phpBB/styles/prosilver/template/mcp_reports.html index 95e7d9e021..431f50d346 100644 --- a/phpBB/styles/prosilver/template/mcp_reports.html +++ b/phpBB/styles/prosilver/template/mcp_reports.html @@ -20,8 +20,25 @@
        @@ -74,8 +91,25 @@
        diff --git a/phpBB/styles/prosilver/template/mcp_topic.html b/phpBB/styles/prosilver/template/mcp_topic.html index 8d0294d226..2a7b749027 100644 --- a/phpBB/styles/prosilver/template/mcp_topic.html +++ b/phpBB/styles/prosilver/template/mcp_topic.html @@ -139,11 +139,28 @@ onload_functions.push('subPanels()');
        - + diff --git a/phpBB/styles/prosilver/template/mcp_warn_list.html b/phpBB/styles/prosilver/template/mcp_warn_list.html index e4f82bbe67..27adcf40e3 100644 --- a/phpBB/styles/prosilver/template/mcp_warn_list.html +++ b/phpBB/styles/prosilver/template/mcp_warn_list.html @@ -12,8 +12,25 @@ @@ -48,8 +65,25 @@ diff --git a/phpBB/styles/prosilver/template/memberlist_body.html b/phpBB/styles/prosilver/template/memberlist_body.html index d5154761e9..bb3ce814d3 100644 --- a/phpBB/styles/prosilver/template/memberlist_body.html +++ b/phpBB/styles/prosilver/template/memberlist_body.html @@ -41,8 +41,26 @@
      @@ -150,7 +168,27 @@
      diff --git a/phpBB/styles/prosilver/template/posting_smilies.html b/phpBB/styles/prosilver/template/posting_smilies.html index d3d6293586..097d08244d 100644 --- a/phpBB/styles/prosilver/template/posting_smilies.html +++ b/phpBB/styles/prosilver/template/posting_smilies.html @@ -17,7 +17,24 @@
    -
    {PAGINATION}
    + {L_CLOSE_WINDOW} diff --git a/phpBB/styles/prosilver/template/search_results.html b/phpBB/styles/prosilver/template/search_results.html index 0a58605b31..7b4ecaab72 100644 --- a/phpBB/styles/prosilver/template/search_results.html +++ b/phpBB/styles/prosilver/template/search_results.html @@ -11,7 +11,7 @@

    {L_RETURN_TO_SEARCH_ADV}

    - +
    @@ -26,7 +26,26 @@
    @@ -59,7 +78,20 @@ {searchresults.TOPIC_TITLE} {searchresults.ATTACH_ICON_IMG} {searchresults.UNAPPROVED_IMG} {REPORTED_IMG}
    - {searchresults.PAGINATION} + + + {L_POST_BY_AUTHOR} {searchresults.TOPIC_AUTHOR_FULL} » {searchresults.FIRST_POST_TIME} » {L_IN} {searchresults.FORUM_TITLE}
    {searchresults.TOPIC_REPLIES}
    @@ -127,7 +159,7 @@ - +
    @@ -144,10 +176,29 @@
    - + diff --git a/phpBB/styles/prosilver/template/ucp_attachments.html b/phpBB/styles/prosilver/template/ucp_attachments.html index 84e4c2e875..b57376344f 100644 --- a/phpBB/styles/prosilver/template/ucp_attachments.html +++ b/phpBB/styles/prosilver/template/ucp_attachments.html @@ -12,8 +12,25 @@ @@ -55,8 +72,25 @@ diff --git a/phpBB/styles/prosilver/template/ucp_groups_manage.html b/phpBB/styles/prosilver/template/ucp_groups_manage.html index a13c043e48..680d39ea1e 100644 --- a/phpBB/styles/prosilver/template/ucp_groups_manage.html +++ b/phpBB/styles/prosilver/template/ucp_groups_manage.html @@ -159,7 +159,24 @@ diff --git a/phpBB/styles/prosilver/template/ucp_main_bookmarks.html b/phpBB/styles/prosilver/template/ucp_main_bookmarks.html index 89502bbc3d..895fce5e51 100644 --- a/phpBB/styles/prosilver/template/ucp_main_bookmarks.html +++ b/phpBB/styles/prosilver/template/ucp_main_bookmarks.html @@ -36,7 +36,20 @@ {NEWEST_POST_IMG} {topicrow.TOPIC_TITLE} {topicrow.UNAPPROVED_IMG} {REPORTED_IMG}
    - {topicrow.PAGINATION} + + + {topicrow.ATTACH_ICON_IMG} {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
    {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} @@ -50,8 +63,25 @@ diff --git a/phpBB/styles/prosilver/template/ucp_main_front.html b/phpBB/styles/prosilver/template/ucp_main_front.html index b7a0619227..04767b6c01 100644 --- a/phpBB/styles/prosilver/template/ucp_main_front.html +++ b/phpBB/styles/prosilver/template/ucp_main_front.html @@ -16,7 +16,20 @@
    style="background-image: url({T_ICONS_PATH}{topicrow.TOPIC_ICON_IMG}); background-repeat: no-repeat;"> {NEWEST_POST_IMG} {topicrow.TOPIC_TITLE}
    - {topicrow.PAGINATION} + + + {topicrow.ATTACH_ICON_IMG} {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
    {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} diff --git a/phpBB/styles/prosilver/template/ucp_main_subscribed.html b/phpBB/styles/prosilver/template/ucp_main_subscribed.html index ab65d9b3ae..0324218149 100644 --- a/phpBB/styles/prosilver/template/ucp_main_subscribed.html +++ b/phpBB/styles/prosilver/template/ucp_main_subscribed.html @@ -56,7 +56,20 @@ {NEWEST_POST_IMG} {topicrow.TOPIC_TITLE} {topicrow.UNAPPROVED_IMG} {REPORTED_IMG}
    - {topicrow.PAGINATION} + + + {topicrow.ATTACH_ICON_IMG} {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME}
    {L_LAST_POST} {L_POST_BY_AUTHOR} {topicrow.LAST_POST_AUTHOR_FULL} @@ -69,8 +82,25 @@ diff --git a/phpBB/styles/prosilver/template/ucp_pm_message_header.html b/phpBB/styles/prosilver/template/ucp_pm_message_header.html index d6659fad0f..9af2bf07a5 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_message_header.html +++ b/phpBB/styles/prosilver/template/ucp_pm_message_header.html @@ -20,8 +20,25 @@ diff --git a/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html b/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html index 20394b254e..8f969a7018 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html +++ b/phpBB/styles/prosilver/template/ucp_pm_viewfolder.html @@ -103,8 +103,25 @@ diff --git a/phpBB/styles/prosilver/template/viewforum_body.html b/phpBB/styles/prosilver/template/viewforum_body.html index f5ff1d3f98..4e368120b8 100644 --- a/phpBB/styles/prosilver/template/viewforum_body.html +++ b/phpBB/styles/prosilver/template/viewforum_body.html @@ -34,7 +34,7 @@ - +
    style="margin-top: 2em;"> @@ -55,11 +55,27 @@
    - + @@ -142,7 +158,20 @@ style="background-image: url({T_ICONS_PATH}{topicrow.TOPIC_ICON_IMG}); background-repeat: no-repeat;" title="{topicrow.TOPIC_FOLDER_IMG_ALT}">{NEWEST_POST_IMG} {topicrow.TOPIC_TITLE} {topicrow.UNAPPROVED_IMG} {REPORTED_IMG}
    - {topicrow.PAGINATION} + + + {topicrow.ATTACH_ICON_IMG} {L_POST_BY_AUTHOR} {topicrow.TOPIC_AUTHOR_FULL} » {topicrow.FIRST_POST_TIME} » {L_IN} {topicrow.FORUM_NAME} @@ -193,13 +222,29 @@ - + diff --git a/phpBB/styles/prosilver/template/viewonline_body.html b/phpBB/styles/prosilver/template/viewonline_body.html index 9da8202783..775f182c07 100644 --- a/phpBB/styles/prosilver/template/viewonline_body.html +++ b/phpBB/styles/prosilver/template/viewonline_body.html @@ -4,7 +4,26 @@

    {TOTAL_GUEST_USERS_ONLINE}{L_SWITCH_GUEST_DISPLAY}

    @@ -50,7 +69,26 @@

    {L_LEGEND}: {LEGEND}

    diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html index 1af512732d..29786f7b86 100644 --- a/phpBB/styles/prosilver/template/viewtopic_body.html +++ b/phpBB/styles/prosilver/template/viewtopic_body.html @@ -45,10 +45,24 @@
    - + @@ -252,10 +266,24 @@ - + diff --git a/phpBB/styles/prosilver/theme/colours.css b/phpBB/styles/prosilver/theme/colours.css index fe6a7a7fda..29968cbb14 100644 --- a/phpBB/styles/prosilver/theme/colours.css +++ b/phpBB/styles/prosilver/theme/colours.css @@ -145,25 +145,30 @@ dl.details dd { /* Pagination ---------------------------------------- */ -.pagination span strong { - color: #FFFFFF; - background-color: #4692BF; - border-color: #4692BF; -} - -.pagination span a, .pagination span a:link, .pagination span a:visited { +.pagination li a, .pagination li a:link, .pagination li a:visited { color: #5C758C; background-color: #ECEDEE; border-color: #B4BAC0; } -.pagination span a:hover { +.pagination li.ellipsis span { + background-color: transparent; + color: #000 +} + +.pagination li.active span { + color: #FFFFFF; + background-color: #4692BF; + border-color: #4692BF; +} + +.pagination li a:hover, .pagination .active a:hover { border-color: #368AD2; background-color: #368AD2; color: #FFF; } -.pagination span a:active { +.pagination li a:active, .pagination li.active a:active { color: #5C758C; background-color: #ECEDEE; border-color: #B4BAC0; diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 3dda343829..d49b54475f 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -483,6 +483,7 @@ dl.details dd { overflow: hidden; } + /* Pagination ---------------------------------------- */ .pagination { @@ -493,51 +494,43 @@ dl.details dd { float: right; } -.pagination span.page-sep { - display: none; -} - li.pagination { margin-top: 0; } -.pagination strong, .pagination b { - font-weight: normal; +.pagination img { + vertical-align: middle; } -.pagination span strong { - padding: 0 2px; - margin: 0 2px; - font-weight: normal; - border: 1px solid transparent; - font-size: 0.9em; +.pagination ul { + display: inline-block; + *display: inline; /* IE7 inline-block hack */ + *zoom: 1; + margin-left: 0; + margin-bottom: 0; +} + +.pagination ul li, dl .pagination ul li, dl.icon .pagination ul li { + display: inline; + padding: 0; } -.pagination span a, .pagination span a:link, .pagination span a:visited, .pagination span a:active { +.pagination li a, .pagnation li span, li .pagination li a, li .pagnation li span, .pagination li.active span, .pagination li.ellipsis span { font-weight: normal; text-decoration: none; - margin: 0 2px; padding: 0 2px; border: 1px solid transparent; font-size: 0.9em; line-height: 1.5em; } -.pagination span a:hover { - text-decoration: none; -} - -.pagination img { - vertical-align: middle; -} - /* Pagination in viewforum for multipage topics */ .row .pagination { display: block; float: right; width: auto; margin-top: 0; - padding: 1px 0 1px 15px; + padding: 1px 0 1px 8px; font-size: 0.9em; background: none 0 50% no-repeat; } diff --git a/phpBB/styles/prosilver/theme/content.css b/phpBB/styles/prosilver/theme/content.css index 60903911dd..81f3567aba 100644 --- a/phpBB/styles/prosilver/theme/content.css +++ b/phpBB/styles/prosilver/theme/content.css @@ -1,6 +1,8 @@ /* Content Styles ---------------------------------------- */ +/* Forum and topic lists +---------------------------------------- */ ul.topiclist { display: block; list-style-type: none; @@ -701,4 +703,4 @@ dl.pmlist dt textarea { dl.pmlist dd { margin-left: 61% !important; margin-bottom: 2px; -} +} \ No newline at end of file diff --git a/phpBB/styles/subsilver2/template/pagination.html b/phpBB/styles/subsilver2/template/pagination.html index a36eb88d8f..f78bb554fc 100644 --- a/phpBB/styles/subsilver2/template/pagination.html +++ b/phpBB/styles/subsilver2/template/pagination.html @@ -1 +1,11 @@ -{L_GOTO_PAGE} {L_PREVIOUS}  {PAGINATION}  {L_NEXT} + + {L_GOTO_PAGE} + + {pagination.PAGE_NUMBER} + {pagination.PAGE_NUMBER} + {L_ELLIPSIS} + {pagination.PAGE_NUMBER} + {pagination.PAGE_NUMBER} + + + diff --git a/phpBB/styles/subsilver2/template/posting_smilies.html b/phpBB/styles/subsilver2/template/posting_smilies.html index 691ba239b2..30a80e26ab 100644 --- a/phpBB/styles/subsilver2/template/posting_smilies.html +++ b/phpBB/styles/subsilver2/template/posting_smilies.html @@ -16,7 +16,20 @@
    - +
    {L_SMILIES}
    {smiley.SMILEY_CODE}
    {PAGINATION}
    {L_CLOSE_WINDOW}
    {smiley.SMILEY_CODE}
    + + {L_GOTO_PAGE} + + {pagination.PAGE_NUMBER} + {pagination.PAGE_NUMBER} + {L_ELLIPSIS} + {pagination.PAGE_NUMBER} + {pagination.PAGE_NUMBER} + + +
    + + {L_CLOSE_WINDOW}
    diff --git a/phpBB/styles/subsilver2/template/search_results.html b/phpBB/styles/subsilver2/template/search_results.html index d8a1879ca7..a143a186d7 100644 --- a/phpBB/styles/subsilver2/template/search_results.html +++ b/phpBB/styles/subsilver2/template/search_results.html @@ -42,8 +42,17 @@ {REPORTED_IMG}  - -

    [ {GOTO_PAGE_IMG}{L_GOTO_PAGE}: {searchresults.PAGINATION} ]

    + +

    [ {GOTO_PAGE_IMG}{L_GOTO_PAGE}: + + + {searchresults.pagination.PAGE_NUMBER} + {L_ELLIPSIS} + + {searchresults.pagination.PAGE_NUMBER} + + + ]

    {L_IN} {searchresults.FORUM_TITLE}

    diff --git a/phpBB/styles/subsilver2/template/ucp_main_bookmarks.html b/phpBB/styles/subsilver2/template/ucp_main_bookmarks.html index 2fa8f6ac2e..ba19c45eab 100644 --- a/phpBB/styles/subsilver2/template/ucp_main_bookmarks.html +++ b/phpBB/styles/subsilver2/template/ucp_main_bookmarks.html @@ -43,8 +43,17 @@

    {NEWEST_POST_IMG} {topicrow.ATTACH_ICON_IMG} {topicrow.TOPIC_TITLE}

    {L_GLOBAL_ANNOUNCEMENT}{L_FORUM}: {topicrow.FORUM_NAME} - -

    [ {GOTO_PAGE_IMG}{L_GOTO_PAGE}: {topicrow.PAGINATION} ]

    + +

    [ {GOTO_PAGE_IMG}{L_GOTO_PAGE}: + + + {topicrow.pagination.PAGE_NUMBER} + {L_ELLIPSIS} + + {topicrow.pagination.PAGE_NUMBER} + + + ]

    diff --git a/phpBB/styles/subsilver2/template/ucp_main_subscribed.html b/phpBB/styles/subsilver2/template/ucp_main_subscribed.html index 42a452549b..13d2935757 100644 --- a/phpBB/styles/subsilver2/template/ucp_main_subscribed.html +++ b/phpBB/styles/subsilver2/template/ucp_main_subscribed.html @@ -52,8 +52,17 @@

    {NEWEST_POST_IMG} {topicrow.ATTACH_ICON_IMG} {topicrow.TOPIC_TITLE}

    {L_GLOBAL_ANNOUNCEMENT}{L_FORUM}: {topicrow.FORUM_NAME} - -

    [ {GOTO_PAGE_IMG}{L_GOTO_PAGE}: {topicrow.PAGINATION} ]

    + +

    [ {GOTO_PAGE_IMG}{L_GOTO_PAGE}: + + + {topicrow.pagination.PAGE_NUMBER} + {L_ELLIPSIS} + + {topicrow.pagination.PAGE_NUMBER} + + + ]

    diff --git a/phpBB/styles/subsilver2/template/viewforum_body.html b/phpBB/styles/subsilver2/template/viewforum_body.html index afb8426799..7f241ce874 100644 --- a/phpBB/styles/subsilver2/template/viewforum_body.html +++ b/phpBB/styles/subsilver2/template/viewforum_body.html @@ -48,8 +48,17 @@ {REPORTED_IMG}  - -

    [ {GOTO_PAGE_IMG}{L_GOTO_PAGE}: {topicrow.PAGINATION} ]

    + +

    [ {GOTO_PAGE_IMG}{L_GOTO_PAGE}: + + + {topicrow.pagination.PAGE_NUMBER} + {L_ELLIPSIS} + + {topicrow.pagination.PAGE_NUMBER} + + + ]

    {topicrow.TOPIC_AUTHOR_FULL}

    @@ -199,8 +208,17 @@ {REPORTED_IMG}  - -

    [ {GOTO_PAGE_IMG}{L_GOTO_PAGE}: {topicrow.PAGINATION} ]

    + +

    [ {GOTO_PAGE_IMG}{L_GOTO_PAGE}: + + + {topicrow.pagination.PAGE_NUMBER} + {L_ELLIPSIS} + + {topicrow.pagination.PAGE_NUMBER} + + + ]

    {L_IN} {topicrow.FORUM_NAME}

    diff --git a/phpBB/styles/subsilver2/template/viewonline_body.html b/phpBB/styles/subsilver2/template/viewonline_body.html index 1c8734d06a..b05a9470e0 100644 --- a/phpBB/styles/subsilver2/template/viewonline_body.html +++ b/phpBB/styles/subsilver2/template/viewonline_body.html @@ -8,7 +8,7 @@ - +
    {L_GOTO_PAGE} {L_PREVIOUS}  {PAGINATION}  {L_NEXT}
    @@ -39,7 +39,7 @@ - +
    {L_GOTO_PAGE} {L_PREVIOUS}  {PAGINATION}  {L_NEXT}
    diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php index 6a39f10394..f1c10e347e 100644 --- a/phpBB/viewforum.php +++ b/phpBB/viewforum.php @@ -590,8 +590,9 @@ if ($s_display_active) // otherwise the number is different from the one on the forum list $total_topic_count = $topics_count - sizeof($global_announce_forums); +generate_pagination(append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id" . ((strlen($u_sort_param)) ? "&$u_sort_param" : '')), $topics_count, $config['topics_per_page'], $start); + $template->assign_vars(array( - 'PAGINATION' => generate_pagination(append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id" . ((strlen($u_sort_param)) ? "&$u_sort_param" : '')), $topics_count, $config['topics_per_page'], $start), 'PAGE_NUMBER' => on_page($topics_count, $config['topics_per_page'], $start), 'TOTAL_TOPICS' => ($s_display_active) ? false : $user->lang('VIEW_FORUM_TOPICS', (int) $total_topic_count), )); @@ -702,7 +703,6 @@ if (sizeof($topic_list)) 'LAST_POST_AUTHOR_COLOUR' => get_username_string('colour', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']), 'LAST_POST_AUTHOR_FULL' => get_username_string('full', $row['topic_last_poster_id'], $row['topic_last_poster_name'], $row['topic_last_poster_colour']), - 'PAGINATION' => topic_generate_pagination($replies, $view_topic_url), 'REPLIES' => $replies, 'VIEWS' => $row['topic_views'], 'TOPIC_TITLE' => censor_text($row['topic_title']), @@ -744,6 +744,8 @@ if (sizeof($topic_list)) 'S_TOPIC_TYPE_SWITCH' => ($s_type_switch == $s_type_switch_test) ? -1 : $s_type_switch_test) ); + generate_pagination($view_topic_url, $replies + 1, $config['posts_per_page'], 1, '', true, true, 'topicrow'); + $s_type_switch = ($row['topic_type'] == POST_ANNOUNCE || $row['topic_type'] == POST_GLOBAL) ? 1 : 0; if ($unread_topic) diff --git a/phpBB/viewonline.php b/phpBB/viewonline.php index 08ca7f7a04..546152f647 100644 --- a/phpBB/viewonline.php +++ b/phpBB/viewonline.php @@ -342,7 +342,7 @@ while ($row = $db->sql_fetchrow($result)) $db->sql_freeresult($result); unset($prev_id, $prev_ip); -$pagination = generate_pagination(append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&sk=$sort_key&sd=$sort_dir"), $counter, $config['topics_per_page'], $start); +generate_pagination(append_sid("{$phpbb_root_path}viewonline.$phpEx", "sg=$show_guests&sk=$sort_key&sd=$sort_dir"), $counter, $config['topics_per_page'], $start); $order_legend = ($config['legend_sort_groupname']) ? 'group_name' : 'group_legend'; // Grab group details for legend display diff --git a/phpBB/viewtopic.php b/phpBB/viewtopic.php index 0d6e9afd54..98a4f123be 100644 --- a/phpBB/viewtopic.php +++ b/phpBB/viewtopic.php @@ -546,7 +546,7 @@ foreach($quickmod_array as $option => $qm_ary) } // If we've got a hightlight set pass it on to pagination. -$pagination = generate_pagination(append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . ((strlen($u_sort_param)) ? "&$u_sort_param" : '') . (($highlight_match) ? "&hilit=$highlight" : '')), $total_posts, $config['posts_per_page'], $start); +generate_pagination(append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=$topic_id" . ((strlen($u_sort_param)) ? "&$u_sort_param" : '') . (($highlight_match) ? "&hilit=$highlight" : '')), $total_posts, $config['posts_per_page'], $start); // Navigation links generate_forum_nav($topic_data); @@ -598,7 +598,6 @@ $template->assign_vars(array( 'TOPIC_AUTHOR_COLOUR' => get_username_string('colour', $topic_data['topic_poster'], $topic_data['topic_first_poster_name'], $topic_data['topic_first_poster_colour']), 'TOPIC_AUTHOR' => get_username_string('username', $topic_data['topic_poster'], $topic_data['topic_first_poster_name'], $topic_data['topic_first_poster_colour']), - 'PAGINATION' => $pagination, 'PAGE_NUMBER' => on_page($total_posts, $config['posts_per_page'], $start), 'TOTAL_POSTS' => $user->lang('VIEW_TOPIC_POSTS', (int) $total_posts), 'U_MCP' => ($auth->acl_get('m_', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "i=main&mode=topic_view&f=$forum_id&t=$topic_id" . (($start == 0) ? '' : "&start=$start") . ((strlen($u_sort_param)) ? "&$u_sort_param" : ''), true, $user->session_id) : '', -- cgit v1.2.1 From dc71c0629e60acccd39b59538f2e7f5b09b32509 Mon Sep 17 00:00:00 2001 From: Drae Date: Thu, 5 Jul 2012 18:56:14 +0100 Subject: [feature/pagination-as-list] Various fixes and improvements Extracted common template code for prosilver as per subsilver2. Various other fixups and oversight corrections, changed name of the "new" template function and re-introduced existing version. Altered on_page to compensate for removal of some templating vars from pagination routine. PHPBB3-10968 --- phpBB/adm/style/acp_attachments.html | 17 +- phpBB/adm/style/acp_groups.html | 12 +- phpBB/adm/style/acp_icons.html | 11 +- phpBB/adm/style/acp_inactive.html | 12 +- phpBB/adm/style/acp_logs.html | 12 +- phpBB/adm/style/acp_users.html | 24 +-- phpBB/adm/style/acp_users_feedback.html | 24 +-- phpBB/adm/style/pagination.html | 12 ++ phpBB/includes/acp/acp_attachments.php | 5 +- phpBB/includes/acp/acp_groups.php | 5 +- phpBB/includes/acp/acp_icons.php | 2 +- phpBB/includes/acp/acp_inactive.php | 5 +- phpBB/includes/acp/acp_logs.php | 5 +- phpBB/includes/acp/acp_users.php | 10 +- phpBB/includes/functions.php | 199 +++++++++++++++++---- phpBB/includes/mcp/mcp_forum.php | 5 +- phpBB/includes/mcp/mcp_logs.php | 5 +- phpBB/includes/mcp/mcp_notes.php | 5 +- phpBB/includes/mcp/mcp_pm_reports.php | 7 +- phpBB/includes/mcp/mcp_queue.php | 5 +- phpBB/includes/mcp/mcp_reports.php | 5 +- phpBB/includes/mcp/mcp_topic.php | 5 +- phpBB/includes/mcp/mcp_warn.php | 5 +- phpBB/includes/ucp/ucp_attachments.php | 5 +- phpBB/includes/ucp/ucp_groups.php | 5 +- phpBB/includes/ucp/ucp_main.php | 6 +- phpBB/includes/ucp/ucp_pm_viewfolder.php | 5 +- phpBB/memberlist.php | 4 +- phpBB/search.php | 6 +- phpBB/styles/prosilver/template/mcp_forum.html | 15 +- phpBB/styles/prosilver/template/mcp_logs.html | 30 +--- .../styles/prosilver/template/mcp_notes_user.html | 30 +--- phpBB/styles/prosilver/template/mcp_queue.html | 30 +--- phpBB/styles/prosilver/template/mcp_reports.html | 30 +--- phpBB/styles/prosilver/template/mcp_topic.html | 15 +- phpBB/styles/prosilver/template/mcp_warn_list.html | 15 +- .../styles/prosilver/template/memberlist_body.html | 30 +--- phpBB/styles/prosilver/template/pagination.html | 15 ++ .../styles/prosilver/template/posting_smilies.html | 15 +- .../styles/prosilver/template/search_results.html | 15 +- .../styles/prosilver/template/ucp_attachments.html | 30 +--- .../prosilver/template/ucp_groups_manage.html | 15 +- .../prosilver/template/ucp_main_bookmarks.html | 15 +- .../prosilver/template/ucp_main_subscribed.html | 15 +- .../prosilver/template/ucp_pm_message_header.html | 15 +- .../prosilver/template/ucp_pm_viewfolder.html | 15 +- .../styles/prosilver/template/viewforum_body.html | 30 +--- .../styles/prosilver/template/viewonline_body.html | 30 +--- .../styles/prosilver/template/viewtopic_body.html | 12 +- phpBB/styles/prosilver/theme/content.css | 4 +- phpBB/viewforum.php | 7 +- phpBB/viewonline.php | 7 +- phpBB/viewtopic.php | 9 +- 53 files changed, 303 insertions(+), 569 deletions(-) create mode 100644 phpBB/adm/style/pagination.html create mode 100644 phpBB/styles/prosilver/template/pagination.html (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_attachments.html b/phpBB/adm/style/acp_attachments.html index f3d67d2bfa..bdec9eb3cb 100644 --- a/phpBB/adm/style/acp_attachments.html +++ b/phpBB/adm/style/acp_attachments.html @@ -379,20 +379,11 @@ {L_TITLE} {L_CLOSE_WINDOW} diff --git a/phpBB/styles/prosilver/template/search_results.html b/phpBB/styles/prosilver/template/search_results.html index 7b4ecaab72..063cc8c8ea 100644 --- a/phpBB/styles/prosilver/template/search_results.html +++ b/phpBB/styles/prosilver/template/search_results.html @@ -29,20 +29,7 @@ {SEARCH_MATCHES} • - {PAGE_NUMBER} • - + {PAGE_NUMBER} diff --git a/phpBB/styles/prosilver/template/ucp_attachments.html b/phpBB/styles/prosilver/template/ucp_attachments.html index b57376344f..2160d8fcf7 100644 --- a/phpBB/styles/prosilver/template/ucp_attachments.html +++ b/phpBB/styles/prosilver/template/ucp_attachments.html @@ -14,20 +14,7 @@
    - + diff --git a/phpBB/common.php b/phpBB/common.php index c7c5859c25..fc2b9ae21e 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -119,7 +119,7 @@ set_config(null, null, null, $config); set_config_count(null, null, null, $config); // load extensions -$phpbb_extension_manager = new phpbb_extension_manager($db, EXT_TABLE, $phpbb_root_path, ".$phpEx", $cache->get_driver()); +$phpbb_extension_manager = new phpbb_extension_manager($db, $config, EXT_TABLE, $phpbb_root_path, ".$phpEx", $cache->get_driver()); // Initialize style $phpbb_style_resource_locator = new phpbb_style_resource_locator(); diff --git a/phpBB/download/file.php b/phpBB/download/file.php index b56d729a7b..706df6abab 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -77,7 +77,7 @@ if (isset($_GET['avatar'])) set_config_count(null, null, null, $config); // load extensions - $phpbb_extension_manager = new phpbb_extension_manager($db, EXT_TABLE, $phpbb_root_path, ".$phpEx", $cache->get_driver()); + $phpbb_extension_manager = new phpbb_extension_manager($db, $config, EXT_TABLE, $phpbb_root_path, ".$phpEx", $cache->get_driver()); $phpbb_subscriber_loader = new phpbb_event_extension_subscriber_loader($phpbb_dispatcher, $phpbb_extension_manager); $phpbb_subscriber_loader->load(); diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index c4d9497956..ce32640c33 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -25,7 +25,7 @@ class acp_extensions function main() { // Start the page - global $user, $template, $request, $phpbb_extension_manager, $db, $phpbb_root_path, $phpEx; + global $config, $user, $template, $request, $phpbb_extension_manager, $db, $phpbb_root_path, $phpEx; $user->add_lang(array('install', 'acp/extensions')); @@ -34,6 +34,17 @@ class acp_extensions $action = $request->variable('action', 'list'); $ext_name = $request->variable('ext_name', ''); + // If they've specificed an extension, let's load the metadata manager and validate it. + if ($ext_name) + { + $md_manager = new phpbb_extension_metadata_manager($ext_name, $db, $phpbb_extension_manager, $phpbb_root_path, ".$phpEx", $template, $config); + + if ($md_manager->get_metadata('all') === false) + { + trigger_error('EXTENSION_INVALID'); + } + } + // What are we doing? switch ($action) { @@ -47,6 +58,11 @@ class acp_extensions break; case 'enable_pre': + if (!$md_manager->validate_enable()) + { + trigger_error('EXTENSION_NOT_AVAILABLE'); + } + $this->tpl_name = 'acp_ext_enable'; $template->assign_vars(array( @@ -56,10 +72,15 @@ class acp_extensions break; case 'enable': + if (!$md_manager->validate_enable()) + { + trigger_error('EXTENSION_NOT_AVAILABLE'); + } + if ($phpbb_extension_manager->enable_step($ext_name)) { $template->assign_var('S_NEXT_STEP', true); - + meta_refresh(0, $this->u_action . '&action=enable&ext_name=' . $ext_name); } @@ -76,14 +97,14 @@ class acp_extensions $template->assign_vars(array( 'PRE' => true, 'U_DISABLE' => $this->u_action . '&action=disable&ext_name=' . $ext_name, - )); - break; + )); + break; case 'disable': if ($phpbb_extension_manager->disable_step($ext_name)) { $template->assign_var('S_NEXT_STEP', true); - + meta_refresh(0, $this->u_action . '&action=disable&ext_name=' . $ext_name); } @@ -101,13 +122,13 @@ class acp_extensions 'PRE' => true, 'U_PURGE' => $this->u_action . '&action=purge&ext_name=' . $ext_name, )); - break; + break; case 'purge': if ($phpbb_extension_manager->purge_step($ext_name)) { $template->assign_var('S_NEXT_STEP', true); - + meta_refresh(0, $this->u_action . '&action=purge&ext_name=' . $ext_name); } @@ -132,12 +153,8 @@ class acp_extensions break;*/ case 'details': - $md_manager = new phpbb_extension_metadata_manager($ext_name, $db, $phpbb_extension_manager, $phpbb_root_path, ".$phpEx", $template); - - if ($md_manager->get_metadata('all', true) === false) - { - trigger_error('EXTENSION_INVALID'); - } + // Output it to the template + $md_manager->output_template_data(); $this->tpl_name = 'acp_ext_details'; break; @@ -146,7 +163,7 @@ class acp_extensions /** * Lists all the enabled extensions and dumps to the template - * + * * @param $phpbb_extension_manager An instance of the extension manager * @param $template An instance of the template engine * @return null @@ -156,7 +173,7 @@ class acp_extensions foreach ($phpbb_extension_manager->all_enabled() as $name => $location) { $md_manager = $phpbb_extension_manager->get_extension_metadata($name, $template); - + $template->assign_block_vars('enabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), @@ -169,7 +186,7 @@ class acp_extensions /** * Lists all the disabled extensions and dumps to the template - * + * * @param $phpbb_extension_manager An instance of the extension manager * @param $template An instance of the template engine * @return null @@ -179,7 +196,7 @@ class acp_extensions foreach ($phpbb_extension_manager->all_disabled() as $name => $location) { $md_manager = $phpbb_extension_manager->get_extension_metadata($name, $template); - + $template->assign_block_vars('disabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), @@ -193,7 +210,7 @@ class acp_extensions /** * Lists all the available extensions and dumps to the template - * + * * @param $phpbb_extension_manager An instance of the extension manager * @param $template An instance of the template engine * @return null diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index e7ceef6ad5..9dfc0a067c 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -23,6 +23,7 @@ if (!defined('IN_PHPBB')) class phpbb_extension_manager { protected $db; + protected $config; protected $cache; protected $php_ext; protected $extensions; @@ -34,16 +35,18 @@ class phpbb_extension_manager * Creates a manager and loads information from database * * @param dbal $db A database connection + * @param phpbb_config $config phpbb_config * @param string $extension_table The name of the table holding extensions * @param string $phpbb_root_path Path to the phpbb includes directory. * @param string $php_ext php file extension * @param phpbb_cache_driver_interface $cache A cache instance or null * @param string $cache_name The name of the cache variable, defaults to _ext */ - public function __construct(dbal $db, $extension_table, $phpbb_root_path, $php_ext = '.php', phpbb_cache_driver_interface $cache = null, $cache_name = '_ext') + public function __construct(dbal $db, phpbb_config $config, $extension_table, $phpbb_root_path, $php_ext = '.php', phpbb_cache_driver_interface $cache = null, $cache_name = '_ext') { $this->phpbb_root_path = $phpbb_root_path; $this->db = $db; + $this->config = $config; $this->cache = $cache; $this->php_ext = $php_ext; $this->extension_table = $extension_table; @@ -130,7 +133,7 @@ class phpbb_extension_manager */ public function get_extension_metadata($name, phpbb_template $template) { - return new phpbb_extension_metadata_manager($name, $this->db, $this, $this->phpbb_root_path, $this->phpEx, $template); + return new phpbb_extension_metadata_manager($name, $this->db, $this, $this->phpbb_root_path, $this->php_ext, $template, $this->config); } /** diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index 6af02e47b7..0e0b609a68 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -31,18 +31,71 @@ class phpbb_extension_metadata_manager public $metadata; protected $metadata_file; + /** + * Array of validation regular expressions, see __call() + * + * @var mixed + */ + protected $validation = array( + 'name' => '#^[a-zA-Z0-9_\x7f-\xff]{2,}/[a-zA-Z0-9_\x7f-\xff]{2,}$#', + 'type' => '#^phpbb3-extension$#', + 'description' => '#.*#', + 'version' => '#.+#', + 'licence' => '#.+#', + 'extra' => array( + 'display-name' => '#.*#', + ), + ); + + /** + * Magic method to catch validation calls + * + * @param string $name + * @param mixed $arguments + * @return int + */ + public function __call($name, $arguments) + { + // Validation Magic methods + if (strpos($name, 'validate_') === 0) + { + // Remove validate_ + $name = substr($name, 9); + + // Replace underscores with dashes (underscores are not used) + $name = str_replace('_', '-', $name); + + if (strpos($name, 'extra-') === 0) + { + // Remove extra_ + $name = substr($name, 6); + + if (isset($this->validation['extra'][$name])) + { + // Extra means it's optional, so return true if it does not exist + return (isset($this->metadata['extra'][$name])) ? preg_match($this->validation['extra'][$name], $this->metadata['extra'][$name]) : true; + } + } + else if (isset($this->validation[$name])) + { + return preg_match($this->validation[$name], $this->metadata[$name]); + } + } + } + /** * Creates the metadata manager - * + * * @param dbal $db A database connection * @param string $extension_manager An instance of the phpbb extension manager * @param string $phpbb_root_path Path to the phpbb includes directory. * @param string $phpEx php file extension */ - public function __construct($ext_name, dbal $db, phpbb_extension_manager $extension_manager, $phpbb_root_path, $phpEx = '.php', phpbb_template $template) + public function __construct($ext_name, dbal $db, phpbb_extension_manager $extension_manager, $phpbb_root_path, $phpEx = '.php', phpbb_template $template, phpbb_config $config) { $this->phpbb_root_path = $phpbb_root_path; $this->db = $db; + $this->config = $config; $this->phpEx = $phpEx; $this->template = $template; $this->extension_manager = $extension_manager; @@ -53,12 +106,11 @@ class phpbb_extension_metadata_manager /** * Processes and gets the metadata requested - * - * @param string $element All for all metadata that it has and is valid, otherwise specify which section you want by its shorthand term. - * @param boolean $template_output True if you want the requested metadata assigned to template vars (only works on the 'all" case - * @return array Contains all of the requested metadata + * + * @param string $element All for all metadata that it has and is valid, otherwise specify which section you want by its shorthand term. + * @return bool|array Contains all of the requested metadata or bool False if not valid */ - public function get_metadata($element = 'all', $template_output = false) + public function get_metadata($element = 'all') { // TODO: Check ext_name exists and is an extension that exists if (!$this->set_metadata_file()) @@ -66,34 +118,37 @@ class phpbb_extension_metadata_manager return false; } + // Fetch the metadata if (!$this->fetch_metadata()) { return false; } - switch ($element) + // Clean the metadata + if (!$this->clean_metadata_array()) + { + return false; + } + + switch ($element) { case 'all': default: - if (!$this->clean_metadata_array()) + // Validate the metadata + if (!$this->validate_metadata_array()) { return false; } - if ($template_output) - { - $this->output_template_data(); - } - return $this->metadata; break; - + case 'name': return ($this->validate_name()) ? $this->metadata['name'] : false; break; - + case 'display-name': - if ($this->validate_extra_display_name()) + if (isset($this->metadata['extra']['display-name']) && $this->validate_extra_display_name()) { return $this->metadata['extra']['display-name']; } @@ -108,7 +163,7 @@ class phpbb_extension_metadata_manager /** * Sets the filepath of the metadata file - * + * * @return boolean Set to true if it exists */ private function set_metadata_file() @@ -129,122 +184,156 @@ class phpbb_extension_metadata_manager } /** - * This array handles the validation and cleaning of the array - * - * @return array Contains the cleaned and validated metadata array + * Gets the contents of the composer.json file + * + * @return bool True of false (if loading succeeded or failed) */ - private function clean_metadata_array() - { - if (!$this->validate_name() || !$this->validate_type() || !$this->validate_licence() || !$this->validate_description() || !$this->validate_version() || !$this->validate_require_phpbb() || !$this->validate_extra_display_name()) + private function fetch_metadata() + { + if (!file_exists($this->metadata_file)) { return false; } - - $this->check_for_optional(true); + else + { + if (!($file_contents = file_get_contents($this->metadata_file))) + { + return false; + } -// TODO: Remove all parts of the array we don't want or shouldn't be there due to nub mod authors -// $this->metadata = $metadata_finished; + if (($metadata = json_decode($file_contents, true)) === NULL) + { + return false; + } - return $this->metadata; - } + $this->metadata = $metadata; - /** - * Validates the contents of the name field - * - * @return boolean True when passes validation - */ - private function validate_name() - { - return preg_match('#^[a-zA-Z0-9_\x7f-\xff]{2,}/[a-zA-Z0-9_\x7f-\xff]{2,}$#', $this->metadata['name']); + return true; + } } /** - * Validates the contents of the type field - * - * @return boolean True when passes validation + * This array handles the validation and cleaning of the array + * + * @return array Contains the cleaned and validated metadata array */ - private function validate_type() + private function clean_metadata_array() { - return $this->metadata['type'] == 'phpbb3-extension'; - } +// TODO: Remove all parts of the array we don't want or shouldn't be there due to nub mod authors +// $this->metadata = $metadata_finished; - /** - * Validates the contents of the description field - * - * @return boolean True when passes validation - */ - private function validate_description() - { - return true;//preg_match('#^{10,}$#', $this->metadata['description']); + return $this->metadata; } /** - * Validates the contents of the version field - * - * @return boolean True when passes validation + * This array handles the validation of strings + * + * @return bool True if validation succeeded, False if failed */ - private function validate_version() + public function validate_metadata_array() { - return preg_match('#^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}#', $this->metadata['version']); + $validate = array( + 'name', + 'type', + 'licence', + 'description', + 'version', + 'extra_display-name', + ); + + foreach ($validate as $type) + { + $type = 'validate_' . $type; + + if (!$this->$type()) + { + return false; + } + } + + return true; } /** - * Validates the contents of the license field - * - * @return boolean True when passes validation + * This array handles the verification that this extension can be enabled on this board + * + * @return bool True if validation succeeded, False if failed */ - private function validate_licence() + public function validate_enable() { - // Nothing to validate except existence - return isset($this->metadata['licence']); + $validate = array( + 'require_phpbb', + 'require_php', + ); + + foreach ($validate as $type) + { + $type = 'validate_' . $type; + + if (!$this->$type()) + { + return false; + } + } + + return true; } + /** * Validates the contents of the phpbb requirement field - * + * * @return boolean True when passes validation */ private function validate_require_phpbb() { - return (preg_match('#^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}$#', $this->metadata['require']['phpbb']) && version_compare($this->metadata['require']['phpbb'], '3.1.0', '>=')); + if (!isset($this->metadata['require']['phpbb'])) + { + return true; + } + + return $this->_validate_version($this->metadata['require']['phpbb'], $this->config['version']); } /** - * Validates the contents of the display name field - * + * Validates the contents of the php requirement field + * * @return boolean True when passes validation */ - private function validate_extra_display_name() + private function validate_require_php() { - return true;//preg_match('#^[a-zA-Z0-9_]{2,0}$#', $this->metadata['name']); + if (!isset($this->metadata['require']['php'])) + { + return true; + } + + return $this->_validate_version($this->metadata['require']['php'], phpversion()); } /** - * Checks which optional fields exist - * - * @return boolean False if any that exist fail validation, otherwise true. - */ - public function check_for_optional() + * Version validation helper + * + * @param string $string The string for comparing to a version + * @param string $current_version The version to compare to + * @return bool True/False if meets version requirements + */ + private function _validate_version($string, $current_version) { - if ((isset($this->metadata['require']['php']) && !$this->validate_require_php()) || (isset($this->metadata['time']) && !$this->validate_time()) || (isset($this->metadata['validate_homepage']) && !$this->validate_homepage())) + // Allow them to specify their own comparison operator (ex: <3.1.2, >=3.1.0) + $comparison_matches = false; + preg_match('#[=<>]+#', $string, $comparison_matches); + + if (!empty($comparison_matches)) { - return false; + return version_compare($current_version, str_replace(array($comparison_matches[0], ' '), '', $string), $comparison_matches[0]); } - } - /** - * Validates the contents of the php requirement field - * - * @return boolean True when passes validation - */ - private function validate_require_php() - { - return (preg_match('#^[0-9]{1,2}\.[0-9]{1,2}\.[0-9]{1,2}$#', $this->metadata['require']['php']) && version_compare($this->metadata['require']['php'], phpversion(), '>=')); + return version_compare($current_version, $string, '>='); } /** * Validates the contents of the time field - * + * * @return boolean True when passes validation */ private function validate_time() @@ -255,7 +344,7 @@ class phpbb_extension_metadata_manager /** * Validates the contents of the homepage field - * + * * @return boolean True when passes validation */ private function validate_homepage() @@ -265,7 +354,7 @@ class phpbb_extension_metadata_manager /** * Validates the contents of the authors field - * + * * @return boolean True when passes validation */ private function validate_authors() @@ -291,38 +380,9 @@ class phpbb_extension_metadata_manager return true; } - /** - * Gets the contents of the composer.json file - * - * @return bool True of false (if loading succeeded or failed) - */ - private function fetch_metadata() - { - if (!file_exists($this->metadata_file)) - { - return false; - } - else - { - if (!($file_contents = file_get_contents($this->metadata_file))) - { - return false; - } - - if (($metadata = json_decode($file_contents, true)) === NULL) - { - return false; - } - - $this->metadata = $metadata; - - return true; - } - } - /** * Outputs the metadata into the template - * + * * @return null */ public function output_template_data() @@ -350,7 +410,7 @@ class phpbb_extension_metadata_manager 'AUTHOR_ROLE' => (isset($author['role'])) ? htmlspecialchars($author['role']) : '', )); } - + return; } } diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 502b3bb1a4..0b470ced26 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -683,12 +683,12 @@ function _write_result($no_updates, $errored, $error_ary) function _add_modules($modules_to_install) { - global $phpbb_root_path, $phpEx, $db, $phpbb_extension_manager; + global $phpbb_root_path, $phpEx, $db, $phpbb_extension_manager, $config; // modules require an extension manager if (empty($phpbb_extension_manager)) { - $phpbb_extension_manager = new phpbb_extension_manager($db, EXT_TABLE, $phpbb_root_path, ".$phpEx"); + $phpbb_extension_manager = new phpbb_extension_manager($db, $config, EXT_TABLE, $phpbb_root_path, ".$phpEx"); } include_once($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx); diff --git a/phpBB/install/install_install.php b/phpBB/install/install_install.php index 23593ee51f..9162d5ab60 100644 --- a/phpBB/install/install_install.php +++ b/phpBB/install/install_install.php @@ -250,7 +250,7 @@ class install_install extends module 'S_EXPLAIN' => true, 'S_LEGEND' => false, )); - + // Check for php json support if (@extension_loaded('json')) { @@ -1481,12 +1481,12 @@ class install_install extends module */ function add_modules($mode, $sub) { - global $db, $lang, $phpbb_root_path, $phpEx, $phpbb_extension_manager; + global $db, $lang, $phpbb_root_path, $phpEx, $phpbb_extension_manager, $config; // modules require an extension manager if (empty($phpbb_extension_manager)) { - $phpbb_extension_manager = new phpbb_extension_manager($db, EXT_TABLE, $phpbb_root_path, ".$phpEx"); + $phpbb_extension_manager = new phpbb_extension_manager($db, $config, EXT_TABLE, $phpbb_root_path, ".$phpEx"); } include_once($phpbb_root_path . 'includes/acp/acp_modules.' . $phpEx); diff --git a/phpBB/language/en/acp/extensions.php b/phpBB/language/en/acp/extensions.php index 66f3665757..547d14d2b9 100644 --- a/phpBB/language/en/acp/extensions.php +++ b/phpBB/language/en/acp/extensions.php @@ -1,11 +1,11 @@ 'Extension', - 'EXTENSIONS' => 'Extensions', - 'EXTENSIONS_ADMIN' => 'Extensions Manager', - 'EXTENSIONS_EXPLAIN' => 'The Extensions Manager is a tool in your phpBB Board which allows you to manage all of your extensions statuses and view information about them.', - 'EXTENSION_INVALID' => 'The selected extension is not valid.', + 'EXTENSION' => 'Extension', + 'EXTENSIONS' => 'Extensions', + 'EXTENSIONS_ADMIN' => 'Extensions Manager', + 'EXTENSIONS_EXPLAIN' => 'The Extensions Manager is a tool in your phpBB Board which allows you to manage all of your extensions statuses and view information about them.', + 'EXTENSION_INVALID' => 'The selected extension is not valid.', + 'EXTENSION_NOT_AVAILABLE' => 'The selected extension is not available for this board, please verify your phpBB and PHP versions are allowed (see the details page).', 'DETAILS' => 'Details', @@ -63,27 +64,27 @@ $lang = array_merge($lang, array( 'DISABLE_IN_PROGRESS' => 'The extension is currently being disabled, please do not leave this page or refresh until it is completed.', 'ENABLE_IN_PROGRESS' => 'The extension is currently being installed, please do not leave this page or refresh until it is completed.', 'PURGE_IN_PROGRESS' => 'The extension is currently being purged, please do not leave this page or refresh until it is completed.', - 'ENABLE_SUCCESS' => 'The extension was enabled successfully', + 'ENABLE_SUCCESS' => 'The extension was enabled successfully', 'DISABLE_SUCCESS' => 'The extension was disabled successfully', 'PURGE_SUCCESS' => 'The extension was purged successfully', - 'DELETE_SUCCESS' => 'The extension was deleted successfully', + 'DELETE_SUCCESS' => 'The extension was deleted successfully', 'ENABLE_FAIL' => 'The extension could not be enabled', 'DISABLE_FAIL' => 'The extension could not be disabled', 'PURGE_FAIL' => 'The extension could not be purged', 'DELETE_FAIL' => 'The extension could not be deleted', - 'EXTENSION_NAME' => 'Extension Name', - 'EXTENSION_ACTIONS' => 'Actions', - 'EXTENSION_OPTIONS' => 'Options', + 'EXTENSION_NAME' => 'Extension Name', + 'EXTENSION_ACTIONS' => 'Actions', + 'EXTENSION_OPTIONS' => 'Options', - 'ENABLE_CONFIRM' => 'Are you sure that you wish to enable this extension?', - 'DISABLE_CONFIRM' => 'Are you sure that you wish to disable this extension?', - 'PURGE_CONFIRM' => 'Are you sure that you wish to purge this extension's data? This cannot be undone.', - 'DELETE_CONFIRM' => 'Are you sure that you wish to data this extension's files and clear its data? This cannot be undone.', + 'ENABLE_CONFIRM' => 'Are you sure that you wish to enable this extension?', + 'DISABLE_CONFIRM' => 'Are you sure that you wish to disable this extension?', + 'PURGE_CONFIRM' => 'Are you sure that you wish to purge this extension's data? This cannot be undone.', + 'DELETE_CONFIRM' => 'Are you sure that you wish to data this extension's files and clear its data? This cannot be undone.', - 'WARNING' => 'Warning', - 'RETURN' => 'Return', + 'WARNING' => 'Warning', + 'RETURN' => 'Return', 'EXT_DETAILS' => 'Extension Details', 'DISPLAY_NAME' => 'Display Name', -- cgit v1.2.1 From 4314284de12ceac5ae0792f3f4014b765d75d332 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 23 Jul 2012 15:22:48 -0500 Subject: [ticket/10631] Remove code duplication PHPBB3-10631 --- phpBB/includes/extension/metadata_manager.php | 33 ++++++++++++++++----------- 1 file changed, 20 insertions(+), 13 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index 0e0b609a68..c5e9baf1e7 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -232,22 +232,29 @@ class phpbb_extension_metadata_manager */ public function validate_metadata_array() { - $validate = array( - 'name', - 'type', - 'licence', - 'description', - 'version', - 'extra_display-name', - ); - - foreach ($validate as $type) + foreach ($this->validation as $name => $regex) { - $type = 'validate_' . $type; + if (is_array($regex)) + { + foreach ($regex as $extra_name => $extra_regex) + { + $type = 'validate_' . $name . '_' . $extra_name; - if (!$this->$type()) + if (!$this->$type()) + { + return false; + } + } + } + else { - return false; + + $type = 'validate_' . $name; + + if (!$this->$type()) + { + return false; + } } } -- cgit v1.2.1 From 8df9963fcc7e2962b6b4e1e32e809f2d8fe00835 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 23 Jul 2012 15:39:13 -0500 Subject: [ticket/10631] Additional validation PHPBB3-10631 --- phpBB/includes/extension/metadata_manager.php | 76 +++++++++------------------ 1 file changed, 25 insertions(+), 51 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index c5e9baf1e7..d2dc72e5fc 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -42,6 +42,7 @@ class phpbb_extension_metadata_manager 'description' => '#.*#', 'version' => '#.+#', 'licence' => '#.+#', + //'homepage' => '#([\d\w-.]+?\.(a[cdefgilmnoqrstuwz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvxyz]|d[ejkmnoz]|e[ceghrst]|f[ijkmnor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eouw]|s[abcdeghijklmnortuvyz]|t[cdfghjkmnoprtvwz]|u[augkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]|aero|arpa|biz|com|coop|edu|info|int|gov|mil|museum|name|net|org|pro)(\b|\W(? array( 'display-name' => '#.*#', ), @@ -76,7 +77,7 @@ class phpbb_extension_metadata_manager return (isset($this->metadata['extra'][$name])) ? preg_match($this->validation['extra'][$name], $this->metadata['extra'][$name]) : true; } } - else if (isset($this->validation[$name])) + else if (isset($this->validation[$name]) && isset($this->metadata[$name])) { return preg_match($this->validation[$name], $this->metadata[$name]); } @@ -258,6 +259,29 @@ class phpbb_extension_metadata_manager } } + return $this->validate_authors(); + } + + /** + * Validates the contents of the authors field + * + * @return boolean True when passes validation + */ + private function validate_authors() + { + if (empty($this->metadata['authors'])) + { + return false; + } + + foreach ($this->metadata['authors'] as $author) + { + if (!isset($author['name'])) + { + return false; + } + } + return true; } @@ -338,55 +362,6 @@ class phpbb_extension_metadata_manager return version_compare($current_version, $string, '>='); } - /** - * Validates the contents of the time field - * - * @return boolean True when passes validation - */ - private function validate_time() - { - // Need to validate - return true; - } - - /** - * Validates the contents of the homepage field - * - * @return boolean True when passes validation - */ - private function validate_homepage() - { - return preg_match('#([\d\w-.]+?\.(a[cdefgilmnoqrstuwz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvxyz]|d[ejkmnoz]|e[ceghrst]|f[ijkmnor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eouw]|s[abcdeghijklmnortuvyz]|t[cdfghjkmnoprtvwz]|u[augkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]|aero|arpa|biz|com|coop|edu|info|int|gov|mil|museum|name|net|org|pro)(\b|\W(?metadata['homepage']); - } - - /** - * Validates the contents of the authors field - * - * @return boolean True when passes validation - */ - private function validate_authors() - { - // Need to validate - $number_authors = sizeof($this->metadata['authors']); // Might be helpful later on - - if (!isset($this->metadata['authors']['1'])) - { - return false; - } - else - { - foreach ($this->metadata['authors'] as $author) - { - if (!isset($author['name'])) - { - return false; - } - } - } - - return true; - } - /** * Outputs the metadata into the template * @@ -394,7 +369,6 @@ class phpbb_extension_metadata_manager */ public function output_template_data() { - $this->template->assign_vars(array( 'MD_NAME' => htmlspecialchars($this->metadata['name']), 'MD_TYPE' => htmlspecialchars($this->metadata['type']), -- cgit v1.2.1 From 9c0cd2693fd61c9528aa5fcbc3dff9de73515ebe Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 23 Jul 2012 16:04:29 -0500 Subject: [ticket/10631] Make the enable/disable/purge notices more visable. PHPBB3-10631 --- phpBB/adm/style/acp_ext_disable.html | 12 +++++++----- phpBB/adm/style/acp_ext_enable.html | 12 +++++++----- phpBB/adm/style/acp_ext_purge.html | 12 +++++++----- phpBB/language/en/acp/extensions.php | 2 +- 4 files changed, 22 insertions(+), 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_ext_disable.html b/phpBB/adm/style/acp_ext_disable.html index e47ba2d8b9..1f0bbe14c8 100644 --- a/phpBB/adm/style/acp_ext_disable.html +++ b/phpBB/adm/style/acp_ext_disable.html @@ -6,13 +6,15 @@

    {L_EXTENSIONS_EXPLAIN}

    {L_ENABLE_EXPLAIN}

    - - -

    {L_DISABLE_CONFIRM}

    - + + +
    +

    {L_DISABLE_CONFIRM}

    +
    +
    - {L_DISABLE} + {L_DISABLE}
    diff --git a/phpBB/adm/style/acp_ext_enable.html b/phpBB/adm/style/acp_ext_enable.html index 4b0f8bfdd7..9f278bfbe0 100644 --- a/phpBB/adm/style/acp_ext_enable.html +++ b/phpBB/adm/style/acp_ext_enable.html @@ -6,13 +6,15 @@

    {L_EXTENSIONS_EXPLAIN}

    {L_ENABLE_EXPLAIN}

    - - -

    {L_ENABLE_CONFIRM}

    - + + +
    +

    {L_ENABLE_CONFIRM}

    +
    +
    - {L_ENABLE} + {L_ENABLE}
    diff --git a/phpBB/adm/style/acp_ext_purge.html b/phpBB/adm/style/acp_ext_purge.html index 7255057d04..816fd872b9 100644 --- a/phpBB/adm/style/acp_ext_purge.html +++ b/phpBB/adm/style/acp_ext_purge.html @@ -6,13 +6,15 @@

    {L_EXTENSIONS_EXPLAIN}

    {L_ENABLE_EXPLAIN}

    - - -

    {L_PURGE_CONFIRM}

    - + + +
    +

    {L_PURGE_CONFIRM}

    +
    +
    - {L_PURGE} + {L_PURGE}
    diff --git a/phpBB/language/en/acp/extensions.php b/phpBB/language/en/acp/extensions.php index 547d14d2b9..a16e13d979 100644 --- a/phpBB/language/en/acp/extensions.php +++ b/phpBB/language/en/acp/extensions.php @@ -80,7 +80,7 @@ $lang = array_merge($lang, array( 'ENABLE_CONFIRM' => 'Are you sure that you wish to enable this extension?', 'DISABLE_CONFIRM' => 'Are you sure that you wish to disable this extension?', - 'PURGE_CONFIRM' => 'Are you sure that you wish to purge this extension's data? This cannot be undone.', + 'PURGE_CONFIRM' => 'Are you sure that you wish to purge this extension's data? This will remove all settings stored for this extension and cannot be undone!', 'DELETE_CONFIRM' => 'Are you sure that you wish to data this extension's files and clear its data? This cannot be undone.', 'WARNING' => 'Warning', -- cgit v1.2.1 From 2273ae2b34071160ff930ca8d49326b8dd308899 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 23 Jul 2012 17:05:03 -0500 Subject: [ticket/10631] Remove references to delete extension PHPBB3-10631 --- phpBB/adm/style/acp_ext_delete.html | 27 --------------------------- phpBB/adm/style/acp_ext_list.html | 5 ++--- phpBB/includes/acp/acp_extensions.php | 15 --------------- phpBB/language/en/acp/extensions.php | 5 ----- 4 files changed, 2 insertions(+), 50 deletions(-) delete mode 100644 phpBB/adm/style/acp_ext_delete.html (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_ext_delete.html b/phpBB/adm/style/acp_ext_delete.html deleted file mode 100644 index f9a52861e5..0000000000 --- a/phpBB/adm/style/acp_ext_delete.html +++ /dev/null @@ -1,27 +0,0 @@ - - - - -

    {L_EXTENSIONS_ADMIN}

    - -

    {L_EXTENSIONS_EXPLAIN}

    -

    {L_ENABLE_EXPLAIN}

    - - -

    {L_DELETE_CONFIRM}

    - -
    -
    - {L_DELETE} - -
    -
    - -
    -

    {L_DELETE_SUCCESS}

    -
    -

    {L_RETURN}

    -
    - - - diff --git a/phpBB/adm/style/acp_ext_list.html b/phpBB/adm/style/acp_ext_list.html index ef3bbb87cc..b3b1b84949 100644 --- a/phpBB/adm/style/acp_ext_list.html +++ b/phpBB/adm/style/acp_ext_list.html @@ -40,12 +40,11 @@ {disabled.EXT_NAME} {L_DETAILS} {L_ENABLE}  - {L_PURGE}  - {L_DELETE} + {L_PURGE}  - + diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index ce32640c33..0e1d5c88a8 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -139,19 +139,6 @@ class acp_extensions )); break; - /*case 'delete_pre': - $this->tpl_name = 'acp_ext_delete'; - - $template->assign_vars(array( - 'PRE' => true, - 'U_DELETE' => $this->u_action . '&action=delete&ext_name=' . $ext_name, - )); - break; - - case 'delete': - $this->tpl_name = 'acp_ext_delete'; - break;*/ - case 'details': // Output it to the template $md_manager->output_template_data(); @@ -202,7 +189,6 @@ class acp_extensions 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, 'U_PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $name, - //'U_DELETE' => $this->u_action . '&action=delete_pre&ext_name=' . $name, 'U_ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $name, )); } @@ -227,7 +213,6 @@ class acp_extensions 'EXT_NAME' => $md_manager->get_metadata('display-name'), 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, - //'U_DELETE' => $this->u_action . '&action=delete_pre&ext_name=' . $name, 'U_ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $name, )); } diff --git a/phpBB/language/en/acp/extensions.php b/phpBB/language/en/acp/extensions.php index a16e13d979..903ec249a8 100644 --- a/phpBB/language/en/acp/extensions.php +++ b/phpBB/language/en/acp/extensions.php @@ -48,13 +48,11 @@ $lang = array_merge($lang, array( 'ENABLED' => 'Enabled', 'DISABLED' => 'Disabled', 'PURGED' => 'Purged', - 'DELETED' => 'Deleted', 'UPLOADED' => 'Uploaded', 'ENABLE' => 'Enable', 'DISABLE' => 'Disable', 'PURGE' => 'Purge', - 'DELETE' => 'Delete', 'ENABLE_EXPLAIN' => 'Enabling an extension allows you to use it on your board.', 'DISABLE_EXPLAIN' => 'Disabling an extension retains its files and settings but removes any functionality added by the extension.', @@ -67,12 +65,10 @@ $lang = array_merge($lang, array( 'ENABLE_SUCCESS' => 'The extension was enabled successfully', 'DISABLE_SUCCESS' => 'The extension was disabled successfully', 'PURGE_SUCCESS' => 'The extension was purged successfully', - 'DELETE_SUCCESS' => 'The extension was deleted successfully', 'ENABLE_FAIL' => 'The extension could not be enabled', 'DISABLE_FAIL' => 'The extension could not be disabled', 'PURGE_FAIL' => 'The extension could not be purged', - 'DELETE_FAIL' => 'The extension could not be deleted', 'EXTENSION_NAME' => 'Extension Name', 'EXTENSION_ACTIONS' => 'Actions', @@ -81,7 +77,6 @@ $lang = array_merge($lang, array( 'ENABLE_CONFIRM' => 'Are you sure that you wish to enable this extension?', 'DISABLE_CONFIRM' => 'Are you sure that you wish to disable this extension?', 'PURGE_CONFIRM' => 'Are you sure that you wish to purge this extension's data? This will remove all settings stored for this extension and cannot be undone!', - 'DELETE_CONFIRM' => 'Are you sure that you wish to data this extension's files and clear its data? This cannot be undone.', 'WARNING' => 'Warning', 'RETURN' => 'Return', -- cgit v1.2.1 From 106c105113886f9a9e603dbb11549c06049b255f Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 23 Jul 2012 18:22:35 -0500 Subject: [ticket/10631] Fix some issues as noted in github comments, significantly simplified validation PHPBB3-10631 --- phpBB/adm/style/acp_ext_details.html | 64 ++++++------ phpBB/includes/acp/acp_extensions.php | 12 +-- phpBB/includes/extension/manager.php | 2 +- phpBB/includes/extension/metadata_manager.php | 144 ++++++++------------------ 4 files changed, 82 insertions(+), 140 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_ext_details.html b/phpBB/adm/style/acp_ext_details.html index 5af9603a75..7408e88758 100644 --- a/phpBB/adm/style/acp_ext_details.html +++ b/phpBB/adm/style/acp_ext_details.html @@ -16,36 +16,35 @@
    {MD_NAME}
    -
    -
    -

    {MD_TYPE}

    -
    +

    {MD_DESCRIPTION}

    +

    {MD_VERSION}

    +

    {MD_HOMEPAGE}

    - + +

    {MD_TIME}

    +

    {MD_LICENCE}

    +
    {L_REQUIREMENTS} @@ -61,34 +60,35 @@
    +
    {L_AUTHOR_INFORMATION} -
    -
    -
    {md_authors.AUTHOR_NAME}
    -
    - -
    -
    -
    {md_authors.AUTHOR_EMAIL}
    -
    - - -
    -
    -
    {md_authors.AUTHOR_HOMEPAGE}
    -
    - - -
    -
    -
    {md_authors.AUTHOR_ROLE}
    -
    - - -

    +
    +
    +
    +
    {md_authors.AUTHOR_NAME}
    +
    + +
    +
    +
    {md_authors.AUTHOR_EMAIL}
    +
    + + +
    +
    +
    {md_authors.AUTHOR_HOMEPAGE}
    +
    + + +
    +
    +
    {md_authors.AUTHOR_ROLE}
    +
    + +
    diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index 0e1d5c88a8..0e825514e6 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -155,11 +155,11 @@ class acp_extensions * @param $template An instance of the template engine * @return null */ - private function list_enabled_exts(phpbb_extension_manager $phpbb_extension_manager, phpbb_template $template) + public function list_enabled_exts(phpbb_extension_manager $phpbb_extension_manager, phpbb_template $template) { foreach ($phpbb_extension_manager->all_enabled() as $name => $location) { - $md_manager = $phpbb_extension_manager->get_extension_metadata($name, $template); + $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $template); $template->assign_block_vars('enabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), @@ -178,11 +178,11 @@ class acp_extensions * @param $template An instance of the template engine * @return null */ - private function list_disabled_exts(phpbb_extension_manager $phpbb_extension_manager, phpbb_template $template) + public function list_disabled_exts(phpbb_extension_manager $phpbb_extension_manager, phpbb_template $template) { foreach ($phpbb_extension_manager->all_disabled() as $name => $location) { - $md_manager = $phpbb_extension_manager->get_extension_metadata($name, $template); + $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $template); $template->assign_block_vars('disabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), @@ -201,13 +201,13 @@ class acp_extensions * @param $template An instance of the template engine * @return null */ - function list_available_exts(phpbb_extension_manager $phpbb_extension_manager, phpbb_template $template) + public function list_available_exts(phpbb_extension_manager $phpbb_extension_manager, phpbb_template $template) { $uninstalled = array_diff_key($phpbb_extension_manager->all_available(), $phpbb_extension_manager->all_configured()); foreach ($uninstalled as $name => $location) { - $md_manager = $phpbb_extension_manager->get_extension_metadata($name, $template); + $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $template); $template->assign_block_vars('disabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index 9dfc0a067c..9342c936f9 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -131,7 +131,7 @@ class phpbb_extension_manager * @param string $template The template manager * @return phpbb_extension_metadata_manager Instance of the metadata manager */ - public function get_extension_metadata($name, phpbb_template $template) + public function get_extension_metadata_manager($name, phpbb_template $template) { return new phpbb_extension_metadata_manager($name, $this->db, $this, $this->phpbb_root_path, $this->php_ext, $template, $this->config); } diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index d2dc72e5fc..aa163b1190 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -28,62 +28,9 @@ class phpbb_extension_metadata_manager protected $phpbb_root_path; protected $template; protected $ext_name; - public $metadata; + protected $metadata; protected $metadata_file; - /** - * Array of validation regular expressions, see __call() - * - * @var mixed - */ - protected $validation = array( - 'name' => '#^[a-zA-Z0-9_\x7f-\xff]{2,}/[a-zA-Z0-9_\x7f-\xff]{2,}$#', - 'type' => '#^phpbb3-extension$#', - 'description' => '#.*#', - 'version' => '#.+#', - 'licence' => '#.+#', - //'homepage' => '#([\d\w-.]+?\.(a[cdefgilmnoqrstuwz]|b[abdefghijmnorstvwyz]|c[acdfghiklmnoruvxyz]|d[ejkmnoz]|e[ceghrst]|f[ijkmnor]|g[abdefghilmnpqrstuwy]|h[kmnrtu]|i[delmnoqrst]|j[emop]|k[eghimnprwyz]|l[abcikrstuvy]|m[acdghklmnopqrstuvwxyz]|n[acefgilopruz]|om|p[aefghklmnrstwy]|qa|r[eouw]|s[abcdeghijklmnortuvyz]|t[cdfghjkmnoprtvwz]|u[augkmsyz]|v[aceginu]|w[fs]|y[etu]|z[amw]|aero|arpa|biz|com|coop|edu|info|int|gov|mil|museum|name|net|org|pro)(\b|\W(? array( - 'display-name' => '#.*#', - ), - ); - - /** - * Magic method to catch validation calls - * - * @param string $name - * @param mixed $arguments - * @return int - */ - public function __call($name, $arguments) - { - // Validation Magic methods - if (strpos($name, 'validate_') === 0) - { - // Remove validate_ - $name = substr($name, 9); - - // Replace underscores with dashes (underscores are not used) - $name = str_replace('_', '-', $name); - - if (strpos($name, 'extra-') === 0) - { - // Remove extra_ - $name = substr($name, 6); - - if (isset($this->validation['extra'][$name])) - { - // Extra means it's optional, so return true if it does not exist - return (isset($this->metadata['extra'][$name])) ? preg_match($this->validation['extra'][$name], $this->metadata['extra'][$name]) : true; - } - } - else if (isset($this->validation[$name]) && isset($this->metadata[$name])) - { - return preg_match($this->validation[$name], $this->metadata[$name]); - } - } - } - /** * Creates the metadata manager * @@ -136,7 +83,7 @@ class phpbb_extension_metadata_manager case 'all': default: // Validate the metadata - if (!$this->validate_metadata_array()) + if (!$this->validate()) { return false; } @@ -145,17 +92,17 @@ class phpbb_extension_metadata_manager break; case 'name': - return ($this->validate_name()) ? $this->metadata['name'] : false; + return ($this->validate('name')) ? $this->metadata['name'] : false; break; case 'display-name': - if (isset($this->metadata['extra']['display-name']) && $this->validate_extra_display_name()) + if (isset($this->metadata['extra']['display-name'])) { return $this->metadata['extra']['display-name']; } else { - return ($this->validate_name()) ? $this->metadata['name'] : false; + return ($this->validate('name')) ? $this->metadata['name'] : false; } break; // TODO: Add remaining cases as needed @@ -216,7 +163,7 @@ class phpbb_extension_metadata_manager /** * This array handles the validation and cleaning of the array * - * @return array Contains the cleaned and validated metadata array + * @return array Contains the cleaned metadata array */ private function clean_metadata_array() { @@ -227,40 +174,44 @@ class phpbb_extension_metadata_manager } /** - * This array handles the validation of strings - * - * @return bool True if validation succeeded, False if failed - */ - public function validate_metadata_array() - { - foreach ($this->validation as $name => $regex) - { - if (is_array($regex)) - { - foreach ($regex as $extra_name => $extra_regex) - { - $type = 'validate_' . $name . '_' . $extra_name; + * Validate fields + * + * @param string $name ("all" for display and enable validation + * "display" for name, type, and authors + * "name", "type") + * @return Bool False if validation fails, true if valid + */ + public function validate($name = 'display') + { + // Basic fields + $fields = array( + 'name' => '#^[a-zA-Z0-9_\x7f-\xff]{2,}/[a-zA-Z0-9_\x7f-\xff]{2,}$#', + 'type' => '#^phpbb3-extension$#', + 'licence' => '#.+#', + 'version' => '#.+#', + ); + + if (isset($fields[$name])) + { + return (isset($this->metadata[$name])) ? (bool) preg_match($this->validation[$name], $this->metadata[$name]) : false; + } - if (!$this->$type()) - { - return false; - } - } - } - else + // Validate all fields + if ($name == 'all') + { + foreach ($fields as $field => $data) { - - $type = 'validate_' . $name; - - if (!$this->$type()) + if (!$this->validate($field)) { return false; } } + + return $this->validate_authors(); } - return $this->validate_authors(); - } + return true; + } /** * Validates the contents of the authors field @@ -292,19 +243,10 @@ class phpbb_extension_metadata_manager */ public function validate_enable() { - $validate = array( - 'require_phpbb', - 'require_php', - ); - - foreach ($validate as $type) + // Check for phpBB, PHP versions + if (!$this->validate_require_phpbb || !$this->validate_require_php) { - $type = 'validate_' . $type; - - if (!$this->$type()) - { - return false; - } + return false; } return true; @@ -372,10 +314,10 @@ class phpbb_extension_metadata_manager $this->template->assign_vars(array( 'MD_NAME' => htmlspecialchars($this->metadata['name']), 'MD_TYPE' => htmlspecialchars($this->metadata['type']), - 'MD_DESCRIPTION' => htmlspecialchars($this->metadata['description']), + 'MD_DESCRIPTION' => (isset($this->metadata['description'])) ? htmlspecialchars($this->metadata['description']) : '', 'MD_HOMEPAGE' => (isset($this->metadata['homepage'])) ? $this->metadata['homepage'] : '', - 'MD_VERSION' => htmlspecialchars($this->metadata['version']), - 'MD_TIME' => htmlspecialchars($this->metadata['time']), + 'MD_VERSION' => (isset($this->metadata['version'])) ? htmlspecialchars($this->metadata['version']) : '', + 'MD_TIME' => (isset($this->metadata['time'])) ? htmlspecialchars($this->metadata['time']) : '', 'MD_LICENCE' => htmlspecialchars($this->metadata['licence']), 'MD_REQUIRE_PHP' => (isset($this->metadata['require']['php'])) ? htmlspecialchars($this->metadata['require']['php']) : '', 'MD_REQUIRE_PHPBB' => (isset($this->metadata['require']['phpbb'])) ? htmlspecialchars($this->metadata['require']['phpbb']) : '', @@ -386,7 +328,7 @@ class phpbb_extension_metadata_manager { $this->template->assign_block_vars('md_authors', array( 'AUTHOR_NAME' => htmlspecialchars($author['name']), - 'AUTHOR_EMAIL' => $author['email'], + 'AUTHOR_EMAIL' => (isset($author['email'])) ? $author['email'] : '', 'AUTHOR_HOMEPAGE' => (isset($author['homepage'])) ? $author['homepage'] : '', 'AUTHOR_ROLE' => (isset($author['role'])) ? htmlspecialchars($author['role']) : '', )); -- cgit v1.2.1 From 89f4cf6a8c10f9b0875cf7f278016aff67eb38fc Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 23 Jul 2012 19:46:21 -0500 Subject: [ticket/10631] Use exceptions for errors. Build action list dynamically. PHPBB3-10631 --- phpBB/adm/style/acp_ext_list.html | 21 +++-- phpBB/includes/acp/acp_extensions.php | 111 +++++++++++++++++++------- phpBB/includes/exception/metadata.php | 69 ++++++++++++++++ phpBB/includes/extension/metadata_manager.php | 72 ++++++++--------- phpBB/language/en/acp/extensions.php | 2 +- 5 files changed, 205 insertions(+), 70 deletions(-) create mode 100644 phpBB/includes/exception/metadata.php (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_ext_list.html b/phpBB/adm/style/acp_ext_list.html index b3b1b84949..65051cbae0 100644 --- a/phpBB/adm/style/acp_ext_list.html +++ b/phpBB/adm/style/acp_ext_list.html @@ -26,11 +26,16 @@ {enabled.EXT_NAME} {L_DETAILS} - {L_DISABLE}  - | {L_PURGE} + + + {enabled.actions.L_ACTION} +  |  + + + {L_DISABLED} {L_EXTENSIONS} @@ -38,9 +43,15 @@ {disabled.EXT_NAME} - {L_DETAILS} - {L_ENABLE}  - {L_PURGE}  + + {L_DETAILS} + + + + {disabled.actions.L_ACTION} +  |  + + diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index 0e825514e6..a833c8c482 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -22,11 +22,21 @@ class acp_extensions { var $u_action; + private $db; + private $config; + private $template; + private $user; + function main() { // Start the page global $config, $user, $template, $request, $phpbb_extension_manager, $db, $phpbb_root_path, $phpEx; + $this->db = $db; + $this->config = $config; + $this->template = $template; + $this->user = $user; + $user->add_lang(array('install', 'acp/extensions')); $this->page_title = 'ACP_EXTENSIONS'; @@ -39,9 +49,10 @@ class acp_extensions { $md_manager = new phpbb_extension_metadata_manager($ext_name, $db, $phpbb_extension_manager, $phpbb_root_path, ".$phpEx", $template, $config); - if ($md_manager->get_metadata('all') === false) - { - trigger_error('EXTENSION_INVALID'); + try{ + $md_manager->get_metadata('all'); + } catch( Exception $e ) { + trigger_error($e); } } @@ -50,9 +61,9 @@ class acp_extensions { case 'list': default: - $this->list_enabled_exts($phpbb_extension_manager, $template); - $this->list_disabled_exts($phpbb_extension_manager, $template); - $this->list_available_exts($phpbb_extension_manager, $template); + $this->list_enabled_exts($phpbb_extension_manager); + $this->list_disabled_exts($phpbb_extension_manager); + $this->list_available_exts($phpbb_extension_manager); $this->tpl_name = 'acp_ext_list'; break; @@ -155,19 +166,28 @@ class acp_extensions * @param $template An instance of the template engine * @return null */ - public function list_enabled_exts(phpbb_extension_manager $phpbb_extension_manager, phpbb_template $template) + public function list_enabled_exts(phpbb_extension_manager $phpbb_extension_manager) { foreach ($phpbb_extension_manager->all_enabled() as $name => $location) { - $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $template); + $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $this->template); - $template->assign_block_vars('enabled', array( - 'EXT_NAME' => $md_manager->get_metadata('display-name'), + try { + $this->template->assign_block_vars('enabled', array( + 'EXT_NAME' => $md_manager->get_metadata('display-name'), - 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, - 'U_PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $name, - 'U_DISABLE' => $this->u_action . '&action=disable_pre&ext_name=' . $name, - )); + 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, + )); + + $this->output_actions('enabled', array( + 'DISABLE' => $this->u_action . '&action=disable_pre&ext_name=' . $name, + 'PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $name, + )); + } catch( Exception $e ) { + $this->template->assign_block_vars('disabled', array( + 'EXT_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), + )); + } } } @@ -178,19 +198,28 @@ class acp_extensions * @param $template An instance of the template engine * @return null */ - public function list_disabled_exts(phpbb_extension_manager $phpbb_extension_manager, phpbb_template $template) + public function list_disabled_exts(phpbb_extension_manager $phpbb_extension_manager) { foreach ($phpbb_extension_manager->all_disabled() as $name => $location) { - $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $template); + $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $this->template); - $template->assign_block_vars('disabled', array( - 'EXT_NAME' => $md_manager->get_metadata('display-name'), + try { + $this->template->assign_block_vars('disabled', array( + 'EXT_NAME' => $md_manager->get_metadata('display-name'), - 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, - 'U_PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $name, - 'U_ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $name, - )); + 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, + )); + + $this->output_actions('disabled', array( + 'ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $name, + 'PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $name, + )); + } catch( Exception $e ) { + $this->template->assign_block_vars('disabled', array( + 'EXT_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), + )); + } } } @@ -201,19 +230,45 @@ class acp_extensions * @param $template An instance of the template engine * @return null */ - public function list_available_exts(phpbb_extension_manager $phpbb_extension_manager, phpbb_template $template) + public function list_available_exts(phpbb_extension_manager $phpbb_extension_manager) { $uninstalled = array_diff_key($phpbb_extension_manager->all_available(), $phpbb_extension_manager->all_configured()); foreach ($uninstalled as $name => $location) { - $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $template); + $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $this->template); + + try { + $this->template->assign_block_vars('disabled', array( + 'EXT_NAME' => $md_manager->get_metadata('display-name'), + + 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, + )); - $template->assign_block_vars('disabled', array( - 'EXT_NAME' => $md_manager->get_metadata('display-name'), + $this->output_actions('disabled', array( + 'ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $name, + )); + } catch( Exception $e ) { + $this->template->assign_block_vars('disabled', array( + 'EXT_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), + )); + } + } + } - 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, - 'U_ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $name, + /** + * Output actions to a block + * + * @param string $block + * @param array $actions + */ + private function output_actions($block, $actions) + { + foreach ($actions as $lang => $url) + { + $this->template->assign_block_vars($block . '.actions', array( + 'L_ACTION' => $this->user->lang($lang), + 'U_ACTION' => $url, )); } } diff --git a/phpBB/includes/exception/metadata.php b/phpBB/includes/exception/metadata.php new file mode 100644 index 0000000000..93cc337f55 --- /dev/null +++ b/phpBB/includes/exception/metadata.php @@ -0,0 +1,69 @@ +code = $code; + $this->field_name = $field_name; + } + + public function __toString() + { + return sprintf($this->getErrorMessage(), $this->field_name); + } + + public function getErrorMessage() + { + switch ($this->code) + { + case self::NOT_SET: + return 'The "%s" meta field has not been set.'; + break; + + case self::INVALID: + return 'The "%s" meta field is not valid.'; + break; + + case self::FILE_GET_CONTENTS: + return 'file_get_contents failed on %s'; + break; + + case self::JSON_DECODE: + return 'json_decode failed on %s'; + break; + + case self::FILE_DOES_NOT_EXIST: + return 'Required file does not exist at %s'; + break; + + default: + return 'An unexpected error has occurred.'; + break; + } + } +} \ No newline at end of file diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index aa163b1190..126331ce1c 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -56,27 +56,18 @@ class phpbb_extension_metadata_manager * Processes and gets the metadata requested * * @param string $element All for all metadata that it has and is valid, otherwise specify which section you want by its shorthand term. - * @return bool|array Contains all of the requested metadata or bool False if not valid + * @return array Contains all of the requested metadata, throws an exception on failure */ public function get_metadata($element = 'all') { // TODO: Check ext_name exists and is an extension that exists - if (!$this->set_metadata_file()) - { - return false; - } + $this->set_metadata_file(); // Fetch the metadata - if (!$this->fetch_metadata()) - { - return false; - } + $this->fetch_metadata(); // Clean the metadata - if (!$this->clean_metadata_array()) - { - return false; - } + $this->clean_metadata_array(); switch ($element) { @@ -112,46 +103,42 @@ class phpbb_extension_metadata_manager /** * Sets the filepath of the metadata file * - * @return boolean Set to true if it exists + * @return boolean Set to true if it exists, throws an exception on failure */ private function set_metadata_file() { $ext_filepath = $this->extension_manager->get_extension_path($this->ext_name); - $metadata_filepath = $this->phpbb_root_path . $ext_filepath . '/composer.json'; + $metadata_filepath = $this->phpbb_root_path . $ext_filepath . 'composer.json'; $this->metadata_file = $metadata_filepath; if (!file_exists($this->metadata_file)) { - return false; - } - else - { - return true; + throw new phpbb_exception_metadata(phpbb_exception_metadata::FILE_DOES_NOT_EXIST, $this->metadata_file); } } /** * Gets the contents of the composer.json file * - * @return bool True of false (if loading succeeded or failed) + * @return bool True if success, throws an exception on failure */ private function fetch_metadata() { if (!file_exists($this->metadata_file)) { - return false; + throw new phpbb_exception_metadata(phpbb_exception_metadata::FILE_DOES_NOT_EXIST, $this->metadata_file); } else { if (!($file_contents = file_get_contents($this->metadata_file))) { - return false; + throw new phpbb_exception_metadata(phpbb_exception_metadata::FILE_GET_CONTENTS, $this->metadata_file); } if (($metadata = json_decode($file_contents, true)) === NULL) { - return false; + throw new phpbb_exception_metadata(phpbb_exception_metadata::JSON_DECODE, $this->metadata_file); } $this->metadata = $metadata; @@ -161,7 +148,7 @@ class phpbb_extension_metadata_manager } /** - * This array handles the validation and cleaning of the array + * This array handles the cleaning of the array * * @return array Contains the cleaned metadata array */ @@ -179,7 +166,7 @@ class phpbb_extension_metadata_manager * @param string $name ("all" for display and enable validation * "display" for name, type, and authors * "name", "type") - * @return Bool False if validation fails, true if valid + * @return Bool True if valid, throws an exception if invalid */ public function validate($name = 'display') { @@ -193,21 +180,34 @@ class phpbb_extension_metadata_manager if (isset($fields[$name])) { - return (isset($this->metadata[$name])) ? (bool) preg_match($this->validation[$name], $this->metadata[$name]) : false; + if (!isset($this->metadata[$name])) + { + throw new phpbb_exception_metadata(phpbb_exception_metadata::NOT_SET, $name); + } + + if (!preg_match($fields[$name], $this->metadata[$name])) + { + throw new phpbb_exception_metadata(phpbb_exception_metadata::INVALID, $name); + } } // Validate all fields if ($name == 'all') + { + $this->validate('display'); + + $this->validate_enable(); + } + + // Validate display fields + if ($name == 'display') { foreach ($fields as $field => $data) { - if (!$this->validate($field)) - { - return false; - } + $this->validate($field); } - return $this->validate_authors(); + $this->validate_authors(); } return true; @@ -216,20 +216,20 @@ class phpbb_extension_metadata_manager /** * Validates the contents of the authors field * - * @return boolean True when passes validation + * @return boolean True when passes validation, throws exception if invalid */ private function validate_authors() { if (empty($this->metadata['authors'])) { - return false; + throw new phpbb_exception_metadata(phpbb_exception_metadata::NOT_SET, 'authors'); } foreach ($this->metadata['authors'] as $author) { if (!isset($author['name'])) { - return false; + throw new phpbb_exception_metadata(phpbb_exception_metadata::NOT_SET, 'author name'); } } @@ -244,7 +244,7 @@ class phpbb_extension_metadata_manager public function validate_enable() { // Check for phpBB, PHP versions - if (!$this->validate_require_phpbb || !$this->validate_require_php) + if (!$this->validate_require_phpbb() || !$this->validate_require_php()) { return false; } diff --git a/phpBB/language/en/acp/extensions.php b/phpBB/language/en/acp/extensions.php index 903ec249a8..0adaff10c8 100644 --- a/phpBB/language/en/acp/extensions.php +++ b/phpBB/language/en/acp/extensions.php @@ -39,7 +39,7 @@ $lang = array_merge($lang, array( 'EXTENSIONS' => 'Extensions', 'EXTENSIONS_ADMIN' => 'Extensions Manager', 'EXTENSIONS_EXPLAIN' => 'The Extensions Manager is a tool in your phpBB Board which allows you to manage all of your extensions statuses and view information about them.', - 'EXTENSION_INVALID' => 'The selected extension is not valid.', + 'EXTENSION_INVALID_LIST' => 'The "%s" extension is not valid.

    %s

    ', 'EXTENSION_NOT_AVAILABLE' => 'The selected extension is not available for this board, please verify your phpBB and PHP versions are allowed (see the details page).', 'DETAILS' => 'Details', -- cgit v1.2.1 From 2a7e1292919ed1397a3f1951e510d84565d002d7 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 23 Jul 2012 20:28:04 -0500 Subject: [ticket/10631] Simplify exceptions PHPBB-10631 --- phpBB/includes/acp/acp_extensions.php | 28 +++++++---- phpBB/includes/exception/metadata.php | 69 --------------------------- phpBB/includes/extension/exception.php | 27 +++++++++++ phpBB/includes/extension/metadata_manager.php | 16 +++---- 4 files changed, 55 insertions(+), 85 deletions(-) delete mode 100644 phpBB/includes/exception/metadata.php create mode 100644 phpBB/includes/extension/exception.php (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index a833c8c482..287074395d 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -49,9 +49,12 @@ class acp_extensions { $md_manager = new phpbb_extension_metadata_manager($ext_name, $db, $phpbb_extension_manager, $phpbb_root_path, ".$phpEx", $template, $config); - try{ + try + { $md_manager->get_metadata('all'); - } catch( Exception $e ) { + } + catch(phpbb_extension_exception $e) + { trigger_error($e); } } @@ -172,7 +175,8 @@ class acp_extensions { $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $this->template); - try { + try + { $this->template->assign_block_vars('enabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), @@ -183,7 +187,9 @@ class acp_extensions 'DISABLE' => $this->u_action . '&action=disable_pre&ext_name=' . $name, 'PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $name, )); - } catch( Exception $e ) { + } + catch(phpbb_extension_exception $e) + { $this->template->assign_block_vars('disabled', array( 'EXT_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), )); @@ -204,7 +210,8 @@ class acp_extensions { $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $this->template); - try { + try + { $this->template->assign_block_vars('disabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), @@ -215,7 +222,9 @@ class acp_extensions 'ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $name, 'PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $name, )); - } catch( Exception $e ) { + } + catch(phpbb_extension_exception $e) + { $this->template->assign_block_vars('disabled', array( 'EXT_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), )); @@ -238,7 +247,8 @@ class acp_extensions { $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $this->template); - try { + try + { $this->template->assign_block_vars('disabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), @@ -248,7 +258,9 @@ class acp_extensions $this->output_actions('disabled', array( 'ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $name, )); - } catch( Exception $e ) { + } + catch(phpbb_extension_exception $e) + { $this->template->assign_block_vars('disabled', array( 'EXT_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), )); diff --git a/phpBB/includes/exception/metadata.php b/phpBB/includes/exception/metadata.php deleted file mode 100644 index 93cc337f55..0000000000 --- a/phpBB/includes/exception/metadata.php +++ /dev/null @@ -1,69 +0,0 @@ -code = $code; - $this->field_name = $field_name; - } - - public function __toString() - { - return sprintf($this->getErrorMessage(), $this->field_name); - } - - public function getErrorMessage() - { - switch ($this->code) - { - case self::NOT_SET: - return 'The "%s" meta field has not been set.'; - break; - - case self::INVALID: - return 'The "%s" meta field is not valid.'; - break; - - case self::FILE_GET_CONTENTS: - return 'file_get_contents failed on %s'; - break; - - case self::JSON_DECODE: - return 'json_decode failed on %s'; - break; - - case self::FILE_DOES_NOT_EXIST: - return 'Required file does not exist at %s'; - break; - - default: - return 'An unexpected error has occurred.'; - break; - } - } -} \ No newline at end of file diff --git a/phpBB/includes/extension/exception.php b/phpBB/includes/extension/exception.php new file mode 100644 index 0000000000..e08a8912ea --- /dev/null +++ b/phpBB/includes/extension/exception.php @@ -0,0 +1,27 @@ +getMessage(); + } +} \ No newline at end of file diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index 126331ce1c..27b04d4c08 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -114,7 +114,7 @@ class phpbb_extension_metadata_manager if (!file_exists($this->metadata_file)) { - throw new phpbb_exception_metadata(phpbb_exception_metadata::FILE_DOES_NOT_EXIST, $this->metadata_file); + throw new phpbb_extension_exception('The required file does not exist: ' . $this->metadata_file); } } @@ -127,18 +127,18 @@ class phpbb_extension_metadata_manager { if (!file_exists($this->metadata_file)) { - throw new phpbb_exception_metadata(phpbb_exception_metadata::FILE_DOES_NOT_EXIST, $this->metadata_file); + throw new phpbb_extension_exception('The required file does not exist: ' . $this->metadata_file); } else { if (!($file_contents = file_get_contents($this->metadata_file))) { - throw new phpbb_exception_metadata(phpbb_exception_metadata::FILE_GET_CONTENTS, $this->metadata_file); + throw new phpbb_extension_exception('file_get_contents failed on ' . $this->metadata_file); } if (($metadata = json_decode($file_contents, true)) === NULL) { - throw new phpbb_exception_metadata(phpbb_exception_metadata::JSON_DECODE, $this->metadata_file); + throw new phpbb_extension_exception('json_decode failed on ' . $this->metadata_file); } $this->metadata = $metadata; @@ -182,12 +182,12 @@ class phpbb_extension_metadata_manager { if (!isset($this->metadata[$name])) { - throw new phpbb_exception_metadata(phpbb_exception_metadata::NOT_SET, $name); + throw new phpbb_extension_exception("Required meta field '$name' has not been set."); } if (!preg_match($fields[$name], $this->metadata[$name])) { - throw new phpbb_exception_metadata(phpbb_exception_metadata::INVALID, $name); + throw new phpbb_extension_exception("Meta field '$name' is invalid."); } } @@ -222,14 +222,14 @@ class phpbb_extension_metadata_manager { if (empty($this->metadata['authors'])) { - throw new phpbb_exception_metadata(phpbb_exception_metadata::NOT_SET, 'authors'); + throw new phpbb_extension_exception("Required meta field 'authors' has not been set."); } foreach ($this->metadata['authors'] as $author) { if (!isset($author['name'])) { - throw new phpbb_exception_metadata(phpbb_exception_metadata::NOT_SET, 'author name'); + throw new phpbb_extension_exception("Required meta field 'author name' has not been set."); } } -- cgit v1.2.1 From 747c16240fd56be0e24b4c54f01c82aa0a78b91e Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 23 Jul 2012 20:40:54 -0500 Subject: [ticket/10631] get_extension_metadata_manager -> create_extension_metadata_manager PHPBB3-10631 --- phpBB/includes/acp/acp_extensions.php | 6 +++--- phpBB/includes/extension/manager.php | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index 287074395d..4f59ea309b 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -173,7 +173,7 @@ class acp_extensions { foreach ($phpbb_extension_manager->all_enabled() as $name => $location) { - $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $this->template); + $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template); try { @@ -208,7 +208,7 @@ class acp_extensions { foreach ($phpbb_extension_manager->all_disabled() as $name => $location) { - $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $this->template); + $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template); try { @@ -245,7 +245,7 @@ class acp_extensions foreach ($uninstalled as $name => $location) { - $md_manager = $phpbb_extension_manager->get_extension_metadata_manager($name, $this->template); + $md_manager = $phpbb_extension_manager->create_extension_metadata_manager($name, $this->template); try { diff --git a/phpBB/includes/extension/manager.php b/phpBB/includes/extension/manager.php index 9342c936f9..9a518c215f 100644 --- a/phpBB/includes/extension/manager.php +++ b/phpBB/includes/extension/manager.php @@ -131,7 +131,7 @@ class phpbb_extension_manager * @param string $template The template manager * @return phpbb_extension_metadata_manager Instance of the metadata manager */ - public function get_extension_metadata_manager($name, phpbb_template $template) + public function create_extension_metadata_manager($name, phpbb_template $template) { return new phpbb_extension_metadata_manager($name, $this->db, $this, $this->phpbb_root_path, $this->php_ext, $template, $this->config); } -- cgit v1.2.1 From 500879520c40a71f0b83799ab3e59c86c12a801a Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Sat, 28 Jul 2012 14:59:55 -0500 Subject: [ticket/10631] Metadata manager tests PHPBB3-10631 --- phpBB/includes/extension/metadata_manager.php | 59 ++++++++++++++------------- 1 file changed, 30 insertions(+), 29 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index 27b04d4c08..c7f52b7c02 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -178,36 +178,37 @@ class phpbb_extension_metadata_manager 'version' => '#.+#', ); - if (isset($fields[$name])) + switch ($name) { - if (!isset($this->metadata[$name])) - { - throw new phpbb_extension_exception("Required meta field '$name' has not been set."); - } - - if (!preg_match($fields[$name], $this->metadata[$name])) - { - throw new phpbb_extension_exception("Meta field '$name' is invalid."); - } - } - - // Validate all fields - if ($name == 'all') - { - $this->validate('display'); + case 'all': + $this->validate('display'); - $this->validate_enable(); - } + $this->validate_enable(); + break; - // Validate display fields - if ($name == 'display') - { - foreach ($fields as $field => $data) - { - $this->validate($field); - } + case 'display': + foreach ($fields as $field => $data) + { + $this->validate($field); + } - $this->validate_authors(); + $this->validate_authors(); + break; + + default: + if (isset($fields[$name])) + { + if (!isset($this->metadata[$name])) + { + throw new phpbb_extension_exception("Required meta field '$name' has not been set."); + } + + if (!preg_match($fields[$name], $this->metadata[$name])) + { + throw new phpbb_extension_exception("Meta field '$name' is invalid."); + } + } + break; } return true; @@ -218,7 +219,7 @@ class phpbb_extension_metadata_manager * * @return boolean True when passes validation, throws exception if invalid */ - private function validate_authors() + public function validate_authors() { if (empty($this->metadata['authors'])) { @@ -258,7 +259,7 @@ class phpbb_extension_metadata_manager * * @return boolean True when passes validation */ - private function validate_require_phpbb() + public function validate_require_phpbb() { if (!isset($this->metadata['require']['phpbb'])) { @@ -273,7 +274,7 @@ class phpbb_extension_metadata_manager * * @return boolean True when passes validation */ - private function validate_require_php() + public function validate_require_php() { if (!isset($this->metadata['require']['php'])) { -- cgit v1.2.1 From 36465c9a205c356b0662e45b4fded79c4b476547 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Sun, 29 Jul 2012 20:08:30 -0500 Subject: [ticket/10631] Functional acp_extensions test, cleanup PHPBB3-10631 --- phpBB/adm/style/acp_ext_list.html | 4 ++-- phpBB/includes/acp/acp_extensions.php | 38 ++++++++++++++++++----------------- 2 files changed, 22 insertions(+), 20 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_ext_list.html b/phpBB/adm/style/acp_ext_list.html index 65051cbae0..b654a80caa 100644 --- a/phpBB/adm/style/acp_ext_list.html +++ b/phpBB/adm/style/acp_ext_list.html @@ -23,7 +23,7 @@ - + {enabled.EXT_NAME} {L_DETAILS} @@ -41,7 +41,7 @@ {L_DISABLED} {L_EXTENSIONS} - + {disabled.EXT_NAME} {L_DETAILS} diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index 4f59ea309b..c4d9f0c0e0 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -72,7 +72,7 @@ class acp_extensions break; case 'enable_pre': - if (!$md_manager->validate_enable()) + if (!$md_manager->validate_enable() || $phpbb_extension_manager->enabled($ext_name)) { trigger_error('EXTENSION_NOT_AVAILABLE'); } @@ -81,7 +81,7 @@ class acp_extensions $template->assign_vars(array( 'PRE' => true, - 'U_ENABLE' => $this->u_action . '&action=enable&ext_name=' . $ext_name, + 'U_ENABLE' => $this->u_action . '&action=enable&ext_name=' . urlencode($ext_name), )); break; @@ -95,7 +95,7 @@ class acp_extensions { $template->assign_var('S_NEXT_STEP', true); - meta_refresh(0, $this->u_action . '&action=enable&ext_name=' . $ext_name); + meta_refresh(0, $this->u_action . '&action=enable&ext_name=' . urlencode($ext_name)); } $this->tpl_name = 'acp_ext_enable'; @@ -106,11 +106,16 @@ class acp_extensions break; case 'disable_pre': + if (!$phpbb_extension_manager->enabled($ext_name)) + { + trigger_error('EXTENSION_NOT_AVAILABLE'); + } + $this->tpl_name = 'acp_ext_disable'; $template->assign_vars(array( 'PRE' => true, - 'U_DISABLE' => $this->u_action . '&action=disable&ext_name=' . $ext_name, + 'U_DISABLE' => $this->u_action . '&action=disable&ext_name=' . urlencode($ext_name), )); break; @@ -119,7 +124,7 @@ class acp_extensions { $template->assign_var('S_NEXT_STEP', true); - meta_refresh(0, $this->u_action . '&action=disable&ext_name=' . $ext_name); + meta_refresh(0, $this->u_action . '&action=disable&ext_name=' . urlencode($ext_name)); } $this->tpl_name = 'acp_ext_disable'; @@ -134,7 +139,7 @@ class acp_extensions $template->assign_vars(array( 'PRE' => true, - 'U_PURGE' => $this->u_action . '&action=purge&ext_name=' . $ext_name, + 'U_PURGE' => $this->u_action . '&action=purge&ext_name=' . urlencode($ext_name), )); break; @@ -143,7 +148,7 @@ class acp_extensions { $template->assign_var('S_NEXT_STEP', true); - meta_refresh(0, $this->u_action . '&action=purge&ext_name=' . $ext_name); + meta_refresh(0, $this->u_action . '&action=purge&ext_name=' . urlencode($ext_name)); } $this->tpl_name = 'acp_ext_purge'; @@ -166,7 +171,6 @@ class acp_extensions * Lists all the enabled extensions and dumps to the template * * @param $phpbb_extension_manager An instance of the extension manager - * @param $template An instance of the template engine * @return null */ public function list_enabled_exts(phpbb_extension_manager $phpbb_extension_manager) @@ -180,12 +184,12 @@ class acp_extensions $this->template->assign_block_vars('enabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), - 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, + 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . urlencode($name), )); $this->output_actions('enabled', array( - 'DISABLE' => $this->u_action . '&action=disable_pre&ext_name=' . $name, - 'PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $name, + 'DISABLE' => $this->u_action . '&action=disable_pre&ext_name=' . urlencode($name), + 'PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . urlencode($name), )); } catch(phpbb_extension_exception $e) @@ -201,7 +205,6 @@ class acp_extensions * Lists all the disabled extensions and dumps to the template * * @param $phpbb_extension_manager An instance of the extension manager - * @param $template An instance of the template engine * @return null */ public function list_disabled_exts(phpbb_extension_manager $phpbb_extension_manager) @@ -215,12 +218,12 @@ class acp_extensions $this->template->assign_block_vars('disabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), - 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, + 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . urlencode($name), )); $this->output_actions('disabled', array( - 'ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $name, - 'PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . $name, + 'ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . urlencode($name), + 'PURGE' => $this->u_action . '&action=purge_pre&ext_name=' . urlencode($name), )); } catch(phpbb_extension_exception $e) @@ -236,7 +239,6 @@ class acp_extensions * Lists all the available extensions and dumps to the template * * @param $phpbb_extension_manager An instance of the extension manager - * @param $template An instance of the template engine * @return null */ public function list_available_exts(phpbb_extension_manager $phpbb_extension_manager) @@ -252,11 +254,11 @@ class acp_extensions $this->template->assign_block_vars('disabled', array( 'EXT_NAME' => $md_manager->get_metadata('display-name'), - 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . $name, + 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . urlencode($name), )); $this->output_actions('disabled', array( - 'ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . $name, + 'ENABLE' => $this->u_action . '&action=enable_pre&ext_name=' . urlencode($name), )); } catch(phpbb_extension_exception $e) -- cgit v1.2.1 From dce04b2d03f93c9237b743afbcbd89fb6405f836 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 30 Jul 2012 19:30:49 -0500 Subject: [ticket/10631] Various front-end fixes (extensions manager) Add Back button from details Add cancel button from actions Correct language strings PHPBB3-10631 --- phpBB/adm/style/acp_ext_details.html | 2 ++ phpBB/adm/style/acp_ext_disable.html | 5 +++-- phpBB/adm/style/acp_ext_enable.html | 3 ++- phpBB/adm/style/acp_ext_purge.html | 5 +++-- phpBB/includes/acp/acp_extensions.php | 9 +++++++++ 5 files changed, 19 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_ext_details.html b/phpBB/adm/style/acp_ext_details.html index 7408e88758..e927e9de18 100644 --- a/phpBB/adm/style/acp_ext_details.html +++ b/phpBB/adm/style/acp_ext_details.html @@ -2,6 +2,8 @@ + « {L_BACK} +

    {L_EXTENSIONS_ADMIN}

    diff --git a/phpBB/adm/style/acp_ext_disable.html b/phpBB/adm/style/acp_ext_disable.html index 1f0bbe14c8..7dc3f6ec97 100644 --- a/phpBB/adm/style/acp_ext_disable.html +++ b/phpBB/adm/style/acp_ext_disable.html @@ -5,7 +5,7 @@

    {L_EXTENSIONS_ADMIN}

    {L_EXTENSIONS_EXPLAIN}

    -

    {L_ENABLE_EXPLAIN}

    +

    {L_DISABLE_EXPLAIN}

    @@ -15,7 +15,8 @@
    {L_DISABLE} - + +
    diff --git a/phpBB/adm/style/acp_ext_enable.html b/phpBB/adm/style/acp_ext_enable.html index 9f278bfbe0..3f7be2c847 100644 --- a/phpBB/adm/style/acp_ext_enable.html +++ b/phpBB/adm/style/acp_ext_enable.html @@ -15,7 +15,8 @@
    {L_ENABLE} - + +
    diff --git a/phpBB/adm/style/acp_ext_purge.html b/phpBB/adm/style/acp_ext_purge.html index 816fd872b9..00a58721cb 100644 --- a/phpBB/adm/style/acp_ext_purge.html +++ b/phpBB/adm/style/acp_ext_purge.html @@ -5,7 +5,7 @@

    {L_EXTENSIONS_ADMIN}

    {L_EXTENSIONS_EXPLAIN}

    -

    {L_ENABLE_EXPLAIN}

    +

    {L_PURGE_EXPLAIN}

    @@ -15,7 +15,8 @@
    {L_PURGE} - + +
    diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index c4d9f0c0e0..1a9d51505a 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -43,6 +43,13 @@ class acp_extensions $action = $request->variable('action', 'list'); $ext_name = $request->variable('ext_name', ''); + + // Cancel action + if ($request->is_set_post('cancel')) + { + $action = 'list'; + $ext_name = ''; + } // If they've specificed an extension, let's load the metadata manager and validate it. if ($ext_name) @@ -162,6 +169,8 @@ class acp_extensions // Output it to the template $md_manager->output_template_data(); + $template->assign_var('U_BACK', $this->u_action . '&action=list'); + $this->tpl_name = 'acp_ext_details'; break; } -- cgit v1.2.1 From 7b643fe8a5fd3b92bb4db9eacb27645417004709 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Sun, 5 Aug 2012 19:00:20 -0500 Subject: [ticket/10631] Make failure to meet ext enable requirements clearer Turn the blocks red on the details page if requirement is not met. Also changing a how the errors come up when trying to enable/disable an extension when they cannot be. PHPBB3-10631 --- phpBB/adm/style/acp_ext_details.html | 6 +++--- phpBB/adm/style/admin.css | 10 ++++++++++ phpBB/includes/acp/acp_extensions.php | 15 ++++++++++----- phpBB/includes/extension/metadata_manager.php | 9 +++++++-- 4 files changed, 30 insertions(+), 10 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_ext_details.html b/phpBB/adm/style/acp_ext_details.html index e927e9de18..f477b452b7 100644 --- a/phpBB/adm/style/acp_ext_details.html +++ b/phpBB/adm/style/acp_ext_details.html @@ -3,7 +3,7 @@ « {L_BACK} - +

    {L_EXTENSIONS_ADMIN}

    @@ -50,13 +50,13 @@
    {L_REQUIREMENTS} -
    + class="requirements_not_met">

    {MD_REQUIRE_PHPBB}

    -
    + class="requirements_not_met">

    {MD_REQUIRE_PHP}

    diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css index 08613de0dd..585707600d 100644 --- a/phpBB/adm/style/admin.css +++ b/phpBB/adm/style/admin.css @@ -1718,3 +1718,13 @@ fieldset.permissions .padding { .phpinfo td, .phpinfo th, .phpinfo h2, .phpinfo h1 { text-align: left; } + +.requirements_not_met { + padding: 5px; + background-color: #BC2A4D; +} + +.requirements_not_met dt label, .requirements_not_met dd p { + color: #FFFFFF; + font-size: 1.4em; +} \ No newline at end of file diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index 1a9d51505a..8dde6bc36c 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -43,7 +43,7 @@ class acp_extensions $action = $request->variable('action', 'list'); $ext_name = $request->variable('ext_name', ''); - + // Cancel action if ($request->is_set_post('cancel')) { @@ -79,9 +79,14 @@ class acp_extensions break; case 'enable_pre': - if (!$md_manager->validate_enable() || $phpbb_extension_manager->enabled($ext_name)) + if (!$md_manager->validate_enable()) + { + trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action)); + } + + if ($phpbb_extension_manager->enabled($ext_name)) { - trigger_error('EXTENSION_NOT_AVAILABLE'); + redirect($this->u_action); } $this->tpl_name = 'acp_ext_enable'; @@ -95,7 +100,7 @@ class acp_extensions case 'enable': if (!$md_manager->validate_enable()) { - trigger_error('EXTENSION_NOT_AVAILABLE'); + trigger_error($user->lang['EXTENSION_NOT_AVAILABLE'] . adm_back_link($this->u_action)); } if ($phpbb_extension_manager->enable_step($ext_name)) @@ -115,7 +120,7 @@ class acp_extensions case 'disable_pre': if (!$phpbb_extension_manager->enabled($ext_name)) { - trigger_error('EXTENSION_NOT_AVAILABLE'); + redirect($this->u_action); } $this->tpl_name = 'acp_ext_disable'; diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index c7f52b7c02..8a68e464a7 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -320,8 +320,13 @@ class phpbb_extension_metadata_manager 'MD_VERSION' => (isset($this->metadata['version'])) ? htmlspecialchars($this->metadata['version']) : '', 'MD_TIME' => (isset($this->metadata['time'])) ? htmlspecialchars($this->metadata['time']) : '', 'MD_LICENCE' => htmlspecialchars($this->metadata['licence']), - 'MD_REQUIRE_PHP' => (isset($this->metadata['require']['php'])) ? htmlspecialchars($this->metadata['require']['php']) : '', - 'MD_REQUIRE_PHPBB' => (isset($this->metadata['require']['phpbb'])) ? htmlspecialchars($this->metadata['require']['phpbb']) : '', + + 'MD_REQUIRE_PHP' => (isset($this->metadata['require']['php'])) ? htmlspecialchars($this->metadata['require']['php']) : '', + 'MD_REQUIRE_PHP_FAIL' => !$this->validate_require_php(), + + 'MD_REQUIRE_PHPBB' => (isset($this->metadata['require']['phpbb'])) ? htmlspecialchars($this->metadata['require']['phpbb']) : '', + 'MD_REQUIRE_PHPBB_FAIL' => !$this->validate_require_phpbb(), + 'MD_DISPLAY_NAME' => (isset($this->metadata['extra']['display-name'])) ? htmlspecialchars($this->metadata['extra']['display-name']) : '', )); -- cgit v1.2.1 From 323bbf9b523984a592dc17bf35d2bb91a435be1b Mon Sep 17 00:00:00 2001 From: Unknown Bliss Date: Fri, 17 Aug 2012 14:06:23 +0100 Subject: [ticket/10631] Adjust prefixes to be easier to understand PHPBB3-10631 --- phpBB/adm/style/acp_ext_details.html | 74 +++++++++++++-------------- phpBB/adm/style/acp_ext_list.html | 4 +- phpBB/includes/acp/acp_extensions.php | 12 ++--- phpBB/includes/extension/metadata_manager.php | 26 +++++----- 4 files changed, 58 insertions(+), 58 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_ext_details.html b/phpBB/adm/style/acp_ext_details.html index f477b452b7..e7532691ad 100644 --- a/phpBB/adm/style/acp_ext_details.html +++ b/phpBB/adm/style/acp_ext_details.html @@ -8,57 +8,57 @@
    {L_EXT_DETAILS} - +
    -
    -
    {MD_DISPLAY_NAME}
    +
    +
    {META_DISPLAY_NAME}
    -
    -
    {MD_NAME}
    +
    +
    {META_NAME}
    - +
    -
    -

    {MD_DESCRIPTION}

    +
    +

    {META_DESCRIPTION}

    -
    -

    {MD_VERSION}

    +
    +

    {META_VERSION}

    - +
    -
    -

    {MD_HOMEPAGE}

    +
    +

    {META_HOMEPAGE}

    - +
    -
    -

    {MD_TIME}

    +
    +

    {META_TIME}

    -
    -

    {MD_LICENCE}

    +
    +

    {META_LICENCE}

    - +
    {L_REQUIREMENTS} - - class="requirements_not_met"> + + class="requirements_not_met">
    -

    {MD_REQUIRE_PHPBB}

    +

    {META_REQUIRE_PHPBB}

    - - class="requirements_not_met"> + + class="requirements_not_met">
    -

    {MD_REQUIRE_PHP}

    +

    {META_REQUIRE_PHP}

    @@ -66,32 +66,32 @@
    {L_AUTHOR_INFORMATION} - +
    -
    -
    {md_authors.AUTHOR_NAME}
    +
    +
    {meta_authors.AUTHOR_NAME}
    - +
    -
    -
    {md_authors.AUTHOR_EMAIL}
    +
    +
    {meta_authors.AUTHOR_EMAIL}
    - +
    -
    -
    {md_authors.AUTHOR_HOMEPAGE}
    +
    +
    {meta_authors.AUTHOR_HOMEPAGE}
    - +
    -
    {md_authors.AUTHOR_ROLE}
    +
    {meta_authors.AUTHOR_ROLE}
    - +
    diff --git a/phpBB/adm/style/acp_ext_list.html b/phpBB/adm/style/acp_ext_list.html index b654a80caa..53de0b4d12 100644 --- a/phpBB/adm/style/acp_ext_list.html +++ b/phpBB/adm/style/acp_ext_list.html @@ -24,7 +24,7 @@ - {enabled.EXT_NAME} + {enabled.META_DISPLAY_NAME} {L_DETAILS} @@ -42,7 +42,7 @@ - {disabled.EXT_NAME} + {disabled.META_DISPLAY_NAME} {L_DETAILS} diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index 8dde6bc36c..5a537aaa42 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -196,7 +196,7 @@ class acp_extensions try { $this->template->assign_block_vars('enabled', array( - 'EXT_NAME' => $md_manager->get_metadata('display-name'), + 'META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'), 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . urlencode($name), )); @@ -209,7 +209,7 @@ class acp_extensions catch(phpbb_extension_exception $e) { $this->template->assign_block_vars('disabled', array( - 'EXT_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), + 'META_DISPLAY_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), )); } } @@ -230,7 +230,7 @@ class acp_extensions try { $this->template->assign_block_vars('disabled', array( - 'EXT_NAME' => $md_manager->get_metadata('display-name'), + 'META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'), 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . urlencode($name), )); @@ -243,7 +243,7 @@ class acp_extensions catch(phpbb_extension_exception $e) { $this->template->assign_block_vars('disabled', array( - 'EXT_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), + 'META_DISPLAY_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), )); } } @@ -266,7 +266,7 @@ class acp_extensions try { $this->template->assign_block_vars('disabled', array( - 'EXT_NAME' => $md_manager->get_metadata('display-name'), + 'META_DISPLAY_NAME' => $md_manager->get_metadata('display-name'), 'U_DETAILS' => $this->u_action . '&action=details&ext_name=' . urlencode($name), )); @@ -278,7 +278,7 @@ class acp_extensions catch(phpbb_extension_exception $e) { $this->template->assign_block_vars('disabled', array( - 'EXT_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), + 'META_DISPLAY_NAME' => $this->user->lang('EXTENSION_INVALID_LIST', $name, $e), )); } } diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index 8a68e464a7..1e3bbe48c9 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -313,26 +313,26 @@ class phpbb_extension_metadata_manager public function output_template_data() { $this->template->assign_vars(array( - 'MD_NAME' => htmlspecialchars($this->metadata['name']), - 'MD_TYPE' => htmlspecialchars($this->metadata['type']), - 'MD_DESCRIPTION' => (isset($this->metadata['description'])) ? htmlspecialchars($this->metadata['description']) : '', - 'MD_HOMEPAGE' => (isset($this->metadata['homepage'])) ? $this->metadata['homepage'] : '', - 'MD_VERSION' => (isset($this->metadata['version'])) ? htmlspecialchars($this->metadata['version']) : '', - 'MD_TIME' => (isset($this->metadata['time'])) ? htmlspecialchars($this->metadata['time']) : '', - 'MD_LICENCE' => htmlspecialchars($this->metadata['licence']), + 'META_NAME' => htmlspecialchars($this->metadata['name']), + 'META_TYPE' => htmlspecialchars($this->metadata['type']), + 'META_DESCRIPTION' => (isset($this->metadata['description'])) ? htmlspecialchars($this->metadata['description']) : '', + 'META_HOMEPAGE' => (isset($this->metadata['homepage'])) ? $this->metadata['homepage'] : '', + 'META_VERSION' => (isset($this->metadata['version'])) ? htmlspecialchars($this->metadata['version']) : '', + 'META_TIME' => (isset($this->metadata['time'])) ? htmlspecialchars($this->metadata['time']) : '', + 'META_LICENCE' => htmlspecialchars($this->metadata['licence']), - 'MD_REQUIRE_PHP' => (isset($this->metadata['require']['php'])) ? htmlspecialchars($this->metadata['require']['php']) : '', - 'MD_REQUIRE_PHP_FAIL' => !$this->validate_require_php(), + 'META_REQUIRE_PHP' => (isset($this->metadata['require']['php'])) ? htmlspecialchars($this->metadata['require']['php']) : '', + 'META_REQUIRE_PHP_FAIL' => !$this->validate_require_php(), - 'MD_REQUIRE_PHPBB' => (isset($this->metadata['require']['phpbb'])) ? htmlspecialchars($this->metadata['require']['phpbb']) : '', - 'MD_REQUIRE_PHPBB_FAIL' => !$this->validate_require_phpbb(), + 'META_REQUIRE_PHPBB' => (isset($this->metadata['require']['phpbb'])) ? htmlspecialchars($this->metadata['require']['phpbb']) : '', + 'META_REQUIRE_PHPBB_FAIL' => !$this->validate_require_phpbb(), - 'MD_DISPLAY_NAME' => (isset($this->metadata['extra']['display-name'])) ? htmlspecialchars($this->metadata['extra']['display-name']) : '', + 'META_DISPLAY_NAME' => (isset($this->metadata['extra']['display-name'])) ? htmlspecialchars($this->metadata['extra']['display-name']) : '', )); foreach ($this->metadata['authors'] as $author) { - $this->template->assign_block_vars('md_authors', array( + $this->template->assign_block_vars('meta_authors', array( 'AUTHOR_NAME' => htmlspecialchars($author['name']), 'AUTHOR_EMAIL' => (isset($author['email'])) ? $author['email'] : '', 'AUTHOR_HOMEPAGE' => (isset($author['homepage'])) ? $author['homepage'] : '', -- cgit v1.2.1 From f05a175e3955d1dc1d2b85b9929ca4b30340ad4a Mon Sep 17 00:00:00 2001 From: Unknown Bliss Date: Fri, 17 Aug 2012 14:38:03 +0100 Subject: [ticket/10631] Fixing a few extension admin issues PHPBB3-10631 --- phpBB/includes/extension/metadata_manager.php | 3 --- 1 file changed, 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index 1e3bbe48c9..8c570830fe 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -60,7 +60,6 @@ class phpbb_extension_metadata_manager */ public function get_metadata($element = 'all') { - // TODO: Check ext_name exists and is an extension that exists $this->set_metadata_file(); // Fetch the metadata @@ -339,7 +338,5 @@ class phpbb_extension_metadata_manager 'AUTHOR_ROLE' => (isset($author['role'])) ? htmlspecialchars($author['role']) : '', )); } - - return; } } -- cgit v1.2.1 From 7dfe26dd781e7bd0438041058e2a1d95176e7836 Mon Sep 17 00:00:00 2001 From: David King Date: Sat, 1 Sep 2012 10:35:46 -0400 Subject: [task/functional] Allow tests to bypass certain restrictions with DEBUG_TEST PHPBB3-10758 --- phpBB/includes/functions.php | 2 +- phpBB/includes/functions_install.php | 5 ++++- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 5914831539..8e7e84bf83 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -2811,7 +2811,7 @@ function check_form_key($form_name, $timespan = false, $return_page = '', $trigg $diff = time() - $creation_time; // If creation_time and the time() now is zero we can assume it was not a human doing this (the check for if ($diff)... - if ($diff && ($diff <= $timespan || $timespan === -1)) + if (defined('DEBUG_TEST') || $diff && ($diff <= $timespan || $timespan === -1)) { $token_sid = ($user->data['user_id'] == ANONYMOUS && !empty($config['form_token_sid_guests'])) ? $user->session_id : ''; $key = sha1($creation_time . $user->data['user_form_salt'] . $form_name . $token_sid); diff --git a/phpBB/includes/functions_install.php b/phpBB/includes/functions_install.php index 89dfb7cd2f..2e10db6b24 100644 --- a/phpBB/includes/functions_install.php +++ b/phpBB/includes/functions_install.php @@ -551,10 +551,12 @@ function adjust_language_keys_callback($matches) * @param string $dbms The name of the DBAL class to use * @param array $load_extensions Array of additional extensions that should be loaded * @param bool $debug If the debug constants should be enabled by default or not +* @param bool $debug_test If the DEBUG_TEST constant should be added +* NOTE: Only for use within the testing framework * * @return string The output to write to the file */ -function phpbb_create_config_file_data($data, $dbms, $load_extensions, $debug = false) +function phpbb_create_config_file_data($data, $dbms, $load_extensions, $debug = false, $debug_test = false) { $load_extensions = implode(',', $load_extensions); @@ -584,6 +586,7 @@ function phpbb_create_config_file_data($data, $dbms, $load_extensions, $debug = { $config_data .= "@define('DEBUG', true);\n"; $config_data .= "@define('DEBUG_EXTRA', true);\n"; + $config_data .= "@define('DEBUG_TEST', true);\n"; } else { -- cgit v1.2.1 From 4dd1bbc5879ae5fcae04341a9152e0366ed68bdd Mon Sep 17 00:00:00 2001 From: David King Date: Sat, 1 Sep 2012 10:53:01 -0400 Subject: [task/functional] Fixed DEBUG_TEST related issues PHPBB3-10758 --- phpBB/includes/functions_install.php | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_install.php b/phpBB/includes/functions_install.php index 2e10db6b24..eae136808c 100644 --- a/phpBB/includes/functions_install.php +++ b/phpBB/includes/functions_install.php @@ -586,7 +586,6 @@ function phpbb_create_config_file_data($data, $dbms, $load_extensions, $debug = { $config_data .= "@define('DEBUG', true);\n"; $config_data .= "@define('DEBUG_EXTRA', true);\n"; - $config_data .= "@define('DEBUG_TEST', true);\n"; } else { @@ -594,6 +593,11 @@ function phpbb_create_config_file_data($data, $dbms, $load_extensions, $debug = $config_data .= "// @define('DEBUG_EXTRA', true);\n"; } + if ($debug_test) + { + $config_data .= "@define('DEBUG_TEST', true);\n"; + } + return $config_data; } -- cgit v1.2.1 From 0c35ee2769d3945f25275d5ee7a130b7596d289f Mon Sep 17 00:00:00 2001 From: "Michael C." Date: Sat, 1 Sep 2012 17:32:59 +0200 Subject: [ticket/10631] Fix a spelling typo PHPBB3-10631 --- phpBB/includes/acp/acp_extensions.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_extensions.php b/phpBB/includes/acp/acp_extensions.php index 5a537aaa42..a0bcf62ecc 100644 --- a/phpBB/includes/acp/acp_extensions.php +++ b/phpBB/includes/acp/acp_extensions.php @@ -51,7 +51,7 @@ class acp_extensions $ext_name = ''; } - // If they've specificed an extension, let's load the metadata manager and validate it. + // If they've specified an extension, let's load the metadata manager and validate it. if ($ext_name) { $md_manager = new phpbb_extension_metadata_manager($ext_name, $db, $phpbb_extension_manager, $phpbb_root_path, ".$phpEx", $template, $config); -- cgit v1.2.1 From ed052290a70ae3a42f9e7c59f3dca95aba0c0ac7 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 1 Sep 2012 17:40:19 +0200 Subject: [ticket/11082] Remove executable permission from redis driver file PHPBB3-11082 --- phpBB/includes/cache/driver/redis.php | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 phpBB/includes/cache/driver/redis.php (limited to 'phpBB') diff --git a/phpBB/includes/cache/driver/redis.php b/phpBB/includes/cache/driver/redis.php old mode 100755 new mode 100644 -- cgit v1.2.1 From 8741bcdaf5bb815a228188b4dfe4e3beebcca3b3 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 1 Sep 2012 17:51:27 +0200 Subject: [ticket/11083] Mark memory cache driver as abstract PHPBB3-11083 --- phpBB/includes/cache/driver/memory.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/cache/driver/memory.php b/phpBB/includes/cache/driver/memory.php index 92971c6cb2..e0771ab1d3 100644 --- a/phpBB/includes/cache/driver/memory.php +++ b/phpBB/includes/cache/driver/memory.php @@ -19,7 +19,7 @@ if (!defined('IN_PHPBB')) * ACM Abstract Memory Class * @package acm */ -class phpbb_cache_driver_memory extends phpbb_cache_driver_base +abstract class phpbb_cache_driver_memory extends phpbb_cache_driver_base { var $key_prefix; -- cgit v1.2.1 From 7ed7b19a1f1c3732b561ec3c8a4a39f115b5e6ac Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 1 Sep 2012 19:12:57 +0200 Subject: [feature/dic] Remove unneeded newline PHPBB3-10739 --- phpBB/common.php | 1 - 1 file changed, 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index 6ca495a7e3..281eb88c4d 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -86,7 +86,6 @@ require($phpbb_root_path . 'includes/constants.' . $phpEx); require($phpbb_root_path . 'includes/db/' . ltrim($dbms, 'dbal_') . '.' . $phpEx); require($phpbb_root_path . 'includes/utf/utf_tools.' . $phpEx); - // Set PHP error handler to ours set_error_handler(defined('PHPBB_MSG_HANDLER') ? PHPBB_MSG_HANDLER : 'msg_handler'); -- cgit v1.2.1 From 282a80077d4630ba59043fffe59e8a7ce8619ecb Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 1 Sep 2012 19:17:01 +0200 Subject: [feature/dic] Spaces to tabs, add useless docblocks Fully documents the constructors of the processors and the cron tasks. PHPBB3-10739 --- phpBB/includes/cron/task/core/prune_all_forums.php | 8 ++ phpBB/includes/cron/task/core/prune_forum.php | 8 ++ phpBB/includes/cron/task/core/queue.php | 7 ++ phpBB/includes/cron/task/core/tidy_cache.php | 6 ++ phpBB/includes/cron/task/core/tidy_database.php | 7 ++ phpBB/includes/cron/task/core/tidy_search.php | 10 +++ phpBB/includes/cron/task/core/tidy_sessions.php | 6 ++ phpBB/includes/cron/task/core/tidy_warnings.php | 7 ++ phpBB/includes/di/processor/config.php | 96 +++++++++++++--------- phpBB/includes/di/processor/ext.php | 47 +++++++---- phpBB/includes/di/processor/interface.php | 9 +- 11 files changed, 150 insertions(+), 61 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/cron/task/core/prune_all_forums.php b/phpBB/includes/cron/task/core/prune_all_forums.php index 5164087b68..252e16e57d 100644 --- a/phpBB/includes/cron/task/core/prune_all_forums.php +++ b/phpBB/includes/cron/task/core/prune_all_forums.php @@ -31,6 +31,14 @@ class phpbb_cron_task_core_prune_all_forums extends phpbb_cron_task_base protected $config; protected $db; + /** + * Constructor. + * + * @param string $phpbb_root_path The root path + * @param string $php_ext The PHP extension + * @param phpbb_config $config The config + * @param dbal $db The db connection + */ public function __construct($phpbb_root_path, $php_ext, phpbb_config $config, dbal $db) { $this->phpbb_root_path = $phpbb_root_path; diff --git a/phpBB/includes/cron/task/core/prune_forum.php b/phpBB/includes/cron/task/core/prune_forum.php index 8bb13ffe36..41d60af921 100644 --- a/phpBB/includes/cron/task/core/prune_forum.php +++ b/phpBB/includes/cron/task/core/prune_forum.php @@ -41,6 +41,14 @@ class phpbb_cron_task_core_prune_forum extends phpbb_cron_task_base implements p */ protected $forum_data; + /** + * Constructor. + * + * @param string $phpbb_root_path The root path + * @param string $php_ext The PHP extension + * @param phpbb_config $config The config + * @param dbal $db The db connection + */ public function __construct($phpbb_root_path, $php_ext, phpbb_config $config, dbal $db) { $this->phpbb_root_path = $phpbb_root_path; diff --git a/phpBB/includes/cron/task/core/queue.php b/phpBB/includes/cron/task/core/queue.php index 3278ce9d76..c765660906 100644 --- a/phpBB/includes/cron/task/core/queue.php +++ b/phpBB/includes/cron/task/core/queue.php @@ -26,6 +26,13 @@ class phpbb_cron_task_core_queue extends phpbb_cron_task_base protected $php_ext; protected $config; + /** + * Constructor. + * + * @param string $phpbb_root_path The root path + * @param string $php_ext The PHP extension + * @param phpbb_config $config The config + */ public function __construct($phpbb_root_path, $php_ext, phpbb_config $config) { $this->phpbb_root_path = $phpbb_root_path; diff --git a/phpBB/includes/cron/task/core/tidy_cache.php b/phpBB/includes/cron/task/core/tidy_cache.php index 573243c166..6017eea561 100644 --- a/phpBB/includes/cron/task/core/tidy_cache.php +++ b/phpBB/includes/cron/task/core/tidy_cache.php @@ -25,6 +25,12 @@ class phpbb_cron_task_core_tidy_cache extends phpbb_cron_task_base protected $config; protected $cache; + /** + * Constructor. + * + * @param phpbb_config $config The config + * @param phpbb_cache_driver_interface $cache The cache driver + */ public function __construct(phpbb_config $config, phpbb_cache_driver_interface $cache) { $this->config = $config; diff --git a/phpBB/includes/cron/task/core/tidy_database.php b/phpBB/includes/cron/task/core/tidy_database.php index c9f81cbb51..1d256f964f 100644 --- a/phpBB/includes/cron/task/core/tidy_database.php +++ b/phpBB/includes/cron/task/core/tidy_database.php @@ -26,6 +26,13 @@ class phpbb_cron_task_core_tidy_database extends phpbb_cron_task_base protected $php_ext; protected $config; + /** + * Constructor. + * + * @param string $phpbb_root_path The root path + * @param string $php_ext The PHP extension + * @param phpbb_config $config The config + */ public function __construct($phpbb_root_path, $php_ext, phpbb_config $config) { $this->phpbb_root_path = $phpbb_root_path; diff --git a/phpBB/includes/cron/task/core/tidy_search.php b/phpBB/includes/cron/task/core/tidy_search.php index 00af293b6d..2e5f3d79d5 100644 --- a/phpBB/includes/cron/task/core/tidy_search.php +++ b/phpBB/includes/cron/task/core/tidy_search.php @@ -31,6 +31,16 @@ class phpbb_cron_task_core_tidy_search extends phpbb_cron_task_base protected $db; protected $user; + /** + * Constructor. + * + * @param string $phpbb_root_path The root path + * @param string $php_ext The PHP extension + * @param phpbb_auth $auth The auth + * @param phpbb_config $config The config + * @param dbal $db The db connection + * @param phpbb_user $user The user + */ public function __construct($phpbb_root_path, $php_ext, phpbb_auth $auth, phpbb_config $config, dbal $db, phpbb_user $user) { $this->phpbb_root_path = $phpbb_root_path; diff --git a/phpBB/includes/cron/task/core/tidy_sessions.php b/phpBB/includes/cron/task/core/tidy_sessions.php index 695a537274..13531aa30b 100644 --- a/phpBB/includes/cron/task/core/tidy_sessions.php +++ b/phpBB/includes/cron/task/core/tidy_sessions.php @@ -25,6 +25,12 @@ class phpbb_cron_task_core_tidy_sessions extends phpbb_cron_task_base protected $config; protected $user; + /** + * Constructor. + * + * @param phpbb_config $config The config + * @param phpbb_user $user The user + */ public function __construct(phpbb_config $config, phpbb_user $user) { $this->config = $config; diff --git a/phpBB/includes/cron/task/core/tidy_warnings.php b/phpBB/includes/cron/task/core/tidy_warnings.php index acffd12052..8dd0674fe5 100644 --- a/phpBB/includes/cron/task/core/tidy_warnings.php +++ b/phpBB/includes/cron/task/core/tidy_warnings.php @@ -28,6 +28,13 @@ class phpbb_cron_task_core_tidy_warnings extends phpbb_cron_task_base protected $php_ext; protected $config; + /** + * Constructor. + * + * @param string $phpbb_root_path The root path + * @param string $php_ext The PHP extension + * @param phpbb_config $config The config + */ public function __construct($phpbb_root_path, $php_ext, phpbb_config $config) { $this->phpbb_root_path = $phpbb_root_path; diff --git a/phpBB/includes/di/processor/config.php b/phpBB/includes/di/processor/config.php index 1a5ec15854..22b6252a6d 100644 --- a/phpBB/includes/di/processor/config.php +++ b/phpBB/includes/di/processor/config.php @@ -12,51 +12,65 @@ */ if (!defined('IN_PHPBB')) { - exit; + exit; } use Symfony\Component\DependencyInjection\ContainerBuilder; +/** +* Configure the container for phpBB's services though +* user-defined parameters defined in the config.php file. +*/ class phpbb_di_processor_config implements phpbb_di_processor_interface { - private $config_file; - private $phpbb_root_path; - private $php_ext; - - public function __construct($config_file, $phpbb_root_path, $php_ext) - { - $this->config_file = $config_file; - $this->phpbb_root_path = $phpbb_root_path; - $this->php_ext = $php_ext; - } - - public function process(ContainerBuilder $container) - { - require $this->config_file; - - $container->setParameter('core.root_path', $this->phpbb_root_path); - $container->setParameter('core.php_ext', $this->php_ext); - - $container->setParameter('core.table_prefix', $table_prefix); - $container->setParameter('cache.driver.class', $this->fix_acm_type($acm_type)); - $container->setParameter('dbal.driver.class', 'dbal_'.$dbms); - $container->setParameter('dbal.dbhost', $dbhost); - $container->setParameter('dbal.dbuser', $dbuser); - $container->setParameter('dbal.dbpasswd', $dbpasswd); - $container->setParameter('dbal.dbname', $dbname); - $container->setParameter('dbal.dbport', $dbport); - $container->setParameter('dbal.new_link', defined('PHPBB_DB_NEW_LINK') && PHPBB_DB_NEW_LINK); - - $container->set('container', $container); - } - - protected function fix_acm_type($acm_type) - { - if (preg_match('#^[a-z]+$#', $acm_type)) - { - return 'phpbb_cache_driver_'.$acm_type; - } - - return $acm_type; - } + private $config_file; + private $phpbb_root_path; + private $php_ext; + + /** + * Constructor. + * + * @param string $config_file The config file + * @param string $phpbb_root_path The root path + * @param string $php_ext The PHP extension + */ + public function __construct($config_file, $phpbb_root_path, $php_ext) + { + $this->config_file = $config_file; + $this->phpbb_root_path = $phpbb_root_path; + $this->php_ext = $php_ext; + } + + /** + * @inheritdoc + */ + public function process(ContainerBuilder $container) + { + require $this->config_file; + + $container->setParameter('core.root_path', $this->phpbb_root_path); + $container->setParameter('core.php_ext', $this->php_ext); + + $container->setParameter('core.table_prefix', $table_prefix); + $container->setParameter('cache.driver.class', $this->fix_acm_type($acm_type)); + $container->setParameter('dbal.driver.class', 'dbal_'.$dbms); + $container->setParameter('dbal.dbhost', $dbhost); + $container->setParameter('dbal.dbuser', $dbuser); + $container->setParameter('dbal.dbpasswd', $dbpasswd); + $container->setParameter('dbal.dbname', $dbname); + $container->setParameter('dbal.dbport', $dbport); + $container->setParameter('dbal.new_link', defined('PHPBB_DB_NEW_LINK') && PHPBB_DB_NEW_LINK); + + $container->set('container', $container); + } + + protected function fix_acm_type($acm_type) + { + if (preg_match('#^[a-z]+$#', $acm_type)) + { + return 'phpbb_cache_driver_'.$acm_type; + } + + return $acm_type; + } } diff --git a/phpBB/includes/di/processor/ext.php b/phpBB/includes/di/processor/ext.php index 04a586a086..e69a3d73b3 100644 --- a/phpBB/includes/di/processor/ext.php +++ b/phpBB/includes/di/processor/ext.php @@ -12,32 +12,43 @@ */ if (!defined('IN_PHPBB')) { - exit; + exit; } use Symfony\Component\Config\FileLocator; use Symfony\Component\DependencyInjection\ContainerBuilder; use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; +/** +* Load the service configurations from all extensions into the container. +*/ class phpbb_di_processor_ext implements phpbb_di_processor_interface { - private $extension_manager; + private $extension_manager; - public function __construct($extension_manager) - { - $this->extension_manager = $extension_manager; - } + /** + * Constructor. + * + * @param string $extension_manager The extension manager + */ + public function __construct($extension_manager) + { + $this->extension_manager = $extension_manager; + } - public function process(ContainerBuilder $container) - { - $enabled_exts = $this->extension_manager->all_enabled(); - foreach ($enabled_exts as $name => $path) - { - if (file_exists($path . '/config/services.yml')) - { - $loader = new YamlFileLoader($container, new FileLocator($path . '/config')); - $loader->load('services.yml'); - } - } - } + /** + * @inheritdoc + */ + public function process(ContainerBuilder $container) + { + $enabled_exts = $this->extension_manager->all_enabled(); + foreach ($enabled_exts as $name => $path) + { + if (file_exists($path . '/config/services.yml')) + { + $loader = new YamlFileLoader($container, new FileLocator($path . '/config')); + $loader->load('services.yml'); + } + } + } } diff --git a/phpBB/includes/di/processor/interface.php b/phpBB/includes/di/processor/interface.php index 51bd85a076..b8563791cc 100644 --- a/phpBB/includes/di/processor/interface.php +++ b/phpBB/includes/di/processor/interface.php @@ -12,12 +12,17 @@ */ if (!defined('IN_PHPBB')) { - exit; + exit; } use Symfony\Component\DependencyInjection\ContainerBuilder; interface phpbb_di_processor_interface { - public function process(ContainerBuilder $container); + /** + * Mutate the container. + * + * @param ContainerBuilder $container The container + */ + public function process(ContainerBuilder $container); } -- cgit v1.2.1 From 81f7f28cc33d896973c2912097103ea84fa14114 Mon Sep 17 00:00:00 2001 From: Unknown Bliss Date: Sat, 1 Sep 2012 21:30:35 +0100 Subject: [ticket/10631] Removing un-needed TODOs that are no longer needed. PHPBB3-10631 --- phpBB/includes/extension/metadata_manager.php | 4 ---- 1 file changed, 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/extension/metadata_manager.php b/phpBB/includes/extension/metadata_manager.php index 8c570830fe..ea85bd3c4e 100644 --- a/phpBB/includes/extension/metadata_manager.php +++ b/phpBB/includes/extension/metadata_manager.php @@ -95,7 +95,6 @@ class phpbb_extension_metadata_manager return ($this->validate('name')) ? $this->metadata['name'] : false; } break; - // TODO: Add remaining cases as needed } } @@ -153,9 +152,6 @@ class phpbb_extension_metadata_manager */ private function clean_metadata_array() { -// TODO: Remove all parts of the array we don't want or shouldn't be there due to nub mod authors -// $this->metadata = $metadata_finished; - return $this->metadata; } -- cgit v1.2.1 From b3cd5a649be62f175de651a16ae02c5f709ca2f4 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Mon, 3 Sep 2012 13:32:33 -0500 Subject: [ticket/8713] Do not trim login inputs Create a function to request variables which are not trimmed. All requests for passwords (except forum passwords) now use the untrimmed request function. PHPBB3-8713 --- phpBB/includes/acp/acp_language.php | 6 +-- phpBB/includes/acp/acp_users.php | 6 +-- phpBB/includes/functions.php | 4 +- phpBB/includes/request/request.php | 63 +++++++++++++++++++++++++++++ phpBB/includes/request/type_cast_helper.php | 22 +++++++--- phpBB/includes/ucp/ucp_profile.php | 6 +-- phpBB/includes/ucp/ucp_register.php | 4 +- phpBB/install/install_update.php | 4 +- 8 files changed, 94 insertions(+), 21 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_language.php b/phpBB/includes/acp/acp_language.php index 2b19f93c75..87cf605d8e 100644 --- a/phpBB/includes/acp/acp_language.php +++ b/phpBB/includes/acp/acp_language.php @@ -100,11 +100,11 @@ class acp_language switch ($method) { case 'ftp': - $transfer = new ftp(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new ftp(request_var('host', ''), request_var('username', ''), $request->untrimed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); break; case 'ftp_fsock': - $transfer = new ftp_fsock(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new ftp_fsock(request_var('host', ''), request_var('username', ''), $request->untrimed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); break; default: @@ -404,7 +404,7 @@ class acp_language trigger_error($user->lang['INVALID_UPLOAD_METHOD'], E_USER_ERROR); } - $transfer = new $method(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); if (($result = $transfer->open_session()) !== true) { diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index b54257b04a..b9958ed0f1 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -32,7 +32,7 @@ class acp_users { global $config, $db, $user, $auth, $template, $cache; global $phpbb_root_path, $phpbb_admin_path, $phpEx, $table_prefix, $file_uploads; - global $phpbb_dispatcher; + global $phpbb_dispatcher, $request; $user->add_lang(array('posting', 'ucp', 'acp/users')); $this->tpl_name = 'acp_users'; @@ -770,8 +770,8 @@ class acp_users 'username' => utf8_normalize_nfc(request_var('user', $user_row['username'], true)), 'user_founder' => request_var('user_founder', ($user_row['user_type'] == USER_FOUNDER) ? 1 : 0), 'email' => strtolower(request_var('user_email', $user_row['user_email'])), - 'new_password' => request_var('new_password', '', true), - 'password_confirm' => request_var('password_confirm', '', true), + 'new_password' => $request->untrimed_variable('new_password', '', true), + 'password_confirm' => $request->untrimed_variable('password_confirm', '', true), ); // Validation data - we do not check the password complexity setting here diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 834f57a38b..1cdda60855 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3044,11 +3044,11 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa trigger_error('NO_AUTH_ADMIN'); } - $password = request_var('password_' . $credential, '', true); + $password = $request->untrimed_variable('password_' . $credential, '', true); } else { - $password = request_var('password', '', true); + $password = $request->untrimed_variable('password', '', true); } $username = request_var('username', '', true); diff --git a/phpBB/includes/request/request.php b/phpBB/includes/request/request.php index 4e425dbd27..747ca09624 100644 --- a/phpBB/includes/request/request.php +++ b/phpBB/includes/request/request.php @@ -242,6 +242,69 @@ class phpbb_request implements phpbb_request_interface return $var; } + /** + * Get a variable, but without trimming strings + * Same functionality as variable(), except does not run trim() on strings + * All variables in GET or POST requests should be retrieved through this function to maximise security. + * + * @param string|array $var_name The form variable's name from which data shall be retrieved. + * If the value is an array this may be an array of indizes which will give + * direct access to a value at any depth. E.g. if the value of "var" is array(1 => "a") + * then specifying array("var", 1) as the name will return "a". + * @param mixed $default A default value that is returned if the variable was not set. + * This function will always return a value of the same type as the default. + * @param bool $multibyte If $default is a string this paramater has to be true if the variable may contain any UTF-8 characters + * Default is false, causing all bytes outside the ASCII range (0-127) to be replaced with question marks + * @param phpbb_request_interface::POST|GET|REQUEST|COOKIE $super_global + * Specifies which super global should be used + * + * @return mixed The value of $_REQUEST[$var_name] run through {@link set_var set_var} to ensure that the type is the + * the same as that of $default. If the variable is not set $default is returned. + */ + public function untrimed_variable($var_name, $default, $multibyte, $super_global = phpbb_request_interface::REQUEST) + { + $path = false; + + // deep direct access to multi dimensional arrays + if (is_array($var_name)) + { + $path = $var_name; + // make sure at least the variable name is specified + if (empty($path)) + { + return (is_array($default)) ? array() : $default; + } + // the variable name is the first element on the path + $var_name = array_shift($path); + } + + if (!isset($this->input[$super_global][$var_name])) + { + return (is_array($default)) ? array() : $default; + } + $var = $this->input[$super_global][$var_name]; + + if ($path) + { + // walk through the array structure and find the element we are looking for + foreach ($path as $key) + { + if (is_array($var) && isset($var[$key])) + { + $var = $var[$key]; + } + else + { + return (is_array($default)) ? array() : $default; + } + } + } + + $this->type_cast_helper->recursive_set_var($var, $default, $multibyte, false); + + return $var; + } + /** * Shortcut method to retrieve SERVER variables. * diff --git a/phpBB/includes/request/type_cast_helper.php b/phpBB/includes/request/type_cast_helper.php index 561e8fc251..d3b94aac5a 100644 --- a/phpBB/includes/request/type_cast_helper.php +++ b/phpBB/includes/request/type_cast_helper.php @@ -93,15 +93,23 @@ class phpbb_request_type_cast_helper implements phpbb_request_type_cast_helper_i * @param mixed $type The variable type. Will be used with {@link settype()} * @param bool $multibyte Indicates whether string values may contain UTF-8 characters. * Default is false, causing all bytes outside the ASCII range (0-127) to be replaced with question marks. + * @param bool $trim Indicates whether string values will be be parsed with trim() + * Default is true */ - public function set_var(&$result, $var, $type, $multibyte = false) + public function set_var(&$result, $var, $type, $multibyte = false, $trim = true) { settype($var, $type); $result = $var; if ($type == 'string') { - $result = trim(str_replace(array("\r\n", "\r", "\0"), array("\n", "\n", ''), $result)); + $result = str_replace(array("\r\n", "\r", "\0"), array("\n", "\n", ''), $result); + + if ($trim) + { + $result = trim($result); + } + $result = htmlspecialchars($result, ENT_COMPAT, 'UTF-8'); if ($multibyte) @@ -141,8 +149,10 @@ class phpbb_request_type_cast_helper implements phpbb_request_type_cast_helper_i * @param bool $multibyte Indicates whether string keys and values may contain UTF-8 characters. * Default is false, causing all bytes outside the ASCII range (0-127) to * be replaced with question marks. + * @param bool $trim Indicates whether string values will be be parsed with trim() + * Default is true */ - public function recursive_set_var(&$var, $default, $multibyte) + public function recursive_set_var(&$var, $default, $multibyte, $trim = true) { if (is_array($var) !== is_array($default)) { @@ -153,7 +163,7 @@ class phpbb_request_type_cast_helper implements phpbb_request_type_cast_helper_i if (!is_array($default)) { $type = gettype($default); - $this->set_var($var, $var, $type, $multibyte); + $this->set_var($var, $var, $type, $multibyte, $trim); } else { @@ -174,9 +184,9 @@ class phpbb_request_type_cast_helper implements phpbb_request_type_cast_helper_i foreach ($_var as $k => $v) { - $this->set_var($k, $k, $key_type, $multibyte, $multibyte); + $this->set_var($k, $k, $key_type, $multibyte, $trim); - $this->recursive_set_var($v, $default_value, $multibyte); + $this->recursive_set_var($v, $default_value, $multibyte, $trim); $var[$k] = $v; } } diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index 2ac82fb52f..68d5dd5d65 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -46,9 +46,9 @@ class ucp_profile $data = array( 'username' => utf8_normalize_nfc(request_var('username', $user->data['username'], true)), 'email' => strtolower(request_var('email', $user->data['user_email'])), - 'new_password' => request_var('new_password', '', true), - 'cur_password' => request_var('cur_password', '', true), - 'password_confirm' => request_var('password_confirm', '', true), + 'new_password' => $request->untrimed_variable('new_password', '', true), + 'cur_password' => $request->untrimed_variable('cur_password', '', true), + 'password_confirm' => $request->untrimed_variable('password_confirm', '', true), ); add_form_key('ucp_reg_details'); diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index 6ce53a79ab..6fab189a99 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -170,8 +170,8 @@ class ucp_register $data = array( 'username' => utf8_normalize_nfc(request_var('username', '', true)), - 'new_password' => request_var('new_password', '', true), - 'password_confirm' => request_var('password_confirm', '', true), + 'new_password' => $request->untrimed_variable('new_password', '', true), + 'password_confirm' => $request->untrimed_variable('password_confirm', '', true), 'email' => strtolower(request_var('email', '')), 'lang' => basename(request_var('lang', $user->lang_name)), 'tz' => request_var('tz', $timezone), diff --git a/phpBB/install/install_update.php b/phpBB/install/install_update.php index 88b00f1cf1..4b5a23e497 100644 --- a/phpBB/install/install_update.php +++ b/phpBB/install/install_update.php @@ -862,7 +862,7 @@ class install_update extends module $test_connection = false; if ($test_ftp_connection || $submit) { - $transfer = new $method(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); $test_connection = $transfer->open_session(); // Make sure that the directory is correct by checking for the existence of common.php @@ -948,7 +948,7 @@ class install_update extends module } else { - $transfer = new $method(request_var('host', ''), request_var('username', ''), request_var('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); $transfer->open_session(); } -- cgit v1.2.1 From 815cc4a9a3fa8c633b55925eb77f9f3bdbb5de04 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Mon, 3 Sep 2012 18:23:36 -0500 Subject: [ticket/8796] Make function markread obey the $post_time argument Also do a little cleanup of the markread function PHPBB3-8796 --- phpBB/includes/functions.php | 71 ++++++++++++++++++++++++++++++++------------ 1 file changed, 52 insertions(+), 19 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 834f57a38b..53f48cb8a7 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1280,6 +1280,10 @@ function phpbb_timezone_select($user, $default = '', $truncate = false) * Marks a topic/forum as read * Marks a topic as posted to * +* @param string $mode (all, topics, topic, post) +* @param int|bool $forum_id Used in all, topics, and topic mode +* @param int|bool $topic_id Used in topic and post mode +* @param int $post_time 0 means current time(), otherwise to set a specific mark time * @param int $user_id can only be used with $mode == 'post' */ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $user_id = 0) @@ -1287,6 +1291,8 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ global $db, $user, $config; global $request; + $post_time = ($post_time === 0) ? time() : (int) $post_time; + if ($mode == 'all') { if ($forum_id === false || !sizeof($forum_id)) @@ -1294,9 +1300,22 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ if ($config['load_db_lastread'] && $user->data['is_registered']) { // Mark all forums read (index page) - $db->sql_query('DELETE FROM ' . TOPICS_TRACK_TABLE . " WHERE user_id = {$user->data['user_id']}"); - $db->sql_query('DELETE FROM ' . FORUMS_TRACK_TABLE . " WHERE user_id = {$user->data['user_id']}"); - $db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_lastmark = ' . time() . " WHERE user_id = {$user->data['user_id']}"); + $tables = array(TOPICS_TRACK_TABLE, FORUMS_TRACK_TABLE); + foreach ($tables as $table) + { + $sql = 'DELETE FROM ' . $table . " + WHERE user_id = {$user->data['user_id']} + AND mark_time < . $post_time"; + $db->sql_query($sql); + } + + $sql = 'UPDATE ' . USERS_TABLE . " + SET user_lastmark = $post_time + WHERE user_id = {$user->data['user_id']} + AND mark_time < $post_time"; + $db->sql_query($sql); + + $user->data['user_lastmark'] = $post_time; } else if ($config['load_anon_lastread'] || $user->data['is_registered']) { @@ -1306,16 +1325,22 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ unset($tracking_topics['tf']); unset($tracking_topics['t']); unset($tracking_topics['f']); - $tracking_topics['l'] = base_convert(time() - $config['board_startdate'], 10, 36); + $tracking_topics['l'] = base_convert($post_time - $config['board_startdate'], 10, 36); - $user->set_cookie('track', tracking_serialize($tracking_topics), time() + 31536000); + $user->set_cookie('track', tracking_serialize($tracking_topics), $post_time + 31536000); $request->overwrite($config['cookie_name'] . '_track', tracking_serialize($tracking_topics), phpbb_request_interface::COOKIE); unset($tracking_topics); if ($user->data['is_registered']) { - $db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_lastmark = ' . time() . " WHERE user_id = {$user->data['user_id']}"); + $sql = 'UPDATE ' . USERS_TABLE . " + SET user_lastmark = $post_time + WHERE user_id = {$user->data['user_id']} + AND mark_time < $post_time"; + $db->sql_query($sql); + + $user->data['user_lastmark'] = $post_time; } } } @@ -1337,12 +1362,14 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ { $sql = 'DELETE FROM ' . TOPICS_TRACK_TABLE . " WHERE user_id = {$user->data['user_id']} + AND mark_time < $post_time AND " . $db->sql_in_set('forum_id', $forum_id); $db->sql_query($sql); $sql = 'SELECT forum_id FROM ' . FORUMS_TRACK_TABLE . " WHERE user_id = {$user->data['user_id']} + AND mark_time < $post_time AND " . $db->sql_in_set('forum_id', $forum_id); $result = $db->sql_query($sql); @@ -1355,9 +1382,10 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ if (sizeof($sql_update)) { - $sql = 'UPDATE ' . FORUMS_TRACK_TABLE . ' - SET mark_time = ' . time() . " + $sql = 'UPDATE ' . FORUMS_TRACK_TABLE . " + SET mark_time = $post_time WHERE user_id = {$user->data['user_id']} + AND mark_time < $post_time AND " . $db->sql_in_set('forum_id', $sql_update); $db->sql_query($sql); } @@ -1370,7 +1398,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ $sql_ary[] = array( 'user_id' => (int) $user->data['user_id'], 'forum_id' => (int) $f_id, - 'mark_time' => time() + 'mark_time' => $post_time, ); } @@ -1401,7 +1429,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ unset($tracking['f'][$f_id]); } - $tracking['f'][$f_id] = base_convert(time() - $config['board_startdate'], 10, 36); + $tracking['f'][$f_id] = base_convert($post_time - $config['board_startdate'], 10, 36); } if (isset($tracking['tf']) && empty($tracking['tf'])) @@ -1409,7 +1437,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ unset($tracking['tf']); } - $user->set_cookie('track', tracking_serialize($tracking), time() + 31536000); + $user->set_cookie('track', tracking_serialize($tracking), $post_time + 31536000); $request->overwrite($config['cookie_name'] . '_track', tracking_serialize($tracking), phpbb_request_interface::COOKIE); unset($tracking); @@ -1426,9 +1454,10 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ if ($config['load_db_lastread'] && $user->data['is_registered']) { - $sql = 'UPDATE ' . TOPICS_TRACK_TABLE . ' - SET mark_time = ' . (($post_time) ? $post_time : time()) . " + $sql = 'UPDATE ' . TOPICS_TRACK_TABLE . " + SET mark_time = $post_time WHERE user_id = {$user->data['user_id']} + AND mark_time < $post_time AND topic_id = $topic_id"; $db->sql_query($sql); @@ -1441,7 +1470,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ 'user_id' => (int) $user->data['user_id'], 'topic_id' => (int) $topic_id, 'forum_id' => (int) $forum_id, - 'mark_time' => ($post_time) ? (int) $post_time : time(), + 'mark_time' => $post_time, ); $db->sql_query('INSERT INTO ' . TOPICS_TRACK_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary)); @@ -1461,7 +1490,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ $tracking['tf'][$forum_id][$topic_id36] = true; } - $post_time = ($post_time) ? $post_time : time(); $tracking['t'][$topic_id36] = base_convert($post_time - $config['board_startdate'], 10, 36); // If the cookie grows larger than 10000 characters we will remove the smallest value @@ -1496,8 +1524,13 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ if ($user->data['is_registered']) { - $user->data['user_lastmark'] = intval(base_convert(max($time_keys) + $config['board_startdate'], 36, 10)); - $db->sql_query('UPDATE ' . USERS_TABLE . ' SET user_lastmark = ' . $user->data['user_lastmark'] . " WHERE user_id = {$user->data['user_id']}"); + $sql = 'UPDATE ' . USERS_TABLE . " + SET user_lastmark = $post_time + WHERE user_id = {$user->data['user_id']} + AND mark_time < $post_time"; + $db->sql_query($sql); + + $user->data['user_lastmark'] = $post_time; } else { @@ -1505,7 +1538,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ } } - $user->set_cookie('track', tracking_serialize($tracking), time() + 31536000); + $user->set_cookie('track', tracking_serialize($tracking), $post_time + 31536000); $request->overwrite($config['cookie_name'] . '_track', tracking_serialize($tracking), phpbb_request_interface::COOKIE); } @@ -1527,7 +1560,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ $sql_ary = array( 'user_id' => (int) $use_user_id, 'topic_id' => (int) $topic_id, - 'topic_posted' => 1 + 'topic_posted' => 1, ); $db->sql_query('INSERT INTO ' . TOPICS_POSTED_TABLE . ' ' . $db->sql_build_array('INSERT', $sql_ary)); -- cgit v1.2.1 From b9308329cf3c0e6844a35f2d274423c2640887db Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Mon, 3 Sep 2012 18:37:54 -0500 Subject: [ticket/8796] Revert changes to $user->data['lastmark'] The earlier change might change the way some things work (after looking at viewtopic) and I'd rather not risk introducing new bugs, so I'm going to revert those changes to be safe. PHPBB3-8796 --- phpBB/includes/functions.php | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 53f48cb8a7..26b73e20fe 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1314,8 +1314,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ WHERE user_id = {$user->data['user_id']} AND mark_time < $post_time"; $db->sql_query($sql); - - $user->data['user_lastmark'] = $post_time; } else if ($config['load_anon_lastread'] || $user->data['is_registered']) { @@ -1339,8 +1337,6 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ WHERE user_id = {$user->data['user_id']} AND mark_time < $post_time"; $db->sql_query($sql); - - $user->data['user_lastmark'] = $post_time; } } } @@ -1524,13 +1520,13 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ if ($user->data['is_registered']) { + $user->data['user_lastmark'] = intval(base_convert(max($time_keys) + $config['board_startdate'], 36, 10)); + $sql = 'UPDATE ' . USERS_TABLE . " SET user_lastmark = $post_time WHERE user_id = {$user->data['user_id']} AND mark_time < $post_time"; $db->sql_query($sql); - - $user->data['user_lastmark'] = $post_time; } else { -- cgit v1.2.1 From 9cba0b5263a8dcf0ff4cbfd6db2b37cd0cce55f1 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Mon, 3 Sep 2012 18:51:29 -0500 Subject: [ticket/8796] Mark read links updated to include time() in url Submitting the current time() allows us to mark only the topics and forums read up until a certain time (when the user loaded the page). This means that any new posts or topics posted between when the user opened the page and clicked the link are still shown as unread. PHPBB3-8796 --- phpBB/includes/functions_display.php | 6 +++--- phpBB/index.php | 2 +- phpBB/viewforum.php | 4 ++-- 3 files changed, 6 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 881c95907b..e9c7143473 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -59,7 +59,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod if (check_link_hash(request_var('hash', ''), 'global')) { - markread('all'); + markread('all', false, false, request_var('mark_time', 0)); trigger_error( $user->lang['FORUMS_MARKED'] . '

    ' . @@ -309,7 +309,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod $token = request_var('hash', ''); if (check_link_hash($token, 'global')) { - markread('topics', $forum_ids); + markread('topics', $forum_ids, false, request_var('mark_time', 0)); $message = sprintf($user->lang['RETURN_FORUM'], '', ''); meta_refresh(3, $redirect); @@ -551,7 +551,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod } $template->assign_vars(array( - 'U_MARK_FORUMS' => ($user->data['is_registered'] || $config['load_anon_lastread']) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'hash=' . generate_link_hash('global') . '&f=' . $root_data['forum_id'] . '&mark=forums') : '', + 'U_MARK_FORUMS' => ($user->data['is_registered'] || $config['load_anon_lastread']) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'hash=' . generate_link_hash('global') . '&f=' . $root_data['forum_id'] . '&mark=forums&mark_time=' . time()) : '', 'S_HAS_SUBFORUM' => ($visible_forums) ? true : false, 'L_SUBFORUM' => ($visible_forums == 1) ? $user->lang['SUBFORUM'] : $user->lang['SUBFORUMS'], 'LAST_POST_IMG' => $user->img('icon_topic_latest', 'VIEW_LATEST_POST'), diff --git a/phpBB/index.php b/phpBB/index.php index 0ac8034d7f..66e1b2114b 100644 --- a/phpBB/index.php +++ b/phpBB/index.php @@ -167,7 +167,7 @@ $template->assign_vars(array( 'S_LOGIN_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login'), 'S_DISPLAY_BIRTHDAY_LIST' => ($config['load_birthdays']) ? true : false, - 'U_MARK_FORUMS' => ($user->data['is_registered'] || $config['load_anon_lastread']) ? append_sid("{$phpbb_root_path}index.$phpEx", 'hash=' . generate_link_hash('global') . '&mark=forums') : '', + 'U_MARK_FORUMS' => ($user->data['is_registered'] || $config['load_anon_lastread']) ? append_sid("{$phpbb_root_path}index.$phpEx", 'hash=' . generate_link_hash('global') . '&mark=forums&mark_time=' . time()) : '', 'U_MCP' => ($auth->acl_get('m_') || $auth->acl_getf_global('m_')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=main&mode=front', true, $user->session_id) : '') ); diff --git a/phpBB/viewforum.php b/phpBB/viewforum.php index 03c2bb286f..83e5d4caa5 100644 --- a/phpBB/viewforum.php +++ b/phpBB/viewforum.php @@ -176,7 +176,7 @@ if ($mark_read == 'topics') $token = request_var('hash', ''); if (check_link_hash($token, 'global')) { - markread('topics', array($forum_id)); + markread('topics', array($forum_id), false, request_var('mark_time', 0)); } $redirect_url = append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id); meta_refresh(3, $redirect_url); @@ -340,7 +340,7 @@ $template->assign_vars(array( 'U_MCP' => ($auth->acl_get('m_', $forum_id)) ? append_sid("{$phpbb_root_path}mcp.$phpEx", "f=$forum_id&i=main&mode=forum_view", true, $user->session_id) : '', 'U_POST_NEW_TOPIC' => ($auth->acl_get('f_post', $forum_id) || $user->data['user_id'] == ANONYMOUS) ? append_sid("{$phpbb_root_path}posting.$phpEx", 'mode=post&f=' . $forum_id) : '', 'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", "f=$forum_id" . ((strlen($u_sort_param)) ? "&$u_sort_param" : '') . (($start == 0) ? '' : "&start=$start")), - 'U_MARK_TOPICS' => ($user->data['is_registered'] || $config['load_anon_lastread']) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'hash=' . generate_link_hash('global') . "&f=$forum_id&mark=topics") : '', + 'U_MARK_TOPICS' => ($user->data['is_registered'] || $config['load_anon_lastread']) ? append_sid("{$phpbb_root_path}viewforum.$phpEx", 'hash=' . generate_link_hash('global') . "&f=$forum_id&mark=topics&mark_time=" . time()) : '', )); // Grab icons -- cgit v1.2.1 From fccbf09e4aa9034afba5d5992d773b209f59bba7 Mon Sep 17 00:00:00 2001 From: Nathaniel Guse Date: Mon, 3 Sep 2012 18:58:38 -0500 Subject: [ticket/8796] Fix a few issues with the previous commits Fix an SQL error and the redirect url generated PHPBB3-8796 --- phpBB/includes/functions.php | 6 +++--- phpBB/includes/functions_display.php | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 26b73e20fe..13cb15d73d 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1305,14 +1305,14 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ { $sql = 'DELETE FROM ' . $table . " WHERE user_id = {$user->data['user_id']} - AND mark_time < . $post_time"; + AND mark_time < $post_time"; $db->sql_query($sql); } $sql = 'UPDATE ' . USERS_TABLE . " SET user_lastmark = $post_time WHERE user_id = {$user->data['user_id']} - AND mark_time < $post_time"; + AND user_lastmark < $post_time"; $db->sql_query($sql); } else if ($config['load_anon_lastread'] || $user->data['is_registered']) @@ -1335,7 +1335,7 @@ function markread($mode, $forum_id = false, $topic_id = false, $post_time = 0, $ $sql = 'UPDATE ' . USERS_TABLE . " SET user_lastmark = $post_time WHERE user_id = {$user->data['user_id']} - AND mark_time < $post_time"; + AND user_lastmark < $post_time"; $db->sql_query($sql); } } diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index e9c7143473..39ec8445c5 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -54,7 +54,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod // Handle marking everything read if ($mark_read == 'all') { - $redirect = build_url(array('mark', 'hash')); + $redirect = build_url(array('mark', 'hash', 'mark_time')); meta_refresh(3, $redirect); if (check_link_hash(request_var('hash', ''), 'global')) @@ -305,7 +305,7 @@ function display_forums($root_data = '', $display_moderators = true, $return_mod // Handle marking posts if ($mark_read == 'forums') { - $redirect = build_url(array('mark', 'hash')); + $redirect = build_url(array('mark', 'hash', 'mark_time')); $token = request_var('hash', ''); if (check_link_hash($token, 'global')) { -- cgit v1.2.1 From c93b3827dc0644ea4aece1af661224aaa68a4cae Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Thu, 6 Sep 2012 18:27:49 -0500 Subject: [ticket/11092] phpbb_gen_download_links strict standards errors Two strict standards errors in phpbb_gen_download_links PHPBB3-11092 --- phpBB/includes/functions_compress.php | 4 +++- phpBB/includes/functions_display.php | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_compress.php b/phpBB/includes/functions_compress.php index 8e07e6d1b8..4675394633 100644 --- a/phpBB/includes/functions_compress.php +++ b/phpBB/includes/functions_compress.php @@ -159,8 +159,10 @@ class compress /** * Return available methods + * + * @return array Array of strings of available compression methods (.tar, .tar.gz, .zip, etc.) */ - function methods() + public static function methods() { $methods = array('.tar'); $available_methods = array('.tar.gz' => 'zlib', '.tar.bz2' => 'bz2', '.zip' => 'zlib'); diff --git a/phpBB/includes/functions_display.php b/phpBB/includes/functions_display.php index 881c95907b..8328b9ee7a 100644 --- a/phpBB/includes/functions_display.php +++ b/phpBB/includes/functions_display.php @@ -1410,7 +1410,8 @@ function phpbb_gen_download_links($param_key, $param_val, $phpbb_root_path, $php foreach ($methods as $method) { - $type = array_pop(explode('.', $method)); + $exploded = explode('.', $method); + $type = array_pop($exploded); $params = array('archive' => $method); $params[$param_key] = $param_val; -- cgit v1.2.1 From 552233d8fd27ca09fbed555582a9880771205929 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 8 Sep 2012 01:03:38 +0200 Subject: [ticket/11100] Mark can_use_ssl() and can_use_tls() as static. PHPBB3-11100 --- phpBB/includes/functions_jabber.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_jabber.php b/phpBB/includes/functions_jabber.php index d76309d5bb..3d8e403f4b 100644 --- a/phpBB/includes/functions_jabber.php +++ b/phpBB/includes/functions_jabber.php @@ -68,7 +68,7 @@ class jabber } $this->password = $password; - $this->use_ssl = ($use_ssl && $this->can_use_ssl()) ? true : false; + $this->use_ssl = ($use_ssl && self::can_use_ssl()) ? true : false; // Change port if we use SSL if ($this->port == 5222 && $this->use_ssl) @@ -83,7 +83,7 @@ class jabber /** * Able to use the SSL functionality? */ - function can_use_ssl() + static public function can_use_ssl() { // Will not work with PHP >= 5.2.1 or < 5.2.3RC2 until timeout problem with ssl hasn't been fixed (http://bugs.php.net/41236) return ((version_compare(PHP_VERSION, '5.2.1', '<') || version_compare(PHP_VERSION, '5.2.3RC2', '>=')) && @extension_loaded('openssl')) ? true : false; @@ -92,7 +92,7 @@ class jabber /** * Able to use TLS? */ - function can_use_tls() + static public function can_use_tls() { if (!@extension_loaded('openssl') || !function_exists('stream_socket_enable_crypto') || !function_exists('stream_get_meta_data') || !function_exists('socket_set_blocking') || !function_exists('stream_get_wrappers')) { @@ -442,7 +442,7 @@ class jabber } // Let's use TLS if SSL is not enabled and we can actually use it - if (!$this->session['ssl'] && $this->can_use_tls() && $this->can_use_ssl() && isset($xml['stream:features'][0]['#']['starttls'])) + if (!$this->session['ssl'] && self::can_use_tls() && self::can_use_ssl() && isset($xml['stream:features'][0]['#']['starttls'])) { $this->add_to_log('Switching to TLS.'); $this->send("\n"); -- cgit v1.2.1 From 798033075ba0bbef8f43c542ca05aae776747917 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 8 Sep 2012 14:07:06 +0200 Subject: [ticket/8713] Always trim array keys. PHPBB3-8713 --- phpBB/includes/request/type_cast_helper.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/request/type_cast_helper.php b/phpBB/includes/request/type_cast_helper.php index d3b94aac5a..3039647bfa 100644 --- a/phpBB/includes/request/type_cast_helper.php +++ b/phpBB/includes/request/type_cast_helper.php @@ -184,7 +184,7 @@ class phpbb_request_type_cast_helper implements phpbb_request_type_cast_helper_i foreach ($_var as $k => $v) { - $this->set_var($k, $k, $key_type, $multibyte, $trim); + $this->set_var($k, $k, $key_type, $multibyte); $this->recursive_set_var($v, $default_value, $multibyte, $trim); $var[$k] = $v; -- cgit v1.2.1 From c3e0d1b6d12f07df88e31ffd896b275e65b788eb Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 8 Sep 2012 14:07:42 +0200 Subject: [ticket/8713] Fix type_cast_helper.php doc blocks: Add punctuation etc. PHPBB3-8713 --- phpBB/includes/request/type_cast_helper.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/request/type_cast_helper.php b/phpBB/includes/request/type_cast_helper.php index 3039647bfa..1a5274ed14 100644 --- a/phpBB/includes/request/type_cast_helper.php +++ b/phpBB/includes/request/type_cast_helper.php @@ -93,8 +93,8 @@ class phpbb_request_type_cast_helper implements phpbb_request_type_cast_helper_i * @param mixed $type The variable type. Will be used with {@link settype()} * @param bool $multibyte Indicates whether string values may contain UTF-8 characters. * Default is false, causing all bytes outside the ASCII range (0-127) to be replaced with question marks. - * @param bool $trim Indicates whether string values will be be parsed with trim() - * Default is true + * @param bool $trim Indicates whether trim() should be applied to string values. + * Default is true. */ public function set_var(&$result, $var, $type, $multibyte = false, $trim = true) { @@ -149,8 +149,8 @@ class phpbb_request_type_cast_helper implements phpbb_request_type_cast_helper_i * @param bool $multibyte Indicates whether string keys and values may contain UTF-8 characters. * Default is false, causing all bytes outside the ASCII range (0-127) to * be replaced with question marks. - * @param bool $trim Indicates whether string values will be be parsed with trim() - * Default is true + * @param bool $trim Indicates whether trim() should be applied to string values. + * Default is true. */ public function recursive_set_var(&$var, $default, $multibyte, $trim = true) { -- cgit v1.2.1 From b62c37c5799d4b9e018358c38a731d6664acadf1 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 8 Sep 2012 14:09:12 +0200 Subject: [ticket/8713] DRY: variable() and untrimed_variable() into a protected method. PHPBB3-8713 --- phpBB/includes/request/request.php | 144 +++++++++++++++++-------------------- 1 file changed, 64 insertions(+), 80 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/request/request.php b/phpBB/includes/request/request.php index 747ca09624..c6b6610af5 100644 --- a/phpBB/includes/request/request.php +++ b/phpBB/includes/request/request.php @@ -200,46 +200,7 @@ class phpbb_request implements phpbb_request_interface */ public function variable($var_name, $default, $multibyte = false, $super_global = phpbb_request_interface::REQUEST) { - $path = false; - - // deep direct access to multi dimensional arrays - if (is_array($var_name)) - { - $path = $var_name; - // make sure at least the variable name is specified - if (empty($path)) - { - return (is_array($default)) ? array() : $default; - } - // the variable name is the first element on the path - $var_name = array_shift($path); - } - - if (!isset($this->input[$super_global][$var_name])) - { - return (is_array($default)) ? array() : $default; - } - $var = $this->input[$super_global][$var_name]; - - if ($path) - { - // walk through the array structure and find the element we are looking for - foreach ($path as $key) - { - if (is_array($var) && isset($var[$key])) - { - $var = $var[$key]; - } - else - { - return (is_array($default)) ? array() : $default; - } - } - } - - $this->type_cast_helper->recursive_set_var($var, $default, $multibyte); - - return $var; + return $this->_variable($var_name, $default, $multibyte, $super_global, true); } /** @@ -263,46 +224,7 @@ class phpbb_request implements phpbb_request_interface */ public function untrimed_variable($var_name, $default, $multibyte, $super_global = phpbb_request_interface::REQUEST) { - $path = false; - - // deep direct access to multi dimensional arrays - if (is_array($var_name)) - { - $path = $var_name; - // make sure at least the variable name is specified - if (empty($path)) - { - return (is_array($default)) ? array() : $default; - } - // the variable name is the first element on the path - $var_name = array_shift($path); - } - - if (!isset($this->input[$super_global][$var_name])) - { - return (is_array($default)) ? array() : $default; - } - $var = $this->input[$super_global][$var_name]; - - if ($path) - { - // walk through the array structure and find the element we are looking for - foreach ($path as $key) - { - if (is_array($var) && isset($var[$key])) - { - $var = $var[$key]; - } - else - { - return (is_array($default)) ? array() : $default; - } - } - } - - $this->type_cast_helper->recursive_set_var($var, $default, $multibyte, false); - - return $var; + return $this->_variable($var_name, $default, $multibyte, $super_global, false); } /** @@ -414,4 +336,66 @@ class phpbb_request implements phpbb_request_interface return array_keys($this->input[$super_global]); } + + /** + * Helper function used by variable() and untrimed_variable(). + * + * @param string|array $var_name The form variable's name from which data shall be retrieved. + * If the value is an array this may be an array of indizes which will give + * direct access to a value at any depth. E.g. if the value of "var" is array(1 => "a") + * then specifying array("var", 1) as the name will return "a". + * @param mixed $default A default value that is returned if the variable was not set. + * This function will always return a value of the same type as the default. + * @param bool $multibyte If $default is a string this paramater has to be true if the variable may contain any UTF-8 characters + * Default is false, causing all bytes outside the ASCII range (0-127) to be replaced with question marks + * @param phpbb_request_interface::POST|GET|REQUEST|COOKIE $super_global + * Specifies which super global should be used + * @param bool $trim Indicates whether trim() should be applied to string values. + * + * @return mixed The value of $_REQUEST[$var_name] run through {@link set_var set_var} to ensure that the type is the + * the same as that of $default. If the variable is not set $default is returned. + */ + protected function _variable($var_name, $default, $multibyte = false, $super_global = phpbb_request_interface::REQUEST, $trim = true) + { + $path = false; + + // deep direct access to multi dimensional arrays + if (is_array($var_name)) + { + $path = $var_name; + // make sure at least the variable name is specified + if (empty($path)) + { + return (is_array($default)) ? array() : $default; + } + // the variable name is the first element on the path + $var_name = array_shift($path); + } + + if (!isset($this->input[$super_global][$var_name])) + { + return (is_array($default)) ? array() : $default; + } + $var = $this->input[$super_global][$var_name]; + + if ($path) + { + // walk through the array structure and find the element we are looking for + foreach ($path as $key) + { + if (is_array($var) && isset($var[$key])) + { + $var = $var[$key]; + } + else + { + return (is_array($default)) ? array() : $default; + } + } + } + + $this->type_cast_helper->recursive_set_var($var, $default, $multibyte, $trim); + + return $var; + } } -- cgit v1.2.1 From f2607fc9e80c6f9ad7543b7be5ea6f294aa6c40a Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 8 Sep 2012 14:15:56 +0200 Subject: [ticket/8713] Rename untrimed_variable() to untrimmed_variable(). PHPBB3-8713 --- phpBB/includes/acp/acp_language.php | 6 +++--- phpBB/includes/acp/acp_users.php | 4 ++-- phpBB/includes/functions.php | 4 ++-- phpBB/includes/request/request.php | 4 ++-- phpBB/includes/ucp/ucp_profile.php | 6 +++--- phpBB/includes/ucp/ucp_register.php | 4 ++-- phpBB/install/install_update.php | 4 ++-- 7 files changed, 16 insertions(+), 16 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_language.php b/phpBB/includes/acp/acp_language.php index 87cf605d8e..b5f5ba2312 100644 --- a/phpBB/includes/acp/acp_language.php +++ b/phpBB/includes/acp/acp_language.php @@ -100,11 +100,11 @@ class acp_language switch ($method) { case 'ftp': - $transfer = new ftp(request_var('host', ''), request_var('username', ''), $request->untrimed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new ftp(request_var('host', ''), request_var('username', ''), $request->untrimmed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); break; case 'ftp_fsock': - $transfer = new ftp_fsock(request_var('host', ''), request_var('username', ''), $request->untrimed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new ftp_fsock(request_var('host', ''), request_var('username', ''), $request->untrimmed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); break; default: @@ -404,7 +404,7 @@ class acp_language trigger_error($user->lang['INVALID_UPLOAD_METHOD'], E_USER_ERROR); } - $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimmed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); if (($result = $transfer->open_session()) !== true) { diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index b9958ed0f1..2905b84d57 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -770,8 +770,8 @@ class acp_users 'username' => utf8_normalize_nfc(request_var('user', $user_row['username'], true)), 'user_founder' => request_var('user_founder', ($user_row['user_type'] == USER_FOUNDER) ? 1 : 0), 'email' => strtolower(request_var('user_email', $user_row['user_email'])), - 'new_password' => $request->untrimed_variable('new_password', '', true), - 'password_confirm' => $request->untrimed_variable('password_confirm', '', true), + 'new_password' => $request->untrimmed_variable('new_password', '', true), + 'password_confirm' => $request->untrimmed_variable('password_confirm', '', true), ); // Validation data - we do not check the password complexity setting here diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 1cdda60855..a2f8a57938 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -3044,11 +3044,11 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa trigger_error('NO_AUTH_ADMIN'); } - $password = $request->untrimed_variable('password_' . $credential, '', true); + $password = $request->untrimmed_variable('password_' . $credential, '', true); } else { - $password = $request->untrimed_variable('password', '', true); + $password = $request->untrimmed_variable('password', '', true); } $username = request_var('username', '', true); diff --git a/phpBB/includes/request/request.php b/phpBB/includes/request/request.php index c6b6610af5..aa62c3b610 100644 --- a/phpBB/includes/request/request.php +++ b/phpBB/includes/request/request.php @@ -222,7 +222,7 @@ class phpbb_request implements phpbb_request_interface * @return mixed The value of $_REQUEST[$var_name] run through {@link set_var set_var} to ensure that the type is the * the same as that of $default. If the variable is not set $default is returned. */ - public function untrimed_variable($var_name, $default, $multibyte, $super_global = phpbb_request_interface::REQUEST) + public function untrimmed_variable($var_name, $default, $multibyte, $super_global = phpbb_request_interface::REQUEST) { return $this->_variable($var_name, $default, $multibyte, $super_global, false); } @@ -338,7 +338,7 @@ class phpbb_request implements phpbb_request_interface } /** - * Helper function used by variable() and untrimed_variable(). + * Helper function used by variable() and untrimmed_variable(). * * @param string|array $var_name The form variable's name from which data shall be retrieved. * If the value is an array this may be an array of indizes which will give diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index 68d5dd5d65..db1e3e4722 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -46,9 +46,9 @@ class ucp_profile $data = array( 'username' => utf8_normalize_nfc(request_var('username', $user->data['username'], true)), 'email' => strtolower(request_var('email', $user->data['user_email'])), - 'new_password' => $request->untrimed_variable('new_password', '', true), - 'cur_password' => $request->untrimed_variable('cur_password', '', true), - 'password_confirm' => $request->untrimed_variable('password_confirm', '', true), + 'new_password' => $request->untrimmed_variable('new_password', '', true), + 'cur_password' => $request->untrimmed_variable('cur_password', '', true), + 'password_confirm' => $request->untrimmed_variable('password_confirm', '', true), ); add_form_key('ucp_reg_details'); diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index 6fab189a99..5ae92a5cea 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -170,8 +170,8 @@ class ucp_register $data = array( 'username' => utf8_normalize_nfc(request_var('username', '', true)), - 'new_password' => $request->untrimed_variable('new_password', '', true), - 'password_confirm' => $request->untrimed_variable('password_confirm', '', true), + 'new_password' => $request->untrimmed_variable('new_password', '', true), + 'password_confirm' => $request->untrimmed_variable('password_confirm', '', true), 'email' => strtolower(request_var('email', '')), 'lang' => basename(request_var('lang', $user->lang_name)), 'tz' => request_var('tz', $timezone), diff --git a/phpBB/install/install_update.php b/phpBB/install/install_update.php index 4b5a23e497..1ecedecce6 100644 --- a/phpBB/install/install_update.php +++ b/phpBB/install/install_update.php @@ -862,7 +862,7 @@ class install_update extends module $test_connection = false; if ($test_ftp_connection || $submit) { - $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimmed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); $test_connection = $transfer->open_session(); // Make sure that the directory is correct by checking for the existence of common.php @@ -948,7 +948,7 @@ class install_update extends module } else { - $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimmed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); $transfer->open_session(); } -- cgit v1.2.1 From d543f0ffb1334d0a22c30077a9ed27c098dc4af5 Mon Sep 17 00:00:00 2001 From: Igor Wiedler Date: Sat, 8 Sep 2012 14:41:41 +0200 Subject: [ticket/11101] Delay execution of container processors Also fix the name of the ext processor service. PHPBB3-11101 --- phpBB/common.php | 14 +++++++------- phpBB/config/services.yml | 2 +- phpBB/download/file.php | 14 +++++++------- 3 files changed, 15 insertions(+), 15 deletions(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index 281eb88c4d..c6bb5c6cfe 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -100,13 +100,6 @@ $processor->process($phpbb_container); $phpbb_class_loader = $phpbb_container->get('class_loader'); $phpbb_class_loader_ext = $phpbb_container->get('class_loader.ext'); -$ids = array_keys($phpbb_container->findTaggedServiceIds('container.processor')); -foreach ($ids as $id) -{ - $processor = $phpbb_container->get($id); - $processor->process($phpbb_container); -} - // set up caching $cache = $phpbb_container->get('cache'); @@ -132,6 +125,13 @@ $phpbb_subscriber_loader = $phpbb_container->get('event.subscriber_loader'); $template = $phpbb_container->get('template'); $phpbb_style = $phpbb_container->get('style'); +$ids = array_keys($phpbb_container->findTaggedServiceIds('container.processor')); +foreach ($ids as $id) +{ + $processor = $phpbb_container->get($id); + $processor->process($phpbb_container); +} + // Add own hook handler require($phpbb_root_path . 'includes/hooks/index.' . $phpEx); $phpbb_hook = new phpbb_hook(array('exit_handler', 'phpbb_user_session_handler', 'append_sid', array('phpbb_template', 'display'))); diff --git a/phpBB/config/services.yml b/phpBB/config/services.yml index 133a43b77e..c3d2494952 100644 --- a/phpBB/config/services.yml +++ b/phpBB/config/services.yml @@ -89,7 +89,7 @@ services: - .%core.php_ext% - @cache.driver - processor.config: + processor.ext: class: phpbb_di_processor_ext arguments: - @ext.manager diff --git a/phpBB/download/file.php b/phpBB/download/file.php index 8766c6d030..7ed53d54b6 100644 --- a/phpBB/download/file.php +++ b/phpBB/download/file.php @@ -61,13 +61,6 @@ if (isset($_GET['avatar'])) $phpbb_class_loader = $phpbb_container->get('class_loader'); $phpbb_class_loader_ext = $phpbb_container->get('class_loader.ext'); - $ids = array_keys($phpbb_container->findTaggedServiceIds('container.processor')); - foreach ($ids as $id) - { - $processor = $phpbb_container->get($id); - $processor->process($phpbb_container); - } - // set up caching $cache = $phpbb_container->get('cache'); @@ -92,6 +85,13 @@ if (isset($_GET['avatar'])) $phpbb_extension_manager = $phpbb_container->get('ext.manager'); $phpbb_subscriber_loader = $phpbb_container->get('event.subscriber_loader'); + $ids = array_keys($phpbb_container->findTaggedServiceIds('container.processor')); + foreach ($ids as $id) + { + $processor = $phpbb_container->get($id); + $processor->process($phpbb_container); + } + // worst-case default $browser = strtolower($request->header('User-Agent', 'msie 6.0')); -- cgit v1.2.1 From cc0c378caf9bfc480391a9d11d5a4d78c0df097c Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 8 Sep 2012 14:40:35 +0200 Subject: [ticket/8713] Call htmlspecialchars_decode() on transfer (e.g. ftp) passwords. PHPBB3-8713 --- phpBB/includes/acp/acp_language.php | 27 ++++++++++++++++++++++++--- phpBB/install/install_update.php | 18 ++++++++++++++++-- 2 files changed, 40 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_language.php b/phpBB/includes/acp/acp_language.php index b5f5ba2312..2be1ccfc41 100644 --- a/phpBB/includes/acp/acp_language.php +++ b/phpBB/includes/acp/acp_language.php @@ -100,11 +100,25 @@ class acp_language switch ($method) { case 'ftp': - $transfer = new ftp(request_var('host', ''), request_var('username', ''), $request->untrimmed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new ftp( + request_var('host', ''), + request_var('username', ''), + htmlspecialchars_decode($request->untrimmed_variable('password', '')), + request_var('root_path', ''), + request_var('port', ''), + request_var('timeout', '') + ); break; case 'ftp_fsock': - $transfer = new ftp_fsock(request_var('host', ''), request_var('username', ''), $request->untrimmed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new ftp_fsock( + request_var('host', ''), + request_var('username', ''), + htmlspecialchars_decode($request->untrimmed_variable('password', '')), + request_var('root_path', ''), + request_var('port', ''), + request_var('timeout', '') + ); break; default: @@ -404,7 +418,14 @@ class acp_language trigger_error($user->lang['INVALID_UPLOAD_METHOD'], E_USER_ERROR); } - $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimmed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new $method( + request_var('host', ''), + request_var('username', ''), + htmlspecialchars_decode($request->untrimmed_variable('password', '')), + request_var('root_path', ''), + request_var('port', ''), + request_var('timeout', '') + ); if (($result = $transfer->open_session()) !== true) { diff --git a/phpBB/install/install_update.php b/phpBB/install/install_update.php index 1ecedecce6..8c044550f3 100644 --- a/phpBB/install/install_update.php +++ b/phpBB/install/install_update.php @@ -862,7 +862,14 @@ class install_update extends module $test_connection = false; if ($test_ftp_connection || $submit) { - $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimmed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new $method( + request_var('host', ''), + request_var('username', ''), + htmlspecialchars_decode($request->untrimmed_variable('password', '')), + request_var('root_path', ''), + request_var('port', ''), + request_var('timeout', '') + ); $test_connection = $transfer->open_session(); // Make sure that the directory is correct by checking for the existence of common.php @@ -948,7 +955,14 @@ class install_update extends module } else { - $transfer = new $method(request_var('host', ''), request_var('username', ''), $request->untrimmed_variable('password', ''), request_var('root_path', ''), request_var('port', ''), request_var('timeout', '')); + $transfer = new $method( + request_var('host', ''), + request_var('username', ''), + htmlspecialchars_decode($request->untrimmed_variable('password', '')), + request_var('root_path', ''), + request_var('port', ''), + request_var('timeout', '') + ); $transfer->open_session(); } -- cgit v1.2.1 From 1e05fd4c627d23b7756796c5acac27d2562a8607 Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 8 Sep 2012 15:01:29 +0200 Subject: [ticket/8713] Trim password in auth_db to keep compatibility. PHPBB3-8713 --- phpBB/includes/auth/auth_db.php | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/auth/auth_db.php b/phpBB/includes/auth/auth_db.php index 76790e4dad..ac944532a5 100644 --- a/phpBB/includes/auth/auth_db.php +++ b/phpBB/includes/auth/auth_db.php @@ -41,6 +41,10 @@ function login_db($username, $password, $ip = '', $browser = '', $forwarded_for global $db, $config; global $request; + // Auth plugins get the password untrimmed. + // For compatibility we trim() here. + $password = trim($password); + // do not allow empty password if (!$password) { -- cgit v1.2.1 From 73a75fc3d387f8d923186c5c04b1ca7bc6cda4ef Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sat, 8 Sep 2012 15:02:06 +0200 Subject: [ticket/8713] Revert changes to ucp_profile, ucp_register and acp_users. Currently only auth_db is supported there and the password needs to be trimmed for compatibility because user_password stores phpbb_hash(htmlspecialchars(trim($password))) Setting passwords for other auth modules is currently not supported. Once setting/changing passwords is supported by auth plugins, the untrimmed_variable() should be used here and the result should be passed to the auth plugin. PHPBB3-8713 --- phpBB/includes/acp/acp_users.php | 4 ++-- phpBB/includes/ucp/ucp_profile.php | 6 +++--- phpBB/includes/ucp/ucp_register.php | 4 ++-- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 2905b84d57..985a12d9ce 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -770,8 +770,8 @@ class acp_users 'username' => utf8_normalize_nfc(request_var('user', $user_row['username'], true)), 'user_founder' => request_var('user_founder', ($user_row['user_type'] == USER_FOUNDER) ? 1 : 0), 'email' => strtolower(request_var('user_email', $user_row['user_email'])), - 'new_password' => $request->untrimmed_variable('new_password', '', true), - 'password_confirm' => $request->untrimmed_variable('password_confirm', '', true), + 'new_password' => $request->variable('new_password', '', true), + 'password_confirm' => $request->variable('password_confirm', '', true), ); // Validation data - we do not check the password complexity setting here diff --git a/phpBB/includes/ucp/ucp_profile.php b/phpBB/includes/ucp/ucp_profile.php index db1e3e4722..89bf20a30f 100644 --- a/phpBB/includes/ucp/ucp_profile.php +++ b/phpBB/includes/ucp/ucp_profile.php @@ -46,9 +46,9 @@ class ucp_profile $data = array( 'username' => utf8_normalize_nfc(request_var('username', $user->data['username'], true)), 'email' => strtolower(request_var('email', $user->data['user_email'])), - 'new_password' => $request->untrimmed_variable('new_password', '', true), - 'cur_password' => $request->untrimmed_variable('cur_password', '', true), - 'password_confirm' => $request->untrimmed_variable('password_confirm', '', true), + 'new_password' => $request->variable('new_password', '', true), + 'cur_password' => $request->variable('cur_password', '', true), + 'password_confirm' => $request->variable('password_confirm', '', true), ); add_form_key('ucp_reg_details'); diff --git a/phpBB/includes/ucp/ucp_register.php b/phpBB/includes/ucp/ucp_register.php index 5ae92a5cea..c57aec00a0 100644 --- a/phpBB/includes/ucp/ucp_register.php +++ b/phpBB/includes/ucp/ucp_register.php @@ -170,8 +170,8 @@ class ucp_register $data = array( 'username' => utf8_normalize_nfc(request_var('username', '', true)), - 'new_password' => $request->untrimmed_variable('new_password', '', true), - 'password_confirm' => $request->untrimmed_variable('password_confirm', '', true), + 'new_password' => $request->variable('new_password', '', true), + 'password_confirm' => $request->variable('password_confirm', '', true), 'email' => strtolower(request_var('email', '')), 'lang' => basename(request_var('lang', $user->lang_name)), 'tz' => request_var('tz', $timezone), -- cgit v1.2.1 From 238fab3bb908013fb0d7c95278b0a2a3b7fa5bae Mon Sep 17 00:00:00 2001 From: Andreas Fischer Date: Sun, 9 Sep 2012 21:41:29 +0200 Subject: [ticket/8713] Update untrimmed_variable() doc block. PHPBB3-8713 --- phpBB/includes/request/request.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/request/request.php b/phpBB/includes/request/request.php index aa62c3b610..a06fc0d85d 100644 --- a/phpBB/includes/request/request.php +++ b/phpBB/includes/request/request.php @@ -204,9 +204,9 @@ class phpbb_request implements phpbb_request_interface } /** - * Get a variable, but without trimming strings - * Same functionality as variable(), except does not run trim() on strings - * All variables in GET or POST requests should be retrieved through this function to maximise security. + * Get a variable, but without trimming strings. + * Same functionality as variable(), except does not run trim() on strings. + * This method should be used when handling passwords. * * @param string|array $var_name The form variable's name from which data shall be retrieved. * If the value is an array this may be an array of indizes which will give -- cgit v1.2.1 From 503989979a2e6a7fb9d64ed249b09a0bef2b2f95 Mon Sep 17 00:00:00 2001 From: David King Date: Thu, 13 Sep 2012 16:44:26 -0400 Subject: [ticket/11086] Fix database_update.php to use Dependency Injection Container PHPBB3-11086 --- phpBB/install/database_update.php | 47 ++++++++++++++++++++++++++++----------- 1 file changed, 34 insertions(+), 13 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 0b470ced26..323ba0c876 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -7,6 +7,10 @@ * */ +use Symfony\Component\Config\FileLocator; +use Symfony\Component\DependencyInjection\ContainerBuilder; +use Symfony\Component\DependencyInjection\Loader\YamlFileLoader; + define('UPDATES_TO_VERSION', '3.1.0-dev'); // Enter any version to update from to test updates. The version within the db will not be updated. @@ -107,21 +111,38 @@ if (!defined('EXT_TABLE')) define('EXT_TABLE', $table_prefix . 'ext'); } -$phpbb_class_loader_ext = new phpbb_class_loader('phpbb_ext_', $phpbb_root_path . 'ext/', ".$phpEx"); -$phpbb_class_loader_ext->register(); -$phpbb_class_loader = new phpbb_class_loader('phpbb_', $phpbb_root_path . 'includes/', ".$phpEx"); -$phpbb_class_loader->register(); +$phpbb_container = new ContainerBuilder(); +$loader = new YamlFileLoader($phpbb_container, new FileLocator(__DIR__.'/../config')); +$loader->load('services.yml'); + +// We must include the DI processor class files because the class loader +// is not yet set up +require($phpbb_root_path . 'includes/di/processor/interface.' . $phpEx); +require($phpbb_root_path . 'includes/di/processor/config.' . $phpEx); + +$processor = new phpbb_di_processor_config($phpbb_root_path . 'config.' . $phpEx, $phpbb_root_path, $phpEx); +$processor->process($phpbb_container); + +// Setup class loader first +$phpbb_class_loader = $phpbb_container->get('class_loader'); +$phpbb_class_loader_ext = $phpbb_container->get('class_loader.ext'); + +$ids = array_keys($phpbb_container->findTaggedServiceIds('container.processor')); +foreach ($ids as $id) +{ + $processor = $phpbb_container->get($id); + $processor->process($phpbb_container); +} // set up caching -$cache_factory = new phpbb_cache_factory($acm_type); -$cache = $cache_factory->get_service(); -$phpbb_class_loader_ext->set_cache($cache->get_driver()); -$phpbb_class_loader->set_cache($cache->get_driver()); - -$phpbb_dispatcher = new phpbb_event_dispatcher(); -$request = new phpbb_request(); -$user = new phpbb_user(); -$db = new $sql_db(); +$cache = $phpbb_container->get('cache'); + +// Instantiate some basic classes +$phpbb_dispatcher = $phpbb_container->get('dispatcher'); +$request = $phpbb_container->get('request'); +$user = $phpbb_container->get('user'); +$auth = $phpbb_container->get('auth'); +$db = $phpbb_container->get('dbal.conn'); // make sure request_var uses this request instance request_var('', 0, false, false, $request); // "dependency injection" for a function -- cgit v1.2.1 From 298fa894e7ea0807a295cd0ed55cabef8a27a3f3 Mon Sep 17 00:00:00 2001 From: David King Date: Thu, 13 Sep 2012 16:56:09 -0400 Subject: [ticket/11086] Move DI processing below $request definition As per PR #991 (ticket/11101). PHPBB3-11086 --- phpBB/install/database_update.php | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 323ba0c876..5fa6166913 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -119,7 +119,6 @@ $loader->load('services.yml'); // is not yet set up require($phpbb_root_path . 'includes/di/processor/interface.' . $phpEx); require($phpbb_root_path . 'includes/di/processor/config.' . $phpEx); - $processor = new phpbb_di_processor_config($phpbb_root_path . 'config.' . $phpEx, $phpbb_root_path, $phpEx); $processor->process($phpbb_container); @@ -127,13 +126,6 @@ $processor->process($phpbb_container); $phpbb_class_loader = $phpbb_container->get('class_loader'); $phpbb_class_loader_ext = $phpbb_container->get('class_loader.ext'); -$ids = array_keys($phpbb_container->findTaggedServiceIds('container.processor')); -foreach ($ids as $id) -{ - $processor = $phpbb_container->get($id); - $processor->process($phpbb_container); -} - // set up caching $cache = $phpbb_container->get('cache'); @@ -144,6 +136,13 @@ $user = $phpbb_container->get('user'); $auth = $phpbb_container->get('auth'); $db = $phpbb_container->get('dbal.conn'); +$ids = array_keys($phpbb_container->findTaggedServiceIds('container.processor')); +foreach ($ids as $id) +{ + $processor = $phpbb_container->get($id); + $processor->process($phpbb_container); +} + // make sure request_var uses this request instance request_var('', 0, false, false, $request); // "dependency injection" for a function -- cgit v1.2.1 From 0c56bd45eff15b0bff2672ed08b390d0248625d8 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Mon, 23 Jul 2012 13:15:08 -0500 Subject: [ticket/11021] Better language strings for site home url/text Correct the logo title to be {L_HOME} if {U_HOME} is used. Check if the Home text is instead of just equal to false when outputting it to the template PHPBB3-11021 --- phpBB/includes/functions.php | 2 +- phpBB/language/en/acp/board.php | 10 +++++----- phpBB/styles/prosilver/template/overall_header.html | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index a8d3c25052..91e2b1b794 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4935,7 +4935,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'L_LOGIN_LOGOUT' => $l_login_logout, 'L_INDEX' => $user->lang['FORUM_INDEX'], - 'L_HOME' => ($config['site_home_text']) ? $config['site_home_text'] : $user->lang['HOME'], + 'L_HOME' => (!empty($config['site_home_text'])) ? $config['site_home_text'] : $user->lang['HOME'], 'L_ONLINE_EXPLAIN' => $l_online_time, 'U_PRIVATEMSGS' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'), diff --git a/phpBB/language/en/acp/board.php b/phpBB/language/en/acp/board.php index 6b043b887d..b80aec1f4a 100644 --- a/phpBB/language/en/acp/board.php +++ b/phpBB/language/en/acp/board.php @@ -45,14 +45,14 @@ $lang = array_merge($lang, array( 'DISABLE_BOARD' => 'Disable board', 'DISABLE_BOARD_EXPLAIN' => 'This will make the board unavailable to users. You can also enter a short (255 character) message to display if you wish.', 'DISPLAY_LAST_SUBJECT' => 'Display subject of last added post on forum list', - 'DISPLAY_LAST_SUBJECT_EXPLAIN' => 'The subject of the last added post will be displayed in the forum list with a hyperlink to the post. Subjects from password protected forums and forums in which user doesn’t have read access are not shown.', + 'DISPLAY_LAST_SUBJECT_EXPLAIN' => 'The subject of the last added post will be displayed in the forum list with a hyperlink to the post. Subjects from password protected forums and forums in which user doesn’t have read access are not shown.', 'OVERRIDE_STYLE' => 'Override user style', 'OVERRIDE_STYLE_EXPLAIN' => 'Replaces user’s style with the default.', 'SITE_DESC' => 'Site description', - 'SITE_HOME_TEXT' => 'Site home text', - 'SITE_HOME_TEXT_EXPLAIN' => 'Specify a Site Home Text to use your own instead of the default text in the breadcrumbs ’Home.’', - 'SITE_HOME_URL' => 'Site home URL', - 'SITE_HOME_URL_EXPLAIN' => 'If you specify a Site Home URL, a link to this page will be added to your board’s breadcrumbs and the site logo will also be linked to this address.', + 'SITE_HOME_TEXT' => 'Main website text', + 'SITE_HOME_TEXT_EXPLAIN' => 'This text will be displayed as a link to your website homepage in the board’s breadcrumbs. If not specified, it will default to ’Home’.', + 'SITE_HOME_URL' => 'Main website URL', + 'SITE_HOME_URL_EXPLAIN' => 'If specified, a link to this URL will be prepended to your board’s breadcrumbs. The board logo will also link to this URL.', 'SITE_NAME' => 'Site name', 'SYSTEM_TIMEZONE' => 'Guest timezone', 'SYSTEM_TIMEZONE_EXPLAIN' => 'Timezone to use for displaying times to users who are not logged in (guests, bots). Logged in users set their timezone during registration and can change it in their user control panel.', diff --git a/phpBB/styles/prosilver/template/overall_header.html b/phpBB/styles/prosilver/template/overall_header.html index 13907a6ae4..47a53c8f60 100644 --- a/phpBB/styles/prosilver/template/overall_header.html +++ b/phpBB/styles/prosilver/template/overall_header.html @@ -95,7 +95,7 @@
    - +

    {SITENAME}

    {SITE_DESCRIPTION}

    -- cgit v1.2.1 From 7a4701399412faedd725195f849c18c770a126cb Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Sat, 15 Sep 2012 10:44:18 -0500 Subject: [ticket/11021] Use L_SITE_HOME instead of L_HOME Check site home url against !== '', not empty PHPBB3-11021 --- phpBB/includes/functions.php | 2 +- phpBB/styles/prosilver/template/overall_footer.html | 4 ++-- phpBB/styles/prosilver/template/overall_header.html | 4 ++-- phpBB/styles/subsilver2/template/breadcrumbs.html | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 91e2b1b794..0aa3aa016e 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -4935,7 +4935,7 @@ function page_header($page_title = '', $display_online_list = true, $item_id = 0 'L_LOGIN_LOGOUT' => $l_login_logout, 'L_INDEX' => $user->lang['FORUM_INDEX'], - 'L_HOME' => (!empty($config['site_home_text'])) ? $config['site_home_text'] : $user->lang['HOME'], + 'L_SITE_HOME' => ($config['site_home_text'] !== '') ? $config['site_home_text'] : $user->lang['HOME'], 'L_ONLINE_EXPLAIN' => $l_online_time, 'U_PRIVATEMSGS' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'i=pm&folder=inbox'), diff --git a/phpBB/styles/prosilver/template/overall_footer.html b/phpBB/styles/prosilver/template/overall_footer.html index ed05bbe80f..30912b6637 100644 --- a/phpBB/styles/prosilver/template/overall_footer.html +++ b/phpBB/styles/prosilver/template/overall_footer.html @@ -4,9 +4,9 @@ diff --git a/phpBB/install/convertors/convert_phpbb20.php b/phpBB/install/convertors/convert_phpbb20.php index 7d6fed6164..960cc5b335 100644 --- a/phpBB/install/convertors/convert_phpbb20.php +++ b/phpBB/install/convertors/convert_phpbb20.php @@ -33,7 +33,7 @@ $convertor_data = array( 'forum_name' => 'phpBB 2.0.x', 'version' => '1.0.3', 'phpbb_version' => '3.0.11', - 'author' => 'phpBB Group', + 'author' => 'phpBB Group', 'dbms' => $dbms, 'dbhost' => $dbhost, 'dbport' => $dbport, diff --git a/phpBB/install/database_update.php b/phpBB/install/database_update.php index 5a186d0eeb..40837145ba 100644 --- a/phpBB/install/database_update.php +++ b/phpBB/install/database_update.php @@ -527,7 +527,7 @@ function _print_footer()
    diff --git a/phpBB/install/index.php b/phpBB/install/index.php index 5135e2dbd8..ad46e273c2 100644 --- a/phpBB/install/index.php +++ b/phpBB/install/index.php @@ -569,7 +569,7 @@ class module echo '
    '; echo '
    '; echo ' '; echo ''; echo ''; diff --git a/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html b/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html index d92abb06dd..67e14defc3 100644 --- a/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html +++ b/phpBB/styles/prosilver/template/ucp_pm_viewmessage_print.html @@ -48,7 +48,7 @@ diff --git a/phpBB/styles/prosilver/template/viewtopic_print.html b/phpBB/styles/prosilver/template/viewtopic_print.html index 0fd0e6dfa6..39d2d76394 100644 --- a/phpBB/styles/prosilver/template/viewtopic_print.html +++ b/phpBB/styles/prosilver/template/viewtopic_print.html @@ -44,7 +44,7 @@ diff --git a/phpBB/styles/prosilver/theme/stylesheet.css b/phpBB/styles/prosilver/theme/stylesheet.css index 4a7356fbaa..40620179a1 100644 --- a/phpBB/styles/prosilver/theme/stylesheet.css +++ b/phpBB/styles/prosilver/theme/stylesheet.css @@ -3,7 +3,7 @@ Style name: prosilver (the default phpBB 3.0.x style) Based on style: Original author: Tom Beddard ( http://www.subblue.com/ ) - Modified by: phpBB Group ( http://www.phpbb.com/ ) + Modified by: phpBB Group ( https://www.phpbb.com/ ) -------------------------------------------------------------- */ diff --git a/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html b/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html index 24194e4c26..cd55c16a50 100644 --- a/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html +++ b/phpBB/styles/subsilver2/template/ucp_pm_viewmessage_print.html @@ -114,7 +114,7 @@ hr.sep { {S_TIMEZONE} - Powered by phpBB® Forum Software © phpBB Group
    http://www.phpbb.com/
    + Powered by phpBB® Forum Software © phpBB Group
    https://www.phpbb.com/
    diff --git a/phpBB/styles/subsilver2/template/viewtopic_print.html b/phpBB/styles/subsilver2/template/viewtopic_print.html index 964c95f677..1ca1eccc99 100644 --- a/phpBB/styles/subsilver2/template/viewtopic_print.html +++ b/phpBB/styles/subsilver2/template/viewtopic_print.html @@ -128,7 +128,7 @@ hr.sep { {S_TIMEZONE} - Powered by phpBB® Forum Software © phpBB Group
    http://www.phpbb.com/
    + Powered by phpBB® Forum Software © phpBB Group
    https://www.phpbb.com/
    diff --git a/phpBB/styles/subsilver2/theme/stylesheet.css b/phpBB/styles/subsilver2/theme/stylesheet.css index 444104ae3c..177a988e93 100644 --- a/phpBB/styles/subsilver2/theme/stylesheet.css +++ b/phpBB/styles/subsilver2/theme/stylesheet.css @@ -3,7 +3,7 @@ Style name: subsilver2 Based on style: subSilver (the default phpBB 2.0.x style) Original author: Tom Beddard ( http://www.subblue.com/ ) - Modified by: phpBB Group ( http://www.phpbb.com/ ) + Modified by: phpBB Group ( https://www.phpbb.com/ ) -------------------------------------------------------------- */ -- cgit v1.2.1 From 305abfde963e764d5e6be0c7b1c1b9496a2477b2 Mon Sep 17 00:00:00 2001 From: Dhruv Date: Mon, 8 Oct 2012 10:58:04 +0530 Subject: [ticket/11051] fix spaces PHPBB3-11051 --- phpBB/includes/search/fulltext_native.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/search/fulltext_native.php b/phpBB/includes/search/fulltext_native.php index 1100484ebd..bbc2236b3c 100644 --- a/phpBB/includes/search/fulltext_native.php +++ b/phpBB/includes/search/fulltext_native.php @@ -23,9 +23,9 @@ if (!defined('IN_PHPBB')) class phpbb_search_fulltext_native extends phpbb_search_base { protected $stats = array(); - protected $word_length = array(); - protected $search_query; - protected $common_words = array(); + protected $word_length = array(); + protected $search_query; + protected $common_words = array(); protected $must_contain_ids = array(); protected $must_not_contain_ids = array(); -- cgit v1.2.1 From 5db30e66fd03dacb4bb961afd9672eb9d65ba148 Mon Sep 17 00:00:00 2001 From: Vinny Date: Tue, 9 Oct 2012 00:31:59 -0300 Subject: [ticket/11139] Fix fatal error on colour swatch window PHPBB3-11139 --- phpBB/adm/swatch.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/adm/swatch.php b/phpBB/adm/swatch.php index 434b00e542..5e8984db70 100644 --- a/phpBB/adm/swatch.php +++ b/phpBB/adm/swatch.php @@ -22,7 +22,7 @@ $auth->acl($user->data); $user->setup(); // Set custom template for admin area -$template->set_custom_template($phpbb_root_path . 'adm/style', 'admin'); +$phpbb_style->set_custom_style('admin', $phpbb_admin_path . 'style', ''); $template->set_filenames(array( 'body' => 'colour_swatch.html') -- cgit v1.2.1 From cf810fb775407d6e6e5aa62a072b141bdb61e3c9 Mon Sep 17 00:00:00 2001 From: Nathan Guse Date: Tue, 9 Oct 2012 22:00:28 -0500 Subject: [ticket/11140] Fix an error from an incorrect variable name PHPBB3-11140 --- phpBB/includes/mcp/mcp_front.php | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/includes/mcp/mcp_front.php b/phpBB/includes/mcp/mcp_front.php index 13398e62bc..ba4b15895a 100644 --- a/phpBB/includes/mcp/mcp_front.php +++ b/phpBB/includes/mcp/mcp_front.php @@ -251,7 +251,7 @@ function mcp_front_view($id, $mode, $action) 'ORDER_BY' => 'p.message_time DESC', ); - $sql_ary = $db->sql_build_query('SELECT', $sql_ary); + $sql = $db->sql_build_query('SELECT', $sql_ary); $result = $db->sql_query_limit($sql, 5); $pm_by_id = $pm_list = array(); -- cgit v1.2.1 From d434672dde1592f51013459357c25ed49887d12f Mon Sep 17 00:00:00 2001 From: Senky Date: Mon, 23 Jul 2012 14:28:47 +0200 Subject: [ticket/10967] adding $root_path to posting_get_topic_icons PHPBB3-10967 --- phpBB/includes/functions_posting.php | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions_posting.php b/phpBB/includes/functions_posting.php index 68b6199cf5..aa15593a19 100644 --- a/phpBB/includes/functions_posting.php +++ b/phpBB/includes/functions_posting.php @@ -288,13 +288,15 @@ function posting_gen_topic_icons($mode, $icon_id) if (sizeof($icons)) { + $root_path = (defined('PHPBB_USE_BOARD_URL_PATH') && PHPBB_USE_BOARD_URL_PATH) ? generate_board_url() . '/' : $phpbb_root_path; + foreach ($icons as $id => $data) { if ($data['display']) { $template->assign_block_vars('topic_icon', array( 'ICON_ID' => $id, - 'ICON_IMG' => $phpbb_root_path . $config['icons_path'] . '/' . $data['img'], + 'ICON_IMG' => $root_path . $config['icons_path'] . '/' . $data['img'], 'ICON_WIDTH' => $data['width'], 'ICON_HEIGHT' => $data['height'], @@ -2637,7 +2639,7 @@ function submit_post($mode, $subject, $username, $topic_type, &$poll, &$data, $u * - 'topic_last_post_subject' * - 'topic_last_poster_name' * - 'topic_last_poster_colour' -* @param int $bump_time The time at which topic was bumped, usually it is a current time as obtained via time(). +* @param int $bump_time The time at which topic was bumped, usually it is a current time as obtained via time(). * @return string An URL to the bumped topic, example: ./viewtopic.php?forum_id=1&topic_id=2&p=3#p3 */ function phpbb_bump_topic($forum_id, $topic_id, $post_data, $bump_time = false) -- cgit v1.2.1 From 571d352eed670ad986bd653a2ac0bd81429c9cf5 Mon Sep 17 00:00:00 2001 From: Vinny Date: Tue, 9 Oct 2012 14:29:26 -0300 Subject: [ticket/11139] Adding the $phpbb_admin_path variable PHPBB3-11139 --- phpBB/adm/swatch.php | 2 ++ 1 file changed, 2 insertions(+) (limited to 'phpBB') diff --git a/phpBB/adm/swatch.php b/phpBB/adm/swatch.php index 5e8984db70..86498a255f 100644 --- a/phpBB/adm/swatch.php +++ b/phpBB/adm/swatch.php @@ -21,6 +21,8 @@ $user->session_begin(false); $auth->acl($user->data); $user->setup(); +$phpbb_admin_path = (defined('PHPBB_ADMIN_PATH')) ? PHPBB_ADMIN_PATH : './'; + // Set custom template for admin area $phpbb_style->set_custom_style('admin', $phpbb_admin_path . 'style', ''); -- cgit v1.2.1 From d376348acf271ab0e2bcba4e8eb5993192d0ef87 Mon Sep 17 00:00:00 2001 From: westr Date: Tue, 16 Oct 2012 12:44:33 +0100 Subject: [ticket/11093] acp_users_overview.html has a wrongly placed Amended the closing dd tag to the appropriate line: line 145 instead of 141 PHPBB3-11093 --- phpBB/adm/style/acp_users_overview.html | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/acp_users_overview.html b/phpBB/adm/style/acp_users_overview.html index e2dcdb6307..ba350a13fb 100644 --- a/phpBB/adm/style/acp_users_overview.html +++ b/phpBB/adm/style/acp_users_overview.html @@ -142,10 +142,11 @@

    {L_DELETE_USER_EXPLAIN}
    -
    + {L_USER_NO_POSTS_TO_DELETE} +

    -- cgit v1.2.1 From c630480ca1a426cb0897be35626baac2694fccf5 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 17 Oct 2012 15:03:06 -0400 Subject: [ticket/10848] Redirect from adm to installer correctly. PHPBB3-10848 --- phpBB/common.php | 6 +++++- phpBB/includes/functions.php | 30 ++++++++++++++++++++++++++++++ 2 files changed, 35 insertions(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index 491addc5e0..bdb33707cc 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -38,10 +38,14 @@ if (!defined('PHPBB_INSTALLED')) $script_name = (!empty($_SERVER['REQUEST_URI'])) ? $_SERVER['REQUEST_URI'] : getenv('REQUEST_URI'); } + // $phpbb_root_path accounts for redirects from e.g. /adm + $script_path = trim(dirname($script_name)) . '/' . $phpbb_root_path . 'install/index.' . $phpEx; // Replace any number of consecutive backslashes and/or slashes with a single slash // (could happen on some proxy setups and/or Windows servers) - $script_path = trim(dirname($script_name)) . '/install/index.' . $phpEx; $script_path = preg_replace('#[\\\\/]{2,}#', '/', $script_path); + // Eliminate . and .. from the path + require($phpbb_root_path . 'includes/functions.' . $phpEx); + $script_path = clean_path($script_path); $url = (($secure) ? 'https://' : 'http://') . $server_name; diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index ca58220619..2391b45038 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1176,6 +1176,36 @@ else } } +/** +* Eliminates useless . and .. components from specified path. +* +* @param string $path Path to clean +* @return string Cleaned path +*/ +function clean_path($path) +{ + $exploded = explode('/', $path); + $filtered = array(); + foreach ($exploded as $part) + { + if ($part === '.' && !empty($filtered)) + { + continue; + } + + if ($part === '..' && !empty($filtered) && $filtered[sizeof($filtered) - 1] !== '..') + { + array_pop($filtered); + } + else + { + $filtered[] = $part; + } + } + $path = implode('/', $filtered); + return $path; +} + if (!function_exists('htmlspecialchars_decode')) { /** -- cgit v1.2.1 From bb09cd9c8e76ac3af848d09db8ea1928dab66158 Mon Sep 17 00:00:00 2001 From: Oleg Pudeyev Date: Wed, 17 Oct 2012 15:13:35 -0400 Subject: [ticket/10848] Add phpbb_ prefix. PHPBB3-10848 --- phpBB/common.php | 2 +- phpBB/includes/functions.php | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/common.php b/phpBB/common.php index bdb33707cc..5849d48453 100644 --- a/phpBB/common.php +++ b/phpBB/common.php @@ -45,7 +45,7 @@ if (!defined('PHPBB_INSTALLED')) $script_path = preg_replace('#[\\\\/]{2,}#', '/', $script_path); // Eliminate . and .. from the path require($phpbb_root_path . 'includes/functions.' . $phpEx); - $script_path = clean_path($script_path); + $script_path = phpbb_clean_path($script_path); $url = (($secure) ? 'https://' : 'http://') . $server_name; diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 2391b45038..65d8be32ad 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -1182,7 +1182,7 @@ else * @param string $path Path to clean * @return string Cleaned path */ -function clean_path($path) +function phpbb_clean_path($path) { $exploded = explode('/', $path); $filtered = array(); -- cgit v1.2.1 From e76fd6a3959c632a2e012ce82568b9e04f87b8db Mon Sep 17 00:00:00 2001 From: Drae Date: Sun, 22 Jul 2012 16:24:07 +0100 Subject: [ticket/11018] Attempt to fix li.pagination alignment issue This is somewhat kludgy fix for the vertical alignment issue for pagination contained within a linklist parented li element. Tested and doesn't seem to impact anything else negatively. May need further browser testing. PHPBB3-11018 --- phpBB/styles/prosilver/theme/common.css | 7 +++++++ 1 file changed, 7 insertions(+) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index 4b4fa263b1..ff46163f71 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -510,9 +510,16 @@ li.pagination { margin-bottom: 0; } +li.pagination ul { + margin-top: -2px; + vertical-align: middle; +} + .pagination ul li, dl .pagination ul li, dl.icon .pagination ul li { display: inline; padding: 0; + font-size: 100%; + line-height: normal; } .pagination li a, .pagnation li span, li .pagination li a, li .pagnation li span, .pagination li.active span, .pagination li.ellipsis span { -- cgit v1.2.1 From a51aa9b47c526d173386510f3f67303243be03fc Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 25 Aug 2012 13:09:22 +0200 Subject: [ticket/11018] Fix minor issues with CSS in prosilver PHPBB3-11018 --- phpBB/styles/prosilver/theme/colours.css | 6 +++--- phpBB/styles/prosilver/theme/common.css | 4 ++-- 2 files changed, 5 insertions(+), 5 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/theme/colours.css b/phpBB/styles/prosilver/theme/colours.css index 29968cbb14..d7ce9a7622 100644 --- a/phpBB/styles/prosilver/theme/colours.css +++ b/phpBB/styles/prosilver/theme/colours.css @@ -151,9 +151,9 @@ dl.details dd { border-color: #B4BAC0; } -.pagination li.ellipsis span { +.pagination li.ellipsis span { background-color: transparent; - color: #000 + color: #000000; } .pagination li.active span { @@ -165,7 +165,7 @@ dl.details dd { .pagination li a:hover, .pagination .active a:hover { border-color: #368AD2; background-color: #368AD2; - color: #FFF; + color: #FFFFFF; } .pagination li a:active, .pagination li.active a:active { diff --git a/phpBB/styles/prosilver/theme/common.css b/phpBB/styles/prosilver/theme/common.css index ff46163f71..50b22f44df 100644 --- a/phpBB/styles/prosilver/theme/common.css +++ b/phpBB/styles/prosilver/theme/common.css @@ -515,11 +515,11 @@ li.pagination ul { vertical-align: middle; } -.pagination ul li, dl .pagination ul li, dl.icon .pagination ul li { +.pagination ul li, dl .pagination ul li, dl.icon .pagination ul li { display: inline; padding: 0; font-size: 100%; - line-height: normal; + line-height: normal; } .pagination li a, .pagnation li span, li .pagination li a, li .pagnation li span, .pagination li.active span, .pagination li.ellipsis span { -- cgit v1.2.1 From 43a713ea8356221eb199c5aba066efa15013c186 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 25 Aug 2012 13:11:07 +0200 Subject: [ticket/11067] Copy prosilver CSS to adm, so the pagination looks the same PHPBB3-11067 PHPBB3-11018 --- phpBB/adm/style/admin.css | 80 ++++++++++++++++++++++++++++++----------------- 1 file changed, 52 insertions(+), 28 deletions(-) (limited to 'phpBB') diff --git a/phpBB/adm/style/admin.css b/phpBB/adm/style/admin.css index 585707600d..8551c952c7 100644 --- a/phpBB/adm/style/admin.css +++ b/phpBB/adm/style/admin.css @@ -1148,55 +1148,79 @@ input.disabled { width: auto; text-align: right; margin-top: 5px; - font-size: 0.85em; - padding-bottom: 2px; + float: right; } .rtl .pagination { text-align: left; + float: left; } -.pagination strong, -.pagination b { - font-weight: normal; +li.pagination { + margin-top: 0; } -.pagination span.page-sep { - display:none; +.pagination img { + vertical-align: middle; } -.pagination span strong { - padding: 0 2px; - margin: 0 2px; - font-weight: normal; - font-size: 0.85em; - color: #FFFFFF; - background: #4692BF; - border: 1px solid #4692BF; +.pagination ul { + display: inline-block; + *display: inline; /* IE7 inline-block hack */ + *zoom: 1; + margin-left: 0; + margin-bottom: 0; +} + +li.pagination ul { + margin-top: -2px; + vertical-align: middle; +} + +.pagination ul li, dl .pagination ul li, dl.icon .pagination ul li { + display: inline; + padding: 0; + font-size: 100%; + line-height: normal; } -.pagination span a, .pagination span a:link, .pagination span a:visited, .pagination span a:active { +.pagination li a, .pagnation li span, li .pagination li a, li .pagnation li span, .pagination li.active span, .pagination li.ellipsis span { font-weight: normal; - font-size: 0.85em; text-decoration: none; - color: #5C758C; - margin: 0 2px; padding: 0 2px; - background: #ECEDEE; - border: 1px solid #B4BAC0; + border: 1px solid transparent; + font-size: 0.9em; + line-height: 1.5em; } -.pagination span a:hover { - border-color: #368AD2; - background: #368AD2; +.pagination li a, .pagination li a:link, .pagination li a:visited { + color: #5C758C; + background-color: #ECEDEE; + border-color: #B4BAC0; +} + +.pagination li.ellipsis span { + background-color: transparent; + color: #000000; +} + +.pagination li.active span { color: #FFFFFF; - text-decoration: none; + background-color: #4692BF; + border-color: #4692BF; } -.pagination img { - vertical-align: middle; +.pagination li a:hover, .pagination .active a:hover { + color: #FFFFFF; + background-color: #368AD2; + border-color: #368AD2; } +.pagination li a:active, .pagination li.active a:active { + color: #5C758C; + background-color: #ECEDEE; + border-color: #B4BAC0; +} /* Action Highlighting ---------------------------------------- */ @@ -1727,4 +1751,4 @@ fieldset.permissions .padding { .requirements_not_met dt label, .requirements_not_met dd p { color: #FFFFFF; font-size: 1.4em; -} \ No newline at end of file +} -- cgit v1.2.1 From fa5753de707e0b24c686cf75a7ae9d261bc2a8f2 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 25 Aug 2012 13:20:45 +0200 Subject: [ticket/11018] Swap prev/next links on pagination to the old order In the old pagination Prev was left of the pagination and Next right of the pagination. While moving these blocks, I also removed the whitespaces, which were introduced. PHPBB3-11023 PHPBB3-11018 --- phpBB/includes/functions.php | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 0c9421c12f..08dd03504c 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -2112,14 +2112,14 @@ function phpbb_generate_template_pagination($template, $base_url, $block_var_nam $end_page = ($total_pages > 5) ? max(min($total_pages, $on_page + 3), 5) : $total_pages; } - if ($on_page != $total_pages) + if ($on_page != 1) { $template->assign_block_vars($block_var_name, array( 'PAGE_NUMBER' => '', - 'PAGE_URL' => $base_url . $url_delim . $start_name . '=' . ($on_page * $per_page), + 'PAGE_URL' => $base_url . $url_delim . $start_name . '=' . (($on_page - 2) * $per_page), 'S_IS_CURRENT' => false, - 'S_IS_PREV' => false, - 'S_IS_NEXT' => true, + 'S_IS_PREV' => true, + 'S_IS_NEXT' => false, 'S_IS_ELLIPSIS' => false, )); } @@ -2166,14 +2166,14 @@ function phpbb_generate_template_pagination($template, $base_url, $block_var_nam } while ($at_page <= $total_pages); - if ($on_page != 1) + if ($on_page != $total_pages) { $template->assign_block_vars($block_var_name, array( 'PAGE_NUMBER' => '', - 'PAGE_URL' => $base_url . $url_delim . $start_name . '=' . (($on_page - 2) * $per_page), + 'PAGE_URL' => $base_url . $url_delim . $start_name . '=' . ($on_page * $per_page), 'S_IS_CURRENT' => false, - 'S_IS_PREV' => true, - 'S_IS_NEXT' => false, + 'S_IS_PREV' => false, + 'S_IS_NEXT' => true, 'S_IS_ELLIPSIS' => false, )); } -- cgit v1.2.1 From 5ea662f649833f50483da544b513ca102e390fd8 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 25 Aug 2012 14:34:48 +0200 Subject: [ticket/11014] Restore template vars for next/previous links They were dropped while the function was refactored: If the block_var_name is a nested block, we will use the last (most inner) block as a prefix for the template variables. If the last block name is pagination, the prefix is empty. If the rest of the block_var_name is not empty, we will modify the last row of that block and add our pagination items. PHPBB3-11014 --- phpBB/includes/functions.php | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) (limited to 'phpBB') diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 08dd03504c..4e5be20dbf 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -2177,6 +2177,45 @@ function phpbb_generate_template_pagination($template, $base_url, $block_var_nam 'S_IS_ELLIPSIS' => false, )); } + + // If the block_var_name is a nested block, we will use the last (most + // inner) block as a prefix for the template variables. If the last block + // name is pagination, the prefix is empty. If the rest of the + // block_var_name is not empty, we will modify the last row of that block + // and add our pagination items. + $tpl_block_name = $tpl_prefix = ''; + if (strrpos($block_var_name, '.') !== false) + { + $tpl_block_name = substr($block_var_name, 0, strrpos($block_var_name, '.')); + $tpl_prefix = strtoupper(substr($block_var_name, strrpos($block_var_name, '.') + 1)); + } + else + { + $tpl_prefix = strtoupper($block_var_name); + } + $tpl_prefix = ($tpl_prefix == 'PAGINATION') ? '' : $tpl_prefix . '_'; + + $previous_page = ($on_page != 1) ? $base_url . $url_delim . $start_name . '=' . (($on_page - 2) * $per_page) : ''; + + $template_array = array( + $tpl_prefix . 'BASE_URL' => $base_url, + 'A_' . $tpl_prefix . 'BASE_URL' => addslashes($base_url), + $tpl_prefix . 'PER_PAGE' => $per_page, + $tpl_prefix . 'PREVIOUS_PAGE' => $previous_page, + $tpl_prefix . 'PREV_PAGE' => $previous_page, + $tpl_prefix . 'NEXT_PAGE' => ($on_page != $total_pages) ? $base_url . $url_delim . $start_name . '=' . ($on_page * $per_page) : '', + $tpl_prefix . 'TOTAL_PAGES' => $total_pages, + $tpl_prefix . 'CURRENT_PAGE' => $on_page, + ); + + if ($tpl_block_name) + { + $template->alter_block_array($tpl_block_name, $template_array, true, 'change'); + } + else + { + $template->assign_vars($template_array); + } } /** -- cgit v1.2.1 From ada2d4c91bb063f3d9d591bfc3ce9552957772e0 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 25 Aug 2012 14:35:57 +0200 Subject: [ticket/11018] Always display previous/next links if we can display one PHPBB3-11018 --- phpBB/styles/prosilver/template/viewtopic_body.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'phpBB') diff --git a/phpBB/styles/prosilver/template/viewtopic_body.html b/phpBB/styles/prosilver/template/viewtopic_body.html index 4534dc5bcc..01b6a504a2 100644 --- a/phpBB/styles/prosilver/template/viewtopic_body.html +++ b/phpBB/styles/prosilver/template/viewtopic_body.html @@ -245,7 +245,7 @@ - +

    -- cgit v1.2.1 From ceb5a40eecbc60577ce0735254a4a189d719302e Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Sat, 25 Aug 2012 14:53:21 +0200 Subject: [ticket/11023] Fix additional whitespaces that were added by PHPBB3-10968 PHPBB3-11023 --- phpBB/includes/acp/acp_attachments.php | 4 ++-- phpBB/includes/acp/acp_groups.php | 4 ++-- phpBB/includes/acp/acp_icons.php | 4 ++-- phpBB/includes/acp/acp_inactive.php | 5 ++--- phpBB/includes/acp/acp_logs.php | 2 +- phpBB/includes/acp/acp_users.php | 4 ++-- phpBB/includes/functions.php | 1 - phpBB/includes/mcp/mcp_forum.php | 2 +- phpBB/includes/mcp/mcp_logs.php | 4 ++-- phpBB/includes/mcp/mcp_notes.php | 2 +- phpBB/includes/mcp/mcp_pm_reports.php | 4 ++-- phpBB/includes/mcp/mcp_queue.php | 2 +- phpBB/includes/mcp/mcp_reports.php | 2 +- phpBB/includes/mcp/mcp_topic.php | 2 +- phpBB/includes/mcp/mcp_warn.php | 2 +- phpBB/includes/ucp/ucp_attachments.php | 4 ++-- phpBB/includes/ucp/ucp_pm_viewfolder.php | 2 +- phpBB/memberlist.php | 2 +- phpBB/search.php | 4 ++-- 19 files changed, 27 insertions(+), 29 deletions(-) (limited to 'phpBB') diff --git a/phpBB/includes/acp/acp_attachments.php b/phpBB/includes/acp/acp_attachments.php index eccc935a6e..9d6c2d5de1 100644 --- a/phpBB/includes/acp/acp_attachments.php +++ b/phpBB/includes/acp/acp_attachments.php @@ -1163,7 +1163,7 @@ class acp_attachments $template->assign_vars(array( 'S_ACTION_OPTIONS' => ($auth->acl_get('a_board')) ? true : false, 'U_ACTION' => $this->u_action,) - ); + ); } // Make sure $start is set to the last page if it exceeds the amount @@ -1224,7 +1224,7 @@ class acp_attachments $base_url = $this->u_action . "&$u_sort_param"; phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $num_files, $attachments_per_page, $start); - + $template->assign_vars(array( 'TOTAL_FILES' => $num_files, 'TOTAL_SIZE' => get_formatted_filesize($total_size), diff --git a/phpBB/includes/acp/acp_groups.php b/phpBB/includes/acp/acp_groups.php index f88fa76df1..9621407211 100644 --- a/phpBB/includes/acp/acp_groups.php +++ b/phpBB/includes/acp/acp_groups.php @@ -683,8 +683,8 @@ class acp_groups } $base_url = $this->u_action . "&action=$action&g=$group_id"; - phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $total_members, $config['topics_per_page'], $start); - + phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $total_members, $config['topics_per_page'], $start); + $template->assign_vars(array( 'S_LIST' => true, 'S_GROUP_SPECIAL' => ($group_row['group_type'] == GROUP_SPECIAL) ? true : false, diff --git a/phpBB/includes/acp/acp_icons.php b/phpBB/includes/acp/acp_icons.php index b7be92d477..db4b4263b0 100644 --- a/phpBB/includes/acp/acp_icons.php +++ b/phpBB/includes/acp/acp_icons.php @@ -927,8 +927,8 @@ class acp_icons } } $db->sql_freeresult($result); - - phpbb_generate_template_pagination($template, $this->u_action, 'pagination', 'start', $item_count, $config['smilies_per_page'], $pagination_start); + + phpbb_generate_template_pagination($template, $this->u_action, 'pagination', 'start', $item_count, $config['smilies_per_page'], $pagination_start); } /** diff --git a/phpBB/includes/acp/acp_inactive.php b/phpBB/includes/acp/acp_inactive.php index 1e23c2e6cf..bf7a9e11e4 100644 --- a/phpBB/includes/acp/acp_inactive.php +++ b/phpBB/includes/acp/acp_inactive.php @@ -289,8 +289,8 @@ class acp_inactive } $base_url = $this->u_action . "&$u_sort_param&users_per_page=$per_page"; - phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $inactive_count, $per_page, $start); - + phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $inactive_count, $per_page, $start); + $template->assign_vars(array( 'S_INACTIVE_USERS' => true, 'S_INACTIVE_OPTIONS' => build_select($option_ary), @@ -299,7 +299,6 @@ class acp_inactive 'S_SORT_KEY' => $s_sort_key, 'S_SORT_DIR' => $s_sort_dir, 'S_ON_PAGE' => phpbb_on_page($template, $user, $base_url, $inactive_count, $per_page, $start), - 'USERS_PER_PAGE' => $per_page, 'U_ACTION' => $this->u_action . "&$u_sort_param&users_per_page=$per_page&start=$start", diff --git a/phpBB/includes/acp/acp_logs.php b/phpBB/includes/acp/acp_logs.php index 4538633d6c..d86521532c 100644 --- a/phpBB/includes/acp/acp_logs.php +++ b/phpBB/includes/acp/acp_logs.php @@ -131,7 +131,7 @@ class acp_logs $base_url = $this->u_action . "&$u_sort_param$keywords_param"; phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $log_count, $config['topics_per_page'], $start); - + $template->assign_vars(array( 'L_TITLE' => $l_title, 'L_EXPLAIN' => $l_title_explain, diff --git a/phpBB/includes/acp/acp_users.php b/phpBB/includes/acp/acp_users.php index 985a12d9ce..82d8ef5cbb 100644 --- a/phpBB/includes/acp/acp_users.php +++ b/phpBB/includes/acp/acp_users.php @@ -1159,7 +1159,7 @@ class acp_users $base_url = $this->u_action . "&u=$user_id&$u_sort_param"; phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $log_count, $config['topics_per_page'], $start); - + $template->assign_vars(array( 'S_FEEDBACK' => true, 'S_ON_PAGE' => phpbb_on_page($template, $user, $base_url, $log_count, $config['topics_per_page'], $start), @@ -2075,7 +2075,7 @@ class acp_users $base_url = $this->u_action . "&u=$user_id&sk=$sort_key&sd=$sort_dir"; phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $num_attachments, $config['topics_per_page'], $start); - + $template->assign_vars(array( 'S_ATTACHMENTS' => true, 'S_ON_PAGE' => phpbb_on_page($template, $user, $base_url, $num_attachments, $config['topics_per_page'], $start), diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php index 4e5be20dbf..2e42dfe94e 100644 --- a/phpBB/includes/functions.php +++ b/phpBB/includes/functions.php @@ -2240,7 +2240,6 @@ function phpbb_on_page($template, $user, $base_url, $num_items, $per_page, $star $template->assign_vars(array( 'PER_PAGE' => $per_page, 'ON_PAGE' => $on_page, - 'A_BASE_URL' => addslashes($base_url), )); diff --git a/phpBB/includes/mcp/mcp_forum.php b/phpBB/includes/mcp/mcp_forum.php index 7b3bc82093..151677bcfe 100644 --- a/phpBB/includes/mcp/mcp_forum.php +++ b/phpBB/includes/mcp/mcp_forum.php @@ -103,7 +103,7 @@ function mcp_forum_view($id, $mode, $action, $forum_info) $base_url = $url . "&i=$id&action=$action&mode=$mode&sd=$sort_dir&sk=$sort_key&st=$sort_days" . (($merge_select) ? $selected_ids : ''); phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $forum_topics, $topics_per_page, $start); - + $template->assign_vars(array( 'ACTION' => $action, 'FORUM_NAME' => $forum_info['forum_name'], diff --git a/phpBB/includes/mcp/mcp_logs.php b/phpBB/includes/mcp/mcp_logs.php index c1724b20d9..f706840492 100644 --- a/phpBB/includes/mcp/mcp_logs.php +++ b/phpBB/includes/mcp/mcp_logs.php @@ -172,8 +172,8 @@ class mcp_logs $start = view_log('mod', $log_data, $log_count, $config['topics_per_page'], $start, $forum_list, $topic_id, 0, $sql_where, $sql_sort, $keywords); $base_url = $this->u_action . "&$u_sort_param$keywords_param"; - phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $log_count, $config['topics_per_page'], $start); - + phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $log_count, $config['topics_per_page'], $start); + $template->assign_vars(array( 'PAGE_NUMBER' => phpbb_on_page($template, $user, $base_url, $log_count, $config['topics_per_page'], $start), 'TOTAL' => $user->lang('TOTAL_LOGS', (int) $log_count), diff --git a/phpBB/includes/mcp/mcp_notes.php b/phpBB/includes/mcp/mcp_notes.php index bbf618ebef..59cdf3c27e 100644 --- a/phpBB/includes/mcp/mcp_notes.php +++ b/phpBB/includes/mcp/mcp_notes.php @@ -217,7 +217,7 @@ class mcp_notes $base_url = $this->u_action . "&$u_sort_param$keywords_param"; phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $log_count, $config['topics_per_page'], $start); - + $template->assign_vars(array( 'U_POST_ACTION' => $this->u_action, 'S_CLEAR_ALLOWED' => ($auth->acl_get('a_clearlogs')) ? true : false, diff --git a/phpBB/includes/mcp/mcp_pm_reports.php b/phpBB/includes/mcp/mcp_pm_reports.php index 24e531517c..be18dba944 100644 --- a/phpBB/includes/mcp/mcp_pm_reports.php +++ b/phpBB/includes/mcp/mcp_pm_reports.php @@ -297,10 +297,10 @@ class mcp_pm_reports } } } - + $base_url = $this->u_action . "&st=$sort_days&sk=$sort_key&sd=$sort_dir"; phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $total, $config['topics_per_page'], $start); - + // Now display the page $template->assign_vars(array( 'L_EXPLAIN' => ($mode == 'pm_reports') ? $user->lang['MCP_PM_REPORTS_OPEN_EXPLAIN'] : $user->lang['MCP_PM_REPORTS_CLOSED_EXPLAIN'], diff --git a/phpBB/includes/mcp/mcp_queue.php b/phpBB/includes/mcp/mcp_queue.php index b44685b8a3..0b195aa9d8 100644 --- a/phpBB/includes/mcp/mcp_queue.php +++ b/phpBB/includes/mcp/mcp_queue.php @@ -421,7 +421,7 @@ class mcp_queue $base_url = $this->u_action . "&f=$forum_id&st=$sort_days&sk=$sort_key&sd=$sort_dir"; phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $total, $config['topics_per_page'], $start); - + // Now display the page $template->assign_vars(array( 'L_DISPLAY_ITEMS' => ($mode == 'unapproved_posts') ? $user->lang['DISPLAY_POSTS'] : $user->lang['DISPLAY_TOPICS'], diff --git a/phpBB/includes/mcp/mcp_reports.php b/phpBB/includes/mcp/mcp_reports.php index 2890cd56e2..f2c5080df5 100644 --- a/phpBB/includes/mcp/mcp_reports.php +++ b/phpBB/includes/mcp/mcp_reports.php @@ -413,7 +413,7 @@ class mcp_reports $base_url = $this->u_action . "&f=$forum_id&t=$topic_id&st=$sort_days&sk=$sort_key&sd=$sort_dir"; phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $total, $config['topics_per_page'], $start); - + // Now display the page $template->assign_vars(array( 'L_EXPLAIN' => ($mode == 'reports') ? $user->lang['MCP_REPORTS_OPEN_EXPLAIN'] : $user->lang['MCP_REPORTS_CLOSED_EXPLAIN'], diff --git a/phpBB/includes/mcp/mcp_topic.php b/phpBB/includes/mcp/mcp_topic.php index e39e553ab6..62483270c0 100644 --- a/phpBB/includes/mcp/mcp_topic.php +++ b/phpBB/includes/mcp/mcp_topic.php @@ -311,7 +311,7 @@ function mcp_topic_view($id, $mode, $action) { phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $total, $posts_per_page, $start); } - + $template->assign_vars(array( 'TOPIC_TITLE' => $topic_info['topic_title'], 'U_VIEW_TOPIC' => append_sid("{$phpbb_root_path}viewtopic.$phpEx", 'f=' . $topic_info['forum_id'] . '&t=' . $topic_info['topic_id']), diff --git a/phpBB/includes/mcp/mcp_warn.php b/phpBB/includes/mcp/mcp_warn.php index aefddb7c01..6a8fb4c5d5 100644 --- a/phpBB/includes/mcp/mcp_warn.php +++ b/phpBB/includes/mcp/mcp_warn.php @@ -177,7 +177,7 @@ class mcp_warn $base_url = append_sid("{$phpbb_root_path}mcp.$phpEx", "i=warn&mode=list&st=$st&sk=$sk&sd=$sd"); phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $user_count, $config['topics_per_page'], $start); - + $template->assign_vars(array( 'U_POST_ACTION' => $this->u_action, 'S_CLEAR_ALLOWED' => ($auth->acl_get('a_clearlogs')) ? true : false, diff --git a/phpBB/includes/ucp/ucp_attachments.php b/phpBB/includes/ucp/ucp_attachments.php index e4c351709b..dc095e7b73 100644 --- a/phpBB/includes/ucp/ucp_attachments.php +++ b/phpBB/includes/ucp/ucp_attachments.php @@ -171,8 +171,8 @@ class ucp_attachments $db->sql_freeresult($result); $base_url = $this->u_action . "&sk=$sort_key&sd=$sort_dir"; - phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $num_attachments, $config['topics_per_page'], $start); - + phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $num_attachments, $config['topics_per_page'], $start); + $template->assign_vars(array( 'PAGE_NUMBER' => phpbb_on_page($template, $user, $base_url, $num_attachments, $config['topics_per_page'], $start), 'TOTAL_ATTACHMENTS' => $num_attachments, diff --git a/phpBB/includes/ucp/ucp_pm_viewfolder.php b/phpBB/includes/ucp/ucp_pm_viewfolder.php index 1026f24699..625da23736 100644 --- a/phpBB/includes/ucp/ucp_pm_viewfolder.php +++ b/phpBB/includes/ucp/ucp_pm_viewfolder.php @@ -453,7 +453,7 @@ function get_pm_from($folder_id, $folder, $user_id) $base_url = append_sid("{$phpbb_root_path}ucp.$phpEx", "i=pm&mode=view&action=view_folder&f=$folder_id&$u_sort_param"); phpbb_generate_template_pagination($template, $base_url, 'pagination', 'start', $pm_count, $config['topics_per_page'], $start); - + $template->assign_vars(array( 'PAGE_NUMBER' => phpbb_on_page($template, $user, $base_url, $pm_count, $config['topics_per_page'], $start), 'TOTAL_MESSAGES' => $user->lang('VIEW_PM_MESSAGES', (int) $pm_count), diff --git a/phpBB/memberlist.php b/phpBB/memberlist.php index f142d182bc..d9ba147c70 100644 --- a/phpBB/memberlist.php +++ b/phpBB/memberlist.php @@ -1593,7 +1593,7 @@ switch ($mode) } phpbb_generate_template_pagination($template, $pagination_url, 'pagination', 'start', $total_users, $config['topics_per_page'], $start); - + // Generate page $template->assign_vars(array( 'PAGE_NUMBER' => phpbb_on_page($template, $user, $pagination_url, $total_users, $config['topics_per_page'], $start), diff --git a/phpBB/search.php b/phpBB/search.php index 7eda3c4d1d..7d20d8d4a2 100644 --- a/phpBB/search.php +++ b/phpBB/search.php @@ -614,7 +614,7 @@ if ($keywords || $author || $author_id || $search_id || $submit) } phpbb_generate_template_pagination($template, $u_search, 'pagination', 'start', $total_match_count, $per_page, $start); - + $template->assign_vars(array( 'SEARCH_TITLE' => $l_search_title, 'SEARCH_MATCHES' => $l_search_matches, @@ -1013,7 +1013,7 @@ if ($keywords || $author || $author_id || $search_id || $submit) 'U_VIEW_FORUM' => append_sid("{$phpbb_root_path}viewforum.$phpEx", 'f=' . $forum_id), 'U_VIEW_POST' => (!empty($row['post_id'])) ? append_sid("{$phpbb_root_path}viewtopic.$phpEx", "f=$forum_id&t=" . $row['topic_id'] . '&p=' . $row['post_id'] . (($u_hilit) ? '&hilit=' . $u_hilit : '')) . '#p' . $row['post_id'] : '') )); - + if ($show_results == 'topics') { phpbb_generate_template_pagination($template, $view_topic_url, 'searchresults.pagination', 'start', $replies + 1, $config['posts_per_page'], 1, true, true); -- cgit v1.2.1 From 7675d72622cf47789c83c9a243d17b0db37b72d2 Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 17 Oct 2012 22:36:37 +0200 Subject: [ticket/11014] Fix text for previous/next links in Subsilver2 PHPBB3-11014 --- phpBB/styles/subsilver2/template/pagination.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/pagination.html b/phpBB/styles/subsilver2/template/pagination.html index f78bb554fc..a2e023ac22 100644 --- a/phpBB/styles/subsilver2/template/pagination.html +++ b/phpBB/styles/subsilver2/template/pagination.html @@ -1,10 +1,10 @@ {L_GOTO_PAGE} - {pagination.PAGE_NUMBER} + {L_PREVIOUS} {pagination.PAGE_NUMBER} {L_ELLIPSIS} - {pagination.PAGE_NUMBER} + {L_NEXT} {pagination.PAGE_NUMBER} -- cgit v1.2.1 From 7ce43d49d8aadeab7db316741cc9d2503fee844c Mon Sep 17 00:00:00 2001 From: Joas Schilling Date: Wed, 17 Oct 2012 22:38:18 +0200 Subject: [ticket/11014] Fix IF statements for new template pagination PHPBB3-11014 --- phpBB/styles/subsilver2/template/mcp_footer.html | 2 +- phpBB/styles/subsilver2/template/ucp_groups_manage.html | 2 +- phpBB/styles/subsilver2/template/viewonline_body.html | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) (limited to 'phpBB') diff --git a/phpBB/styles/subsilver2/template/mcp_footer.html b/phpBB/styles/subsilver2/template/mcp_footer.html index b48c244653..280920b148 100644 --- a/phpBB/styles/subsilver2/template/mcp_footer.html +++ b/phpBB/styles/subsilver2/template/mcp_footer.html @@ -3,7 +3,7 @@ - + diff --git a/phpBB/styles/subsilver2/template/ucp_groups_manage.html b/phpBB/styles/subsilver2/template/ucp_groups_manage.html index ac678895a6..decd40a6de 100644 --- a/phpBB/styles/subsilver2/template/ucp_groups_manage.html +++ b/phpBB/styles/subsilver2/template/ucp_groups_manage.html @@ -185,7 +185,7 @@
    -