You are here

public function ShowForm::buildForm in Ubercart 8.4

Form constructor.

Parameters

array $form: An associative array containing the structure of the form.

\Drupal\Core\Form\FormStateInterface $form_state: The current state of the form.

Return value

array The form structure.

Overrides FormInterface::buildForm

File

uc_file/src/Form/ShowForm.php, line 57

Class

ShowForm
Displays all files that may be purchased and downloaded for administration.

Namespace

Drupal\uc_file\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
  $form['#tree'] = TRUE;
  $form['#attached']['library'][] = 'uc_file/uc_file.styles';
  $header = [
    'filename' => [
      'data' => $this
        ->t('File'),
      'field' => 'f.filename',
      'sort' => 'asc',
    ],
    'title' => [
      'data' => $this
        ->t('Product'),
      'field' => 'n.title',
    ],
    'model' => [
      'data' => $this
        ->t('SKU'),
      'field' => 'fp.model',
    ],
  ];

  // Create pager.
  $query = \Drupal::database()
    ->select('uc_files', 'f')
    ->extend('Drupal\\Core\\Database\\Query\\PagerSelectExtender')
    ->extend('Drupal\\Core\\Database\\Query\\TableSortExtender')
    ->orderByHeader($header)
    ->limit(UC_FILE_PAGER_SIZE);
  $query
    ->leftJoin('uc_file_products', 'fp', 'f.fid = fp.fid');
  $query
    ->leftJoin('uc_product_features', 'pf', 'fp.pfid = pf.pfid');
  $query
    ->leftJoin('node_field_data', 'n', 'pf.nid = n.nid');
  $query
    ->addField('n', 'nid');
  $query
    ->addField('f', 'filename');
  $query
    ->addField('n', 'title');
  $query
    ->addField('fp', 'model');
  $query
    ->addField('f', 'fid');
  $query
    ->addField('pf', 'pfid');
  $count_query = \Drupal::database()
    ->select('uc_files');
  $count_query
    ->addExpression('COUNT(*)');
  $query
    ->setCountQuery($count_query);
  $result = $query
    ->execute();
  $options = [];
  foreach ($result as $file) {

    // All files are shown here, including files which are not attached
    // to products.
    if (isset($file->nid)) {
      $options[$file->fid] = [
        'filename' => [
          'data' => [
            '#plain_text' => $file->filename,
          ],
          'class' => is_dir(uc_file_qualify_file($file->filename)) ? [
            'uc-file-directory-view',
          ] : [],
        ],
        'title' => [
          'data' => [
            '#type' => 'link',
            '#title' => $file->title,
            '#url' => Url::fromRoute('entity.node.canonical', [
              'node' => $file->nid,
            ]),
          ],
        ],
        'model' => [
          'data' => [
            '#plain_text' => $file->model,
          ],
        ],
      ];
    }
    else {
      $options[$file->fid] = [
        'filename' => [
          'data' => [
            '#plain_text' => $file->filename,
          ],
          'class' => is_dir(uc_file_qualify_file($file->filename)) ? [
            'uc-file-directory-view',
          ] : [],
        ],
        'title' => '',
        'model' => '',
      ];
    }
  }

  // Create checkboxes for each file.
  $form['file_select'] = [
    '#type' => 'tableselect',
    '#header' => $header,
    '#options' => $options,
    '#empty' => $this
      ->t('No file downloads available.'),
  ];
  $form['uc_file_action'] = [
    '#type' => 'details',
    '#title' => $this
      ->t('File options'),
    '#open' => TRUE,
  ];

  // Set our default actions.
  $file_actions = [
    'uc_file_upload' => $this
      ->t('Upload file'),
    'uc_file_delete' => $this
      ->t('Delete file(s)'),
  ];

  // Check if any hook_uc_file_action('info', $args) are implemented.
  foreach ($this->moduleHandler
    ->getImplementations('uc_file_action') as $module) {
    $name = $module . '_uc_file_action';
    $result = $name('info', NULL);
    if (is_array($result)) {
      foreach ($result as $key => $action) {
        if ($key != 'uc_file_delete' && $key != 'uc_file_upload') {
          $file_actions[$key] = $action;
        }
      }
    }
  }
  $form['uc_file_action']['action'] = [
    '#type' => 'select',
    '#title' => $this
      ->t('Action'),
    '#prefix' => '<div class="duration">',
    '#options' => $file_actions,
    '#suffix' => '</div>',
  ];
  $form['uc_file_actions']['actions'] = [
    '#type' => 'actions',
  ];
  $form['uc_file_action']['actions']['submit'] = [
    '#type' => 'submit',
    '#prefix' => '<div class="duration">',
    '#value' => $this
      ->t('Perform action'),
    '#suffix' => '</div>',
  ];
  return $form;
}