...

View Full Version : PHPBB ucp.php Help



stevenmw
03-07-2012, 04:25 AM
I'm working on an external phpbb login solution for my site.

What I've done so far
- placed a login form in my root directory
- duplicated the ucp.php in my /forums directory

The reason I duplicated the ucp.php is because it handles the logging in, and I figured I could build a new page based off of the ucp.php to handle login coming from the main site.

here's my form:


<form action="forums/ucp2.php?mode=login" method="post">
<fieldset>
<label for="username">Username:</label>&nbsp;
<input type="text" name="username" id="username" size="10" title="Username" />
<label for="password">Password:</label>&nbsp;
<input type="password" name="password" id="password" size="10" title="Password" />
<input type="submit" name="login" value="Login" />
</fieldset>
</form>
here's my ucp2.php


<?php
/**
*
* @package ucp
* @version $Id$
* @copyright (c) 2005 phpBB Group
* @license http://opensource.org/licenses/gpl-license.php GNU Public License
*
*/

/**
* @ignore
*/
define('IN_PHPBB', true);
$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/functions_user.' . $phpEx);
require($phpbb_root_path . 'includes/functions_module.' . $phpEx);

// Basic parameter data
$id = request_var('i', '');
$mode = request_var('mode', '');

if (in_array($mode, array('login', 'logout', 'confirm', 'sendpassword', 'activate')))
{
define('IN_LOGIN', true);
}

// Start session management
$user->session_begin();
$auth->acl($user->data);
$user->setup('ucp');

// Setting a variable to let the style designer know where he is...
$template->assign_var('S_IN_UCP', true);

$module = new p_master();
$default = false;

// Basic "global" modes
switch ($mode)
{
case 'activate':
$module->load('ucp', 'activate');
$module->display($user->lang['UCP_ACTIVATE']);

redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
break;

case 'resend_act':
$module->load('ucp', 'resend');
$module->display($user->lang['UCP_RESEND']);
break;

case 'sendpassword':
$module->load('ucp', 'remind');
$module->display($user->lang['UCP_REMIND']);
break;

case 'register':
if ($user->data['is_registered'] || isset($_REQUEST['not_agreed']))
{
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}

$module->load('ucp', 'register');
$module->display($user->lang['REGISTER']);
break;

case 'confirm':
$module->load('ucp', 'confirm');
break;

case 'login':
if ($user->data['is_registered'])
{
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}

login_box(request_var('redirect', "index.$phpEx"));
break;

case 'logout':
if ($user->data['user_id'] != ANONYMOUS && isset($_GET['sid']) && !is_array($_GET['sid']) && $_GET['sid'] === $user->session_id)
{
$user->session_kill();
$user->session_begin();
$message = $user->lang['LOGOUT_REDIRECT'];
}
else
{
$message = ($user->data['user_id'] == ANONYMOUS) ? $user->lang['LOGOUT_REDIRECT'] : $user->lang['LOGOUT_FAILED'];
}
meta_refresh(3, append_sid("{$phpbb_root_path}index.$phpEx"));

$message = $message . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a> ');
trigger_error($message);

break;

case 'terms':
case 'privacy':

$message = ($mode == 'terms') ? 'TERMS_OF_USE_CONTENT' : 'PRIVACY_POLICY';
$title = ($mode == 'terms') ? 'TERMS_USE' : 'PRIVACY';

if (empty($user->lang[$message]))
{
if ($user->data['is_registered'])
{
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}

login_box();
}

$template->set_filenames(array(
'body' => 'ucp_agreement.html')
);

// Disable online list
page_header($user->lang[$title], false);

$template->assign_vars(array(
'S_AGREEMENT' => true,
'AGREEMENT_TITLE' => $user->lang[$title],
'AGREEMENT_TEXT' => sprintf($user->lang[$message], $config['sitename'], generate_board_url()),
'U_BACK' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login'),
'L_BACK' => $user->lang['BACK_TO_LOGIN'],
));

page_footer();

break;

case 'delete_cookies':

// Delete Cookies with dynamic names (do NOT delete poll cookies)
if (confirm_box(true))
{
$set_time = time() - 31536000;

foreach ($_COOKIE as $cookie_name => $cookie_data)
{
// Only delete board cookies, no other ones...
if (strpos($cookie_name, $config['cookie_name'] . '_') !== 0)
{
continue;
}

$cookie_name = str_replace($config['cookie_name'] . '_', '', $cookie_name);

// Polls are stored as {cookie_name}_poll_{topic_id}, cookie_name_ got removed, therefore checking for poll_
if (strpos($cookie_name, 'poll_') !== 0)
{
$user->set_cookie($cookie_name, '', $set_time);
}
}

$user->set_cookie('track', '', $set_time);
$user->set_cookie('u', '', $set_time);
$user->set_cookie('k', '', $set_time);
$user->set_cookie('sid', '', $set_time);

// We destroy the session here, the user will be logged out nevertheless
$user->session_kill();
$user->session_begin();

meta_refresh(3, append_sid("{$phpbb_root_path}index.$phpEx"));

$message = $user->lang['COOKIES_DELETED'] . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
trigger_error($message);
}
else
{
confirm_box(false, 'DELETE_COOKIES', '');
}

redirect(append_sid("{$phpbb_root_path}index.$phpEx"));

break;

case 'switch_perm':

$user_id = request_var('u', 0);

$sql = 'SELECT *
FROM ' . USERS_TABLE . '
WHERE user_id = ' . (int) $user_id;
$result = $db->sql_query($sql);
$user_row = $db->sql_fetchrow($result);
$db->sql_freeresult($result);

if (!$auth->acl_get('a_switchperm') || !$user_row || $user_id == $user->data['user_id'] || !check_link_hash(request_var('hash', ''), 'switchperm'))
{
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}

include($phpbb_root_path . 'includes/acp/auth.' . $phpEx);

$auth_admin = new auth_admin();
if (!$auth_admin->ghost_permissions($user_id, $user->data['user_id']))
{
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}

add_log('admin', 'LOG_ACL_TRANSFER_PERMISSIONS', $user_row['username']);

$message = sprintf($user->lang['PERMISSIONS_TRANSFERRED'], $user_row['username']) . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
trigger_error($message);

break;

case 'restore_perm':

if (!$user->data['user_perm_from'] || !$auth->acl_get('a_switchperm'))
{
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}

$auth->acl_cache($user->data);

$sql = 'SELECT username
FROM ' . USERS_TABLE . '
WHERE user_id = ' . $user->data['user_perm_from'];
$result = $db->sql_query($sql);
$username = $db->sql_fetchfield('username');
$db->sql_freeresult($result);

add_log('admin', 'LOG_ACL_RESTORE_PERMISSIONS', $username);

$message = $user->lang['PERMISSIONS_RESTORED'] . '<br /><br />' . sprintf($user->lang['RETURN_INDEX'], '<a href="' . append_sid("{$phpbb_root_path}index.$phpEx") . '">', '</a>');
trigger_error($message);

break;

default:
$default = true;
break;
}

// We use this approach because it does not impose large code changes
if (!$default)
{
return true;
}

// Only registered users can go beyond this point
if (!$user->data['is_registered'])
{
if ($user->data['is_bot'])
{
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}

if ($id == 'pm' && $mode == 'view' && isset($_GET['p']))
{
$redirect_url = append_sid("{$phpbb_root_path}ucp.$phpEx?i=pm&p=" . request_var('p', 0));
login_box($redirect_url, $user->lang['LOGIN_EXPLAIN_UCP']);
}

login_box('', $user->lang['LOGIN_EXPLAIN_UCP']);
}

// Instantiate module system and generate list of available modules
$module->list_modules('ucp');

// Check if the zebra module is set
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(
'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'
),

'LEFT_JOIN' => array(
array(
'FROM' => array(SESSIONS_TABLE => 's'),
'ON' => 's.session_user_id = z.zebra_id'
)
),

'WHERE' => 'z.user_id = ' . $user->data['user_id'] . '
AND z.friend = 1
AND u.user_id = z.zebra_id',

'GROUP_BY' => 'z.zebra_id, u.user_id, u.username_clean, u.user_colour, u.username',

'ORDER_BY' => 'u.username_clean ASC',
));

$result = $db->sql_query($sql);

while ($row = $db->sql_fetchrow($result))
{
$which = (time() - $update_time < $row['online_time'] && ($row['viewonline'] || $auth->acl_get('u_viewonline'))) ? 'online' : 'offline';

$template->assign_block_vars("friends_{$which}", array(
'USER_ID' => $row['user_id'],

'U_PROFILE' => get_username_string('profile', $row['user_id'], $row['username'], $row['user_colour']),
'USER_COLOUR' => get_username_string('colour', $row['user_id'], $row['username'], $row['user_colour']),
'USERNAME' => get_username_string('username', $row['user_id'], $row['username'], $row['user_colour']),
'USERNAME_FULL' => get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']))
);
}
$db->sql_freeresult($result);
}

// Do not display subscribed topics/forums if not allowed
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);

// Load and execute the relevant module
$module->load_active();

// Assign data to the template engine for the list of modules
$module->assign_tpl_vars(append_sid("{$phpbb_root_path}ucp.$phpEx"));

// Generate the page, do not display/query online list
$module->display($module->get_page_title(), false);

/**
* Function for assigning a template var if the zebra module got included
*/
function _module_zebra($mode, &$module_row)
{
global $template;

$template->assign_var('S_ZEBRA_ENABLED', true);

if ($mode == 'friends')
{
$template->assign_var('S_ZEBRA_FRIENDS_ENABLED', true);
}

if ($mode == 'foes')
{
$template->assign_var('S_ZEBRA_FOES_ENABLED', true);
}
}

?>
As you can see it matches PHPBB's ucp.php exactly.
What I'm intered in is the case 'login':



case 'login':
if ($user->data['is_registered'])
{
redirect(append_sid("{$phpbb_root_path}index.$phpEx"));
}

login_box(request_var('redirect', "index.$phpEx"));
break;
The code I've got above works. it works just like logging into the PHPBB forum from inside of the forum. First it takes you to the ucp page, then it redirects you to the forum index.

What I want to do is change where it directs me.
I want to have it direct me to my website's main index if $user->data['is_registered']
This should be covered by


redirect(append_sid("{$phpbb_root_path}index.$phpEx"));


Second, I want to redirect the user to my site's main index after they login (and weren't already logged in before)
This should be handled by


login_box(request_var('redirect', "index.$phpEx"));


So far I haven't been able to bypass the ucp2.php completely. Which is what I want to do. (I want a person to be taken to my site's index upon logging in via the above form, along with ucp2.php.)

Can anyone tell me how I should alter the login mode's code to achieve this?

webexpert4you
03-07-2012, 11:15 AM
Hello stevenmw,

I sent you PM with possible solution that you can try.

Let me know if you have any problems.

Thank You.

webexpert4u



EZ Archive Ads Plugin for vBulletin Copyright 2006 Computer Help Forum