Экспорт. Коммит №24. Аватарки. _Xz_. git-svn-id: https://torrentpier2.googlecode.com/svn/trunk@26 a8ac35ab-4ca4-ca47-4c2d-a49a94f06293
This commit is contained in:
glix08 2011-06-27 21:42:03 +00:00
commit c85828a82c
4 changed files with 272 additions and 54 deletions

View file

@ -167,9 +167,6 @@ if ($bb_cfg['reports_enabled'])
else $report_list = '';
// Report [END]
$avatar_img = '';
$avatar_img = get_avatar($userdata['user_avatar'], $userdata['user_avatar_type'], $userdata['user_allowavatar']);
$template->assign_vars(array(
'SIMPLE_HEADER' => !empty($gen_simple_header),
'IN_ADMIN' => defined('IN_ADMIN'),
@ -209,7 +206,7 @@ $template->assign_vars(array(
'LOGGED_IN' => $logged_in,
'SESSION_USER_ID' => $userdata['user_id'],
'THIS_USERNAME' => $userdata['username'],
'AVATAR' => $avatar_img,
'AVATAR' => get_avatar($userdata['user_avatar'], $userdata['user_avatar_type'], $userdata['user_allowavatar']),
'SHOW_LOGIN_LINK' => !defined('IN_LOGIN'),
'AUTOLOGIN_DISABLED' => !$bb_cfg['allow_autologin'],
'S_LOGIN_ACTION' => BB_ROOT ."login.php",

View file

@ -27,7 +27,7 @@ if ( !defined('IN_PHPBB') )
exit;
}
function check_image_type(&$type, &$error, &$error_msg)
function check_image_type(&$type, &$errors)
{
global $lang;
@ -50,8 +50,7 @@ function check_image_type(&$type, &$error, &$error_msg)
return '.png';
break;
default:
$error = true;
$error_msg = (!empty($error_msg)) ? $error_msg . '<br />' . $lang['AVATAR_FILETYPE'] : $lang['AVATAR_FILETYPE'];
$errors[] = $lang['AVATAR_FILETYPE'];
break;
}
@ -71,10 +70,10 @@ function user_avatar_delete($avatar_type, $avatar_file)
}
}
return ", user_avatar = '', user_avatar_type = " . USER_AVATAR_NONE;
return array('user_avatar' => '', 'user_avatar_type' => USER_AVATAR_NONE);
}
function user_avatar_gallery($mode, &$error, &$error_msg, $avatar_filename, $avatar_category)
function user_avatar_gallery($mode, &$errors, $avatar_filename, $avatar_category)
{
global $bb_cfg;
@ -92,16 +91,15 @@ function user_avatar_gallery($mode, &$error, &$error_msg, $avatar_filename, $ava
if ( file_exists(@phpbb_realpath($bb_cfg['avatar_gallery_path'] . '/' . $avatar_category . '/' . $avatar_filename)) && ($mode == 'editprofile') )
{
$return = ", user_avatar = '" . str_replace("\'", "''", $avatar_category . '/' . $avatar_filename) . "', user_avatar_type = " . USER_AVATAR_GALLERY;
return array('user_avatar' => str_replace("\'", "''", $avatar_category . '/' . $avatar_filename), 'user_avatar_type' => USER_AVATAR_GALLERY);
}
else
{
$return = '';
return '';
}
return $return;
}
function user_avatar_url($mode, &$error, &$error_msg, $avatar_filename)
function user_avatar_url($mode, &$errors, $avatar_filename)
{
global $lang;
@ -114,21 +112,18 @@ function user_avatar_url($mode, &$error, &$error_msg, $avatar_filename)
if ( !preg_match("#^((ht|f)tp://)([^ \?&=\#\"\n\r\t<]*?(\.(jpg|jpeg|gif|png))$)#is", $avatar_filename) )
{
$error = true;
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $lang['WRONG_REMOTE_AVATAR_FORMAT'] : $lang['WRONG_REMOTE_AVATAR_FORMAT'];
$errors[] = $lang['WRONG_REMOTE_AVATAR_FORMAT'];
return;
}
return ( $mode == 'editprofile' ) ? ", user_avatar = '" . str_replace("\'", "''", $avatar_filename) . "', user_avatar_type = " . USER_AVATAR_REMOTE : '';
return array('user_avatar' => str_replace("\'", "''", $avatar_filename), 'user_avatar_type' => USER_AVATAR_REMOTE);
}
function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_type, &$error, &$error_msg, $avatar_filename, $avatar_realname, $avatar_filesize, $avatar_filetype)
function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_type, &$errors, $avatar_filename, $avatar_realname, $avatar_filesize, $avatar_filetype)
{
global $bb_cfg, $lang;
$avatar_sql = '';
$ini_val = ( @phpversion() >= '4.0.0' ) ? 'ini_get' : 'get_cfg_var';
$width = $height = 0;
@ -138,8 +133,7 @@ function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_typ
{
if ( empty($url_ary[4]) )
{
$error = true;
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $lang['INCOMPLETE_URL'] : $lang['INCOMPLETE_URL'];
$errors[] = $lang['INCOMPLETE_URL'];
return;
}
@ -148,8 +142,7 @@ function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_typ
if ( !($fsock = @fsockopen($url_ary[2], $port, $errno, $errstr)) )
{
$error = true;
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $lang['NO_CONNECTION_URL'] : $lang['NO_CONNECTION_URL'];
$errors[] = $lang['NO_CONNECTION_URL'];
return;
}
@ -166,15 +159,14 @@ function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_typ
if (!preg_match('#Content-Length\: ([0-9]+)[^ /][\s]+#i', $avatar_data, $file_data1) || !preg_match('#Content-Type\: image/[x\-]*([a-z]+)[\s]+#i', $avatar_data, $file_data2))
{
$error = true;
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $lang['FILE_NO_DATA'] : $lang['FILE_NO_DATA'];
$errors[] = $lang['FILE_NO_DATA'];
return;
}
$avatar_filesize = $file_data1[1];
$avatar_filetype = $file_data2[1];
if ( !$error && $avatar_filesize > 0 && $avatar_filesize < $bb_cfg['avatar_filesize'] )
if ( !$errors && $avatar_filesize > 0 && $avatar_filesize < $bb_cfg['avatar_filesize'] )
{
$avatar_data = substr($avatar_data, strlen($avatar_data) - $avatar_filesize, $avatar_filesize);
@ -196,10 +188,7 @@ function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_typ
}
else
{
$l_avatar_size = sprintf($lang['AVATAR_FILESIZE'], round($bb_cfg['avatar_filesize'] / 1024));
$error = true;
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size;
$errors[] = sprintf($lang['AVATAR_FILESIZE'], round($bb_cfg['avatar_filesize'] / 1024));
}
}
else if ( ( file_exists(@phpbb_realpath($avatar_filename)) ) && preg_match('/\.(jpg|jpeg|gif|png)$/i', $avatar_realname) )
@ -211,17 +200,14 @@ function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_typ
}
else
{
$l_avatar_size = sprintf($lang['AVATAR_FILESIZE'], round($bb_cfg['avatar_filesize'] / 1024));
$error = true;
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size;
$errors[] = sprintf($lang['AVATAR_FILESIZE'], round($bb_cfg['avatar_filesize'] / 1024));
return;
}
list($width, $height, $type) = @getimagesize($avatar_filename);
}
if ( !($imgtype = check_image_type($avatar_filetype, $error, $error_msg)) )
if ( !($imgtype = check_image_type($avatar_filetype, $errors)) )
{
return;
}
@ -302,18 +288,13 @@ function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_typ
}
@chmod('./' . $bb_cfg['avatar_path'] . "/$new_filename", 0777);
$avatar_sql = ( $mode == 'editprofile' ) ? ", user_avatar = '$new_filename', user_avatar_type = " . USER_AVATAR_UPLOAD : "'$new_filename', " . USER_AVATAR_UPLOAD;
return array('user_avatar' => $new_filename, 'user_avatar_type' => USER_AVATAR_UPLOAD);
}
else
{
$l_avatar_size = sprintf($lang['AVATAR_IMAGESIZE'], $bb_cfg['avatar_max_width'], $bb_cfg['avatar_max_height']);
$error = true;
$error_msg = ( !empty($error_msg) ) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size;
$errors[] = sprintf($lang['AVATAR_IMAGESIZE'], $bb_cfg['avatar_max_width'], $bb_cfg['avatar_max_height']);
return '';
}
return $avatar_sql;
}
function display_avatar_gallery($mode, $category, $user_id, $email, $current_email, $username, $email, $new_password, $cur_password, $password_confirm, $icq, $website, $location, $user_flag, $occupation, $interests, $signature, $viewemail, $notifypm, $notifyreply, $attachsig, $hideonline, $style, $language, $timezone, $dateformat, &$session_id)

View file

@ -2,6 +2,8 @@
if (!defined('BB_ROOT')) die(basename(__FILE__));
$template->set_filenames(array('body' => 'usercp_register.tpl'));
array_deep($_POST, 'trim');
set_die_append_msg();
@ -95,6 +97,8 @@ switch ($mode)
'user_sig' => true,
'user_occ' => true,
'user_interests' => true,
'user_avatar' => true,
'user_avatar_type' => true,
);
// Выбор профиля: для юзера свой, для админа любой
@ -121,7 +125,30 @@ switch ($mode)
{
bb_die('Профиль не найден');
}
break;
include(INC_DIR . 'ucp/usercp_avatar.php');
if ( bf($pr_data['user_opt'], 'user_opt', 'allowavatar') && ( $bb_cfg['allow_avatar_upload'] || $bb_cfg['allow_avatar_local'] || $bb_cfg['allow_avatar_remote'] ) )
{
$template->assign_block_vars('switch_avatar_block', array() );
if ( $bb_cfg['allow_avatar_upload'] && file_exists(@phpbb_realpath('./' . $bb_cfg['avatar_path'])) )
{
$template->assign_block_vars('switch_avatar_block.switch_avatar_local_upload', array() );
$template->assign_block_vars('switch_avatar_block.switch_avatar_remote_upload', array() );
}
if ( $bb_cfg['allow_avatar_remote'] )
{
$template->assign_block_vars('switch_avatar_block.switch_avatar_remote_link', array() );
}
if ( $bb_cfg['allow_avatar_local'] && file_exists(@phpbb_realpath('./' . $bb_cfg['avatar_gallery_path'])) )
{
$template->assign_block_vars('switch_avatar_block.switch_avatar_local_gallery', array() );
}
}
break;
default:
trigger_error("invalid mode: $mode", E_USER_ERROR);
@ -382,8 +409,6 @@ foreach ($profile_fields as $field => $can_edit)
$sig = isset($_POST['user_sig']) ? (string) $_POST['user_sig'] : $pr_data['user_sig'];
if ($submit)
{
$sig_esc = prepare_message($sig);
if (strlen($sig) > $bb_cfg['max_sig_chars'])
{
$errors[] = 'Слишком длинная подпись';
@ -396,10 +421,10 @@ foreach ($profile_fields as $field => $can_edit)
{
$errors[] = 'Подпись может содержать только BBCode';
}
else if ($sig_esc != $pr_data['user_sig'])
else if ($sig != $pr_data['user_sig'])
{
$pr_data['user_sig'] = $sig_esc;
$db_data['user_sig'] = (string) $sig_esc;
$pr_data['user_sig'] = $sig;
$db_data['user_sig'] = (string) $sig;
}
}
$tp_data['USER_SIG'] = $pr_data['user_sig'];
@ -439,6 +464,169 @@ foreach ($profile_fields as $field => $can_edit)
$tp_data['USER_INTERESTS'] = $pr_data['user_interests'];
break;
case 'user_avatar':
case 'user_avatar_type':
if( isset($_POST['avatargallery']) && !$errors )
{
$avatar_category = ( !empty($_POST['avatarcategory']) ) ? htmlspecialchars($_POST['avatarcategory']) : '';
$dir = @opendir($bb_cfg['avatar_gallery_path']);
$avatar_images = array();
while( $file = @readdir($dir) )
{
if( $file != '.' && $file != '..' && !is_file($bb_cfg['avatar_gallery_path'] . '/' . $file) && !is_link($bb_cfg['avatar_gallery_path'] . '/' . $file) )
{
$sub_dir = @opendir($bb_cfg['avatar_gallery_path'] . '/' . $file);
$avatar_row_count = 0;
$avatar_col_count = 0;
while( $sub_file = @readdir($sub_dir) )
{
if( preg_match('/(\.gif$|\.png$|\.jpg|\.jpeg)$/is', $sub_file) )
{
$avatar_images[$file][$avatar_row_count][$avatar_col_count] = $sub_file;
$avatar_name[$file][$avatar_row_count][$avatar_col_count] = ucfirst(str_replace("_", " ", preg_replace('/^(.*)\..*$/', '\1', $sub_file)));
$avatar_col_count++;
if( $avatar_col_count == 5 )
{
$avatar_row_count++;
$avatar_col_count = 0;
}
}
}
}
}
@closedir($dir);
@ksort($avatar_images);
@reset($avatar_images);
if( empty($category) )
{
list($category, ) = each($avatar_images);
}
@reset($avatar_images);
$s_categories = '<select name="avatarcategory">';
while( list($key) = each($avatar_images) )
{
$selected = ( $key == $category ) ? ' selected="selected"' : '';
if( count($avatar_images[$key]) )
{
$s_categories .= '<option value="' . $key . '"' . $selected . '>' . ucfirst($key) . '</option>';
}
}
$s_categories .= '</select>';
$s_colspan = 0;
for($i = 0; $i < count($avatar_images[$category]); $i++)
{
$template->assign_block_vars("avatar_row", array());
$s_colspan = max($s_colspan, count($avatar_images[$category][$i]));
for($j = 0; $j < count($avatar_images[$category][$i]); $j++)
{
$template->assign_block_vars('avatar_row.avatar_column', array(
"AVATAR_IMAGE" => $bb_cfg['avatar_gallery_path'] . '/' . $category . '/' . $avatar_images[$category][$i][$j],
"AVATAR_NAME" => $avatar_name[$category][$i][$j])
);
$template->assign_block_vars('avatar_row.avatar_option_column', array(
"S_OPTIONS_AVATAR" => $avatar_images[$category][$i][$j])
);
}
}
$s_hidden_vars = '<input type="hidden" name="avatarcatname" value="' . $category . '" />';
$template->assign_vars(array(
'S_CATEGORY_SELECT' => $s_categories,
'S_COLSPAN' => $s_colspan,
'S_PROFILE_ACTION' => append_sid("profile.php?mode=$mode"),
'S_HIDDEN_FIELDS' => $s_hidden_vars)
);
$template->set_filenames(array('body' => 'usercp_avatar_gallery.tpl'));
}
$user_avatar_local = ( isset($_POST['avatarselect']) && !empty($_POST['submitavatar']) && $bb_cfg['allow_avatar_local'] ) ? htmlspecialchars($_POST['avatarselect']) : ( ( isset($_POST['avatarlocal']) ) ? htmlspecialchars($_POST['avatarlocal']) : '' );
$user_avatar_category = ( isset($_POST['avatarcatname']) && $bb_cfg['allow_avatar_local'] ) ? htmlspecialchars($_POST['avatarcatname']) : '' ;
$user_avatar_remoteurl = ( !empty($_POST['avatarremoteurl']) ) ? trim(htmlspecialchars($_POST['avatarremoteurl'])) : '';
$user_avatar_upload = ( !empty($_POST['avatarurl']) ) ? trim($_POST['avatarurl']) : ( ( !empty($_FILES['avatar']) && $_FILES['avatar']['tmp_name'] != "none") ? $_FILES['avatar']['tmp_name'] : '' );
$user_avatar_name = ( !empty($_FILES['avatar']['name']) ) ? $_FILES['avatar']['name'] : '';
$user_avatar_size = ( !empty($_FILES['avatar']['size']) ) ? $_FILES['avatar']['size'] : 0;
$user_avatar_filetype = ( !empty($_FILES['avatar']['type']) ) ? $_FILES['avatar']['type'] : '';
$user_avatar = ( empty($user_avatar_local)) ? $pr_data['user_avatar'] : '';
$user_avatar_type = ( empty($user_avatar_local)) ? $pr_data['user_avatar_type'] : '';
if ( (isset($_POST['avatargallery']) || isset($_POST['submitavatar']) || isset($_POST['cancelavatar'])) && (!isset($submit)) )
{
if ( !isset($_POST['cancelavatar']))
{
$user_avatar = $user_avatar_category . '/' . $user_avatar_local;
$user_avatar_type = USER_AVATAR_GALLERY;
}
}
$ini_val = ( phpversion() >= '4.0.0' ) ? 'ini_get' : 'get_cfg_var';
$form_enctype = ( @$ini_val('file_uploads') == '0' || strtolower(@$ini_val('file_uploads') == 'off') || phpversion() == '4.0.4pl1' || !$bb_cfg['allow_avatar_upload'] || ( phpversion() < '4.0.3' && @$ini_val('open_basedir') != '' ) ) ? '' : 'enctype="multipart/form-data"';
$avatar = '';
if ( isset($_POST['avatardel']) && $mode == 'editprofile' )
{
$avatar = user_avatar_delete($pr_data['user_avatar_type'], $pr_data['user_avatar']);
}
else if ( ( !empty($user_avatar_upload) || !empty($user_avatar_name) ) && $bb_cfg['allow_avatar_upload'] )
{
if ( !empty($user_avatar_upload) )
{
$avatar_mode = (empty($user_avatar_name)) ? 'remote' : 'local';
$avatar = user_avatar_upload($mode, $avatar_mode, $pr_data['user_avatar'], $pr_data['user_avatar_type'], $errors, $user_avatar_upload, $user_avatar_name, $user_avatar_size, $user_avatar_filetype);
}
else if ( !empty($user_avatar_name) )
{
$errors[] = sprintf($lang['AVATAR_FILESIZE'], round($bb_cfg['avatar_filesize'] / 1024));
}
}
else if ( $user_avatar_remoteurl != '' && $bb_cfg['allow_avatar_remote'] )
{
user_avatar_delete($pr_data['user_avatar_type'], $pr_data['user_avatar']);
$avatar = user_avatar_url($mode, $errors, $user_avatar_remoteurl);
}
else if ( $user_avatar_local != '' && $bb_cfg['allow_avatar_local'] )
{
user_avatar_delete($pr_data['user_avatar_type'], $pr_data['user_avatar']);
$avatar = user_avatar_gallery($mode, $errors, $user_avatar_local, $user_avatar_category);
}
if($avatar)
{ $user_avatar = $avatar['user_avatar'];
$user_avatar_type = $avatar['user_avatar_type'];
$hidden_vars = '';
foreach($_POST as $name => $key)
{
$hidden_vars .= '<input type="hidden" name="'. $name .'" value="'. $key .'" />';
}
$tp_data['USER_AVATAR'] = get_avatar($user_avatar, $user_avatar_type) . $hidden_vars; }
else
{ $tp_data['USER_AVATAR'] = get_avatar($pr_data['user_avatar'], $pr_data['user_avatar_type']); }
if ($submit)
{
if ( $user_avatar != $pr_data['user_avatar'] || $user_avatar_type != $pr_data['user_avatar_type'])
{
$db_data['user_avatar'] = $avatar['user_avatar'];
$db_data['user_avatar_type'] = $avatar['user_avatar_type'];
}
}
break;
/**
* default
*/
@ -534,8 +722,6 @@ if ($submit && !$errors)
$template->assign_vars($tp_data);
$template->assign_vars(array(
'PAGE_TITLE' => ($mode == 'editprofile') ? 'Редактирование профиля'. ($adm_edit ? " :: {$pr_data['username']}" : '') : 'Регистрация',
'SHOW_REG_AGREEMENT' => ($mode == 'register' && !IS_ADMIN),
@ -548,6 +734,7 @@ $template->assign_vars(array(
'TIMEZONE_SELECT' => tz_select($user_timezone, 'user_timezone'),
'AVATAR_EXPLAIN' => sprintf($lang['AVATAR_EXPLAIN'], $bb_cfg['avatar_max_width'], $bb_cfg['avatar_max_height'], (round($bb_cfg['avatar_filesize'] / 1024))),
'PR_USER_ID' => $pr_data['user_id'],
'U_RESET_AUTOLOGIN' => "login.php?logout=1&amp;reset_autologin=1&amp;sid={$userdata['session_id']}",
@ -594,5 +781,8 @@ function set_pr_die_append_msg ($pr_uid)
');
}
require(PAGE_HEADER);
print_page('usercp_register.tpl');
$template->pparse('body');
require(PAGE_FOOTER);

View file

@ -158,8 +158,58 @@ ajax.callback.user_register = function(data){
</td>
</tr>
<!-- ENDIF -->
<!-- IF SHOW_DATEFORMAT -->
<tr>
<td>{L_DATE_FORMAT}:<h6>{L_DATE_FORMAT_EXPLAIN}</h6></td>
<td><input type="text" name="dateformat" value="{DATE_FORMAT}" maxlength="14" /></td>
</tr>
<!-- ENDIF -->
<!-- BEGIN switch_avatar_block -->
<tr>
<th colspan="2">{L_AVATAR_PANEL}</th>
</tr>
<tr>
<td colspan="2">
<table class="borderless bCenter w80 med">
<tr>
<td>{AVATAR_EXPLAIN}</td>
<td class="tCenter nowrap">
<p>{L_CURRENT_IMAGE}</p>
<p class="mrg_6">{USER_AVATAR}</p>
<p><label><input type="checkbox" name="avatardel" /> {L_DELETE_IMAGE}</label></p>
</td>
</tr>
</table>
</td>
</tr>
<!-- BEGIN switch_avatar_local_upload -->
<tr>
<td>{L_UPLOAD_AVATAR_FILE}:</td>
<td>
<input type="file" name="avatar" size="40" />
<input type="hidden" name="MAX_FILE_SIZE" value="{AVATAR_SIZE}" />
</td>
</tr>
<!-- END switch_avatar_local_upload -->
<!-- BEGIN switch_avatar_remote_upload -->
<tr>
<td>{L_UPLOAD_AVATAR_URL}:<h6>{L_UPLOAD_AVATAR_URL_EXPLAIN}</h6></td>
<td><input type="text" name="avatarurl" size="44" /></td>
</tr>
<!-- END switch_avatar_remote_upload -->
<!-- BEGIN switch_avatar_remote_link -->
<tr>
<td>{L_LINK_REMOTE_AVATAR}:<h6>{L_LINK_REMOTE_AVATAR_EXPLAIN}</h6></td>
<td><input type="text" name="avatarremoteurl" size="44" /></td>
</tr>
<!-- END switch_avatar_remote_link -->
<!-- BEGIN switch_avatar_local_gallery -->
<tr>
<td>{L_AVATAR_GALLERY}:</td>
<td><input type="submit" name="avatargallery" value="{L_VIEW_AVATAR_GALLERY}" class="lite" /></td>
</tr>
<!-- END switch_avatar_local_gallery -->
<!-- END switch_avatar_block -->
<!-- ENDIF / EDIT_PROFILE -->
<!-- IF SHOW_REG_AGREEMENT -->