if ($signature != '') { if (strlen($signature) > $board_config['max_sig_chars']) { $error = TRUE; $error_msg .= (isset($error_msg) ? '<br />' : '') . $lang['Signature_too_long']; } if ($signature_bbcode_uid == '') { $signature_bbcode_uid = $allowbbcode ? make_bbcode_uid() : ''; } $signature = prepare_message($signature, $allowhtml, $allowbbcode, $allowsmilies, $signature_bbcode_uid); } if ($website != '') { rawurlencode($website); } $avatar_sql = ''; if (isset($HTTP_POST_VARS['avatardel']) && $mode == 'editprofile') { $avatar_sql = user_avatar_delete($userdata['user_avatar_type'], $userdata['user_avatar']); } if ((!empty($user_avatar_upload) || !empty($user_avatar_name)) && $board_config['allow_avatar_upload']) { if (!empty($user_avatar_upload)) { $avatar_mode = !empty($user_avatar_name) ? 'local' : 'remote'; $avatar_sql = user_avatar_upload($mode, $avatar_mode, $userdata['user_avatar'], $userdata['user_avatar_type'], $error, $error_msg, $user_avatar_upload, $user_avatar_name, $user_avatar_size, $user_avatar_filetype); } else { if (!empty($user_avatar_name)) { $l_avatar_size = sprintf($lang['Avatar_filesize'], round($board_config['avatar_filesize'] / 1024)); $error = true; $error_msg .= (!empty($error_msg) ? '<br />' : '') . $l_avatar_size; } } } else { if ($user_avatar_remoteurl != '' && $board_config['allow_avatar_remote']) { if (@file_exists(@phpbb_realpath('./' . $board_config['avatar_path'] . '/' . $userdata['user_avatar'])) && $userdata['user_avatar_type'] == USER_AVATAR_UPLOAD) {
function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_type, &$error, &$error_msg, $avatar_filename, $avatar_realname, $avatar_filesize, $avatar_filetype) { global $board_config, $db, $lang; $ini_val = @phpversion() >= '4.0.0' ? 'ini_get' : 'get_cfg_var'; $width = $height = 0; $type = ''; if ($avatar_mode == 'remote' && preg_match('/^(http:\\/\\/)?([\\w\\-\\.]+)\\:?([0-9]*)\\/([^ \\?&=\\#\\"\\n\\r\\t<]*?(\\.(jpg|jpeg|gif|png)))$/', $avatar_filename, $url_ary)) { if (empty($url_ary[4])) { $error = true; $error_msg = !empty($error_msg) ? $error_msg . '<br />' . $lang['Incomplete_URL'] : $lang['Incomplete_URL']; return; } $base_get = '/' . $url_ary[4]; $port = !empty($url_ary[3]) ? $url_ary[3] : 80; 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']; return; } @fputs($fsock, "GET {$base_get} HTTP/1.1\r\n"); @fputs($fsock, "HOST: " . $url_ary[2] . "\r\n"); @fputs($fsock, "Connection: close\r\n\r\n"); unset($avatar_data); while (!@feof($fsock)) { $avatar_data .= @fread($fsock, $board_config['avatar_filesize']); } @fclose($fsock); 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']; return; } $avatar_filesize = $file_data1[1]; $avatar_filetype = $file_data2[1]; if (!$error && $avatar_filesize > 0 && $avatar_filesize < $board_config['avatar_filesize']) { $avatar_data = substr($avatar_data, strlen($avatar_data) - $avatar_filesize, $avatar_filesize); $tmp_path = !@$ini_val('safe_mode') ? '/tmp' : './' . $board_config['avatar_path'] . '/tmp'; $tmp_filename = tempnam($tmp_path, uniqid(rand()) . '-'); $fptr = @fopen($tmp_filename, 'wb'); $bytes_written = @fwrite($fptr, $avatar_data, $avatar_filesize); @fclose($fptr); if ($bytes_written != $avatar_filesize) { @unlink($tmp_filename); message_die(GENERAL_ERROR, 'Could not write avatar file to local storage. Please contact the board administrator with this message', '', __LINE__, __FILE__); } list($width, $height, $type) = @getimagesize($tmp_filename); } else { $l_avatar_size = sprintf($lang['Avatar_filesize'], round($board_config['avatar_filesize'] / 1024)); $error = true; $error_msg = !empty($error_msg) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size; } } else { if (file_exists(@phpbb_realpath($avatar_filename)) && preg_match('/\\.(jpg|jpeg|gif|png)$/i', $avatar_realname)) { if ($avatar_filesize <= $board_config['avatar_filesize'] && $avatar_filesize > 0) { preg_match('#image\\/[x\\-]*([a-z]+)#', $avatar_filetype, $avatar_filetype); $avatar_filetype = $avatar_filetype[1]; } else { $l_avatar_size = sprintf($lang['Avatar_filesize'], round($board_config['avatar_filesize'] / 1024)); $error = true; $error_msg = !empty($error_msg) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size; return; } list($width, $height, $type) = @getimagesize($avatar_filename); } } if (!($imgtype = check_image_type($avatar_filetype, $error, $error_msg))) { return; } switch ($type) { // GIF case 1: if ($imgtype != '.gif') { @unlink($tmp_filename); message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); } break; // JPG, JPC, JP2, JPX, JB2 // JPG, JPC, JP2, JPX, JB2 case 2: case 9: case 10: case 11: case 12: if ($imgtype != '.jpg' && $imgtype != '.jpeg') { @unlink($tmp_filename); message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); } break; // PNG // PNG case 3: if ($imgtype != '.png') { @unlink($tmp_filename); message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); } break; default: @unlink($tmp_filename); message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); } if ($width > 0 && $height > 0 && $width <= $board_config['avatar_max_width'] && $height <= $board_config['avatar_max_height']) { $new_filename = uniqid(rand()) . $imgtype; if ($mode == 'editprofile' && $current_type == USER_AVATAR_UPLOAD && $current_avatar != '') { user_avatar_delete($current_type, $current_avatar); } if ($avatar_mode == 'remote') { @copy($tmp_filename, './' . $board_config['avatar_path'] . "/{$new_filename}"); @unlink($tmp_filename); } else { if (@$ini_val('open_basedir') != '') { if (@phpversion() < '4.0.3') { message_die(GENERAL_ERROR, 'open_basedir is set and your PHP version does not allow move_uploaded_file', '', __LINE__, __FILE__); } $move_file = 'move_uploaded_file'; } else { $move_file = 'copy'; } if (!is_uploaded_file($avatar_filename)) { message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); } $move_file($avatar_filename, './' . $board_config['avatar_path'] . "/{$new_filename}"); } @chmod('./' . $board_config['avatar_path'] . "/{$new_filename}", 0777); $avatar_sql = $mode == 'editprofile' ? ", user_avatar = '{$new_filename}', user_avatar_type = " . USER_AVATAR_UPLOAD : "'{$new_filename}', " . USER_AVATAR_UPLOAD; } else { $l_avatar_size = sprintf($lang['Avatar_imagesize'], $board_config['avatar_max_width'], $board_config['avatar_max_height']); $error = true; $error_msg = !empty($error_msg) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size; } return $avatar_sql; }
} } } } if ($signature != '') { if (strlen($signature) > $board_config['max_sig_chars']) { $error = TRUE; $error_msg .= (isset($error_msg) ? '<br />' : '') . $lang['Signature_too_long']; } if ($signature_bbcode_uid == '') { $signature_bbcode_uid = $allowbbcode ? make_bbcode_uid() : ''; } $signature = prepare_message($signature, $allowhtml, $allowbbcode, $allowsmilies, $signature_bbcode_uid); } if (isset($HTTP_POST_VARS['avatardel']) && $mode == 'editprofile') { $avatar_sql = user_avatar_delete($userdata['avatar_type'], $userdata['avatar_file']); } else { if ((!empty($user_avatar_upload) || !empty($user_avatar_name)) && $board_config['allow_avatar_upload']) { if (!empty($user_avatar_upload)) { $avatar_mode = !empty($user_avatar_name) ? 'local' : 'remote'; $avatar_sql = user_avatar_upload($mode, $avatar_mode, $userdata['user_avatar'], $userdata['user_avatar_type'], $error, $error_msg, $user_avatar_upload, $user_avatar_name, $user_avatar_size, $user_avatar_filetype); } else { if (!empty($user_avatar_name)) { $l_avatar_size = sprintf($lang['Avatar_filesize'], round($board_config['avatar_filesize'] / 1024)); $error = true; $error_msg .= (!empty($error_msg) ? '<br />' : '') . $l_avatar_size; } } } else { if ($user_avatar_remoteurl != '' && $board_config['allow_avatar_remote']) { $avatar_sql = user_avatar_url($mode, $error, $error_msg, $user_avatar_remoteurl);
if (isset($_POST['avatardel']) && $mode == 'editprofile') { $avatar_sql = user_avatar_delete($user->data['user_avatar_type'], $user->data['user_avatar']); } elseif ((!empty($user_avatar_upload) || !empty($user_avatar_name)) && $config['allow_avatar_upload']) { if (!empty($user_avatar_upload)) { $avatar_mode = empty($user_avatar_name) ? 'remote' : 'local'; $avatar_sql = user_avatar_upload($mode, $avatar_mode, $user->data['user_avatar'], $user->data['user_avatar_type'], $error, $error_msg, $user_avatar_upload, $user_avatar_name, $user_avatar_size, $user_avatar_filetype); } elseif (!empty($user_avatar_name)) { $l_avatar_size = sprintf($lang['Avatar_filesize'], round($config['avatar_filesize'] / 1024)); $error = true; $error_msg .= (!empty($error_msg) ? '<br />' : '') . $l_avatar_size; } } elseif ($user_avatar_remoteurl != '' && $config['allow_avatar_remote']) { user_avatar_delete($user->data['user_avatar_type'], $user->data['user_avatar']); $avatar_sql = user_avatar_url($mode, $error, $error_msg, $user_avatar_remoteurl); } elseif ($user_avatar_local != '' && $config['allow_avatar_local']) { user_avatar_delete($user->data['user_avatar_type'], $user->data['user_avatar']); $avatar_sql = user_avatar_gallery($mode, $error, $error_msg, $user_avatar_local, $user_avatar_category); } elseif ($user_avatar_generator != '' && $config['allow_avatar_generator']) { if (@file_exists(@phpbb_realpath('./' . $config['avatar_path'] . '/' . $user->data['user_avatar']))) { @unlink(@phpbb_realpath('./' . $config['avatar_path'] . '/' . $user->data['user_avatar'])); } $avatar_sql = user_avatar_generator($mode, $error, $error_msg, $user_avatar_generator); } elseif ($user_gravatar != '' && $config['enable_gravatars']) { $avatar_sql = $mode == 'editprofile' ? ", user_avatar = '" . $db->sql_escape($user_gravatar) . "', user_avatar_type = " . USER_GRAVATAR : ''; } // Start add - Gender Mod if ($config['gender_required']) { if (!$gender) { $error = true; $error_msg .= (isset($error_msg) ? '<br />' : '') . $lang['Gender_require']; }
function user_avatar_upload($mode, $avatar_mode, &$current_avatar, &$current_type, &$error, &$error_msg, $avatar_filename, $avatar_realname, $avatar_filesize, $avatar_filetype) { global $db, $cache, $config, $lang; $ini_val = @phpversion() >= '4.0.0' ? 'ini_get' : 'get_cfg_var'; $width = $height = 0; $type = ''; if ($avatar_mode == 'remote' && preg_match('/^(http:\\/\\/)?([\\w\\-\\.]+)\\:?([0-9]*)\\/([^ \\?&=\\#\\"\\n\\r\\t<]*?(\\.(jpg|jpeg|gif|png)))$/', $avatar_filename, $url_ary)) { if (empty($url_ary[4])) { $error = true; $error_msg = !empty($error_msg) ? $error_msg . '<br />' . $lang['Incomplete_URL'] : $lang['Incomplete_URL']; return; } $base_get = '/' . $url_ary[4]; $port = !empty($url_ary[3]) ? $url_ary[3] : 80; 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']; return; } @fwrite($fsock, "GET {$base_get} HTTP/1.1\r\n"); @fwrite($fsock, "HOST: " . $url_ary[2] . "\r\n"); @fwrite($fsock, "Connection: close\r\n\r\n"); unset($avatar_data); while (!@feof($fsock)) { $avatar_data .= @fread($fsock, $config['avatar_filesize']); } @fclose($fsock); 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']; return; } $avatar_filesize = $file_data1[1]; $avatar_filetype = $file_data2[1]; if (!$error && $avatar_filesize > 0 && $avatar_filesize < $config['avatar_filesize']) { $avatar_data = substr($avatar_data, strlen($avatar_data) - $avatar_filesize, $avatar_filesize); $tmp_path = !@$ini_val('safe_mode') ? '/tmp' : './' . $config['avatar_path'] . '/tmp'; $tmp_filename = tempnam($tmp_path, uniqid(rand()) . '-'); $fptr = @fopen($tmp_filename, 'wb'); $bytes_written = @fwrite($fptr, $avatar_data, $avatar_filesize); @fclose($fptr); if ($bytes_written != $avatar_filesize) { @unlink($tmp_filename); message_die(GENERAL_ERROR, 'Could not write avatar file to local storage. Please contact the board administrator with this message', '', __LINE__, __FILE__); } list($width, $height, $type) = @getimagesize($tmp_filename); } else { $l_avatar_size = sprintf($lang['Avatar_filesize'], round($config['avatar_filesize'] / 1024)); $error = true; $error_msg = !empty($error_msg) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size; } } elseif (file_exists(@phpbb_realpath($avatar_filename)) && preg_match('/\\.(jpg|jpeg|gif|png)$/i', $avatar_realname)) { if ($avatar_filesize <= $config['avatar_filesize'] && $avatar_filesize > 0) { preg_match('#image\\/[x\\-]*([a-z]+)#', $avatar_filetype, $avatar_filetype); $avatar_filetype = $avatar_filetype[1]; } else { $l_avatar_size = sprintf($lang['Avatar_filesize'], round($config['avatar_filesize'] / 1024)); $error = true; $error_msg = !empty($error_msg) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size; return; } list($width, $height, $type) = @getimagesize($avatar_filename); } if (!($imgtype = check_image_type($avatar_filetype, $error, $error_msg))) { return; } switch ($type) { // GIF case 1: if ($imgtype != '.gif') { @unlink($tmp_filename); message_die(GENERAL_ERROR, $lang['UNABLE_TO_UPLOAD_AVATAR'], '', __LINE__, __FILE__); } break; // JPG, JPC, JP2, JPX, JB2 // JPG, JPC, JP2, JPX, JB2 case 2: case 9: case 10: case 11: case 12: if ($imgtype != '.jpg' && $imgtype != '.jpeg') { @unlink($tmp_filename); message_die(GENERAL_ERROR, $lang['UNABLE_TO_UPLOAD_AVATAR'], '', __LINE__, __FILE__); } break; // PNG // PNG case 3: if ($imgtype != '.png') { @unlink($tmp_filename); message_die(GENERAL_ERROR, $lang['UNABLE_TO_UPLOAD_AVATAR'], '', __LINE__, __FILE__); } break; default: @unlink($tmp_filename); message_die(GENERAL_ERROR, $lang['UNABLE_TO_UPLOAD_AVATAR'], '', __LINE__, __FILE__); } // Automatic Avatar Resize - BEGIN // If you want tu use Avatar Resize function, you have to change the line below and decomment the block named AUTOMATIC AVATAR RESIZE some lines below. //if ($width > 0 && $height > 0) // Automatic Avatar Resize - END if ($width > 0 && $height > 0 && $width <= $config['avatar_max_width'] && $height <= $config['avatar_max_height']) { $new_filename = uniqid(rand()) . $imgtype; if ($mode == 'editprofile' && $current_type == USER_AVATAR_UPLOAD && $current_avatar != '') { user_avatar_delete($current_type, $current_avatar); } if ($avatar_mode == 'remote') { @copy($tmp_filename, './' . $config['avatar_path'] . "/{$new_filename}"); @unlink($tmp_filename); } else { if (@$ini_val('open_basedir') != '') { if (@phpversion() < '4.0.3') { message_die(GENERAL_ERROR, 'open_basedir is set and your PHP version does not allow move_uploaded_file', '', __LINE__, __FILE__); } $move_file = 'move_uploaded_file'; } else { $move_file = 'copy'; } if (!is_uploaded_file($avatar_filename)) { message_die(GENERAL_ERROR, 'Unable to upload file', '', __LINE__, __FILE__); } $move_file($avatar_filename, './' . $config['avatar_path'] . "/{$new_filename}"); } @chmod('./' . $config['avatar_path'] . "/{$new_filename}", 0777); // Automatic Avatar Resize - BEGIN /* if ($width > $config['avatar_max_width'] || $height > $config['avatar_max_height']) { $width_old = $width; $height_old = $height; if ($width > $config['avatar_max_width']) { $height = ($config['avatar_max_width'] / $width) * $height; $width = $config['avatar_max_width']; } if ($height > $config['avatar_max_height']) { $width = ($config['avatar_max_height'] / $height) * $width; $height = $config['avatar_max_height']; } $width = round($width); // to avoid float->integer conversion problems $height = round($height); // to avoid float->integer conversion problems switch ($imgtype) { case '.jpg': $imagecreatefrom_function = 'imagecreatefromjpeg'; $image_function = 'imagejpeg'; break; case '.gif': $imagecreatefrom_function = 'imagecreatefromgif'; $image_function = 'imagegif'; break; case '.png': $imagecreatefrom_function = 'imagecreatefrompng'; $image_function = 'imagepng'; break; } $img_old = $imagecreatefrom_function ('./' . $config['avatar_path'] . "/$new_filename"); $img_new = imagecreatetruecolor ($width, $height); imagecopyresampled ($img_new, $img_old, 0, 0, 0, 0, $width, $height, $width_old, $height_old); $image_function ($img_new, './' . $config['avatar_path'] . "/$new_filename"); imagedestroy ($img_new); } */ // Automatic Avatar Resize - END $avatar_sql = $mode == 'editprofile' ? ", user_avatar = '" . $db->sql_escape($new_filename) . "', user_avatar_type = " . USER_AVATAR_UPLOAD : "'" . $db->sql_escape($new_filename) . "', " . USER_AVATAR_UPLOAD; } else { $l_avatar_size = sprintf($lang['Avatar_imagesize'], $config['avatar_max_width'], $config['avatar_max_height']); $error = true; $error_msg = !empty($error_msg) ? $error_msg . '<br />' . $l_avatar_size : $l_avatar_size; } return $avatar_sql; }