"; exit(); } echo "\n"; fclose($file); } function get_profile($userid) { $result = mysql_query("SELECT * FROM profile WHERE userid = $userid"); if (!$result) { return NULL; } $profile = mysql_fetch_object($result); mysql_free_result($result); return $profile; } function show_profile_creation_page($user) { // If the user already has a profile, // fill in the fields with their current values. // $profile = get_profile($user->id); if ($_POST['submit']) { process_create_results($user, $profile); exit(); } if ($profile) { page_head("Edit your profile"); } else { page_head("Create a profile"); } echo "
"; start_table_noborder(); show_description(); show_questions($profile); show_picture_option($profile); show_submit(); end_table(); echo "
"; page_tail(); } function show_description() { echo "

Your profile lets you share your opinions and background with the ".PROJECT." community.

"; } function show_questions($profile) { row1(show_profile_heading1()); rowify(show_profile_question1().html_info()); rowify("
"); show_textarea("response1", $profile->response1); rowify("
"); row1( show_profile_heading2()); rowify( show_profile_question2().html_info()); rowify("
"); show_textarea("response2", $profile->response2); rowify("
"); show_language_selection($profile); rowify("
"); } function show_textarea($name, $text) { rowify(""); } function show_picture_option($profile) { row1("Picture"); if ($profile->has_picture) { echo " "; rowify("
"); end_table(); echo ""; } else { rowify(" If you would like include a picture with your profile, click the \"Browse\" button and select a JPEG or PNG file. Please select images of 50KB or less.

"); rowify("
"); } } function show_language_selection($profile) { row1("Language"); echo "

\n"; } function show_submit() { row1("Submit profile"); rowify("

"); } // If the user with id = $userid has uploaded a picture his/herself, // delete it and its thumbnail. // function delete_user_pictures($userid) { $filename1 = IMAGE_PATH . $userid . '.jpg'; $filename2 = IMAGE_PATH . $userid . '_sm.jpg'; if (file_exists($filename1)) { unlink($filename1); } if (file_exists($filename2)) { unlink($filename2); } } function process_create_results($user, $profile) { $response1 = $_POST['response1']; $response2 = $_POST['response2']; $language = $_POST['language']; $delete_pic = $_POST['delete_pic']; if (strlen($response1)==0 && strlen($response2)==0 && $delete_pic != "on" && !is_uploaded_file($_FILES['picture']['tmp_name']) ) { profile_error_page("Your profile submission was empty."); exit(); } if ($delete_pic == "on") { delete_user_pictures($profile->userid); $profile->has_picture = false; } $profile ? $hasPicture = $profile->has_picture: $hasPicture = false; if (is_uploaded_file($_FILES['picture']['tmp_name'])) { $hasPicture = true; // echo "
Name: " . $_FILES['picture']['name']; // echo "
Type: " . $_FILES['picture']['type']; // echo "
Size: " . $_FILES['picture']['size']; // echo "
Temp name: " . $_FILES['picture']['tmp_name']; $images = getImages($_FILES['picture']['tmp_name']); // Write the original image file to disk. // TODO: define a constant for image quality. ImageJPEG($images[0], IMAGE_PATH . $user->id . '.jpg'); ImageJPEG($images[1], IMAGE_PATH . $user->id . '_sm.jpg'); } $response1 = sanitize_html($response1); $response2 = sanitize_html($response2); if ($profile) { $query = 'UPDATE profile SET ' ." response1 = '$response1'," ." response2 = '$response2'," ." language = '$language'," ." has_picture = '$hasPicture'" ." WHERE userid = '$user->id'"; $result = mysql_query($query); if (!$result) { profile_error_page("Couldn't update profile: database error"); exit(); } } else { $query = 'INSERT INTO profile SET ' ." userid = '$user->id'," ." language = '$language'," ." response1 = '$response1'," ." response2 = '$response2'," ." has_picture = '$hasPicture'," ." verification=0"; $result = mysql_query($query); if (!$result) { profile_error_page("Couldn't create profile: database error"); exit(); } mysql_query("update user set has_profile=1 where id=$user->id"); } show_result_page($user); } // Returns an array containing: // [0]: The original image refered to by $fileName if its dimensions are // less than MAX_IMG_WIDTH x MAX_IMG_HEIGHT, or a version scaled to // those dimensions if it was too large. // [1]: A scaled version of the above. function getImages($fileName) { $size = getImageSize($fileName); // Determine if the filetype uploaded is supported. // TODO: Change these to constants. switch($size[2]) { case '2': // JPEG $image = imageCreateFromJPEG($fileName); break; case '3': // PNG $image = imageCreateFromPNG($fileName); break; default: profile_error_page("The format of your uploaded image is not supported by our system."); exit(); } $width = $size[0]; $height = $size[1]; $smallImage = scale_image($image, $width, $height, SMALL_IMG_WIDTH, SMALL_IMG_HEIGHT); if ($width > MAX_IMG_WIDTH || $height > MAX_IMG_HEIGHT) { $image = scale_image($image, $width, $height, MAX_IMG_WIDTH, MAX_IMG_HEIGHT); } /* echo "

Image type: $size[2]"; echo "
Original width: $width"; echo "
Original height: $height"; echo "
Scalar: $scalar"; echo "
Dest width: " . ($width / $scalar); echo "
Dest height: " . ($height / $scalar); echo "
Horizontal offset: $horiz_offset"; echo "
Vertical offset: $vert_offset"; echo "

View result"; */ return array($image, $smallImage); } function scale_image($image, $origWidth, $origHeight, $targetWidth, $targetHeight) { // If the image is already smaller than the target dimensions, just return it. if ($origWidth <= $targetWidth && $origHeight <= $targetHeight) { return $image; } ($origWidth > $origHeight)? $scalar = ($origWidth / $targetWidth) : $scalar = ($origHeight / $targetHeight); if ($scalar != 0) { $destWidth = $origWidth / $scalar; $destHeight = $origHeight / $scalar; } else { $destWidth = $origWidth; $destHeight = $origHeight; } $gd_info = gd_info(); $newGD = (strstr($gd_info["GD Version"], "2.0")!=""); if ($newGD) { // If you are using a modern PHP/GD installation that does 'truecolor' images, this is what's needed. $newImage = ImageCreateTrueColor($destWidth, $destHeight); ImageCopyResampled($newImage, $image, 0, 0, 0, 0, $destWidth, $destHeight, $origWidth, $origHeight); } else { // If not, use this block. The image quality is lower but it works using older PHP/GD versions. $newImage = ImageCreate($destWidth, $destHeight); ImageCopyResized($newImage, $image, 0, 0, 0, 0, $destWidth, $destHeight, $origWidth, $origHeight); } return $newImage; } function show_result_page($user) { page_head("Profile Saved"); echo "

Congratulations!

Your profile was successfully entered into our database.

id>View your profile
"; page_tail(); } // Builds a summary table of user profiles. // // $members is an array of userIDs; // $offset indicates which entry to begin the table with // $numToDisplay indicates how many profiles to display in this table // $cols indicates how many profile summaries should be written per row // $descriptor is an optional file descriptor to write the table to. function show_user_table($members, $offset, $numToDisplay, $cols) { echo "

userid . '.jpg' . "\">userid . '_sm.jpg' . "\"> Your profile picture is shown at left.

To replace it, click the \"Browse\" button and select a JPEG or PNG file (50KB or less).

To remove it from your profile, check this box:

Select the language in which your profile is written:

"; if (strlen($profile->language)) { show_combo_box("language", LANGUAGE_FILE, $profile->language); } else { show_combo_box("language", LANGUAGE_FILE, "English"); } echo "

\n"; $rows = ceil($numToDisplay / $cols); $count = $offset; $numMembers = count($members); for ($row = 0; $row < $rows; $row++) { if ($count >= $numMembers) { break; } echo "\n"; for ($col = 0; $col < $cols; $col++) { if ($count < $numMembers) { $profile = get_profile($members[$count]); if (!$profile) { $numMembers--; continue; } echo ""; $count++; } else { echo ""; } } echo "\n"; } echo "
"; // Only link an image if the user has uploaded one.; if ($profile->has_picture) { echo ""; } else { echo " "; } echo "
\n", get_profile_summary($profile), "
\n"; } // Generates a string containing: // 1) the name of the user with ID == $userid, with a link to a view of their profile // 2) the first MAX_DESC_LENGTH characters from the response1 field of said user's profile. function get_profile_summary($profile) { $user = get_user_from_id($profile->userid); if (!$user || !$profile) { echo "Database error!"; // Change this to a standard error page. exit(); } $description = ""; if (strlen($profile->response1) != 0) { $temp = $profile->response1; $description = "(\"" . sub_sentence(strip_tags($temp), ' ', MAX_DESC_LENGTH, true) . "\")"; } $summary = "" . $user->name . " " . $description; return $summary; } // Displays a user's profile (if they have one); function show_profile($userid, $verify_mode = FALSE) { $user = get_user_from_id($userid); if (!$user) { profile_error_page("No user exists for that ID, or there was a database error.

"); exit(); } $profile = get_profile($userid); if (!$profile) { echo "No user profile exists for that user ID."; exit(); } if (!$verify_mode) { $logged_in_user = get_logged_in_user(false); if (!$logged_in_user || ($user->id != $logged_in_user->id)) { $caching = true; $cache_args = "userid=$userid"; start_cache(USER_PROFILE_TTL,$cache_args); } } $can_edit = $logged_in_user && $user->id == $logged_in_user->id; if (!$verify_mode) { page_head("Profile: ".$user->name); } start_table(); if ($can_edit) { row1("Edit your profile"); } if ($profile->has_picture) { echo " id , '.jpg' . "\"> "; } show_user_summary_public($user); row1(show_profile_heading1()); row1($profile->response1, 2, "foobar"); row1(show_profile_heading2()); row1($profile->response2, 2, "foobar"); if (!$can_edit and !$verify_mode) { row1("Your feedback on this profile"); row2( "Recommend this profile for User of the Day:", "I like this profile" ); row2( "Alert administrators to an offensive profile:", "I don't like this profile" ); } end_table(); if (!$verify_mode) { page_tail(); } else { echo "


"; } if ($caching) end_cache(USER_PROFILE_TTL,$cache_args); } ?>