You are here

function photos_access_node_access_records in Album Photos 6.0.x

Same name and namespace in other branches
  1. 8.5 photos_access/photos_access.module \photos_access_node_access_records()
  2. 8.4 photos_access/photos_access.module \photos_access_node_access_records()
  3. 7.3 photos_access/photos_access.module \photos_access_node_access_records()

Implements hook_node_access_records().

File

photos_access/photos_access.module, line 904
Implementation of photos_access.module.

Code

function photos_access_node_access_records(NodeInterface $node) {
  if (\Drupal::config('photos.settings')
    ->get('photos_access_' . $node
    ->getType())) {
    if (isset($node->photos_privacy['vid'])) {

      // @todo cleanup?
      $acc['updateid'] = isset($node->photos_privacy['eid']) ? $node->photos_privacy['eid'] : 0;
      $acc['viewid'] = isset($node->photos_privacy['viewid']) ? $node->photos_privacy['viewid'] : '';
      $acc['vid'] = $node->photos_privacy['vid'];
    }
    else {
      $acc = isset($_SESSION['photos_access_ac_' . $node
        ->id()]) ? $_SESSION['photos_access_ac_' . $node
        ->id()] : '';
    }
    if (isset($acc['vid']) || isset($acc['updateid'])) {

      // Author has full access to all albums they create.
      $grants[] = [
        'realm' => 'photos_access_author',
        'gid' => $node
          ->getOwnerId(),
        'grant_view' => 1,
        'grant_update' => 1,
        'grant_delete' => 1,
        'priority' => 0,
      ];

      // If viewid is 1:locked, only author can view it.
      if ($acc['viewid'] != 1) {

        // Open is 0.
        $photos_access_gid = 0;
        if ($acc['viewid'] != 0) {

          // If not open use {node}.nid.
          $photos_access_gid = $node
            ->id();
        }
        $grants[] = [
          'realm' => 'photos_access',
          'gid' => $photos_access_gid,
          'grant_view' => 1,
          'grant_update' => 0,
          'grant_delete' => 0,
          'priority' => 0,
        ];
      }

      // Access for collaborators.
      if (isset($acc['updateid']) && !empty($acc['updateid'])) {
        $grants[] = [
          'realm' => 'photos_access_update',
          'gid' => $node
            ->id(),
          'grant_view' => 1,
          'grant_update' => 1,
          'grant_delete' => 0,
          'priority' => 0,
        ];
      }
      return $grants;
    }
    if (isset($_SESSION['photos_access_ac_' . $node
      ->id()])) {
      unset($_SESSION['photos_access_ac_' . $node
        ->id()]);
    }
  }
}