|
|
|
@ -40,3 +40,35 @@ function islandlives_views_pre_render(ViewExecutable $view) { |
|
|
|
$view->element['#attached']['library'][] = 'islandlives/unpublished'; |
|
|
|
$view->element['#attached']['library'][] = 'islandlives/unpublished'; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* Implements hook_entity_access(). |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
function islandlives_entity_access(\Drupal\Core\Entity\EntityInterface $entity, $operation, \Drupal\Core\Session\AccountInterface $account) { |
|
|
|
|
|
|
|
// Only modify access for 'view' and 'download' operations, and only for anonymous users. |
|
|
|
|
|
|
|
if (!($operation === 'view' || $operation === 'download') || !$account->isAnonymous()) { |
|
|
|
|
|
|
|
return \Drupal\Core\Access\AccessResult::neutral(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
if ($entity instanceof \Drupal\media\MediaInterface) { |
|
|
|
|
|
|
|
if (!$entity->isPublished()) { |
|
|
|
|
|
|
|
return \Drupal\Core\Access\AccessResult::forbidden('Media is not published.'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
elseif ($entity instanceof \Drupal\file\FileInterface) { |
|
|
|
|
|
|
|
// Get all media attached to the files. |
|
|
|
|
|
|
|
$media = \Drupal::database()->select(\Drupal\islandora_hierarchical_access\LUTGeneratorInterface::TABLE_NAME, 'lut') |
|
|
|
|
|
|
|
->fields('lut', ['mid']) |
|
|
|
|
|
|
|
->condition("lut.fid", $entity->id()) |
|
|
|
|
|
|
|
->execute() |
|
|
|
|
|
|
|
->fetchCol(); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
foreach ($media as $mid) { |
|
|
|
|
|
|
|
$media_entity = \Drupal::entityTypeManager()->getStorage('media')->load($mid); |
|
|
|
|
|
|
|
if ($media_entity && !$media_entity->isPublished()) { |
|
|
|
|
|
|
|
return \Drupal\Core\Access\AccessResult::forbidden('Media is not published.'); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|