function _webform_edit_civicrm_contact in Webform CiviCRM Integration 7.3
Same name and namespace in other branches
- 7.5 includes/contact_component.inc \_webform_edit_civicrm_contact()
- 7.4 includes/contact_component.inc \_webform_edit_civicrm_contact()
Implements _webform_edit_component().
File
- ./
contact_component.inc, line 52
Code
function _webform_edit_civicrm_contact($component) {
civicrm_initialize();
$form = array();
$node = node_load($component['nid']);
if (empty($node->webform_civicrm)) {
drupal_set_message(t('CiviCRM processing is not enabled for this webform.'), 'error');
return $form;
}
list($contact_types, $sub_types) = wf_crm_get_contact_types();
$data = $node->webform_civicrm['data'];
$enabled = wf_crm_enabled_fields($node);
list(, $c, ) = explode('_', $component['form_key'], 3);
$contact_type = $data['contact'][$c]['contact'][1]['contact_type'];
wf_crm_update_existing_component($component, $enabled, $data);
$allow_create = $component['extra']['allow_create'];
// Load scripts & css
$form['#attached']['js'][] = wf_crm_tokeninput_path();
$callback_path = '"' . url('webform-civicrm/js/' . $node->nid . '-' . $component['cid'], array(
'alias' => TRUE,
'query' => array(
'admin' => 1,
),
)) . '"';
$settings = '{
queryParam: "str",
hintText: "' . t('Choose @type', array(
'@type' => $contact_types[$contact_type],
)) . '",
noResultsText: "' . t('Not found') . '",
searchingText: "' . t('Searching...') . '",
tokenLimit: 1,
prePopulate: prep
}';
$js = '
jQuery(function($) {
var prep = wfCiviContact.init(' . $callback_path . ');
$("#default-contact-id").tokenInput(' . $callback_path . ', ' . $settings . ');
});';
$form['#attached']['js'][$js] = array(
'type' => 'inline',
);
$form['#attached']['css'][] = drupal_get_path('module', 'webform_civicrm') . '/token-input.css';
$form['#attached']['js'][] = drupal_get_path('module', 'webform_civicrm') . '/contact_component.js';
$form['display']['widget'] = array(
'#type' => 'select',
'#title' => t('Form Widget'),
'#default_value' => $component['extra']['widget'],
'#options' => array(
'autocomplete' => t('Autocomplete'),
'select' => t('Select List'),
'hidden' => t('Static'),
),
'#weight' => -9,
'#parents' => array(
'extra',
'widget',
),
'#description' => '<ul>
<li>' . t('Autocomplete will suggest names of contacts as the user types. Good for large numbers of contacts.') . '</li>
<li>' . t('A select list will show all possible contacts in a dropdown menu. Good for small lists - use filters.') . '</li>
<li>' . t('A static element will not allow the user to make a choice. Use in conjunction with a default value setting or a cid passed in the url.') . '</li>
</ul>',
);
$form['display']['#description'] = '<em>' . ($allow_create ? t('<strong>Contact Creation: Enabled</strong> - this contact has name/email fields on the webform.') : t('<strong>Contact Creation: Disabled</strong> - no name/email fields for this contact on the webform.')) . '</em>';
$form['display']['search_prompt'] = array(
'#type' => 'textfield',
'#title' => t('Search Prompt'),
'#default_value' => $component['extra']['search_prompt'],
'#description' => t('Text the user will see before selecting a contact.'),
'#size' => 60,
'#maxlength' => 1024,
'#weight' => -7,
'#parents' => array(
'extra',
'search_prompt',
),
);
$form['display']['none_prompt'] = array(
'#type' => 'textfield',
'#title' => $allow_create ? t('Create Prompt') : t('Not Found Prompt'),
'#default_value' => $component['extra']['none_prompt'],
'#description' => $allow_create ? t('This text should prompt the user to create a new contact.') : t('This text should tell the user that no search results were found.'),
'#size' => 60,
'#maxlength' => 1024,
'#weight' => -6,
'#parents' => array(
'extra',
'none_prompt',
),
);
$form['display']['results_display_fieldset'] = array(
'#type' => 'fieldset',
'#title' => t('Display Name Format'),
'#collapsible' => TRUE,
'#collapsed' => TRUE,
'results_display' => array(
'#type' => 'checkboxes',
'#title' => t("Field(s) to display the contact"),
'#required' => TRUE,
'#default_value' => $component['extra']['results_display'],
'#options' => wf_crm_results_display_options($contact_type),
'#parents' => array(
'extra',
'results_display',
),
),
);
$form['display']['show_hidden_contact'] = array(
'#type' => 'radios',
'#title' => t('Display Contact Name'),
'#description' => t('If enabled, this static element will show the contact that has been pre-selected (or else the Create/Not Found Prompt if set). Otherwise the element will not be visible.'),
'#options' => array(
t('No'),
t('Yes'),
),
'#default_value' => $component['extra']['show_hidden_contact'],
'#parents' => array(
'extra',
'show_hidden_contact',
),
'#weight' => -5,
);
$form['display']['hide_fields'] = array(
'#type' => 'select',
'#multiple' => TRUE,
'#title' => t('Fields to Hide'),
'#default_value' => $component['extra']['hide_fields'],
'#description' => t('When an existing contact is selected, which fields should the user be allowed to edit and which should be hidden?'),
'#options' => wf_crm_contact_fields($node, $c),
'#weight' => -4,
'#parents' => array(
'extra',
'hide_fields',
),
);
$form['validation']['unique'] = array(
'#type' => 'checkbox',
'#title' => t('Unique'),
'#return_value' => 1,
'#description' => t('Require this field to be unique for every submission. The same contact may not be entered twice.'),
'#weight' => 1,
'#default_value' => $component['extra']['unique'],
'#parents' => array(
'extra',
'unique',
),
);
$form['extra']['allow_create'] = array(
'#type' => 'hidden',
'#value' => $allow_create,
);
$form['defaults'] = array(
'#type' => 'fieldset',
'#title' => t('Default value'),
'#description' => t('Should the form be pre-populated with an existing contact?<ul><li>This setting will be overridden if a contact id is passed in the url, i.e. !url</li><li>Any filters you have set will restrict this default.</li><li>If more than one contact meets the criteria, the first match will be picked. If multiple existing contact fields exist on the webform, each will select a different contact.</li></ul>', array(
'!url' => "cid{$c}=123",
)),
'#collapsible' => TRUE,
);
$form['defaults']['default'] = array(
'#type' => 'select',
'#title' => t('Set default contact from'),
'#options' => array(
'contact_id' => t('Specified Contact'),
),
'#empty_option' => t('- None -'),
'#default_value' => $component['extra']['default'],
'#parents' => array(
'extra',
'default',
),
);
if ($c == 1 && $contact_type == 'individual') {
$form['defaults']['default']['#options']['user'] = t('Current User');
}
elseif ($c > 1) {
$form['defaults']['default']['#options']['relationship'] = t('Relationship to Contact 1');
$form['defaults']['default_relationship'] = array(
'#type' => 'select',
'#multiple' => TRUE,
'#title' => t('Specify Relationship(s)'),
'#options' => array(),
'#default_value' => $component['extra']['default_relationship'],
'#parents' => array(
'extra',
'default_relationship',
),
);
$rtypes = wf_crm_get_contact_relationship_types($contact_type, $data['contact'][1]['contact'][1]['contact_type'], $data['contact'][$c]['contact'][1]['contact_sub_type'], $data['contact'][1]['contact'][1]['contact_sub_type']);
foreach ($rtypes as $k => $v) {
$form['defaults']['default_relationship']['#options'][$k] = $v . ' ' . t('Contact !num', array(
'!num' => 1,
));
}
}
$form['defaults']['default']['#options']['auto'] = t('Auto - From Filters');
$form['defaults']['default_contact_id'] = array(
'#type' => 'textfield',
'#title' => t('Contact'),
'#id' => 'default-contact-id',
'#parents' => array(
'extra',
'default_contact_id',
),
);
if ($cid = $component['extra']['default_contact_id']) {
if ($name = wf_crm_contact_access($component, array(
'check_permissions' => 1,
), $cid)) {
$form['defaults']['default_contact_id']['#default_value'] = $cid;
$form['defaults']['default_contact_id']['#attributes'] = array(
'data-civicrm-name' => $name,
'data-civicrm-id' => $cid,
);
}
}
if ($c > 1) {
$form['defaults']['dupes_allowed'] = array(
'#type' => 'checkbox',
'#title' => t('Allow Duplicate Autofill'),
'#default_value' => $component['extra']['dupes_allowed'],
'#parents' => array(
'extra',
'dupes_allowed',
),
'#description' => t('Check this box to allow a contact to be selected even if they already autofilled a prior field on the form. (For example, if contact 1 was autofilled with Bob Smith, should this field also be allowed to select Bob Smith?)'),
);
}
$form['defaults']['randomize'] = array(
'#type' => 'checkbox',
'#title' => t('Randomize'),
'#default_value' => $component['extra']['randomize'],
'#parents' => array(
'extra',
'randomize',
),
'#description' => t('Pick a contact at random if more than one meets criteria.'),
);
$form['filters'] = array(
'#type' => 'fieldset',
'#title' => t('Filters'),
'#description' => t('Only contacts meeting filter criteria will be available as select options or default value.<br />Note: Filters only apply to how a contact is chosen on the form, they do not affect how a contact is saved.'),
'#parents' => array(
'extra',
'filters',
),
'#tree' => TRUE,
'#collapsible' => TRUE,
);
if (!empty($sub_types[$contact_type])) {
$form['filters']['contact_sub_type'] = array(
'#type' => 'select',
'#title' => t('Type of @contact', array(
'@contact' => $contact_types[$contact_type],
)),
'#options' => array(
t('- Any -'),
) + $sub_types[$contact_type],
'#default_value' => $component['extra']['filters']['contact_sub_type'],
);
}
$form['filters']['group'] = array(
'#type' => 'select',
'#multiple' => TRUE,
'#title' => t('Groups'),
'#options' => wf_crm_get_options('group'),
'#default_value' => $component['extra']['filters']['group'],
'#description' => t('Listed contacts must be members of at least one of the selected groups (leave blank to not filter by group).'),
);
$form['filters']['tag'] = array(
'#type' => 'select',
'#multiple' => TRUE,
'#title' => t('Tags'),
'#options' => wf_crm_get_options('tag', array(
'entity' => 'contact',
)),
'#default_value' => $component['extra']['filters']['tag'],
'#description' => t('Listed contacts must be have at least one of the selected tags (leave blank to not filter by tag).'),
);
$form['filters']['check_permissions'] = array(
'#type' => 'checkbox',
'#title' => t('Enforce Permissions'),
'#default_value' => $component['extra']['filters']['check_permissions'],
'#description' => t('Only show contacts the acting user has permission to see in CiviCRM.') . '<br />' . t('WARNING: Keeping this option enabled is highly recommended unless you are effectively controlling access by another method.'),
);
return $form;
}