You are here

public function filedepot::createFolder in filedepot 7

Same name and namespace in other branches
  1. 6 filedepot.class.php \filedepot::createFolder()

Call createFolderNode to create the folder which will trigger this method through filedepot_insert @global type $user

Parameters

type $node:

Return value

boolean

File

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

Class

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

Code

public function createFolder($node) {
  global $user;
  if ($node->parentfolder == 0 and !user_access('administer filedepot')) {
    return FALSE;
  }
  if ($node->parentfolder > 0 and $this
    ->checkPermission($node->parentfolder, 'admin') === FALSE) {
    return FALSE;
  }
  if (@is_dir($this->tmp_storage_path) === FALSE) {
    @mkdir($this->tmp_storage_path, FILEDEPOT_CHMOD_DIRS);
  }
  if (@is_dir($this->tmp_incoming_path) === FALSE) {
    @mkdir($this->tmp_incoming_path, FILEDEPOT_CHMOD_DIRS);
  }
  db_query("UPDATE {node} set promote = 0 WHERE nid = :nid", array(
    'nid' => $node->nid,
  ));
  $query = db_query("SELECT max(folderorder) FROM {filedepot_categories} WHERE pid=:pid", array(
    'pid' => $node->parentfolder,
  ));
  $maxorder = $query
    ->fetchField() + 10;

  // Only used for top level OG folders
  if (!isset($node->gid) or empty($node->gid)) {
    $node->gid = 0;
  }
  if (isset($node->filedepot_folder_desc[LANGUAGE_NONE][0])) {
    $description = check_plain($node->filedepot_folder_desc[LANGUAGE_NONE][0]['value']);
  }
  else {
    $description = '';
  }
  $time = time();
  db_query("INSERT INTO {filedepot_categories} (pid, name, description, folderorder, nid, vid, group_nid, last_modified_date, last_updated_date) VALUES (:pfolder, :title, :desc, :maxorder, :nid, :vid, :gid, :lmd, :lud)", array(
    'pfolder' => $node->parentfolder,
    'title' => check_plain($node->title),
    'desc' => $description,
    'maxorder' => $maxorder,
    'nid' => $node->nid,
    'vid' => $node->vid,
    'gid' => $node->gid,
    ':lmd' => $time,
    ':lud' => $time,
  ));

  // Need to clear the cached user folder permissions
  db_query("UPDATE {filedepot_usersettings} set allowable_view_folders = ''");

  // Retrieve the folder id (category id) for the new folder
  $cid = db_query("SELECT cid FROM {filedepot_categories} WHERE nid=:nid", array(
    'nid' => $node->nid,
  ))
    ->fetchField();
  if ($cid > 0 and $this
    ->createStorageFolder($cid)) {
    $this->cid = $cid;
    $catpid = db_query("SELECT pid FROM {filedepot_categories} WHERE cid=:cid", array(
      'cid' => $cid,
    ))
      ->fetchField();
    if (isset($node->inherit) and $node->inherit == 1 and $catpid > 0) {

      // Retrieve parent User access records - for each record create a new one for this category
      $sql = "SELECT permid,view,upload,upload_direct,upload_ver,approval,admin FROM {filedepot_access} " . "WHERE permtype = 'user' AND permid > 0 AND catid = :cid";
      $q1 = db_query($sql, array(
        'cid' => $catpid,
      ));
      foreach ($q1 as $rec) {
        $query = db_insert('filedepot_access');
        $query
          ->fields(array(
          'catid',
          'permtype',
          'permid',
          'view',
          'upload',
          'upload_direct',
          'upload_ver',
          'approval',
          'admin',
        ));
        $query
          ->values(array(
          'catid' => $cid,
          'permtype' => 'user',
          'permid' => $rec->permid,
          'view' => $rec->view,
          'upload' => $rec->upload,
          'upload_direct' => $rec->upload_direct,
          'upload_ver' => $rec->upload_ver,
          'approval' => $rec->approval,
          'admin' => $rec->admin,
        ));
        $query
          ->execute();
      }

      // Retrieve parent Role Access records - for each record create a new one for this category
      $sql = "SELECT permid,view,upload,upload_direct,upload_ver,approval,admin " . "FROM {filedepot_access} WHERE permtype='role' AND permid > 0 AND catid=:cid";
      $q2 = db_query($sql, array(
        'cid' => $catpid,
      ));
      foreach ($q2 as $rec) {
        $query = db_insert('filedepot_access');
        $query
          ->fields(array(
          'catid',
          'permtype',
          'permid',
          'view',
          'upload',
          'upload_direct',
          'upload_ver',
          'approval',
          'admin',
        ));
        $query
          ->values(array(
          'catid' => $cid,
          'permtype' => 'role',
          'permid' => $rec->permid,
          'view' => $rec->view,
          'upload' => $rec->upload,
          'upload_direct' => $rec->upload_direct,
          'upload_ver' => $rec->upload_ver,
          'approval' => $rec->approval,
          'admin' => $rec->admin,
        ));
        $query
          ->execute();
      }

      // Retrieve parent Group Access records - for each record create a new one for this category
      $sql = "SELECT permid,view,upload,upload_direct,upload_ver,approval,admin " . "FROM {filedepot_access} WHERE permtype='group' AND permid > 0 AND catid=:cid";
      $q3 = db_query($sql, array(
        'cid' => $catpid,
      ));
      foreach ($q3 as $rec) {
        $query = db_insert('filedepot_access');
        $query
          ->fields(array(
          'catid',
          'permtype',
          'permid',
          'view',
          'upload',
          'upload_direct',
          'upload_ver',
          'approval',
          'admin',
        ));
        $query
          ->values(array(
          'catid' => $cid,
          'permtype' => 'group',
          'permid' => $rec->permid,
          'view' => $rec->view,
          'upload' => $rec->upload,
          'upload_direct' => $rec->upload_direct,
          'upload_ver' => $rec->upload_ver,
          'approval' => $rec->approval,
          'admin' => $rec->admin,
        ));
        $query
          ->execute();
      }
    }
    else {
      if ($node->gid > 0 and $this->ogenabled) {

        // Create default permissions record for the group
        $this
          ->updatePerms($cid, $this->defGroupRights, '', $node->gid);
      }

      // Create default permissions record for the user that created the category
      $this
        ->updatePerms($cid, $this->defOwnerRights, $user->uid);
      if (is_array($this->defRoleRights) and count($this->defRoleRights) > 0) {
        foreach ($this->defRoleRights as $role => $perms) {
          $rid = db_query("SELECT rid FROM {role} WHERE name=:role", array(
            'role' => $role,
          ))
            ->fetchField();
          if ($rid and $rid > 0) {
            $this
              ->updatePerms($cid, $perms, '', '', array(
              $rid,
            ));
          }
        }
      }
    }
    return TRUE;
  }
  else {
    return FALSE;
  }
}