--- user_related_content.module	Wed Sep 07 22:07:58 2005
+++ user_related_content.module	Sun Jan 08 23:21:01 2006
@@ -46,6 +46,7 @@ function user_related_content_perm() {
   $perms[] = 'edit user_related_content relationship types';
   $perms[] = 'access user_related_content relationships';
   $perms[] = 'edit own user_related_content relationships';
+  $perms[] = 'edit user_related_content relationships';
   
   return $perms;
 }
@@ -127,10 +128,24 @@ function user_related_content_menu($may_
 /**
  * Implementation of hook_user().
  */
-function user_related_content_user($type, &$edit, &$user, $category = NULL) {
-  switch ($type) {  
-    case 'delete':
-      return user_related_content_user_delete($edit, $user);
+function user_related_content_user($type, &$edit, &$edited_user, $category = NULL) {
+  global $user;
+  $access = user_access('edit user_related_content relationship types') || user_access('edit user_related_content relationships') || (user_access('edit own user_related_content relationships') && $edit['uid'] == $user->uid);
+  if ($type == 'delete') {
+    return user_related_content_user_delete($edit, $edited_user);
+  }
+  if ($access) {
+    switch ($type) {
+      // TODO: option to appear in user registration form to connect new user to e.g current partner database
+      //case 'register': // intentional fall-through
+      case 'form':
+        return user_related_content_user_form($type, $edit, $edited_user, $category);
+      case 'update':
+      case 'insert':
+        return user_related_content_user_insert($edit, $edited_user, $category);
+      case 'validate':
+        return user_related_content_user_validate($edit, $category);
+    }
   }
 }
 
@@ -794,4 +809,90 @@ function _user_related_content_current_n
   return 0;
 }
 
-php?>
\ No newline at end of file
+function user_related_content_user_form($type, $edit, $user, $category) {
+  if (($_GET['q'] == 'user/register') ? 1 : 0) {
+    // TODO: option to appear in user registration form to connect new user to e.g current partner database
+    // $result = db_query('SELECT * FROM {user_related_content_relationship_type_content_types} c LEFT JOIN {user_related_content_relationship_types} t ON c.rtid = t.rtid');
+  }
+  else {
+    $result = ($category == 'account') ? db_query('SELECT * FROM {user_related_content_relationship_type_content_types} c LEFT JOIN {user_related_content_relationship_types} t ON c.rtid = t.rtid') : '';
+  }
+  while ($row = db_fetch_object($result)) {
+    $related_fields[] = $row;
+  }
+  $fields = array();
+  $category = "User's personal pages";
+  foreach ($related_fields as $field) {
+    $value = db_result(db_query("SELECT u.nid FROM {user_related_content_relationships} u LEFT JOIN {node} n ON n.nid = u.nid WHERE u.rtid = %d AND u.uid = %d AND n.type = '%s'", $field->rtid, $user->uid, $field->content_type));
+    $options = array('<'. t('none') .'>');
+    $query = db_query("SELECT n.nid, n.title FROM {node} n WHERE n.type = '%s' ORDER BY n.title", $field->content_type);
+    while ($result = db_fetch_object($query)) {
+     $options[$result->nid] = $result->title;
+    }
+    $fields[$category] .= "<script language=\"JavaScript\" type=\"text/javascript\">\n
+          <!--
+          function filtery(pattern,list){
+            pattern = new RegExp('^'+pattern,\"i\");
+            i=0;
+            sel=0;
+            while(i<list.options.length){
+              if(pattern.test(list.options[i].text)){sel=i;break}
+              i++;
+            }
+            list.options.selectedIndex=sel;
+          }
+          //-->
+          </script>";
+    $fields[$category] .= form_select(check_plain($field->content_type), 'user_'.$field->content_type, $value, $options, $field->description, 0, 0);
+  }
+
+  if ($fields) {
+    foreach ($fields as $category => $data) {
+      $output[] = array('title' => $category, 'data' => $data);
+    }
+    return $output;
+  }
+}
+
+function user_related_content_user_validate($edit, $category) {
+  if (($_GET['q'] == 'user/register') ? 1 : 0) {
+    // TODO: option to appear in user registration form to connect new user to e.g current partner database
+    // $result = db_query('SELECT * FROM {user_related_content_relationship_type_content_types} c LEFT JOIN {user_related_content_relationship_types} t ON c.rtid = t.rtid');
+  }
+  else {
+    $result = ($category == 'account') ? db_query('SELECT * FROM {user_related_content_relationship_type_content_types} c LEFT JOIN {user_related_content_relationship_types} t ON c.rtid = t.rtid') : '';
+  }
+
+  while ($field = db_fetch_object($result)) {
+    if (!$edit['user_'.$field->content_type] && $field->required && !user_access('administer users')) {
+      form_set_error($field->content_type, t('The field %field is required.', array('%field' => theme('placeholder', $field->content_type))));
+    }
+  }
+
+  return $edit;
+}
+
+function user_related_content_user_insert(&$edit, &$user, $category) {
+  if (($_GET['q'] == 'user/register') ? 1 : 0) {
+    // TODO: option to appear in user registration form to connect new user to e.g current partner database
+    // $result = db_query('SELECT * FROM {user_related_content_relationship_type_content_types} c LEFT JOIN {user_related_content_relationship_types} t ON c.rtid = t.rtid');
+  }
+  else {
+    $result = ($category == 'account') ? db_query('SELECT * FROM {user_related_content_relationship_type_content_types} c LEFT JOIN {user_related_content_relationship_types} t ON c.rtid = t.rtid') : '';
+  }
+  $nid = array();
+  while ($field = db_fetch_object($result)) {
+    if (!$nid) {
+      db_query("DELETE FROM {user_related_content_relationships} WHERE rtid = %d AND uid = %d" , $field->rtid, $user->uid);
+    }
+    $nid = $edit['user_'.$field->content_type];
+    if ($edit['user_'.$field->content_type]) {
+      db_query("DELETE FROM {user_related_content_relationships} WHERE rtid = %d AND uid = %d AND nid = %d" , $field->rtid, $user->uid, $nid);
+      db_query("INSERT INTO {user_related_content_relationships} (rtid, uid, nid) VALUES (%d, %d, '%s')", $field->rtid, $user->uid, $nid);
+    }
+    // Mark field as handled (prevents saving to user->data).
+    $edit['user_'.$field->content_type] = null;
+  }
+}
+
+?>
\ No newline at end of file
