diff --git a/phpBB/adm/index.php b/phpBB/adm/index.php
index 102d91d4dc..a6a6dcb563 100644
--- a/phpBB/adm/index.php
+++ b/phpBB/adm/index.php
@@ -59,6 +59,13 @@ $mode = request_var('mode', '');
phpbb::$template->set_custom_template(PHPBB_ADMIN_PATH . 'style', 'admin');
phpbb::$template->assign_var('T_TEMPLATE_PATH', PHPBB_ADMIN_PATH . 'style');
+// Define page header/footer to use
+phpbb::$plugins->register_function('page_header', 'adm_page_header', phpbb::FUNCTION_OVERRIDE);
+phpbb::$plugins->register_function('page_footer', 'adm_page_footer', phpbb::FUNCTION_OVERRIDE);
+
+// And make the calls available
+phpbb::$plugins->setup();
+
// Instantiate new module
$module = new p_master();
@@ -76,13 +83,13 @@ $module->assign_tpl_vars(phpbb::$url->append_sid(PHPBB_ADMIN_PATH . 'index.' . P
$module->load_active();
// Generate the page
-adm_page_header($module->get_page_title());
+page_header($module->get_page_title());
phpbb::$template->set_filenames(array(
'body' => $module->get_tpl_name(),
));
-adm_page_footer();
+page_footer();
/**
* Header for acp pages
diff --git a/phpBB/includes/functions.php b/phpBB/includes/functions.php
index ab62308ad7..b5be112e5c 100644
--- a/phpBB/includes/functions.php
+++ b/phpBB/includes/functions.php
@@ -1305,14 +1305,7 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
// generate activation key
$confirm_key = gen_rand_string(10);
- if (defined('IN_ADMIN') && isset(phpbb::$user->data['session_admin']) && phpbb::$user->data['session_admin'])
- {
- adm_page_header((!isset(phpbb::$user->lang[$title])) ? phpbb::$user->lang['CONFIRM'] : phpbb::$user->lang[$title]);
- }
- else
- {
- page_header((!isset(phpbb::$user->lang[$title])) ? phpbb::$user->lang['CONFIRM'] : phpbb::$user->lang[$title]);
- }
+ page_header((!isset(phpbb::$user->lang[$title])) ? phpbb::$user->lang['CONFIRM'] : phpbb::$user->lang[$title]);
$template->set_filenames(array(
'body' => $html_body)
@@ -1343,14 +1336,7 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
WHERE user_id = " . phpbb::$user->data['user_id'];
phpbb::$db->sql_query($sql);
- if (defined('IN_ADMIN') && isset(phpbb::$user->data['session_admin']) && phpbb::$user->data['session_admin'])
- {
- adm_page_footer();
- }
- else
- {
- page_footer();
- }
+ page_footer();
}
/**
@@ -1358,10 +1344,6 @@ function confirm_box($check, $title = '', $hidden = '', $html_body = 'confirm_bo
*/
function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = false, $s_display = true)
{
- global $template, $auth;
-
- include(PHPBB_ROOT_PATH . 'includes/captcha/captcha_factory.' . PHP_EXT);
-
$err = '';
// Make sure user->setup() has been called
@@ -1370,23 +1352,17 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
phpbb::$user->setup();
}
- if (defined('ADMIN_START'))
- {
- // Set custom template for admin area
- $template->set_custom_template(PHPBB_ADMIN_PATH . 'style', 'admin');
- $template->assign_var('T_TEMPLATE_PATH', PHPBB_ADMIN_PATH . 'style');
- }
-
// Print out error if user tries to authenticate as an administrator without having the privileges...
- if ($admin && !$auth->acl_get('a_'))
+ if ($admin && !phpbb::$acl->acl_get('a_'))
{
// Not authd
// anonymous/inactive users are never able to go to the ACP even if they have the relevant permissions
- if (phpbb::$user->data['is_registered'])
+ if (phpbb::$user->is_registered)
{
add_log('admin', 'LOG_ADMIN_AUTH_FAIL');
}
- trigger_error('NO_AUTH_ADMIN');
+
+ $admin = false;
}
if (phpbb_request::is_set_post('login'))
@@ -1398,18 +1374,19 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
if (strspn($credential, 'abcdef0123456789') !== strlen($credential) || strlen($credential) != 32)
{
- if (phpbb::$user->data['is_registered'])
+ if (phpbb::$user->is_registered)
{
add_log('admin', 'LOG_ADMIN_AUTH_FAIL');
}
+
trigger_error('NO_AUTH_ADMIN');
}
- $password = request_var('password_' . $credential, '', true);
+ $password = request_var('password_' . $credential, '', true);
}
else
{
- $password = request_var('password', '', true);
+ $password = request_var('password', '', true);
}
$username = request_var('username', '', true);
@@ -1441,7 +1418,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
{
// Only log the failed attempt if a real user tried to.
// anonymous/inactive users are never able to go to the ACP even if they have the relevant permissions
- if (phpbb::$user->data['is_registered'])
+ if (phpbb::$user->is_registered)
{
add_log('admin', 'LOG_ADMIN_AUTH_FAIL');
}
@@ -1451,9 +1428,10 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
// The result parameter is always an array, holding the relevant information...
if ($result['status'] == LOGIN_SUCCESS)
{
- $redirect = request_var('redirect', PHPBB_ROOT_PATH . 'index.' . PHP_EXT);
+ $redirect = request_var('redirect', phpbb::$user->page['page']);
+
$message = ($l_success) ? $l_success : phpbb::$user->lang['LOGIN_REDIRECT'];
- $l_redirect = ($admin) ? phpbb::$user->lang['PROCEED_TO_ACP'] : (($redirect === PHPBB_ROOT_PATH . 'index.' . PHP_EXT || $redirect === "index." . PHP_EXT) ? phpbb::$user->lang['RETURN_INDEX'] : phpbb::$user->lang['RETURN_PAGE']);
+ $l_redirect = ($admin) ? phpbb::$user->lang['PROCEED_TO_ACP'] : (($redirect === PHPBB_ROOT_PATH . 'index.' . PHP_EXT || $redirect === 'index.' . PHP_EXT) ? phpbb::$user->lang['RETURN_INDEX'] : phpbb::$user->lang['RETURN_PAGE']);
// append/replace SID (may change during the session for AOL users)
$redirect = phpbb::$url->reapply_sid($redirect);
@@ -1464,7 +1442,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
return;
}
- $redirect = phpbb::$url->meta_refresh(3, $redirect);
+ // $redirect = phpbb::$url->meta_refresh(3, $redirect);
trigger_error($message . '
' . sprintf($l_redirect, '', ''));
}
@@ -1531,7 +1509,7 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
}
// Assign credential for username/password pair
- $credential = ($admin) ? md5(unique_id()) : false;
+ $credential = ($admin) ? md5(phpbb::$security->unique_id()) : false;
$s_hidden_fields = array(
'redirect' => $redirect,
@@ -1545,17 +1523,17 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
$s_hidden_fields = build_hidden_fields($s_hidden_fields);
- $template->assign_vars(array(
+ phpbb::$template->assign_vars(array(
'LOGIN_ERROR' => $err,
'LOGIN_EXPLAIN' => $l_explain,
- 'U_SEND_PASSWORD' => (phpbb::$config['email_enable']) ? append_sid('ucp', 'mode=sendpassword') : '',
- 'U_RESEND_ACTIVATION' => (phpbb::$config['require_activation'] != USER_ACTIVATION_NONE && phpbb::$config['email_enable']) ? append_sid('ucp', 'mode=resend_act') : '',
- 'U_TERMS_USE' => append_sid('ucp', 'mode=terms'),
- 'U_PRIVACY' => append_sid('ucp', 'mode=privacy'),
+ 'U_SEND_PASSWORD' => (phpbb::$config['email_enable']) ? phpbb::$url->append_sid('ucp', 'mode=sendpassword') : '',
+ 'U_RESEND_ACTIVATION' => (phpbb::$config['require_activation'] != USER_ACTIVATION_NONE && phpbb::$config['email_enable']) ? phpbb::$url->append_sid('ucp', 'mode=resend_act') : '',
+ 'U_TERMS_USE' => phpbb::$url->append_sid('ucp', 'mode=terms'),
+ 'U_PRIVACY' => phpbb::$url->append_sid('ucp', 'mode=privacy'),
'S_DISPLAY_FULL_LOGIN' => ($s_display) ? true : false,
- 'S_LOGIN_ACTION' => (!$admin && !defined('ADMIN_START')) ? append_sid('ucp', 'mode=login') : append_sid(PHPBB_ADMIN_PATH . 'index.' . PHP_EXT, false, true, phpbb::$user->session_id),
+ 'S_LOGIN_ACTION' => (!$admin && !defined('ADMIN_START')) ? phpbb::$url->append_sid('ucp', 'mode=login') : phpbb::$url->append_sid(PHPBB_ADMIN_PATH . 'index.' . PHP_EXT, false, true, phpbb::$user->session_id),
'S_HIDDEN_FIELDS' => $s_hidden_fields,
'S_ADMIN_AUTH' => $admin,
@@ -1566,36 +1544,14 @@ function login_box($redirect = '', $l_explain = '', $l_success = '', $admin = fa
'PASSWORD_CREDENTIAL' => ($admin) ? 'password_' . $credential : 'password',
));
- if (defined('ADMIN_START'))
- {
- $template->set_filenames(array(
- 'body' => 'acp_login.html')
- );
- $template->assign_block_vars('t_block1', array(
- 'L_TITLE' => phpbb::$user->lang['LOGIN'],
- 'S_SELECTED' => true,
- 'U_TITLE' => '',
- ));
- adm_page_header(phpbb::$user->lang['LOGIN'], false);
- }
- else
- {
- $template->set_filenames(array(
- 'body' => 'login_body.html')
- );
- page_header(phpbb::$user->lang['LOGIN'], false);
- }
+ phpbb::$template->set_filenames(array(
+ 'body' => 'login_body.html')
+ );
- make_jumpbox(append_sid('viewforum'));
- if (defined('ADMIN_START') && isset(phpbb::$user->data['session_admin']) && phpbb::$user->data['session_admin'])
- {
- adm_page_footer();
- }
- else
- {
- page_footer();
- }
+ page_header(phpbb::$user->lang['LOGIN'], false);
+ make_jumpbox('viewforum');
+ page_footer();
}
/**
@@ -2213,14 +2169,7 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
if (!defined('HEADER_INC'))
{
- if (defined('ADMIN_START') || (defined('IN_ADMIN') && isset(phpbb::$user->data['session_admin']) && phpbb::$user->data['session_admin']))
- {
- adm_page_header($msg_title);
- }
- else
- {
- page_header($msg_title);
- }
+ page_header($msg_title);
}
phpbb::$template->set_filenames(array(
@@ -2237,14 +2186,7 @@ function msg_handler($errno, $msg_text, $errfile, $errline)
// We do not want the cron script to be called on error messages
define('IN_CRON', true);
- if (defined('ADMIN_START') || (defined('IN_ADMIN') && isset(phpbb::$user->data['session_admin']) && phpbb::$user->data['session_admin']))
- {
- adm_page_footer();
- }
- else
- {
- page_footer();
- }
+ page_footer();
exit_handler();
break;
@@ -2298,6 +2240,7 @@ function page_header($page_title = '', $display_online_list = true)
// Get users online list ... if required
$online_userlist = array();
+ $l_online_users = $l_online_record = '';
$forum = request_var('f', 0);
if (phpbb::$config['load_online'] && phpbb::$config['load_online_time'] && $display_online_list)
diff --git a/phpBB/plugins/bootstrap.php b/phpBB/plugins/bootstrap.php
index dd10d420ca..443624bbf9 100644
--- a/phpBB/plugins/bootstrap.php
+++ b/phpBB/plugins/bootstrap.php
@@ -132,6 +132,16 @@ class phpbb_plugins
*/
private $current_plugin = false;
+ /**
+ * Plugins/Functions already set up
+ */
+ private $already_parsed_plugins = array();
+
+ /**
+ * @var array Collection of assigned functions and their params (merged from plugins and custom additions)
+ */
+ private $functions = array();
+
/**
* Init plugins
*
@@ -159,6 +169,8 @@ class phpbb_plugins
}
closedir($dh);
}
+
+ $this->already_parsed_plugins = array('plugin' => array(), 'hook' => array());
}
/**
@@ -196,13 +208,13 @@ class phpbb_plugins
*/
public function setup()
{
- if (empty($this->plugins))
- {
- return false;
- }
-
foreach ($this->plugins as $name => $plugin)
{
+ if (isset($this->already_parsed_plugins['plugin'][$name]))
+ {
+ continue;
+ }
+
// Add includes
foreach ($plugin->includes as $file)
{
@@ -244,29 +256,45 @@ class phpbb_plugins
// Setup/Register plugin...
$object->setup_plugin($instance);
}
+ }
- // Now setup hooks... this is a special case...
- foreach ($plugin->functions as $params)
+ // Now setup hooks... this is a special case...
+ foreach ($this->functions as $key => $params)
+ {
+ if (isset($this->already_parsed_plugins['hook'][$key]))
{
- $function = array_shift($params);
- $hook = array_shift($params);
- $mode = (!empty($params)) ? array_shift($params) : phpbb::FUNCTION_INJECT;
- $action = (!empty($params)) ? array_shift($params) : 'default';
+ continue;
+ }
- // Check if the function is already overridden.
- if ($mode == phpbb::FUNCTION_OVERRIDE && isset($this->hooks[$function][$mode]))
- {
- trigger_error('Function ' . $function . ' is already overridden by ' . $this->hooks[$function][$mode] . '.', E_USER_ERROR);
- }
+ $function = array_shift($params);
+ $hook = array_shift($params);
+ $mode = (!empty($params)) ? array_shift($params) : phpbb::FUNCTION_INJECT;
+ $action = (!empty($params)) ? array_shift($params) : 'default';
- if ($mode == phpbb::FUNCTION_OVERRIDE)
- {
- $this->hooks[$function][$mode] = $hook;
- }
- else
- {
- $this->hooks[$function][$mode][$action][] = $hook;
- }
+ // Check if the function is already overridden.
+ if ($mode == phpbb::FUNCTION_OVERRIDE && isset($this->hooks[$function][$mode]))
+ {
+ trigger_error('Function ' . $function . ' is already overridden by ' . $this->hooks[$function][$mode] . '.', E_USER_ERROR);
+ }
+
+ if ($mode == phpbb::FUNCTION_OVERRIDE)
+ {
+ $this->hooks[$function][$mode] = $hook;
+ }
+ else
+ {
+ $this->hooks[$function][$mode][$action][] = $hook;
+ }
+
+ $this->already_parsed_plugins['hook'][$key] = true;
+ }
+
+ // Init method call and setting as finished
+ foreach ($this->plugins as $name => $plugin)
+ {
+ if (isset($this->already_parsed_plugins['plugin'][$name]))
+ {
+ continue;
}
// Call plugins init method?
@@ -274,6 +302,8 @@ class phpbb_plugins
{
$plugin->setup->init();
}
+
+ $this->already_parsed_plugins['plugin'][$name] = true;
}
}
@@ -332,7 +362,7 @@ class phpbb_plugins
public function register_function()
{
$arguments = func_get_args();
- $this->current_plugin->functions[] = $arguments;
+ $this->current_plugin->functions[] = $this->functions[] = $arguments;
}
/**