acquia_dam-1.0.0-rc1/src/Form/FieldMediaRevisionDialog.php
src/Form/FieldMediaRevisionDialog.php
<?php namespace Drupal\acquia_dam\Form; use Drupal\Component\Utility\Crypt; use Drupal\Core\Ajax\AjaxResponse; use Drupal\Core\Ajax\CloseModalDialogCommand; use Drupal\Core\Ajax\InvokeCommand; use Drupal\Core\Form\FormStateInterface; use Drupal\Core\Site\Settings; use Drupal\Core\Url; use Drupal\media\Entity\Media; use Drupal\media\MediaInterface; /** * Dialog form for the media revision field widget. */ class FieldMediaRevisionDialog extends MediaRevisionDialogBase { /** * {@inheritdoc} */ public function getFormId() { return 'field_media_revision_dialog'; } /** * {@inheritdoc} */ public function buildForm(array $form, FormStateInterface $form_state, int $revision_id = -1, int $target_id = -1, string $triggering_id = '', string $parent_field = '') { if (!($revision_id | $target_id)) { $form_state->setErrorByName('Revision Not found', 'Operation due to missing revision id'); return $form; } // This will always load the latest revision. $form_state->set('media_id', $target_id); $form_state->set('revised_media_id', $revision_id); $form_state->set('media_data_embed_code_id', 'original'); $form_state->set('field_type', 'err_widget'); $form = parent::buildForm($form, $form_state); $hash_string = implode(':', [ $this->getFormId(), $triggering_id, $parent_field, ]); $hash = Crypt::hmacBase64($hash_string, \Drupal::service('private_key')->get() . Settings::getHashSalt()); $form['actions']['save_modal']['#ajax']['url'] = Url::fromRoute('acquia_dam.field_media_revision_dialog', [ 'revision_id' => $revision_id, 'target_id' => $target_id, ]); $form['actions']['save_modal']['#ajax']['options'] = [ 'query' => [ 'triggered_value' => $triggering_id, 'parent_field' => $parent_field, 'hash' => $hash, 'ajax_form' => 1, ], ]; $form['actions']['save_modal']['#ajax']['callback'] = [ static::class, 'submitFormAjax', ]; $form['actions']['cancel']['#ajax']['url'] = Url::fromRoute('acquia_dam.field_media_revision_dialog', [ 'revision_id' => $revision_id, 'target_id' => $target_id, ]); $form['actions']['cancel']['#ajax']['options'] = [ 'query' => [ 'triggered_value' => $triggering_id, 'parent_field' => $parent_field, 'hash' => $hash, 'ajax_form' => 1, ], ]; return $form; } /** * Ajax callback for updating the media to the given revision. */ public static function submitFormAjax(array &$form, FormStateInterface $form_state) { $response = new AjaxResponse(); $triggered_id = \Drupal::requestStack()->getCurrentRequest()->query->get('triggered_value'); $parent_field = \Drupal::requestStack()->getCurrentRequest()->query->get('parent_field'); $latest_revision_id = $form_state->getValue('latest_revision_id'); $triggered_id = $triggered_id . '-target-revision-id'; $response ->addCommand(new InvokeCommand("[data-drupal-selector=\"$triggered_id\"]", 'val', [$latest_revision_id])) ->addCommand(new InvokeCommand("[data-media-library-widget-update=\"$parent_field\"]", 'trigger', ['mousedown'])) ->addCommand(new CloseModalDialogCommand()); return $response; } /** * {@inheritDoc} */ protected function loadMedia(FormStateInterface $form_state): MediaInterface { return Media::load($form_state->get('media_id')); } }