Index: modules/userreference/userreference.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/modules/userreference/Attic/userreference.install,v
retrieving revision 1.23.2.7
diff -u -p -r1.23.2.7 userreference.install
--- modules/userreference/userreference.install	19 Jul 2009 13:03:57 -0000	1.23.2.7
+++ modules/userreference/userreference.install	8 Aug 2009 17:06:21 -0000
@@ -113,3 +113,37 @@ function userreference_update_6001(&$san
 
   return $ret;
 }
+
+/**
+ * Convert 'referenceable_status' option from array to integer to match the
+ * change in the field settings form where the element has been changed from
+ * a checkboxes element (array) to a radios element (integer).
+ *
+ * Reference: @link http://drupal.org/node/416134 @endlink
+ */
+function userreference_update_6002() {
+  $ret = array();
+
+  $result = db_query("SELECT field_name, global_settings FROM {". content_field_tablename() ."} WHERE type = 'userreference'");
+  while ($userreference = db_fetch_object($result)) {
+    $global_settings = unserialize($userreference->global_settings);
+
+    $referenceable_status = array_filter($global_settings['referenceable_status']);
+    $global_settings['referenceable_status'] = (!empty($referenceable_status) ? 1 : '');
+
+    // We can't use update_sql() here because of curly braces in serialized
+    // array.
+    db_query("UPDATE {". content_field_tablename() ."} SET global_settings = '%s' WHERE field_name = '%s'", serialize($global_settings), $userreference->field_name);
+    $ret[] = array(
+      'success' => TRUE,
+      'query' => t("The 'referenceable_status' option for %field has been fixed.", array('%field' => $userreference->field_name)),
+    );
+  }
+
+  // Rebuild content caches only if necessary.
+  if (!empty($ret)) {
+    content_clear_type_cache();
+  }
+
+  return $ret;
+}
Index: modules/userreference/userreference.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/cck/modules/userreference/Attic/userreference.module,v
retrieving revision 1.106.2.45
diff -u -p -r1.106.2.45 userreference.module
--- modules/userreference/userreference.module	19 Jul 2009 13:03:57 -0000	1.106.2.45
+++ modules/userreference/userreference.module	8 Aug 2009 17:07:24 -0000
@@ -79,10 +79,10 @@ function userreference_field_settings($o
         '#options' => user_roles(1),
       );
       $form['referenceable_status'] = array(
-        '#type' => 'checkboxes',
+        '#type' => 'radios',
         '#title' => t('User status that can be referenced'),
-        '#default_value' => isset($field['referenceable_status']) && is_array($field['referenceable_status']) ? array_filter($field['referenceable_status']) : array(1),
-        '#options' => array(1 => t('Active'), 0 => t('Blocked')),
+        '#default_value' => isset($field['referenceable_status']) ? (int)$field['referenceable_status'] : '',
+        '#options' => array('' => t('All users'), 1 => t('Active users'), 0 => t('Blocked users')),
       );
       if (module_exists('views')) {
         $views = array('--' => '--');
@@ -804,16 +804,9 @@ function _userreference_potential_refere
     $join[] = 'LEFT JOIN {users_roles} r ON u.uid = r.uid';
   }
 
-  $status = array();
-  if (isset($field['referenceable_status']) && is_array($field['referenceable_status'])) {
-    // keep only selected checkboxes
-    $status = array_filter($field['referenceable_status']);
-  }
-  if (!empty($status)) {
-    // Limit query if only one status should be referenced.
-    if (count($status) == 1) {
-      $where[] = "u.status = ". array_pop($status);
-    }
+  if (isset($field['referenceable_status']) && is_numeric($field['referenceable_status'])) {
+    $where[] = 'u.status = %d';
+    $args[] = $field['referenceable_status'];
   }
 
   $users = array();
