You are here

public function ImceProfileForm::form in IMCE 8

Same name and namespace in other branches
  1. 8.2 src/Form/ImceProfileForm.php \Drupal\imce\Form\ImceProfileForm::form()

Gets the actual form array to be built.

Overrides EntityForm::form

See also

\Drupal\Core\Entity\EntityForm::processForm()

\Drupal\Core\Entity\EntityForm::afterBuild()

File

src/Form/ImceProfileForm.php, line 55

Class

ImceProfileForm
Base form for Imce Profile entities.

Namespace

Drupal\imce\Form

Code

public function form(array $form, FormStateInterface $form_state) {

  /**
   * @var \Drupal\imce\Entity\ImceProfile
   */
  $imce_profile = $this
    ->getEntity();

  // Check duplication.
  if ($this
    ->getOperation() === 'duplicate') {
    $imce_profile = $imce_profile
      ->createDuplicate();
    $imce_profile
      ->set('label', $this
      ->t('Duplicate of @label', [
      '@label' => $imce_profile
        ->label(),
    ]));
    $this
      ->setEntity($imce_profile);
  }

  // Label.
  $form['label'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Name'),
    '#default_value' => $imce_profile
      ->label(),
    '#maxlength' => 64,
    '#required' => TRUE,
    '#weight' => -20,
  ];

  // Id.
  $form['id'] = [
    '#type' => 'machine_name',
    '#machine_name' => [
      'exists' => [
        get_class($imce_profile),
        'load',
      ],
      'source' => [
        'label',
      ],
    ],
    '#default_value' => $imce_profile
      ->id(),
    '#maxlength' => 32,
    '#required' => TRUE,
    '#weight' => -20,
  ];

  // Description.
  $form['description'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Description'),
    '#default_value' => $imce_profile
      ->get('description'),
    '#weight' => -10,
  ];

  // Conf.
  $conf = [
    '#tree' => TRUE,
  ];

  // Extensions.
  $conf['extensions'] = [
    '#type' => 'textfield',
    '#title' => $this
      ->t('Allowed file extensions'),
    '#default_value' => $imce_profile
      ->getConf('extensions'),
    '#maxlength' => 255,
    '#description' => $this
      ->t('Separate extensions with a space, and do not include the leading dot.') . ' ' . $this
      ->t('Set to * to allow all extensions.'),
    '#weight' => -9,
  ];

  // File size.
  $maxsize = Environment::getUploadMaxSize();
  $conf['maxsize'] = [
    '#type' => 'number',
    '#min' => 0,
    '#max' => ceil($maxsize / 1024 / 1024),
    '#step' => 'any',
    '#size' => 8,
    '#title' => $this
      ->t('Maximum file size'),
    '#default_value' => $imce_profile
      ->getConf('maxsize'),
    '#description' => $this
      ->t('Maximum allowed file size per upload.') . ' ' . $this
      ->t('Your PHP settings limit the upload size to %size.', [
      '%size' => format_size($maxsize),
    ]),
    '#field_suffix' => $this
      ->t('MB'),
    '#weight' => -8,
  ];

  // Quota.
  $conf['quota'] = [
    '#type' => 'number',
    '#min' => 0,
    '#step' => 'any',
    '#size' => 8,
    '#title' => $this
      ->t('Disk quota'),
    '#default_value' => $imce_profile
      ->getConf('quota'),
    '#description' => $this
      ->t('Maximum disk space that can be allocated by a user.'),
    '#field_suffix' => $this
      ->t('MB'),
    '#weight' => -7,
  ];

  // Image dimensions.
  $conf['dimensions'] = [
    '#type' => 'container',
    '#attributes' => [
      'class' => [
        'dimensions-wrapper form-item',
      ],
    ],
    '#weight' => -6,
  ];
  $conf['dimensions']['label'] = [
    '#markup' => '<label>' . $this
      ->t('Maximum image dimensions') . '</label>',
  ];
  $conf['dimensions']['maxwidth'] = [
    '#type' => 'number',
    '#default_value' => $imce_profile
      ->getConf('maxwidth'),
    '#maxlength' => 5,
    '#min' => 0,
    '#size' => 8,
    '#placeholder' => $this
      ->t('Width'),
    '#field_suffix' => ' x ',
    '#parents' => [
      'conf',
      'maxwidth',
    ],
  ];
  $conf['dimensions']['maxheight'] = [
    '#type' => 'number',
    '#default_value' => $imce_profile
      ->getConf('maxheight'),
    '#maxlength' => 5,
    '#min' => 0,
    '#size' => 8,
    '#placeholder' => $this
      ->t('Height'),
    '#field_suffix' => $this
      ->t('pixels'),
    '#parents' => [
      'conf',
      'maxheight',
    ],
  ];
  $conf['dimensions']['description'] = [
    '#markup' => '<div class="description">' . $this
      ->t('Images exceeding the limit will be scaled down.') . '</div>',
  ];

  // Replace method.
  $conf['replace'] = [
    '#type' => 'radios',
    '#title' => $this
      ->t('Upload replace method'),
    '#default_value' => $imce_profile
      ->getConf('replace', FileSystemInterface::EXISTS_RENAME),
    '#options' => [
      FileSystemInterface::EXISTS_RENAME => $this
        ->t('Keep the existing file renaming the new one'),
      FileSystemInterface::EXISTS_REPLACE => $this
        ->t('Replace the existing file with the new one'),
      FileSystemInterface::EXISTS_ERROR => $this
        ->t('Keep the existing file rejecting the new one'),
    ],
    '#description' => $this
      ->t('Select the replace method for existing files during uploads.'),
    '#weight' => -5,
  ];

  // Image thumbnails.
  if (function_exists('image_style_options')) {
    $conf['thumbnail_style'] = [
      '#type' => 'select',
      '#title' => $this
        ->t('Thumbnail style'),
      '#options' => image_style_options(),
      '#default_value' => $imce_profile
        ->getConf('thumbnail_style'),
      '#description' => $this
        ->t('Select a thumbnail style from the list to make the file browser display inline image previews. Note that this could reduce the performance of the file browser drastically.'),
    ];
    $conf['thumbnail_grid_style'] = [
      '#type' => 'checkbox',
      '#title' => $this
        ->t('Thumbnail grid style'),
      '#default_value' => $imce_profile
        ->getConf('thumbnail_grid_style'),
      '#description' => $this
        ->t('Check it if you want to display the thumbnail in a grid. If not checked it will display the thumbnail in a list.'),
    ];
  }

  // Folders.
  $conf['folders'] = [
    '#type' => 'fieldset',
    '#title' => $this
      ->t('Folders'),
    'description' => [
      '#markup' => '<div class="description">' . $this
        ->t('You can use user tokens in folder paths, e.g. @tokens.', [
        '@tokens' => '[user:uid], [user:name]',
      ]) . ' ' . $this
        ->t('Subfolders inherit parent permissions when subfolder browsing is enabled.') . '</div>',
    ],
    '#weight' => 10,
  ];
  if ($this->moduleHandler
    ->moduleExists('token')) {
    $conf['folders']['token_tree'] = [
      '#theme' => 'token_tree_link',
      '#token_types' => [
        'user',
      ],
      '#show_restricted' => TRUE,
      '#global_types' => FALSE,
    ];
  }
  $folders = $imce_profile
    ->getConf('folders', []);
  $index = 0;
  foreach ($folders as $folder) {
    $conf['folders'][] = $this
      ->folderForm($index++, $folder);
  }
  $conf['folders'][] = $this
    ->folderForm($index++);
  $conf['folders'][] = $this
    ->folderForm($index);
  $form['conf'] = $conf;

  // Add library.
  $form['#attached']['library'][] = 'imce/drupal.imce.admin';

  // Call plugin form alterers.
  $this->pluginManagerImce
    ->alterProfileForm($form, $form_state, $imce_profile);
  return parent::form($form, $form_state);
}