Builds a translation form element.
array $data: Data of the translation.
LocalTaskItem $item: The LocalTaskItem.
string $zebra: Tell is translation is odd or even.
array Render array with the translation element.
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 ✗ 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 ✓ 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;
}