function check_entity($oEntity) { // NOTE: these checks don't have an equivalent in the delete and move functions. // possibly they are no longer needed but I am leaving them here // to avoid any potential problems I may not be aware of if (!is_a($oEntity, 'Document') && !is_a($oEntity, 'Folder')) { return PEAR::raiseError(_kt('Document cannot be archived')); } if ($oEntity->isSymbolicLink()) { return PEAR::raiseError(_kt("It is not possible to archive a shortcut. Please archive the target document or folder instead.")); } if (is_a($oEntity, 'Document')) { if (!KTDocumentUtil::canBeArchived($oEntity, $sError)) { if (PEAR::isError($sError)) { return $sError; } return PEAR::raiseError(_kt('Document cannot be archived')); } } if (is_a($oEntity, 'Folder')) { $aDocuments = array(); $aChildFolders = array(); $oFolder = $oEntity; // Get folder id $sFolderId = $oFolder->getID(); // Get documents in folder $sDocuments = $oFolder->getDocumentIDs($sFolderId); $aDocuments = !empty($sDocuments) ? explode(',', $sDocuments) : array(); // Loop through documents and send to this function for checking if (!empty($aDocuments)) { foreach ($aDocuments as $sDocID) { $oDocument = Document::get($sDocID); $res = $this->check_entity($oDocument); if (PEAR::isError($res)) { // NOTE: we may want to append the document reason to this // in order for the user to have some idea WHY the folder cannot be archived return PEAR::raiseError(_kt('Folder cannot be archived')); } } } // If all documents at the current level may be archived, we can continue // Get any existing subfolders $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}'"; $aChildFolders = $this->oFolder->getList($sWhereClause); // Loop through subfolders and check each in the same way as the parent if (!empty($aChildFolders)) { foreach ($aChildFolders as $oChild) { $res = $this->check_entity($oChild); if (PEAR::isError($res)) { // NOTE: we may want to append the document reason to this // in order for the user to have some idea WHY the folder cannot be archived return PEAR::raiseError(_kt('Folder cannot be archived')); } } } } return parent::check_entity($oEntity); }