You are here

public function SettingsForm::buildForm in Entity Share Cron 8.2

Same name and namespace in other branches
  1. 8 src/Form/SettingsForm.php \Drupal\entity_share_cron\Form\SettingsForm::buildForm()
  2. 3.0.x src/Form/SettingsForm.php \Drupal\entity_share_cron\Form\SettingsForm::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/SettingsForm.php, line 67

Class

SettingsForm
Module settings form.

Namespace

Drupal\entity_share_cron\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $config = $this
    ->config('entity_share_cron.settings');
  $form['cron_interval'] = [
    '#type' => 'number',
    '#title' => $this
      ->t('Execution interval'),
    '#description' => $this
      ->t('Minimum interval between consecutive executions in seconds.'),
    '#min' => 60,
    '#step' => 60,
    '#default_value' => $config
      ->get('cron_interval'),
  ];
  $form['remotes'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Enabled remotes and channels'),
    '#description' => $this
      ->t('Only selected remotes and channels will be synchronized on Cron executions. For each channel you may select which operations can be performed on synchronization.'),
    '#tree' => TRUE,
  ];
  $remotes_config = $config
    ->get('remotes');
  foreach (Remote::loadMultiple() as $remote_id => $remote) {
    $remote_config = isset($remotes_config[$remote_id]) ? $remotes_config[$remote_id] : [];

    // Adds a checkbox to enable/disable remote synchronization.
    $form['remotes'][$remote_id] = [
      '#type' => 'container',
    ];
    $remote_enabled_default = !empty($remote_config['enabled']);
    $form['remotes'][$remote_id]['enabled'] = [
      '#type' => 'checkbox',
      '#title' => $remote
        ->label(),
      '#default_value' => $remote_enabled_default,
      '#ajax' => [
        'callback' => [
          $this,
          'remoteCheckboxCallback',
        ],
        'wrapper' => "channels-{$remote_id}",
      ],
    ];
    $form['remotes'][$remote_id]['channels'] = [
      '#type' => 'container',
      '#prefix' => "<div id='channels-{$remote_id}' class='channels-container'>",
      '#suffix' => '</div>',
    ];
    $remote_enabled = $form_state
      ->getValue([
      'remotes',
      $remote_id,
      'enabled',
    ]);
    if (!isset($remote_enabled) && $remote_enabled_default || $remote_enabled) {
      try {
        $channels = $this->remoteManager
          ->getChannelsInfos($remote);
      } catch (ClientException $e) {
        $channels = [];
        watchdog_exception('entity_share_cron', $e);
        $this
          ->messenger()
          ->addError($this
          ->t('Could not get channels from remote %remote.', [
          '%remote' => $remote
            ->label(),
        ]));
      }
      foreach ($channels as $channel_id => $channel_info) {

        // Channel settings.
        $channel_config = isset($remote_config['channels'][$channel_id]) ? $remote_config['channels'][$channel_id] : [];
        $form['remotes'][$remote_id]['channels'][$channel_id] = [
          '#type' => 'container',
        ];
        $form['remotes'][$remote_id]['channels'][$channel_id]['enabled'] = [
          '#type' => 'checkbox',
          '#title' => $channel_info['label'],
          '#default_value' => !empty($channel_config['enabled']),
        ];
        $form['remotes'][$remote_id]['channels'][$channel_id]['operations'] = [
          '#type' => 'container',
          '#attributes' => [
            'class' => [
              'channel-operations',
            ],
          ],
          '#states' => [
            'visible' => [
              ':input[name="remotes[$remote_id][channels][$channel_id][enabled]"]' => [
                'checked' => TRUE,
              ],
            ],
          ],
        ];
        $form['remotes'][$remote_id]['channels'][$channel_id]['operations']['create'] = [
          '#type' => 'checkbox',
          '#title' => $this
            ->t('Create'),
          '#default_value' => isset($channel_config['operations']['create']) ? $channel_config['operations']['create'] : TRUE,
        ];
        $form['remotes'][$remote_id]['channels'][$channel_id]['operations']['update'] = [
          '#type' => 'checkbox',
          '#title' => $this
            ->t('Update'),
          '#default_value' => isset($channel_config['operations']['update']) ? $channel_config['operations']['update'] : TRUE,
        ];
        $form['remotes'][$remote_id]['channels'][$channel_id]['url'] = [
          '#type' => 'hidden',
          '#value' => $channel_info['url'],
        ];
        $form['remotes'][$remote_id]['channels'][$channel_id]['url_uuid'] = [
          '#type' => 'hidden',
          '#value' => $channel_info['url_uuid'],
        ];
      }
    }
  }
  $form['#attached']['library'][] = 'entity_share_cron/settings_form';
  return parent::buildForm($form, $form_state);
}