Index: profile.module =================================================================== RCS file: /cvs/drupal/drupal/modules/profile.module,v retrieving revision 1.79 diff -u -r1.79 profile.module --- profile.module 20 Sep 2004 23:42:11 -0000 1.79 +++ profile.module 3 Oct 2004 17:24:57 -0000 @@ -172,6 +172,11 @@ if ($value = $user->{$field->name}) { switch ($field->type) { + case 'image': + $attr = _get_height_width_attributes($value); + $output = theme('form_element', t($field->title), $value); + $output .= theme_image($value, '', '', $attr, FALSE); + return $output; case 'textfield': return drupal_specialchars($value); case 'textarea': @@ -256,33 +261,45 @@ while ($field = db_fetch_object($result)) { $category = $field->category; switch ($field->type) { - case 'textfield': - case 'url': - $fields[$category] .= form_textfield($field->title, $field->name, $edit[$field->name], 70, 255, _profile_form_explanation($field), NULL, $field->required); - break; - case 'textarea': - $fields[$category] .= form_textarea($field->title, $field->name, $edit[$field->name], 60, 5, _profile_form_explanation($field), NULL, $field->required); - break; - case 'list': - $fields[$category] .= form_textarea($field->title, $field->name, $edit[$field->name], 60, 5, _profile_form_explanation($field), NULL, $field->required); - break; - case 'checkbox': - $fields[$category] .= form_checkbox($field->title, $field->name, 1, $edit[$field->name], _profile_form_explanation($field), NULL, $field->required); - break; - case 'selection': - $options = array('--'); - $lines = split("[,\n\r]", $field->options); - foreach ($lines as $line) { - if ($line = trim($line)) { - $options[$line] = $line; - } - } - - $fields[$category] .= form_select($field->title, $field->name, $edit[$field->name], $options, _profile_form_explanation($field), 0, 0, $field->required); - break; - case 'date': - $fields[$category] .= _profile_date_field($field, $edit); - break; + case 'image': print_r($user->{$field->name}); + file_check_directory(variable_get('file_directory_path', 'files'), FILE_CREATE_DIRECTORY, 'file_directory_path'); + $fields[$category] .= '
'; + $fields[$category] .= form_hidden($field->name, $user->{$field->name}); + $fields[$category] .= theme('form_element', t($field->title), $user->{$field->name}); + $fields[$category] .= form_file('', $field->name, 40, _profile_form_explanation($field), $field->required); + $fields[$category] .= ''; + + $attr = _get_height_width_attributes($user->{$field->name}); + $fields[$category] .= theme_image($user->{$field->name}, '', '', $attr, FALSE); + $fields[$category] .= '
'; + break; + case 'textfield': + case 'url': + $fields[$category] .= form_textfield(t($field->title), $field->name, $edit[$field->name], 70, 255, _profile_form_explanation($field), NULL, $field->required); + break; + case 'textarea': + $fields[$category] .= form_textarea(t($field->title), $field->name, $edit[$field->name], 60, 5, _profile_form_explanation($field), NULL, $field->required); + break; + case 'list': + $fields[$category] .= form_textarea(t($field->title), $field->name, $edit[$field->name], 60, 5, _profile_form_explanation($field), NULL, $field->required); + break; + case 'checkbox': + $fields[$category] .= form_checkbox(t($field->title), $field->name, 1, $edit[$field->name], _profile_form_explanation($field), NULL, $field->required); + break; + case 'selection': + $options = array('--'); + $lines = split("[,\n\r]", $field->options); + foreach ($lines as $line) { + if ($line = trim($line)) { + $options[$line] = $line; + } + } + + $fields[$category] .= form_select(t($field->title), $field->name, $edit[$field->name], $options, _profile_form_explanation($field), 0, 0, $field->required); + break; + case 'date': + $fields[$category] .= _profile_date_field($field, $edit); + break; } } @@ -342,16 +359,34 @@ return format_date(gmmktime(0, 0, 0, $month, 2, 1970), 'custom', 'M', 0); } -function profile_validate_profile($edit, $category) { - +function profile_validate_profile(&$edit, $category) { + if (($_GET['q'] == 'user/register') ? 1 : 0) { $result = db_query('SELECT * FROM {profile_fields} WHERE register = 1 ORDER BY category, weight'); } else { $result = db_query("SELECT * FROM {profile_fields} WHERE LOWER(category) = '%s' ORDER BY weight", strtolower($category)); } - + if(!$edit){ + $edit = array(); + } while ($field = db_fetch_object($result)) { + + // handle uploaded images + if ($file = file_check_upload($field->name)) { + if (in_array($file->filemime, array('image/jpeg', 'image/gif', 'image/png', 'image/bmp'))) { + if ($file = file_save_upload($file->source, file_create_path(), 1)) { + if(filesize($node->image_path) < 1000){ + $edit[$field->name] = $file->filepath; + } + } + } + else { + form_set_error('file_upload', 'Only JPEG, PNG, BMP and GIF images are allowed'); + } + } + + if ($edit[$field->name]) { if ($field->type == 'url') { if (!valid_url($edit[$field->name], true)) { @@ -573,7 +608,8 @@ 'selection' => t('list selection'), 'list' => t('freeform list'), 'url' => t('URL'), - 'date' => t('date')); + 'date' => t('date'), + 'image' => t('image')); return isset($type) ? $types[$type] : $types; } @@ -581,4 +617,30 @@ return $type == 'date'; } -?> + +function _get_height_width_attributes($image_path){ + // I want the image to fit inside a 200x200 square - this is the logic to + // get width and height attributes and theme the image + if(list($width, $height, $type, $attr) = @getimagesize($image_path)){ + if($width > 200 || $height > 200){ + $bigger = $width > $height ? $width : $height; + $smaller = $width > $height ? $height : $width; + $ratio = 1; + if($bigger !== 0){ + $ratio = 200 / $bigger; + } + $bigger = 200; + $smaller = (int)($ratio * $smaller); + if($width > $height){ + $width = $bigger; + $height = $smaller; + } elseif ($height > $width){ + $height = $bigger; + $width = $smaller; + } + } + return 'width="'.$width.'" height="'.$height.'"'; + } +} + +?> \ No newline at end of file