[feature/avatars] Update ACP manage users, fix gallery focus issue

Updated ACP to match UCP with dropdown. Correctly determe which
avatar to focus on by checking if the form was submitted and
avatar_driver is set.

PHPBB3-10018
This commit is contained in:
Cullen Walsh 2011-06-18 22:05:54 -07:00
parent 6deadc3acf
commit d0bb14ded1
4 changed files with 92 additions and 81 deletions

View file

@ -6,18 +6,52 @@
<dl>
<dt><label>{L_CURRENT_IMAGE}:</label><br /><span>{L_AVATAR_EXPLAIN}</span></dt>
<dd>{AVATAR}</dd>
<!-- IF AV_SHOW_DELETE --><dd><input type="submit" name="av_delete" id="av_delete" value="{LA_DELETE_AVATAR}" class="button2" /></dd><!-- ENDIF -->
</dl>
</fieldset>
<!-- BEGIN avatar_drivers -->
<fieldset>
<legend>{avatar_drivers.L_TITLE}</legend>
<legend>{L_AVATAR_SELECT_NEW}</legend>
<dl>
<dt><label>{L_AVATAR_TYPE}</label></dt>
<dd><select name="avatar_driver" id="avatar_driver">
<option value="">{L_NO_AVATAR}</option>
<!-- BEGIN avatar_drivers -->
<option value="{avatar_drivers.DRIVER}"<!-- IF avatar_drivers.SELECTED --> selected="selected"<!-- ENDIF -->>{avatar_drivers.L_TITLE}</option>
<!-- END avatar_drivers -->
</select></dd>
</dl>
<div id="av_options">
<!-- BEGIN avatar_drivers -->
<div id="av_option_{avatar_drivers.DRIVER}">
<p>{avatar_drivers.L_EXPLAIN}</p>
{avatar_drivers.OUTPUT}
</fieldset>
<fieldset class="quick">
<input type="submit" name="submit_av_{avatar_drivers.DRIVER}" value="{L_SUBMIT}" class="button1" />
</fieldset>
</div>
<!-- END avatar_drivers -->
</div>
</fieldset>
<script type="text/javascript">
// <![CDATA[
function avatar_simplify() {
var node = document.getElementById('av_options');
for (var i = 0; i < node.children.length; i++) {
child = node.children[i];
child.style.display = 'none';
}
var selected = document.getElementById('avatar_driver').value;
var id = 'av_option_' + selected;
node = document.getElementById(id);
if (node != null) {
node.style.display = 'block';
}
}
avatar_simplify();
document.getElementById('avatar_driver').onchange = avatar_simplify;
// ]]>
</script>
<fieldset class="quick">
<input type="submit" name="update" value="{L_SUBMIT}" class="button1" />
</fieldset>
{S_FORM_TOKEN}
</form>

View file

@ -1689,53 +1689,17 @@ class acp_users
{
$avatar_manager = new phpbb_avatar_manager($phpbb_root_path, $phpEx, $config, $cache->getDriver());
if (isset($_POST['av_delete']))
{
if (!check_form_key($form_name))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&amp;u=' . $user_id), E_USER_WARNING);
}
$result = array(
'user_avatar' => '',
'user_avatar_type' => '',
'user_avatar_height' => 0,
'user_avatar_width' => 0,
);
if ($driver = $avatar_manager->get_driver($user_row['user_avatar_type']))
{
$driver->delete($user_row);
}
$sql = 'UPDATE ' . USERS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $result) . '
WHERE user_id = ' . $user_id;
$db->sql_query($sql);
trigger_error($user->lang['USER_AVATAR_UPDATED'] . adm_back_link($this->u_action . '&amp;u=' . $user_id));
}
$avatar_drivers = $avatar_manager->get_valid_drivers();
sort($avatar_drivers);
foreach ($avatar_drivers as $driver)
if ($submit)
{
if ($config["allow_avatar_$driver"])
if (check_form_key($form_name))
{
$driver = request_var('avatar_driver', '');
if (in_array($driver, $avatar_drivers) && $config["allow_avatar_$driver"])
{
$avatars_enabled = true;
$template->set_filenames(array(
'avatar' => "acp_avatar_options_$driver.html",
));
$avatar = $avatar_manager->get_driver($driver);
if (isset($_POST["submit_av_$driver"]))
{
if (!check_form_key($form_name))
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&amp;u=' . $user_id), E_USER_WARNING);
}
$result = $avatar->process_form($template, $user_row, $error);
if ($result && empty($error))
@ -1750,6 +1714,42 @@ class acp_users
trigger_error($user->lang['USER_AVATAR_UPDATED'] . adm_back_link($this->u_action . '&amp;u=' . $user_id));
}
}
else
{
// Removing the avatar
$result = array(
'user_avatar' => '',
'user_avatar_type' => '',
'user_avatar_width' => 0,
'user_avatar_height' => 0,
);
$sql = 'UPDATE ' . USERS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $result) . '
WHERE user_id = ' . $user_id;
$db->sql_query($sql);
trigger_error($user->lang['USER_AVATAR_UPDATED'] . adm_back_link($this->u_action . '&amp;u=' . $user_id));
}
}
else
{
trigger_error($user->lang['FORM_INVALID'] . adm_back_link($this->u_action . '&amp;u=' . $user_id), E_USER_WARNING);
}
}
$focused_driver = request_var('avatar_driver', $user_row['user_avatar_type']);
foreach ($avatar_drivers as $driver)
{
if ($config["allow_avatar_$driver"])
{
$avatars_enabled = true;
$template->set_filenames(array(
'avatar' => "acp_avatar_options_$driver.html",
));
$avatar = $avatar_manager->get_driver($driver);
if ($avatar->prepare_form($template, $user_row, $error))
{
@ -1757,7 +1757,9 @@ class acp_users
$template->assign_block_vars('avatar_drivers', array(
'L_TITLE' => $user->lang('AVATAR_DRIVER_' . $driver_u . '_TITLE'), // @TODO add lang values
'L_EXPLAIN' => $user->lang('AVATAR_DRIVER_' . $driver_u . '_EXPLAIN'),
'DRIVER' => $driver,
'SELECTED' => ($driver == $focused_driver),
'OUTPUT' => $template->assign_display('avatar'),
));
}

View file

@ -102,7 +102,7 @@ abstract class phpbb_avatar_driver
/**
* @TODO
**/
public function prepare_form($template, $user_row, &$error)
public function prepare_form($template, $user_row, &$error, &$override_focus)
{
return false;
}

View file

@ -615,6 +615,8 @@ class ucp_profile
}
}
$focused_driver = request_var('avatar_driver', $user->data['user_avatar_type']);
foreach ($avatar_drivers as $driver)
{
if ($config["allow_avatar_$driver"])
@ -625,33 +627,6 @@ class ucp_profile
));
$avatar = $avatar_manager->get_driver($driver);
if (isset($_POST["submit_av_$driver"]))
{
if (check_form_key('ucp_avatar'))
{
$result = $avatar->process_form($template, $user->data, $error);
if ($result && empty($error))
{
// Success! Lets save the result in the database
$result['user_avatar_type'] = $driver;
$sql = 'UPDATE ' . USERS_TABLE . '
SET ' . $db->sql_build_array('UPDATE', $result) . '
WHERE user_id = ' . $user->data['user_id'];
$db->sql_query($sql);
meta_refresh(3, $this->u_action);
$message = $user->lang['PROFILE_UPDATED'] . '<br /><br />' . sprintf($user->lang['RETURN_UCP'], '<a href="' . $this->u_action . '">', '</a>');
trigger_error($message);
}
}
else
{
$error[] = 'FORM_INVALID';
}
}
if ($avatar->prepare_form($template, $user->data, $error))
{
@ -662,7 +637,7 @@ class ucp_profile
'L_EXPLAIN' => $user->lang('AVATAR_DRIVER_' . $driver_u . '_EXPLAIN'),
'DRIVER' => $driver,
'SELECTED' => ($driver == $user->data['user_avatar_type']),
'SELECTED' => ($driver == $focused_driver),
'OUTPUT' => $template->assign_display('avatar'),
));
}