array( 'label' => t('Contact form'), 'field types' => array('user_contact'), ), 'user_contact_mailto_link' => array( 'label' => t('mailto: link'), 'field types' => array('user_contact'), ), ); // dsm(get_defined_vars(), __FUNCTION__); return $ret; } function contact_field_field_info() { $ret = array( 'user_contact' => array( 'label' => t('User contact'), 'description' => t('This field builds a contact link from the entity to which it is attached, as long as that entity has a uid field linking to a user account'), 'settings' => array(), 'instance settings' => array(), 'default_widget' => NULL, 'default_formatter' => 'user_contact_link', 'cardinality' => 1, ), ); // dsm(get_defined_vars(), __FUNCTION__); return $ret; } /** * Implements hook_field_is_empty(). */ function contact_field_field_is_empty($item, $field) { return empty($item); } function contact_field_field_schema($field) { if ($field['type'] != 'user_contact') { return; } $ret = array( 'columns' => array(), 'indexes' => array(), ); // dsm(get_defined_vars(), __FUNCTION__); return $ret; } function contact_field_field_widget_info() { $ret = array( 'contact_field_simple' => array( 'label' => t('No input necessary'), 'description' => t('Take the information from the underlying account'), 'field types' => array('user_contact'), 'behaviors' => array( 'multiple values' => FIELD_BEHAVIOR_CUSTOM, // No values input anyway 'default value' => FIELD_BEHAVIOR_DEFAULT, ), ), ); // dsm(get_defined_vars(), __FUNCTION__); return $ret; } function contact_field_field_widget_form(&$form, &$form_state, $field, $instance, $langcode, $items, $delta, $element) { // dsm(get_defined_vars(), __FUNCTION__); $ret = array(); if (isset($form['uid'])) { // This is not the widget settings form $uid = $form['uid']['#value']; $account = user_load($uid); $ret['mail'] = array( '#type' => 'value', '#title' => $instance['label'], '#disabled' => TRUE, '#value' => $account->mail, ); } return $ret; } /** * Implements hook_field_formatter_view(). */ function contact_field_field_formatter_view($obj_type, $object, $field, $instance, $langcode, $items, $display) { $uid = $object->uid; $name = $object->name; $ret = array(); switch ($display['type']) { case 'user_contact_form_link': foreach (array_keys($items) as $delta) { // Cannot use theme_username() in D7.7. See http://drupal.org/node/1238094 $ret[$delta] = array('#markup' => l($name, "user/$uid/contact")); } break; case 'user_contact_mailto_link': $account = user_load($uid); $mail = $account->mail; foreach (array_keys($items) as $delta) { // Cannot use theme_username() in D7.7. See http://drupal.org/node/1238094 $ret[$delta] = array('#markup' => l($name, "mailto:$mail")); } break; default: return; } $ret = array($instance['id'] => $ret); // dsm(get_defined_vars(), __FUNCTION__); return $ret; } /** * Force cardinality: there is no point in having multiple instances of this * field since it is single-valued per entity instance, instead of having * standalone storage. */ function contact_field_form_field_ui_field_edit_form_alter(&$form, $form_state, $form_id) { dsm($form); if ($form['#field']['type'] == 'user_contact') { $override = array( '#access' => FALSE, '#value' => 1, ); $form['field']['cardinality'] = $override + $form['field']['cardinality']; } }