|
@@ -0,0 +1,151 @@
|
|
|
+<?php
|
|
|
+/**
|
|
|
+ * @file
|
|
|
+ * A contact field for use with contact.module
|
|
|
+ *
|
|
|
+ * - can be used as just a formatter for the user object
|
|
|
+ */
|
|
|
+
|
|
|
+function contact_field_field_formatter_info() {
|
|
|
+ $ret = array(
|
|
|
+ 'user_contact_form_link' => 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'];
|
|
|
+ }
|
|
|
+}
|