array("textfield", t("Address"), "", 64, 64, t("Your address: street and number.")),
"city" => array("textfield", t("City"), "", 64, 64, t("Your city.")),
"state" => array("textfield", t("State, province or region"), "", 64, 64, ""),
"zip" => array("textfield", t("Zip or postal code"), "", 7, 10, ""),
"country" => array("textfield", t("Country"), "", 64, 64, ""),
"birthday" => array("", t("Birthday"), ""),
"gender" => array("select", t("Gender"), "", array(0 => "-", "m" => t("male"), "f" => t("female")), "", 0, 0),
"job" => array("textfield", t("Job title"), "", 64, 64, t("Your job title or position.")),
"icq" => array("textfield", t("ICQ messenger ID"), "", 12, 12, ""),
"msn" => array("textfield", t("MSN messenger ID"), "", 64, 64, ""),
"yahoo" => array("textfield", t("Yahoo messenger ID"), "", 64, 64, ""),
"aim" => array("textfield", t("AIM messenger ID"), "", 64, 64, ""),
"homepage" => array("textfield", t("URL of homepage"), "", 64, 64, t("Make sure you enter a fully qualified URL: remember to include \"http://\".")),
"biography" => array("textarea", t("Biography"), "", 64, 4, ""),
"interests" => array("textarea", t("Interests"), "", 64, 4, t("What you like.")),
"publickey" => array("textarea", t("Public key"), "", 64, 4, ""),
"avatar" => array("", t("Avatar or picture"), t("Your virtual face or picture. Maximum dimensions are %dimensions and the maximum size is %size kB.", array("%dimensions" => variable_get("profile_avatar_dimensions", "85x85"), "%size" => variable_get("profile_avatar_file_size", "30"))))
);
$GLOBALS["profile_days"][0] = t("day");
for ($n = 1; $n <= 31; $n++) {
$GLOBALS["profile_days"][$n] = $n;
}
$GLOBALS["profile_months"] = array(0 => t("month"), 1 => t("January"), 2 => t("February"), 3 => t("March"), 4 => t("April"), 5 => t("May"), 6 => t("June"), 7 => t("July"), 8 => t("August"), 9 => t("September"), 10 => t("October"), 11 => t("November"), 12 => t("December"));
}
function profile_system($field) {
$system["description"] = t("Support for configurable user profiles.");
$system["admin_help"] = t("When a user creates an account you can ask them to give you some extra information about themselves, as well as letting them use a small picture, called an avatar. Notes:
In order for a user to enter information you MUST check \"enable\". In order for other people too see the entered information you must make it \"public\" If an item is \"public\" but not enabled then the user can never give it a value and it will never been seen. Public does not imply \"enable\" If an item is enabled, but not shown in the registration form the a user will have to ". l("edit their account", "user/edit") ." to place information in the field. ");
return $system[$field];
}
function profile_settings() {
global $profile_fields;
if (!$profile_fields) {
_profile_init();
}
$profile_public_fields = variable_get("profile_public_fields", array());
$profile_private_fields = variable_get("profile_private_fields", array());
$profile_required_fields = variable_get("profile_required_fields", array());
$profile_register_fields = variable_get("profile_register_fields", array());
$output = "\n";
$output .= "field enable public required show in registration form \n";
foreach ($profile_fields as $key => $field) {
$output .= "$field[1] ";
$output .= "". form_checkbox("", "profile_private_fields][", $key, in_array($key, $profile_private_fields)) ." ";
$output .= "". form_checkbox("", "profile_public_fields][", $key, in_array($key, $profile_public_fields)) ." ";
$output .= "". form_checkbox("", "profile_required_fields][", $key, in_array($key, $profile_required_fields)) ." ";
$output .= "". form_checkbox("", "profile_register_fields][", $key, in_array($key, $profile_register_fields)) ." ";
$output .= " \n";
}
$output .= "
\n";
$output .= form_textfield(t("Avatar image path"), "profile_avatar_path", variable_get("profile_avatar_path", "misc/avatars/"), 30, 255, t("Path for avatar directory; it must be writable and visible from the web."));
$output .= form_textfield(t("Avatar maximum dimensions"), "profile_avatar_dimensions", variable_get("profile_avatar_dimensions", "85x85"), 10, 10, t("Maximum dimensions for avatars."));
$output .= form_textfield(t("Avatar maximum file size"), "profile_avatar_file_size", variable_get("profile_avatar_file_size", "30"), 10, 10, t("Maximum file size for avatars, in kB."));
return $output;
}
function profile_user($type, $edit, &$user) {
global $profile_fields;
if (!$profile_fields) {
_profile_init();
}
switch ($type) {
case "register_form":
// first registration form (to add something to just email and nick)
return _profile_form($edit, "register");
case "register_validate":
// validate first registration form
return _profile_validate($edit, "required", $user);
case "edit_form":
// when user tries to edit his own data
return _profile_form(object2array($user), "private");
case "edit_validate":
// validate user data editing
return _profile_validate($edit, "private", $user);
case "view_public":
// when others look at user data
return _profile_user_view($user, "public");
case "view_private":
// when user looks at his own data
return _profile_user_view($user, "private");
}
}
function profile_required($title) {
// this pleads "theme, theme" ;)
return $title ." ". theme("theme_mark");
}
function _profile_form($edit, $mode) {
global $profile_fields, $user;
$reg_fields = _profile_active_fields($mode);
$required_fields = _profile_active_fields("required");
foreach ($profile_fields as $name => $field) {
if ($field[0] && in_array($name, $reg_fields)) {
$f = "form_". $field[0];
$t = "profile_". $name;
$output .= $f((in_array($name, $required_fields) ? profile_required($field[1]) : $field[1]), $t, $edit[$t], $field[3], $field[4], $field[5], $field[6]);
}
}
if (in_array("birthday", $reg_fields)) {
$output .= form_item((in_array("birthday", $required_fields) ? profile_required($profile_fields["birthday"][1]) : $profile_fields["birthday"][1]), _profile_edit_birth(array2object($edit)), $profile_fields["birthday"][2]);
}
if (in_array("avatar", $reg_fields)) {
if ($edit["profile_avatar"] && $edit["uid"]) {
$file = profile_avatar_path($edit["uid"], $edit["profile_avatar"]);
if ($file) {
$output .= " ";
}
}
$output .= form_file($profile_fields["avatar"][1], "profile_avatar", 64, $profile_fields["avatar"][2]);
}
return $output;
}
function _profile_validate($edit, $mode, $user) {
global $profile_fields;
$enabled_fields = _profile_active_fields($mode);
if (in_array("birthday", $enabled_fields) && ($birth_error = _profile_validate_birth($edit))) {
$error .= $birth_error ." ";
}
if (in_array("avatar", $enabled_fields) && ($avatar_error = _profile_validate_avatar($edit, $user))) {
$error .= $avatar_error ." ";
}
foreach (array_keys($profile_fields) as $field) {
// replicate any key which was saved during registration but is not in this form
if (!$edit[$field] && $user->$field) {
$edit[$field] = $user->$field;
}
}
// now check for required fields
foreach (_profile_active_fields("required") as $required) {
if ($required != "0" && in_array($required, $enabled_fields)) {
if (!$edit["profile_". $required]) {
$error .= t("This required field is missing: %a", array("%a" => $profile_fields[$required][1])) ." ";
}
}
}
return $error ? $error : $edit;
}
function _profile_user_view(&$user, $mode) {
global $profile_fields;
foreach (_profile_active_fields($mode) as $name) {
$field = $profile_fields[$name];
$t = "profile_". $name;
if (!empty($user->$t)) {
switch ($field[0]) {
case "textfield":
case "textarea":
case "checkbox":
$value = ($t == "profile_homepage") ? "$t) ."\">". check_output($user->$t) ." " : check_output($user->$t);
$output .= form_item($field[1], $value);
break;
case "select":
$output .= form_item($field[1], check_output($profile_fields[$name][3][$user->$t]));
break;
case "":
// special
if ($t == "profile_avatar") {
$file = profile_avatar_path($user->uid, $user->profile_avatar);
if (file_exists($file)) {
$output .= form_item(t("Avatar"), " ");
}
}
if ($t == "profile_birthday") {
if (isset($user->profile_birthday) && isset($user->profile_birthmonth) && isset($user->profile_birthyear)) {
// this is very european-centric, can we use format_date?
$time = mktime(0, 0, 0, $user->profile_birthmonth, $user->profile_birthday, $user->profile_birthyear);
$output .= form_item(t("Birthday"), format_date($time, "custom", "F j, Y"));
}
}
}
}
}
return $output;
}
function _profile_validate_avatar(&$edit, $user) {
// check that uploaded file is an image, with a maximum file size and maximum height/width
unset($edit["profile_avatar"]);
if ($_FILES["edit"]["name"]["profile_avatar"] == "") {
$edit["profile_avatar"] = $user->profile_avatar;
return "";
}
$image_file = $_FILES["edit"]["tmp_name"]["profile_avatar"];
if (is_uploaded_file($image_file)) {
$extension = strtolower(strrchr($_FILES["edit"]["name"]["profile_avatar"], "."));
$size = getimagesize($image_file);
list($maxwidth, $maxheight) = explode("x", variable_get("profile_avatar_dimensions", "85x85"));
if ((!in_array($size[2], array(1, 2, 3))) || (!in_array($extension, array(".gif", ".jpg", ".png", ".jpeg")))) {
$error = t("The uploaded file was not an image.");
}
else if (filesize($image_file) > (variable_get("profile_avatar_file_size", "30") * 1000)) {
$error = t("The uploaded image is too large; the maximum file size is %a kB.", array("%a" => variable_get("profile_avatar_file_size", "30")));
}
else if ($size[0] > $maxwidth || $size[1] > $maxheight) {
$error = t("The uploaded image is too large; the maximum dimensions are %a pixels.", array("%a" => variable_get("profile_avatar_dimensions", "85x85")));
}
else if (!is_dir(variable_get("profile_avatar_path", "misc/avatars/"))) {
$error = t("Failed to upload the avatar image; the '%directory' directory doesn't exist.", array("%directory" => variable_get("profile_avatar_path", "misc/avatars/")));
}
else if (!is_writeable(variable_get("profile_avatar_path", "misc/avatars/"))) {
$error = t("Failed to upload the avatar image; the webserver has no write permission to the '%directory' directory.", array("%directory" => variable_get("profile_avatar_path", "misc/avatars/")));
}
else if (!copy($image_file, variable_get("profile_avatar_path", "misc/avatars/").md5($user->uid).$extension)) {
$error = t("Failed to upload the avatar image; could not copy file '%filename' to directory '%directory'.", array("%filename" => $_FILES["edit"]["name"]["profile_avatar"], "%directory" => variable_get("profile_avatar_path", "misc/avatars/")));
}
else {
$edit["profile_avatar"] = $extension;
}
}
return $error ? "$error " : "";
}
function profile_avatar_path($uid, $extension) {
return $extension ? variable_get("profile_avatar_path", "misc/avatars/") . md5($uid) . $extension : "";
}
function _profile_active_fields($mode) {
return variable_get("profile_". $mode ."_fields", array());
}
function _profile_edit_birth($edit = "") {
global $profile_months, $profile_days;
$output = _profile_select("profile_birthday", $edit->profile_birthday, $profile_days);
$output .= " ";
$output .= _profile_select("profile_birthmonth", $edit->profile_birthmonth, $profile_months);
$output .= " ";
$output .= " profile_birthyear\" />";
return $output;
}
function _profile_validate_birth(&$edit) {
if (!$edit["profile_birthday"] && !$edit["profile_birthmonth"] && !$edit["profile_birthyear"]) {
// change this if you want required birth
return;
}
if ($edit["profile_birthyear"] > 1900 && checkdate($edit["profile_birthmonth"], $edit["profile_birthday"], $edit["profile_birthyear"])) {
return;
}
else {
return t("The specified birthday is not valid.") ." ";
}
}
function _profile_select($name, $value, $options, $extra = 0, $multiple = 0) {
if (count($options) > 0) {
foreach ($options as $key=>$choice) {
$select .= "". check_form($choice) ." ";
}
return "$select ";
}
}
?>