private function LocalTaskItemForm::formElement

Builds a translation form element.

Parameters

array $data: Data of the translation.

LocalTaskItem $item: The LocalTaskItem.

string $zebra: Tell is translation is odd or even.

Return value

array Render array with the translation element.

1 call to LocalTaskItemForm::formElement()
LocalTaskItemForm::form in translators/tmgmt_local/src/Form/LocalTaskItemForm.php

File

translators/tmgmt_local/src/Form/LocalTaskItemForm.php, line 189

Class

LocalTaskItemForm
Form controller for the localTaskItem edit forms.

Namespace

Drupal\tmgmt_local\Form

Code

private function formElement(array $data, LocalTaskItem $item, &$zebra) {
  static $flip = array(
    'even' => 'odd',
    'odd' => 'even',
  );
  $form = [];
  $job = $item
    ->getJobItem()
    ->getJob();
  $language_list = \Drupal::languageManager()
    ->getLanguages();
  foreach (Element::children($data) as $key) {
    if (isset($data[$key]['#text']) && \Drupal::service('tmgmt.data')
      ->filterData($data[$key])) {

      // The char sequence '][' confuses the form API so we need to replace
      // it.
      $target_key = str_replace('][', '|', $key);
      $zebra = $flip[$zebra];
      $form[$target_key] = array(
        '#tree' => TRUE,
        '#theme' => 'tmgmt_local_translation_form_element',
        '#ajaxid' => Html::getUniqueId('tmgmt-local-element-' . $key),
        '#parent_label' => $data[$key]['#parent_label'],
        '#zebra' => $zebra,
      );
      $form[$target_key]['status'] = array(
        '#theme' => 'tmgmt_local_translation_form_element_status',
        '#value' => $this->entity
          ->isCompleted() ? TMGMT_DATA_ITEM_STATE_COMPLETED : $data[$key]['#status'],
      );

      // Manage the height of the texteareas, depending on the lenght of the
      // description. The minimum number of rows is 3 and the maximum is 15.
      $rows = ceil(strlen($data[$key]['#text']) / 100);
      if ($rows < 3) {
        $rows = 3;
      }
      elseif ($rows > 15) {
        $rows = 15;
      }
      $form[$target_key]['source'] = [
        '#type' => 'textarea',
        '#value' => $data[$key]['#text'],
        '#title' => t('Source'),
        '#disabled' => TRUE,
        '#rows' => $rows,
      ];
      $form[$target_key]['translation'] = [
        '#type' => 'textarea',
        '#default_value' => isset($data[$key]['#translation']['#text']) ? $data[$key]['#translation']['#text'] : NULL,
        '#title' => t('Translation'),
        '#disabled' => !$item
          ->isPending(),
        '#rows' => $rows,
        '#allow_focus' => TRUE,
      ];
      if (!empty($data[$key]['#format']) && \Drupal::config('tmgmt.settings')
        ->get('respect_text_format') == '1') {
        $format_id = $data[$key]['#format'];

        /** @var \Drupal\filter\Entity\FilterFormat $format */
        $format = FilterFormat::load($format_id);
        if ($format && $format
          ->access('use')) {

          // In case a user has permission to translate the content using
          // selected text format, add a format id into the list of allowed
          // text formats. Otherwise, no text format will be used.
          $form[$target_key]['source']['#allowed_formats'] = [
            $format_id,
          ];
          $form[$target_key]['translation']['#allowed_formats'] = [
            $format_id,
          ];
          $form[$target_key]['source']['#type'] = 'text_format';
          $form[$target_key]['translation']['#type'] = 'text_format';
        }
      }
      $form[$target_key]['actions'] = array(
        '#type' => 'container',
        '#access' => $item
          ->isPending(),
      );
      $status = $item
        ->getData(\Drupal::service('tmgmt.data')
        ->ensureArrayKey($key), '#status');
      if ($status == TMGMT_DATA_ITEM_STATE_TRANSLATED) {
        $form[$target_key]['actions']['reject-' . $target_key] = array(
          '#type' => 'submit',
          // Unicode character &#x2717 BALLOT X.
          '#value' => '✗',
          '#attributes' => array(
            'title' => t('Reject'),
          ),
          '#name' => 'reject-' . $target_key,
          '#submit' => [
            '::save',
            '::submitStatus',
          ],
          '#ajax' => array(
            'callback' => '::ajaxReviewForm',
            'wrapper' => $form[$target_key]['#ajaxid'],
          ),
          '#tmgmt_local_action' => 'reject',
          '#tmgmt_local_key' => str_replace('][', '|', $key),
        );
      }
      else {
        $form[$target_key]['actions']['finish-' . $target_key] = array(
          '#type' => 'submit',
          // Unicode character &#x2713 CHECK MARK.
          '#value' => '✓',
          '#attributes' => array(
            'title' => t('Finish'),
          ),
          '#name' => 'finish-' . $target_key,
          '#submit' => [
            '::save',
            '::submitStatus',
          ],
          '#ajax' => array(
            'callback' => '::ajaxReviewForm',
            'wrapper' => $form[$target_key]['#ajaxid'],
          ),
          '#tmgmt_local_action' => 'finish',
          '#tmgmt_local_key' => str_replace('][', '|', $key),
        );
      }
    }
  }
  return $form;
}