You are here

private function AdminForm::buildActivityTab in Webform CiviCRM Integration 8.5

Activity settings

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

File

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

Class

AdminForm
@file Webform CiviCRM module's admin form.

Namespace

Drupal\webform_civicrm

Code

private function buildActivityTab() {
  $utils = \Drupal::service('webform_civicrm.utils');
  $this->form['activityTab'] = [
    '#type' => 'details',
    '#title' => t('Activities'),
    '#group' => 'webform_civicrm',
    '#attributes' => [
      'class' => [
        'civi-icon-activity',
      ],
    ],
  ];
  $num_acts = wf_crm_aval($this->data, "activity:number_of_activity", 0);
  $this->form['activityTab']["activity_number_of_activity"] = [
    '#type' => 'select',
    '#title' => t('Number of Activities'),
    '#default_value' => $num_acts,
    '#options' => range(0, $this->sets['activity']['max_instances']),
    '#prefix' => '<div class="number-of">',
    '#suffix' => '</div>',
  ];
  $this
    ->addAjaxItem("activityTab", "activity_number_of_activity", "activity");
  for ($n = 1; $n <= $num_acts; ++$n) {
    $num = "activity_activity_{$n}_fieldset";
    $this->form['activityTab']['activity'][$num] = [
      '#type' => 'fieldset',
      '#attributes' => [
        'class' => [
          'activity-wrapper',
        ],
      ],
      '#title' => t('Activity :num', [
        ':num' => $n,
      ]),
    ];
    $this->form['activityTab']['activity'][$num]["activity_{$n}_settings_existing_activity_status"] = [
      '#type' => 'select',
      '#title' => t('Update Existing Activity'),
      '#options' => [
        '' => '- ' . t('None') . ' -',
      ] + $utils
        ->wf_crm_apivalues('activity', 'getoptions', [
        'field' => 'status_id',
      ]),
      '#default_value' => wf_crm_aval($this->data, "activity:{$n}:existing_activity_status", []),
      '#multiple' => TRUE,
      '#prefix' => '<div class="float-item">',
      '#suffix' => '</div>',
    ];
    $this
      ->help($this->form['activityTab']['activity'][$num]["activity_{$n}_settings_existing_activity_status"], 'existing_activity_status');
    $this->form['activityTab']['activity'][$num]["activity_{$n}_settings_details"] = [
      '#type' => 'checkboxes',
      '#options' => [
        'entire_result' => t('Include <em>entire</em> webform submission in activity details'),
        'view_link' => t('Include link to <em>view</em> webform submission in activity details'),
        'edit_link' => t('Include link to <em>edit</em> webform submission in activity details'),
        'update_existing' => t('Update the details when an existing activity is updated'),
      ],
      '#default_value' => wf_crm_aval($this->data, "activity:{$n}:details", [
        'view_link',
      ], TRUE),
    ];
    $this->form['activityTab']['activity'][$num]['wrap'] = [];
    $wrap =& $this->form['activityTab']['activity'][$num]['wrap'];
    if (isset($this->sets['case'])) {
      $case_types = $utils
        ->wf_crm_apivalues('case', 'getoptions', [
        'field' => 'case_type_id',
      ]);
      if ($case_types) {
        $wrap['case']["activity_{$n}_settings_case_type_id"] = [
          '#type' => 'select',
          '#title' => t('File On Case'),
          '#options' => [
            t('- None -'),
          ] + $case_types,
          '#default_value' => $case_type = wf_crm_aval($this->data, "activity:{$n}:case_type_id"),
        ];

        // Allow selection of webform cases
        $num_case = wf_crm_aval($this->data, "case:number_of_case", 0);
        if ($num_case) {
          $webform_cases = [];
          for ($i = 1; $i <= $num_case; ++$i) {
            $webform_cases["#{$i}"] = t('Case :num', [
              ':num' => $i,
            ]);
          }
          $wrap['case']["activity_{$n}_settings_case_type_id"]['#options'] = [
            t('- None -'),
            'This Webform' => $webform_cases,
            'Find by Case Type' => $case_types,
          ];
        }
        $this
          ->help($wrap['case']["activity_{$n}_settings_case_type_id"], 'file_on_case');
        $this
          ->addAjaxItem("activityTab:activity:{$num}:wrap:case", "activity_{$n}_settings_case_type_id", '..:..:wrap');
        if ($case_type && $case_type[0] !== '#') {
          $wrap['case']['#type'] = 'fieldset';
          $wrap['case']['#attributes'] = [
            'class' => [
              'web-civi-checkbox-set',
            ],
          ];
          $wrap['case']['#title'] = t('File On Case');
          $wrap['case']['#description'] = t('File on existing case matching the following criteria:');
          $this
            ->help($wrap['case'], 'file_on_case');
          $wrap['case']["activity_{$n}_settings_case_type_id"]['#title'] = t('Case Type');
          $status_options = $utils
            ->wf_crm_apivalues('case', 'getoptions', [
            'field' => 'status_id',
          ]);
          $wrap['case']["activity_{$n}_settings_case_status_id"] = [
            '#type' => 'select',
            '#title' => t('Case Status'),
            '#options' => $status_options,
            '#multiple' => TRUE,
            '#attributes' => [
              'class' => [
                'required',
              ],
            ],
            '#default_value' => wf_crm_aval($this->data, "activity:{$n}:case_status_id", array_keys($status_options)),
          ];
          $wrap['case']["activity_{$n}_settings_case_contact_id"] = [
            '#type' => 'select',
            '#title' => t('Case Client'),
            '#attributes' => [
              'data-type' => 'ContactReference',
            ],
            '#options' => $this
              ->contactRefOptions(),
            '#default_value' => wf_crm_aval($this->data, "activity:{$n}:case_contact_id"),
          ];
        }
      }
    }
    $wrap[$num . '_fields'] = [
      '#type' => 'fieldset',
      '#title' => t('Activity'),
      '#attributes' => [
        'id' => $num . '_fields',
        'class' => [
          'web-civi-checkbox-set',
        ],
      ],
      'js_select' => $this
        ->addToggle($num . '_fields'),
    ];
    foreach ($this->sets['activity']['fields'] as $fid => $field) {
      if ($fid != 'activity_survey_id') {
        $fid = "civicrm_{$n}_activity_1_{$fid}";
        $wrap[$num . '_fields'][$fid] = $this
          ->addItem($fid, $field);
      }
    }
    $type = $wrap[$num . '_fields']["civicrm_{$n}_activity_1_activity_activity_type_id"]['#default_value'];
    $type = $type == 'create_civicrm_webform_element' ? 0 : $type;
    $this
      ->addAjaxItem("activityTab:activity:{$num}:wrap:{$num}_fields", "civicrm_{$n}_activity_1_activity_activity_type_id", "..:custom");

    // Add ajax survey type field
    if (isset($this->fields['activity_survey_id'])) {
      $this
        ->addAjaxItem("activityTab:activity:{$num}:wrap:{$num}_fields", "civicrm_{$n}_activity_1_activity_campaign_id", "..:custom");
      if ($type && array_key_exists($type, $utils
        ->wf_crm_get_campaign_activity_types())) {
        $this->sets['activity_survey'] = [
          'entity_type' => 'activity',
          'label' => $wrap[$num . '_fields']["civicrm_{$n}_activity_1_activity_activity_type_id"]['#options'][$type],
          'fields' => [
            'activity_survey_id' => $this->fields['activity_survey_id'],
          ],
        ];
      }
    }

    // Add custom field sets appropriate to this activity type
    foreach ($this->sets as $sid => $set) {
      if ($set['entity_type'] == 'activity' && $sid != 'activity' && (!$type || empty($set['sub_types']) || in_array($type, $set['sub_types']))) {
        $fs1 = "activity_activity_{$n}_fieldset_{$sid}";
        $wrap['custom'][$fs1] = [
          '#type' => 'fieldset',
          '#title' => $set['label'],
          '#attributes' => [
            'id' => $fs1,
            'class' => [
              'web-civi-checkbox-set',
            ],
          ],
          'js_select' => $this
            ->addToggle($fs1),
        ];
        $this
          ->addDynamicCustomSetting($wrap['custom'][$fs1], $sid, 'activity', $n);
        if (isset($set['fields'])) {
          foreach ($set['fields'] as $fid => $field) {
            $fid = "civicrm_{$n}_activity_1_{$fid}";
            $wrap['custom'][$fs1][$fid] = $this
              ->addItem($fid, $field);
          }
        }
      }
    }
  }
}