widen_media-1.0.x-dev/src/Form/AddWidenMediaForm.php
src/Form/AddWidenMediaForm.php
<?php
namespace Drupal\widen_media\Form;
use Drupal\Core\Form\FormBuilderInterface;
use Drupal\Core\Form\FormStateInterface;
use Drupal\Core\Url;
use Drupal\media_library\Form\AddFormBase;
use Drupal\widen_media\WidenAssetException;
use Symfony\Component\DependencyInjection\ContainerInterface;
/**
* Creates a form to create media entities from Widen media URLs.
*
* @internal
* Form classes are internal.
*/
class AddWidenMediaForm extends AddFormBase {
/**
* WidenAPI Service.
*
* @var \Drupal\widen_media\Service\Widen
*/
protected $widenApi;
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
$instance = new static(
$container->get('entity_type.manager'),
$container->get('media_library.ui_builder'),
$container->get('media_library.opener_resolver')
);
$instance->widenApi = $container->get('widen_media.api');
return $instance;
}
/**
* {@inheritdoc}
*/
public function getFormId() {
return $this->getBaseFormId() . '_widen';
}
/**
* {@inheritdoc}
*/
protected function buildInputElement(array $form, FormStateInterface $form_state) {
// Add a container to group the input elements for styling purposes.
$form['container'] = [
'#type' => 'container',
'#attributes' => [
'class' => ['media-library-add-form__input-wrapper'],
],
];
$form['container']['url'] = [
'#type' => 'url',
'#title' => $this->t('Add Widen Media via URL'),
'#required' => TRUE,
'#attributes' => [
'placeholder' => 'https://',
],
];
$form['container']['submit'] = [
'#type' => 'submit',
'#value' => $this->t('Add'),
'#button_type' => 'primary',
'#validate' => ['::validateUrl'],
'#submit' => ['::addButtonSubmit'],
'#ajax' => [
'callback' => '::updateFormCallback',
'wrapper' => 'media-library-wrapper',
'url' => Url::fromRoute('media_library.ui'),
'options' => [
'query' => $this->getMediaLibraryState($form_state)->all() + [
FormBuilderInterface::AJAX_FORM_REQUEST => TRUE,
],
],
],
];
return $form;
}
/**
* Validates the Widen Media URL.
*
* @param array $form
* The complete form.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The current form state.
*/
public function validateUrl(array &$form, FormStateInterface $form_state) {
$url = $form_state->getValue('url');
if ($url) {
try {
$this->widenApi->getAsset($url);
}
catch (WidenAssetException $e) {
$form_state->setErrorByName('url', $e->getMessage());
}
}
}
/**
* Submit handler for the add button.
*
* @param array $form
* The form render array.
* @param \Drupal\Core\Form\FormStateInterface $form_state
* The form state.
*/
public function addButtonSubmit(array $form, FormStateInterface $form_state) {
$this->processInputValues([$form_state->getValue('url')], $form, $form_state);
}
}
