diff --git a/upload/includes/page_header.php b/upload/includes/page_header.php index 9fb0df7dd..b2cbc039a 100644 --- a/upload/includes/page_header.php +++ b/upload/includes/page_header.php @@ -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", diff --git a/upload/includes/ucp/usercp_avatar.php b/upload/includes/ucp/usercp_avatar.php index 5869bec34..f61b99318 100644 --- a/upload/includes/ucp/usercp_avatar.php +++ b/upload/includes/ucp/usercp_avatar.php @@ -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 . '
' . $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 . '
' . $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 . '
' . $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 . '
' . $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 . '
' . $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 . '
' . $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 . '
' . $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 . '
' . $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) diff --git a/upload/includes/ucp/usercp_register.php b/upload/includes/ucp/usercp_register.php index d4dde532e..cfe6b1f14 100644 --- a/upload/includes/ucp/usercp_register.php +++ b/upload/includes/ucp/usercp_register.php @@ -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 = ''; + + $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 = ''; + + $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 .= ''; + } + $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&reset_autologin=1&sid={$userdata['session_id']}", @@ -594,5 +781,8 @@ function set_pr_die_append_msg ($pr_uid) '); } +require(PAGE_HEADER); -print_page('usercp_register.tpl'); \ No newline at end of file +$template->pparse('body'); + +require(PAGE_FOOTER); diff --git a/upload/templates/default/usercp_register.tpl b/upload/templates/default/usercp_register.tpl index 9aa6a37bd..2c84a5026 100644 --- a/upload/templates/default/usercp_register.tpl +++ b/upload/templates/default/usercp_register.tpl @@ -158,8 +158,58 @@ ajax.callback.user_register = function(data){ - - + + + {L_DATE_FORMAT}:
{L_DATE_FORMAT_EXPLAIN}
+ + + + + + {L_AVATAR_PANEL} + + + + + + + + +
{AVATAR_EXPLAIN} +

{L_CURRENT_IMAGE}

+

{USER_AVATAR}

+

+
+ + + + + {L_UPLOAD_AVATAR_FILE}: + + + + + + + + + {L_UPLOAD_AVATAR_URL}:
{L_UPLOAD_AVATAR_URL_EXPLAIN}
+ + + + + + {L_LINK_REMOTE_AVATAR}:
{L_LINK_REMOTE_AVATAR_EXPLAIN}
+ + + + + + {L_AVATAR_GALLERY}: + + + +