public function PardotContactFormMapFormBase::buildForm in Pardot Integration 8
Overrides Drupal\Core\Entity\EntityFormController::form().
Builds the entity add/edit form.
Parameters
array $form: An associative array containing the structure of the form.
array $form_state: An associative array containing the current state of the form.
Return value
array An associative array containing the campaign add/edit form.
Overrides EntityForm::buildForm
File
- src/
Form/ PardotContactFormMapFormBase.php, line 80
Class
- PardotContactFormMapFormBase
- Class PardotContactFormMapFormBase.
Namespace
Drupal\pardot\FormCode
public function buildForm(array $form, FormStateInterface $form_state) {
$form = parent::buildForm($form, $form_state);
// @Todo: Set defaults from config entity $mapping.
$mapping = $this->entity;
// Build the form.
$form['label'] = array(
'#type' => 'textfield',
'#title' => $this
->t('Label'),
'#maxlength' => 255,
'#default_value' => $mapping
->label(),
'#required' => TRUE,
);
$form['id'] = array(
'#type' => 'machine_name',
'#title' => $this
->t('Machine name'),
'#default_value' => $mapping
->id(),
'#machine_name' => array(
'exists' => array(
$this,
'exists',
),
'replace_pattern' => '([^a-z0-9_]+)|(^custom$)',
'error' => 'The machine-readable name must be unique, and can only contain lowercase letters, numbers, and underscores. Additionally, it can not be the reserved word "custom".',
),
'#disabled' => !$mapping
->isNew(),
);
$form['status'] = array(
'#title' => 'Is active',
'#type' => 'checkbox',
'#default_value' => $mapping->status,
);
$form['post_url'] = array(
'#title' => 'Post url',
'#type' => 'textfield',
'#default_value' => $mapping->post_url,
'#description' => $this
->t('Visit your "Form Handlers" page in Pardot. Click on a form link and then copy the "Endpoint URL" value here.'),
);
// Provide contact_form config entities as options.
$options = array();
$contact_storage = $this->entityTypeManager
->getStorage('contact_form');
$contact_forms = $contact_storage
->loadMultiple();
// @Todo: Remove options that are already configured, set help text w/
// those already set.
foreach ($contact_forms as $contact_form) {
$options[$contact_form
->id()] = $contact_form
->label();
}
// Disable caching on this form.
$form_state
->setCached(FALSE);
$form['contact_form_id'] = array(
'#type' => 'select',
'#title' => $this
->t('Contact Form'),
'#options' => $options,
'#default_value' => $mapping->contact_form_id,
'#required' => TRUE,
'#ajax' => array(
'callback' => '::updateMapSettings',
'wrapper' => 'pardot-form-mapping-wrapper',
'effect' => 'fade',
'progress' => array(
'type' => 'throbber',
'message' => t('Loading the field mapping table...'),
),
),
'#disabled' => !$mapping
->isNew(),
);
// Add target element for ajax callback.
$form['container'] = array(
'#type' => 'container',
'#attributes' => array(
'id' => 'pardot-form-mapping-wrapper',
),
);
// When editing or when rebuilding form after ajax callback, add mapping
// table element with selected form field definitions.
if (isset($mapping->contact_form_id)) {
$bundle = $mapping->contact_form_id;
}
elseif ($form_state
->getValue('contact_form_id') !== NULL) {
$bundle = $form_state
->getValue('contact_form_id');
}
else {
$bundle = NULL;
}
if (isset($bundle)) {
$bundle_fields = array();
$field_definitions = $this->entityFieldManager
->getFieldDefinitions('contact_message', $bundle);
foreach ($field_definitions as $field_name => $field_definition) {
$bundle_fields[] = array(
'field_label' => (string) $field_definition
->getLabel(),
'field_name' => $field_definition
->getName(),
'field_type' => $field_definition
->getType(),
);
}
$header = array(
'field_label' => $this
->t('Field Label'),
'field_name' => $this
->t('Field Name'),
'field_type' => $this
->t('Field Type'),
'pardot_key' => $this
->t('Pardot External Field Name'),
);
$form['container']['mapped_fields'] = array(
'#type' => 'table',
'#caption' => $this
->t('Add Pardot External Field Names to map contact form elements.'),
'#header' => $header,
'#tree' => TRUE,
);
// Generate tables rows.
foreach ($bundle_fields as $field) {
$form['container']['mapped_fields'][$field['field_name']]['field_label'] = array(
'#plain_text' => $field['field_label'],
);
$form['container']['mapped_fields'][$field['field_name']]['field_name'] = array(
'#plain_text' => $field['field_name'],
);
$form['container']['mapped_fields'][$field['field_name']]['field_type'] = array(
'#plain_text' => $field['field_type'],
);
$form['container']['mapped_fields'][$field['field_name']]['pardot_key'] = array(
'#type' => 'textfield',
'#title' => $this
->t('Pardot External Field Name'),
'#title_display' => 'invisible',
'#default_value' => isset($mapping->mapped_fields[$field['field_name']]) ? $mapping->mapped_fields[$field['field_name']] : NULL,
);
}
}
return $form;
}