function clearAllCaches()
 {
     return KTEntityUtil::clearAllCaches('KTPluginEntity');
 }
 function delete($oStartFolder, $oUser, $sReason, $aOptions = null, $bulk_action = false)
 {
     require_once KT_LIB_DIR . '/unitmanagement/Unit.inc';
     $oPerm = KTPermission::getByName('ktcore.permissions.delete');
     $bIgnorePermissions = KTUtil::arrayGet($aOptions, 'ignore_permissions');
     $aFolderIds = array();
     // of oFolder
     $aDocuments = array();
     // of oDocument
     $aFailedDocuments = array();
     // of String
     $aFailedFolders = array();
     // of String
     $aRemainingFolders = array($oStartFolder->getId());
     DBUtil::startTransaction();
     while (!empty($aRemainingFolders)) {
         $iFolderId = array_pop($aRemainingFolders);
         $oFolder = Folder::get($iFolderId);
         if (PEAR::isError($oFolder) || $oFolder == false) {
             DBUtil::rollback();
             return PEAR::raiseError(sprintf(_kt('Failure resolving child folder with id = %d.'), $iFolderId));
         }
         $oUnit = Unit::getByFolder($oFolder);
         if (!empty($oUnit)) {
             DBUtil::rollback();
             return PEAR::raiseError(sprintf(_kt('Cannot remove unit folder: %s.'), $oFolder->getName()));
         }
         // don't just stop ... plough on.
         if (!$bIgnorePermissions && !KTPermissionUtil::userHasPermissionOnItem($oUser, $oPerm, $oFolder)) {
             $aFailedFolders[] = $oFolder->getName();
         } else {
             $aFolderIds[] = $iFolderId;
         }
         // child documents
         $aChildDocs = Document::getList(array('folder_id = ?', array($iFolderId)));
         foreach ($aChildDocs as $oDoc) {
             if (!$bIgnorePermissions && $oDoc->getImmutable()) {
                 if (!KTBrowseUtil::inAdminMode($oUser, $oStartFolder)) {
                     $aFailedDocuments[] = $oDoc->getName();
                     continue;
                 }
             }
             if ($bIgnorePermissions || KTPermissionUtil::userHasPermissionOnItem($oUser, $oPerm, $oDoc) && $oDoc->getIsCheckedOut() == false) {
                 $aDocuments[] = $oDoc;
             } else {
                 $aFailedDocuments[] = $oDoc->getName();
             }
         }
         // child folders.
         $aCFIds = Folder::getList(array('parent_id = ?', array($iFolderId)), array('ids' => true));
         $aRemainingFolders = kt_array_merge($aRemainingFolders, $aCFIds);
     }
     // FIXME we could subdivide this to provide a per-item display (viz. bulk upload, etc.)
     if (!empty($aFailedDocuments) || !empty($aFailedFolders)) {
         $sFD = '';
         $sFF = '';
         if (!empty($aFailedDocuments)) {
             $sFD = _kt('Documents: ') . implode(', ', $aFailedDocuments) . '. ';
         }
         if (!empty($aFailedFolders)) {
             $sFF = _kt('Folders: ') . implode(', ', $aFailedFolders) . '.';
         }
         return PEAR::raiseError(_kt('You do not have permission to delete these items. ') . $sFD . $sFF);
     }
     // now we can go ahead.
     foreach ($aDocuments as $oDocument) {
         $res = KTDocumentUtil::delete($oDocument, $sReason);
         if (PEAR::isError($res)) {
             DBUtil::rollback();
             return PEAR::raiseError(_kt('Delete Aborted. Unexpected failure to delete document: ') . $oDocument->getName() . $res->getMessage());
         }
     }
     $oStorage =& KTStorageManagerUtil::getSingleton();
     $oStorage->removeFolderTree($oStartFolder);
     // Check for symbolic links to the folder and its sub folders
     $aSymlinks = array();
     foreach ($aFolderIds as $iFolder) {
         $oFolder = Folder::get($iFolder);
         $aLinks = $oFolder->getSymbolicLinks();
         $aSymlinks = array_merge($aSymlinks, $aLinks);
     }
     // documents all cleared.
     $sQuery = 'DELETE FROM ' . KTUtil::getTableName('folders') . ' WHERE id IN (' . DBUtil::paramArray($aFolderIds) . ')';
     $aParams = $aFolderIds;
     $res = DBUtil::runQuery(array($sQuery, $aParams));
     if (PEAR::isError($res)) {
         DBUtil::rollback();
         return PEAR::raiseError(_kt('Failure deleting folders.'));
     }
     // now that the folder has been deleted we delete all the shortcuts
     if (!empty($aSymlinks)) {
         $links = array();
         foreach ($aSymlinks as $link) {
             $links[] = $link['id'];
         }
         $linkIds = implode(',', $links);
         $query = "DELETE FROM folders WHERE id IN ({$linkIds})";
         DBUtil::runQuery($query);
     }
     /*
     foreach($aSymlinks as $aSymlink){
     	KTFolderUtil::deleteSymbolicLink($aSymlink['id']);
     }
     */
     // purge caches
     KTEntityUtil::clearAllCaches('Folder');
     // and store
     DBUtil::commit();
     return true;
 }
 function clearAllCaches()
 {
     return KTEntityUtil::clearAllCaches('schedulerEntity');
 }
 function do_changeToSimple()
 {
     $this->startTransaction();
     $oFieldset =& $this->oValidator->validateFieldset($_REQUEST['fFieldsetId']);
     $oFieldset->setIsComplex(false);
     $res = $oFieldset->update();
     $this->oValidator->notError($res, array('redirect_to' => array('manageConditional', 'fFieldsetId=' . $oFieldset->getId()), 'message' => _kt('Error changing to simple')));
     $aFields = DocumentField::getByFieldset($oFieldset);
     if (!empty($aFields)) {
         $aFieldIds = array();
         foreach ($aFields as $oField) {
             $aFieldIds[] = $oField->getId();
         }
         // value instances
         $sTable = KTUtil::getTableName('field_value_instances');
         $aQuery = array("DELETE FROM {$sTable} WHERE field_id IN (" . DBUtil::paramArray($aFieldIds) . ")", $aFieldIds);
         $res = DBUtil::runQuery($aQuery);
         //$this->addInfoMessage('value instances: ' . print_r($res, true));
         // behaviours
         $sTable = KTUtil::getTableName('field_behaviours');
         $aQuery = array("DELETE FROM {$sTable} WHERE field_id IN (" . DBUtil::paramArray($aFieldIds) . ")", $aFieldIds);
         $res = DBUtil::runQuery($aQuery);
         //$this->addInfoMessage('behaviours: ' . print_r($res, true));
     }
     $this->oValidator->notError($res, array('redirect_to' => array('manageConditional', 'fFieldsetId=' . $oFieldset->getId()), 'message' => _kt('Error changing to simple')));
     KTEntityUtil::clearAllCaches('KTFieldBehaviour');
     KTEntityUtil::clearAllCaches('KTValueInstance');
     $this->commitTransaction();
     $this->addInfoMessage(_kt('Changed to simple'));
     redirect($this->sParentUrl);
     exit(0);
 }