/** * 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; }
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; } }
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; }
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; }
/** * 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; }
/** * 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; }