/**
  * Fetch any linked folders
  *
  * @param Folder array $aFolderList
  * @return unknown
  */
 function getLinkingEntities($aFolderList)
 {
     $aSearchFolders = array();
     if (!empty($aFolderList)) {
         foreach ($aFolderList as $oFolderItem) {
             if (Permission::userHasFolderReadPermission($oFolderItem)) {
                 // If it is a shortcut, we should do some more searching
                 if ($oFolderItem->isSymbolicLink()) {
                     $oFolderItem = $oFolderItem->getLinkedFolder();
                     $aSearchFolders[] = $oFolderItem->getID();
                 }
             }
         }
     }
     $aLinkingFolders = array();
     $aSearchCompletedFolders = array();
     $count = 0;
     while (count($aSearchFolders) > 0) {
         $count++;
         $oFolder = Folder::get(array_pop($aSearchFolders));
         $folderId = $oFolder->getId();
         // Get all the folders within the current folder
         $sWhereClause = "parent_folder_ids = '{$folderId}' OR\n            parent_folder_ids LIKE '{$folderId},%' OR\n            parent_folder_ids LIKE '%,{$folderId},%' OR\n            parent_folder_ids LIKE '%,{$folderId}'";
         $aFolderList = $this->oFolder->getList($sWhereClause);
         foreach ($aFolderList as $oFolderItem) {
             if ($oFolderItem->isSymbolicLink()) {
                 $oFolderItem = $oFolderItem->getLinkedFolder();
             }
             if (Permission::userHasFolderReadPermission($oFolderItem)) {
                 if ($aSearchCompletedFolders[$oFolderItem->getID()] != true) {
                     $aSearchFolders[] = $oFolderItem->getID();
                     $aSearchCompletedFolders[$oFolderItem->getID()] = true;
                 }
             }
         }
         if (!isset($aLinkingFolders[$oFolder->getId()])) {
             $aLinkingFolders[$oFolder->getId()] = $oFolder;
         }
     }
     return $aLinkingFolders;
 }
Esempio n. 2
0
 function validateFolderPermissions($iUserId, $iFolderId)
 {
     // check if user id is in session. If not, set it
     if (!isset($_SESSION["userID"])) {
         $_SESSION['userID'] = $iUserId;
     }
     // get folder object
     $oFolder = Folder::get($iFolderId);
     if (PEAR::isError($oFolder)) {
         return false;
     }
     // check permissions for folder
     if (Permission::userHasFolderReadPermission($oFolder)) {
         return true;
     } else {
         return false;
     }
 }
Esempio n. 3
0
 public static function getFolder($folderID, $userid)
 {
     $folder = Folder::get($folderID + 0);
     if (PEAR::isError($folder)) {
         return $folder;
     }
     if (!Permission::userHasFolderReadPermission($folder)) {
         return new PEAR_Error(_kt('no permission to read folder'));
     }
     $sql = "SELECT id, name FROM folders WHERE parent_id={$folderID} ORDER BY name";
     $rs = DBUtil::getResultArray($sql);
     if (PEAR::isError($rs)) {
         return $rs;
     }
     $folders = array();
     foreach ($rs as $folder) {
         $fobj = Folder::get($folder['id']);
         if (Permission::userHasFolderReadPermission($fobj)) {
             $folders[] = $folder;
         }
     }
     return $folders;
 }
Esempio n. 4
0
 function perform_action($oEntity)
 {
     // checkout document
     $sReason = $this->sReason;
     if (is_a($oEntity, 'Document')) {
         if ($oEntity->getImmutable()) {
             return PEAR::raiseError($oEntity->getName() . ': ' . _kt('Document cannot be checked out as it is immutable'));
         }
         if ($oEntity->getIsCheckedOut()) {
             $checkedOutUser = $oEntity->getCheckedOutUserID();
             $sUserId = $_SESSION['userID'];
             if ($checkedOutUser != $sUserId) {
                 $oCheckedOutUser = User::get($checkedOutUser);
                 return PEAR::raiseError($oEntity->getName() . ': ' . _kt('Document has already been checked out by ') . $oCheckedOutUser->getName());
             }
         } else {
             $res = KTDocumentUtil::checkout($oEntity, $sReason, $this->oUser);
             if (PEAR::isError($res)) {
                 return PEAR::raiseError($oEntity->getName() . ': ' . $res->getMessage());
             }
         }
         if ($this->bDownload) {
             if ($this->bNoisy) {
                 $oDocumentTransaction = new DocumentTransaction($oEntity, "Document part of bulk checkout", 'ktstandard.transactions.check_out', array());
                 $oDocumentTransaction->create();
             }
             $oKTTriggerRegistry = KTTriggerRegistry::getSingleton();
             $aTriggers = $oKTTriggerRegistry->getTriggers('checkoutDownload', 'postValidate');
             foreach ($aTriggers as $aTrigger) {
                 $sTrigger = $aTrigger[0];
                 $oTrigger = new $sTrigger();
                 $aInfo = array('document' => $oEntity);
                 $oTrigger->setInfo($aInfo);
                 $ret = $oTrigger->postValidate();
                 if (PEAR::isError($ret)) {
                     return $ret;
                 }
             }
             $this->oZip->addDocumentToZip($oEntity);
         }
     } else {
         if (is_a($oEntity, 'Folder')) {
             // get documents and subfolders
             $aDocuments = array();
             $oFolder = $oEntity;
             if ($oFolder->isSymbolicLink()) {
                 $oFolder = $oFolder->getLinkedFolder();
             }
             $sFolderId = $oFolder->getId();
             $sFolderDocs = $oFolder->getDocumentIDs($sFolderId);
             // get documents directly in the folder
             if (!empty($sFolderDocs)) {
                 $aDocuments = explode(',', $sFolderDocs);
             }
             // Get all the folders within the current folder
             $sWhereClause = "parent_folder_ids = '{$sFolderId}' OR\n            parent_folder_ids LIKE '{$sFolderId},%' OR\n            parent_folder_ids LIKE '%,{$sFolderId},%' OR\n            parent_folder_ids LIKE '%,{$sFolderId}'";
             $aFolderList = $this->oFolder->getList($sWhereClause);
             $aLinkingFolders = $this->getLinkingEntities($aFolderList);
             $aFolderList = array_merge($aFolderList, $aLinkingFolders);
             $aFolderObjects = array();
             $aFolderObjects[$sFolderId] = $oFolder;
             // Get the documents within the folder
             if (!empty($aFolderList)) {
                 foreach ($aFolderList as $k => $oFolderItem) {
                     if (Permission::userHasFolderReadPermission($oFolderItem)) {
                         // Get documents for each folder
                         if ($oFolderItem->isSymbolicLink()) {
                             $oFolderItem = $oFolderItem->getLinkedFolder();
                         }
                         $sFolderItemId = $oFolderItem->getID();
                         $sFolderItemDocs = $oFolderItem->getDocumentIDs($sFolderItemId);
                         if (!empty($sFolderItemDocs)) {
                             $aFolderDocs = explode(',', $sFolderItemDocs);
                             $aDocuments = array_merge($aDocuments, $aFolderDocs);
                         }
                         // Add the folder to the zip file
                         if ($this->bDownload) {
                             $this->oZip->addFolderToZip($oFolderItem);
                             $aFolderObjects[$oFolderItem->getId()] = $oFolderItem;
                         }
                     }
                 }
             }
             // Checkout each document within the folder structure
             if (!empty($aDocuments)) {
                 foreach ($aDocuments as $sDocId) {
                     $oDocument = Document::get($sDocId);
                     if (PEAR::isError($oDocument)) {
                         // add message, skip document and continue
                         $this->addErrorMessage($oDocument->getName() . ': ' . $oDocument->getMessage());
                         continue;
                     }
                     if ($oDocument->isSymbolicLink()) {
                         $oDocument->switchToLinkedCore();
                     }
                     if ($oDocument->getImmutable()) {
                         $this->addErrorMessage($oDocument->getName() . ': ' . _kt('Document cannot be checked out as it is immutable'));
                         continue;
                     }
                     // Check if the action is restricted by workflow on the document
                     if (!KTWorkflowUtil::actionEnabledForDocument($oDocument, 'ktcore.actions.document.checkout')) {
                         $this->addErrorMessage($oDocument->getName() . ': ' . _kt('Checkout is restricted by the workflow state.'));
                         continue;
                     }
                     // Check if document is already checked out, check the owner.
                     // If the current user is the owner, then include to the download, otherwise ignore.
                     if ($oDocument->getIsCheckedOut()) {
                         $checkedOutUser = $oDocument->getCheckedOutUserID();
                         $sUserId = $_SESSION['userID'];
                         if ($checkedOutUser != $sUserId) {
                             $oCheckedOutUser = User::get($checkedOutUser);
                             $this->addErrorMessage($oDocument->getName() . ': ' . _kt('Document has already been checked out by ') . $oCheckedOutUser->getName());
                             continue;
                         }
                     } else {
                         // Check out document
                         $res = KTDocumentUtil::checkout($oDocument, $sReason, $this->oUser);
                         if (PEAR::isError($res)) {
                             $this->addErrorMessage($oDocument->getName() . ': ' . _kt('Document could not be checked out. ') . $res->getMessage());
                             continue;
                         }
                     }
                     // Add document to the zip file
                     if ($this->bDownload) {
                         if ($this->bNoisy) {
                             $oDocumentTransaction = new DocumentTransaction($oDocument, 'Document part of bulk checkout', 'ktstandard.transactions.check_out', array());
                             $oDocumentTransaction->create();
                         }
                         $oKTTriggerRegistry = KTTriggerRegistry::getSingleton();
                         $aTriggers = $oKTTriggerRegistry->getTriggers('checkoutDownload', 'postValidate');
                         foreach ($aTriggers as $aTrigger) {
                             $sTrigger = $aTrigger[0];
                             $oTrigger = new $sTrigger();
                             $aInfo = array('document' => $oDocument);
                             $oTrigger->setInfo($aInfo);
                             $ret = $oTrigger->postValidate();
                             if (PEAR::isError($ret)) {
                                 return $ret;
                             }
                         }
                         $sDocFolderId = $oDocument->getFolderID();
                         $oFolder = isset($aFolderObjects[$sDocFolderId]) ? $aFolderObjects[$sDocFolderId] : Folder::get($sDocFolderId);
                         $this->oZip->addDocumentToZip($oDocument, $oFolder);
                     }
                 }
             }
         }
     }
     return true;
 }
Esempio n. 5
0
 /**
  * Get's a permission string for a folder eg: 'RW' or 'RWA'
  *
  * @author KnowledgeTree Team
  * @access public
  * @param Folder $folder
  * @return string
  */
 function get_permission_string($folder)
 {
     $perms = '';
     if (Permission::userHasFolderReadPermission($folder)) {
         $perms .= 'R';
     }
     if (Permission::userHasFolderWritePermission($folder)) {
         $perms .= 'W';
     }
     if (Permission::userHasAddFolderPermission($folder)) {
         $perms .= 'A';
     }
     // root folder cannot be renamed or deleted.
     if ($folder->iId != 1) {
         if (Permission::userHasRenameFolderPermission($folder)) {
             $perms .= 'N';
         }
         if (Permission::userHasDeleteFolderPermission($folder)) {
             $perms .= 'D';
         }
     }
     return $perms;
 }
Esempio n. 6
0
 /**
  * Get's a permission string for a folder eg: 'RW' or 'RWA'
  *
  * @author KnowledgeTree Team
  * @access public
  * @param Folder $folder
  * @return string
  */
 function get_permission_string($folder)
 {
     $perms = '';
     if (Permission::userHasFolderReadPermission($folder)) {
         $perms .= 'R';
     }
     if (Permission::userHasFolderWritePermission($folder)) {
         $perms .= 'W';
     }
     if (Permission::userHasAddFolderPermission($folder)) {
         $perms .= 'A';
     }
     return $perms;
 }