Verified Commit d4c6b321 authored by Lauri Timmanee's avatar Lauri Timmanee
Browse files

Issue #2911977 by yash.rode, acbramley, bnjmnm, smustgrave, phenaproxima, Wim...

Issue #2911977 by yash.rode, acbramley, bnjmnm, smustgrave, phenaproxima, Wim Leers, chr.fritsch, larowlan: Add Media revision UI
parent 4a02d925
Loading
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -177,7 +177,7 @@ public function getInstances() {
  public function preSaveRevision(EntityStorageInterface $storage, \stdClass $record) {
    parent::preSaveRevision($storage, $record);

    if (!$this->isNewRevision() && isset($this->original) && (!isset($record->revision_log) || $record->revision_log === '')) {
    if (!$this->isNewRevision() && isset($this->original) && empty($record->revision_log_message)) {
      // If we are updating an existing block_content without adding a new
      // revision and the user did not supply a revision log, keep the existing
      // one.
+1 −1
Original line number Diff line number Diff line
@@ -65,7 +65,7 @@ class MediaTest extends ResourceTestBase {
  protected function setUpAuthorization($method) {
    switch ($method) {
      case 'GET':
        $this->grantPermissionsToTestedRole(['view media']);
        $this->grantPermissionsToTestedRole(['view media', 'view any camelids media revisions']);
        break;

      case 'POST':
+0 −15
Original line number Diff line number Diff line
entity.media.revision:
  path: '/media/{media}/revisions/{media_revision}/view'
  defaults:
    _controller: '\Drupal\Core\Entity\Controller\EntityRevisionViewController'
    _title_callback: '\Drupal\Core\Entity\Controller\EntityController::title'
  options:
    parameters:
      media:
        type: entity:media
      media_revision:
        type: entity_revision:media
  requirements:
    _entity_access: 'media_revision.view all revisions'
    media: \d+

media.oembed_iframe:
  path: '/media/oembed'
  defaults:
+8 −7
Original line number Diff line number Diff line
@@ -39,10 +39,13 @@
 *       "edit" = "Drupal\media\MediaForm",
 *       "delete" = "Drupal\Core\Entity\ContentEntityDeleteForm",
 *       "delete-multiple-confirm" = "Drupal\Core\Entity\Form\DeleteMultipleForm",
 *       "revision-delete" = \Drupal\Core\Entity\Form\RevisionDeleteForm::class,
 *       "revision-revert" = \Drupal\Core\Entity\Form\RevisionRevertForm::class,
 *     },
 *     "views_data" = "Drupal\media\MediaViewsData",
 *     "route_provider" = {
 *       "html" = "Drupal\media\Routing\MediaRouteProvider",
 *       "revision" = \Drupal\Core\Entity\Routing\RevisionHtmlRouteProvider::class,
 *     }
 *   },
 *   base_table = "media",
@@ -80,6 +83,9 @@
 *     "delete-multiple-form" = "/media/delete",
 *     "edit-form" = "/media/{media}/edit",
 *     "revision" = "/media/{media}/revisions/{media_revision}/view",
 *     "revision-delete-form" = "/media/{media}/revision/{media_revision}/delete",
 *     "revision-revert-form" = "/media/{media}/revision/{media_revision}/revert",
 *     "version-history" = "/media/{media}/revisions",
 *   }
 * )
 */
@@ -381,18 +387,13 @@ public function postSave(EntityStorageInterface $storage, $update = TRUE) {
  public function preSaveRevision(EntityStorageInterface $storage, \stdClass $record) {
    parent::preSaveRevision($storage, $record);

    $is_new_revision = $this->isNewRevision();
    if (!$is_new_revision && isset($this->original) && empty($record->revision_log_message)) {
    if (!$this->isNewRevision() && isset($this->original) && empty($record->revision_log_message)) {
      // If we are updating an existing media item without adding a
      // new revision, we need to make sure $entity->revision_log_message is
      // reset whenever it is empty.
      // Therefore, this code allows us to avoid clobbering an existing log
      // entry with an empty one.
      $record->revision_log_message = $this->original->revision_log_message->value;
    }

    if ($is_new_revision) {
      $record->revision_created = self::getRequestTime();
      $this->setRevisionLogMessage($this->original->getRevisionLogMessage());
    }
  }

+11 −4
Original line number Diff line number Diff line
@@ -50,7 +50,6 @@ public static function createInstance(ContainerInterface $container, EntityTypeI
   * {@inheritdoc}
   */
  protected function checkAccess(EntityInterface $entity, $operation, AccountInterface $account) {
    /** @var \Drupal\media\MediaInterface $entity */
    // Allow admin permission to override all operations.
    if ($account->hasPermission($this->entityType->getAdminPermission())) {
      return AccessResult::allowed()->cachePerPermissions();
@@ -120,9 +119,9 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter
        return AccessResult::neutral("The following permissions are required: 'delete any media' OR 'delete own media' OR '$type: delete any media' OR '$type: delete own media'.")->cachePerPermissions();

      case 'view all revisions':
        // Perform basic permission checks first.
        if (!$account->hasPermission('view all media revisions')) {
          return AccessResult::neutral("The 'view all media revisions' permission is required.")->cachePerPermissions();
      case 'view revision':
        if ($account->hasPermission('view any ' . $type . ' media revisions') || $account->hasPermission("view all media revisions")) {
          return AccessResult::allowed()->cachePerPermissions();
        }

        // First check the access to the default revision and finally, if the
@@ -135,6 +134,14 @@ protected function checkAccess(EntityInterface $entity, $operation, AccountInter
        }
        return $access->cachePerPermissions()->addCacheableDependency($entity);

      case 'revert':
        return AccessResult::allowedIfHasPermission($account, 'revert any ' . $type . ' media revisions')
          ->cachePerPermissions()->addCacheableDependency($entity);

      case 'delete revision':
        return AccessResult::allowedIfHasPermission($account, 'delete any ' . $type . ' media revisions')
          ->cachePerPermissions()->addCacheableDependency($entity);

      default:
        return AccessResult::neutral()->cachePerPermissions();
    }
Loading