public function CampaignMonitorListSettingsForm::buildForm in Campaign Monitor 8.2
Same name and namespace in other branches
- 8 src/Form/CampaignMonitorListSettingsForm.php \Drupal\campaignmonitor\Form\CampaignMonitorListSettingsForm::buildForm()
Form constructor.
Parameters
array $form: An associative array containing the structure of the form.
\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.
Return value
array The form structure.
Overrides ConfigFormBase::buildForm
File
- src/
Form/ CampaignMonitorListSettingsForm.php, line 106
Class
- CampaignMonitorListSettingsForm
- Configure campaignmonitor settings for this site.
Namespace
Drupal\campaignmonitor\FormCode
public function buildForm(array $form, FormStateInterface $form_state, $list_id = NULL) {
$form = [
'#tree' => TRUE,
];
// Reset lists so that we can make changes with this form.
// This will ensure that settings come direct from CM and not cache.
$this->campaignMonitorManager
->getLists([], TRUE);
$defaults = $this->campaignMonitorManager
->getListSettings($list_id);
$list = $this->campaignMonitorManager
->getExtendedList($list_id);
// Add list id to the form.
$form['listId'] = [
'#type' => 'hidden',
'#value' => $list_id,
];
// Set this form name (index).
$form_key = 'campaignmonitor_list_' . $list_id;
$form[$form_key]['status'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Enable list'),
'#description' => $this
->t('Enable the list to configure it and use it on the site.'),
'#collapsible' => FALSE,
'#collapsed' => FALSE,
];
$form[$form_key]['status']['enabled'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Enable'),
'#default_value' => isset($defaults['status']['enabled']) ? $defaults['status']['enabled'] : 0,
'#attributes' => [
'class' => [
'enabled-list-checkbox',
],
],
];
$form[$form_key]['options'] = [
'#type' => 'fieldset',
'#title' => $this
->t('List options'),
'#description' => $this
->t('Changing the values will result in an update of the values on the Campaign Monitor homepage.'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#states' => [
'visible' => [
'.enabled-list-checkbox' => [
'checked' => TRUE,
],
],
],
];
$form[$form_key]['options']['listname'] = [
'#type' => 'textfield',
'#title' => $this
->t('List name'),
'#default_value' => $list['name'],
'#required' => TRUE,
'#states' => [
'visible' => [
':input[name="status[enabled]"]' => [
'checked' => TRUE,
],
],
],
];
$form[$form_key]['options']['UnsubscribePage'] = [
'#type' => 'textfield',
'#title' => $this
->t('Unsubscribe page'),
'#default_value' => $list['details']['UnsubscribePage'],
];
$form[$form_key]['options']['ConfirmationSuccessPage'] = [
'#type' => 'textfield',
'#title' => $this
->t('Confirmation success page'),
'#default_value' => $list['details']['ConfirmationSuccessPage'],
];
$form[$form_key]['options']['ConfirmedOptIn'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Confirmed Opt In'),
'#description' => $this
->t('Selecting this will mean that subscribers will need to confirm their email each time they
subscribe to the list'),
'#default_value' => $list['details']['ConfirmedOptIn'],
];
$form[$form_key]['display'] = [
'#type' => 'fieldset',
'#title' => $this
->t('Display options'),
'#collapsible' => TRUE,
'#collapsed' => FALSE,
'#states' => [
'visible' => [
'.enabled-list-checkbox' => [
'checked' => TRUE,
],
],
],
];
$form[$form_key]['display']['name'] = [
'#type' => 'checkbox',
'#title' => $this
->t('Display Name field'),
'#description' => $this
->t('Whether the Name field should be displayed when subscribing.'),
'#default_value' => isset($defaults['display']['name']) ? $defaults['display']['name'] : 0,
'#attributes' => [
'class' => [
'tokenable',
'tokenable-name',
],
],
];
$form[$form_key]['display']['description'] = [
'#type' => 'textarea',
'#title' => $this
->t('Description'),
'#description' => $this
->t('A description to accompany the list in forms.'),
'#default_value' => isset($defaults['display']['description']) ? $defaults['display']['description'] : '',
'#attributes' => [
'class' => [
'tokenable',
'tokenable-description',
],
],
];
$field_map = $this->entityFieldManager
->getFieldMap();
$user_field_map = $field_map['user'];
$user_fields = array_keys($user_field_map);
array_unshift($user_fields, 'None');
foreach ($user_fields as $key => $user_field) {
unset($user_fields[$key]);
$user_fields[$user_field] = $user_field;
}
if (!empty($list['CustomFields'])) {
$options = [];
foreach ($list['CustomFields'] as $key => $field) {
// Form API can't handle keys with [] in all cases.
$token_form_key = str_replace([
'[',
']',
], '', $key);
$user_fields[$token_form_key] = 'Custom Field: ' . $field['FieldName'];
}
}
$form[$form_key]['display']['fname_field'] = [
'#type' => 'select',
'#options' => $user_fields,
'#title' => $this
->t('First name field'),
'#description' => $this
->t('The name that will be used by Campaign Monitor as a salutation in emails sent out. If using custom fields, they will not appear unless selected in custom field config below.'),
'#default_value' => isset($defaults['display']['fname_field']) ? $defaults['display']['fname_field'] : 0,
];
$form[$form_key]['display']['lname_field'] = [
'#type' => 'select',
'#options' => $user_fields,
'#title' => $this
->t('Last name field'),
'#description' => $this
->t('The name that will be used by Campaign Monitor as a salutation in emails sent out. If using custom fields, they will not appear unless selected in custom field config below or none to leave empty.'),
'#default_value' => isset($defaults['display']['lname_field']) ? $defaults['display']['lname_field'] : 0,
];
// List custom fields.
if (!empty($list['CustomFields'])) {
$options = [];
foreach ($list['CustomFields'] as $key => $field) {
// Form API can't handle keys with [] in all cases.
$token_form_key = str_replace([
'[',
']',
], '', $key);
$options[$token_form_key] = $field['FieldName'];
}
$form[$form_key]['CustomFields'] = [
'#type' => 'table',
'#caption' => $this
->t('Custom fields - drag to arrange order'),
'#header' => [
$this
->t('Include'),
$this
->t('Require'),
$this
->t('Weight'),
],
'#empty' => $this
->t('No items.'),
'#tableselect' => FALSE,
'#tabledrag' => [
[
'action' => 'order',
'relationship' => 'sibling',
'group' => 'group-order-weight',
],
],
'#states' => [
'visible' => [
'.enabled-list-checkbox' => [
'checked' => TRUE,
],
],
],
];
// Use defaults if exists to get the order correct.
if (isset($defaults['CustomFields'])) {
$new_options = [];
foreach ($defaults['CustomFields'] as $key => $values) {
$new_options[$key] = $options[$key];
}
$options = $new_options;
}
foreach ($options as $key => $option) {
$form[$form_key]['CustomFields'][$key]['#attributes']['class'][] = 'draggable';
$form[$form_key]['CustomFields'][$key]['#weight'] = $defaults['CustomFields'][$key]['weight'];
$form[$form_key]['CustomFields'][$key]['selected'] = [
'#type' => 'checkbox',
'#title' => $option,
'#default_value' => isset($defaults['CustomFields'][$key]['selected']) ? $defaults['CustomFields'][$key]['selected'] : 0,
'#attributes' => [
'class' => [
'tokenable',
'tokenable-custom-fields',
],
],
];
$form[$form_key]['CustomFields'][$key]['required'] = [
'#type' => 'checkbox',
'#title' => $option,
'#default_value' => isset($defaults['CustomFields'][$key]['required']) ? $defaults['CustomFields'][$key]['required'] : 0,
];
$form[$form_key]['CustomFields'][$key]['weight'] = [
'#type' => 'weight',
'#title' => $this
->t('Weight for @title', [
'@title' => $option,
]),
'#title_display' => 'invisible',
'#default_value' => isset($defaults['CustomFields'][$key]['weight']) ? $defaults['CustomFields'][$key]['weight'] : 0,
'#attributes' => [
'class' => [
'group-order-weight',
],
],
];
}
}
return parent::buildForm($form, $form_state);
}