View source
<?php
namespace Drupal\Pardot\Form;
use Drupal\Core\Form\ConfigFormBase;
use Drupal\Core\Config\ConfigFactoryInterface;
use Drupal\Core\Executable\ExecutableManagerInterface;
use Drupal\Component\Utility\Html;
use Drupal\Core\Form\FormStateInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
class PardotSettingsForm extends ConfigFormBase {
protected $settings;
protected $path_condition;
protected $user_role_condition;
public function __construct(ConfigFactoryInterface $config_factory, ExecutableManagerInterface $plugin_factory) {
parent::__construct($config_factory);
$this->settings = $this
->config('pardot.settings');
$this->path_condition = $plugin_factory
->createInstance('request_path');
$this->user_role_condition = $plugin_factory
->createInstance('user_role');
}
public static function create(ContainerInterface $container) {
return new static($container
->get('config.factory'), $container
->get('plugin.manager.condition'));
}
public function getFormId() {
return 'pardot_settings_form';
}
protected function getEditableConfigNames() {
return array(
'pardot.settings',
);
}
public function buildForm(array $form, FormStateInterface $form_state) {
$form['pardot_settings'] = array(
'#type' => 'details',
'#title' => $this
->t('General Settings'),
'#description' => $this
->t('General settings applicable to all Pardot functionality.'),
'#open' => TRUE,
);
$form['pardot_settings']['account_id'] = array(
'#type' => 'textfield',
'#title' => $this
->t('Pardot Account ID'),
'#description' => $this
->t('The value shown in the Pardot demo script for piAId. eg. if the script has piAId = "1001"; this field should be 1001.'),
'#required' => TRUE,
'#size' => 20,
'#maxlength' => 64,
'#default_value' => $this->settings
->get('account_id'),
);
$form['pardot_settings']['default_campaign_id'] = array(
'#type' => 'textfield',
'#title' => $this
->t('Default Pardot Campaign ID'),
'#description' => $this
->t('The value shown in the Pardot demo script for piCId. eg. if the script has piCId = "1001"; this field should be 1001.'),
'#required' => TRUE,
'#size' => 20,
'#maxlength' => 64,
'#default_value' => $this->settings
->get('default_campaign_id'),
);
$form['tracking_scope'] = array(
'#type' => 'item',
'#title' => $this
->t('Tracking scope'),
'#description' => $this
->t('Configuration to include/exclude the Pardot tracking code. The tracking code, with default Campaign ID, will be added to the site paths according to this configuration. Additional campaigns can be added to override the default campaign on specific paths included within this configuration.'),
);
$form['tracking_scope_tabs'] = array(
'#type' => 'vertical_tabs',
'#title' => $this
->t('Tracking Scope Conditions'),
'#title_display' => 'invisible',
'#default_tab' => 'pages',
);
$this->path_condition
->setConfiguration($this->settings
->get('path_condition'));
$form += $this->path_condition
->buildConfigurationForm($form, $form_state);
if (isset($form['pages'])) {
$form['pages']['pages'] = $form['pages'];
$form['pages']['negate'] = $form['negate'];
unset($form['pages']['#description']);
unset($form['negate']);
$form['pages']['#type'] = 'details';
$form['pages']['#group'] = 'tracking_scope_tabs';
$form['pages']['#title'] = $this
->t('Pages');
$form['pages']['negate']['#type'] = 'radios';
$form['pages']['negate']['#title_display'] = 'invisible';
$form['pages']['negate']['#options'] = array(
$this
->t('Show for the listed pages'),
$this
->t('Hide for the listed pages'),
);
$form['pages']['negate']['#default_value'] = (int) $form['pages']['negate']['#default_value'];
}
$this->user_role_condition
->setConfiguration($this->settings
->get('user_role_condition'));
$form += $this->user_role_condition
->buildConfigurationForm($form, $form_state);
if (isset($form['roles'])) {
$form['roles']['roles'] = $form['roles'];
$form['roles']['negate'] = $form['negate'];
unset($form['roles']['#description']);
unset($form['negate']);
$form['roles']['#type'] = 'details';
$form['roles']['#group'] = 'tracking_scope_tabs';
$form['roles']['#title'] = $this
->t('Roles');
$form['roles']['negate']['#type'] = 'value';
$form['roles']['negate']['#default_value'] = FALSE;
}
return parent::buildForm($form, $form_state);
}
public function validateForm(array &$form, FormStateInterface $form_state) {
$paths = explode("\r\n", $form_state
->getValue('pages'));
foreach ($paths as $path) {
if (empty($path) || $path === '<front>' || strpos($path, '/') === 0) {
continue;
}
else {
$message = $this
->t('Paths require a leading forward slash when used with the Tracking Scope Pages setting.');
$form_state
->setErrorByName('pages', $message);
return;
}
}
parent::validateForm($form, $form_state);
}
public function submitForm(array &$form, FormStateInterface $form_state) {
$this->path_condition
->submitConfigurationForm($form, $form_state);
$this->user_role_condition
->submitConfigurationForm($form, $form_state);
$this
->config('pardot.settings')
->set('account_id', Html::escape($form_state
->getValue('account_id')))
->set('default_campaign_id', Html::escape($form_state
->getValue('default_campaign_id')))
->set('path_condition', $this->path_condition
->getConfiguration())
->set('user_role_condition', $this->user_role_condition
->getConfiguration())
->save();
parent::submitForm($form, $form_state);
}
}