You are here

public function WebformTableRow::buildHtml in Webform 6.x

Same name and namespace in other branches
  1. 8.5 src/Plugin/WebformElement/WebformTableRow.php \Drupal\webform\Plugin\WebformElement\WebformTableRow::buildHtml()

Build an element as HTML element.

Parameters

array $element: An element.

\Drupal\webform\WebformSubmissionInterface $webform_submission: A webform submission.

array $options: An array of options.

Return value

array A render array representing an element as HTML.

Overrides WebformElementBase::buildHtml

File

src/Plugin/WebformElement/WebformTableRow.php, line 81

Class

WebformTableRow
Provides a 'webform_table_row' element.

Namespace

Drupal\webform\Plugin\WebformElement

Code

public function buildHtml(array $element, WebformSubmissionInterface $webform_submission, array $options = []) {
  $webform = $webform_submission
    ->getWebform();
  $parent_key = $element['#webform_parent_key'];
  $parent_element = $webform
    ->getElement($parent_key);
  $parent_format = isset($parent_element['#format']) ? $parent_element['#format'] : 'table';

  // Remove #states.
  unset($element['#states']);
  switch ($parent_format) {
    case 'details-closed':
    case 'details':
    case 'fieldset':
      $webform_plugin_id = $parent_format === 'details-closed' ? 'details' : $parent_format;
      $element['#webform_plugin_id'] = $webform_plugin_id;
      $element['#type'] = $webform_plugin_id;
      $element['#format_item'] = $parent_format;
      $element_plugin = $this->elementManager
        ->getElementInstance($element);
      return $element_plugin
        ->buildHtml($element, $webform_submission, $options);
    case 'table':
    default:
      foreach ($element as $column_key => $column_element) {
        if (WebformElementHelper::property($column_key)) {
          continue;
        }
        $column_element_plugin = $this->elementManager
          ->getElementInstance($column_element);
        if ($column_element_plugin
          ->isContainer($column_element)) {
          $column_build = $column_element_plugin
            ->buildHtml($column_element, $webform_submission, $options);
          $element[$column_key] = [
            'data' => $column_build,
          ];
        }
        elseif (!$column_element_plugin
          ->isInput($column_element)) {
          $element[$column_key] = [
            'data' => $column_element,
          ];
        }
        else {
          $column_value = $column_element_plugin
            ->format('html', $column_element, $webform_submission, $options);
          $element[$column_key] = is_array($column_value) ? [
            'data' => $column_value,
          ] : [
            'data' => [
              '#markup' => $column_value,
            ],
          ];
        }
      }
      return $element;
  }
}