You are here

function filedepot::getPermissionObject in filedepot 7

Function to retreive all user access records for a specific category and user

Parameters

type $cid:

type $userid:

Return value

filedepot_permission_object

4 calls to filedepot::getPermissionObject()
filedepot::checkPermission in ./filedepot.class.php
filedepot::renameCategory in ./filedepot.class.php
Rename a category
filedepot::renameFile in ./filedepot.class.php
Rename a file
filedepot::setSingleFolderOrder in ./filedepot.class.php
Set the order of a single folder

File

./filedepot.class.php, line 223
filedepot.class.php Main class for the Filedepot module

Class

filedepot
@file filedepot.class.php Main class for the Filedepot module

Code

function getPermissionObject($cid, $userid = 0) {
  global $user;
  if (intval($cid) < 1) {
    return filedepot_permission_object::createNoPermissionsObject($cid);
  }

  // Using a supplied userid or the current global one
  if ($userid == 0) {
    if (empty($user->uid) or $user->uid == 0) {
      $uid = 0;
    }
    else {
      $uid = $user->uid;
    }
  }
  else {
    $uid = $userid;
  }
  $account = user_load($uid);
  if (user_access('administer filedepot', $account) === TRUE) {
    return filedepot_permission_object::createFullPermissionObject($cid);
  }
  else {

    // Check to see if a permission object already exists
    if (isset(self::$_permission_objects[$uid][$cid])) {
      return self::$_permission_objects[$uid][$cid];
    }
    $po = new filedepot_permission_object($cid);

    // Check user access records
    $query = db_select('filedepot_access', 'a');
    $query
      ->fields('a', array(
      'view',
      'upload',
      'upload_direct',
      'upload_ver',
      'approval',
      'admin',
    ));
    $query
      ->condition('a.catid', $cid, '=');
    $query
      ->condition('a.permtype', 'user', '=');
    $query
      ->condition('a.permid', $uid, '=');
    $query
      ->addTag('filedepot_user_access');
    $results = $query
      ->execute();
    foreach ($results as $rec) {
      $rec_array = (array) $rec;
      list($view, $upload, $upload_dir, $upload_ver, $approval, $admin) = array_values($rec_array);
      $po
        ->setTruePermissions($view, $upload, $upload_dir, $upload_ver, $approval, $admin);
    }
    if ($this->ogenabled) {

      // Retrieve all the Organic Groups this user is a member of
      $groupids = $this
        ->get_user_groups($uid);
      foreach ($groupids as $gid) {
        $query = db_select('filedepot_access', 'a');
        $query
          ->fields('a', array(
          'view',
          'upload',
          'upload_direct',
          'upload_ver',
          'approval',
          'admin',
        ));
        $query
          ->condition('a.catid', $cid, '=');
        $query
          ->condition('a.permtype', 'group', '=');
        $query
          ->condition('a.permid', $gid, '=');
        $query
          ->addTag('filedepot_group_access');
        $query
          ->addMetaData('groups', $groupids);
        $query
          ->addMetaData('cid', $cid);
        $results = $query
          ->execute();
        foreach ($results as $rec) {
          $rec_array = (array) $rec;
          list($view, $upload, $upload_dir, $upload_ver, $approval, $admin) = array_values($rec_array);
          $po
            ->setTruePermissions($view, $upload, $upload_dir, $upload_ver, $approval, $admin);
        }
      }
    }

    // For each role that the user is a member of - check if they have the right
    foreach ($account->roles as $rid => $role) {
      $query = db_select('filedepot_access', 'a');
      $query
        ->fields('a', array(
        'view',
        'upload',
        'upload_direct',
        'upload_ver',
        'approval',
        'admin',
      ));
      $query
        ->condition('a.catid', $cid, '=');
      $query
        ->condition('a.permtype', 'role', '=');
      $query
        ->condition('a.permid', $rid, '=');
      $query
        ->addTag('filedepot_role_access');
      $results = $query
        ->execute();
      foreach ($results as $rec) {
        $rec_array = (array) $rec;
        list($view, $upload, $upload_dir, $upload_ver, $approval, $admin) = array_values($rec_array);
        $po
          ->setTruePermissions($view, $upload, $upload_dir, $upload_ver, $approval, $admin);
      }
    }
    self::$_permission_objects[$uid][$cid] = $po;
    return $po;
  }
}