You are here

private function AdminForm::buildCaseTab in Webform CiviCRM Integration 8.5

Case settings FIXME: This is exactly the same code as buildGrantTab. More utilities and less boilerplate needed.

1 call to AdminForm::buildCaseTab()
AdminForm::buildForm in src/AdminForm.php
Build admin form for civicrm tab of a webform

File

src/AdminForm.php, line 656
Webform CiviCRM module's admin form.

Class

AdminForm
@file Webform CiviCRM module's admin form.

Namespace

Drupal\webform_civicrm

Code

private function buildCaseTab() {
  $utils = \Drupal::service('webform_civicrm.utils');
  $types = $utils
    ->wf_crm_apivalues('case', 'getoptions', [
    'field' => 'case_type_id',
  ]);
  if (!$types) {
    return;
  }
  $this->form['caseTab'] = [
    '#type' => 'details',
    '#title' => t('Cases'),
    '#group' => 'webform_civicrm',
    '#attributes' => [
      'class' => [
        'civi-icon-case',
      ],
    ],
  ];
  $this->form['caseTab']["case_number_of_case"] = [
    '#type' => 'select',
    '#title' => t('Number of Cases'),
    '#default_value' => $num = wf_crm_aval($this->data, "case:number_of_case", 0),
    '#options' => range(0, $this->sets['case']['max_instances']),
    '#prefix' => '<div class="number-of">',
    '#suffix' => '</div>',
  ];
  $this
    ->addAjaxItem("caseTab", "case_number_of_case", "case");
  for ($n = 1; $n <= $num; ++$n) {
    $fs = "case_case_{$n}_fieldset";
    $this->form['caseTab']['case'][$fs] = [
      '#type' => 'fieldset',
      '#title' => t('Case :num', [
        ':num' => $n,
      ]),
      'wrap' => [
        '#weight' => 9,
      ],
    ];
    $this->form['caseTab']['case'][$fs]["case_{$n}_settings_existing_case_status"] = [
      '#type' => 'select',
      '#title' => t('Update Existing Case'),
      '#options' => [
        '' => '- ' . t('None') . ' -',
      ] + $utils
        ->wf_crm_apivalues('case', 'getoptions', [
        'field' => 'status_id',
      ]),
      '#default_value' => wf_crm_aval($this->data, "case:{$n}:existing_case_status", []),
      '#multiple' => TRUE,
    ];
    $this
      ->help($this->form['caseTab']['case'][$fs]["case_{$n}_settings_existing_case_status"], 'existing_case_status');
    $this->form['caseTab']['case'][$fs]["case_{$n}_settings_duplicate_case"] = [
      '#type' => 'checkbox',
      '#title' => t('Create new case based on existing case'),
      '#default_value' => wf_crm_aval($this->data, "case:{$n}:duplicate_case", 0),
    ];
    $this
      ->help($this->form['caseTab']['case'][$fs]["case_{$n}_settings_duplicate_case"], 'duplicate_case_status');
    $case_type = wf_crm_aval($this->data, "case:{$n}:case:1:case_type_id");
    foreach ($this
      ->filterCaseSets($case_type) as $sid => $set) {
      $fs1 = "case_case_{$n}_fieldset_{$sid}";
      if ($sid == 'case') {
        $pos =& $this->form['caseTab']['case'][$fs];
      }
      else {
        $pos =& $this->form['caseTab']['case'][$fs]['wrap'];
      }
      $pos[$fs1] = [
        '#type' => 'fieldset',
        '#title' => $set['label'],
        '#attributes' => [
          'id' => $fs1,
          'class' => [
            'web-civi-checkbox-set',
          ],
        ],
        'js_select' => $this
          ->addToggle($fs1),
      ];
      $this
        ->addDynamicCustomSetting($pos[$fs1], $sid, 'case', $n);
      if (isset($set['fields'])) {
        foreach ($set['fields'] as $fid => $field) {
          $fid = "civicrm_{$n}_case_1_{$fid}";
          if (!$case_type || empty($field['case_types']) || in_array($case_type, $field['case_types'])) {
            $pos[$fs1][$fid] = $this
              ->addItem($fid, $field);
          }
        }
      }
    }
    $this
      ->addAjaxItem("caseTab:case:{$fs}:case_case_{$n}_fieldset_case", "civicrm_{$n}_case_1_case_case_type_id", "..:wrap");
  }
}