bulkaction.php.tmp
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· TMP 代码 · 共 635 行 · 第 1/2 页
TMP
635 行
$res = $this->check_entity($oFolder); if(PEAR::isError($res)) { $aFailed['folders'][] = array($oFolder->getName(), $res->getMessage()); } else if($res === false) { $aFailed['folders'][] = array($oFolder->getName(), _kt('Failed (unknown reason)')); } else { $aSucceeded['folders'][] = $oFolder->getId(); } } } $this->oActiveEntityList = new KTEntityList($aSucceeded['documents'], $aSucceeded['folders']); $this->aFailed = $aFailed; return count($aSucceeded['documents']) + count($aSucceeded['folders']); } // iterate over all entites to act on them function perform_action_on_list() { $this->aActionResults = array('folders'=>array(), 'documents'=>array()); foreach($this->oActiveEntityList->getDocumentIds() as $iId) { $oDocument =& Document::get($iId); if(!PEAR::isError($oDocument)) { $sName = $oDocument->getName(); } else { $sName = _kt('Error fetching document name'); } $res = $this->perform_action($oDocument); //check for shortcut notice $notice = null; if($oDocument->isSymbolicLink()){ $notice = _kt("Shortcut"); } if(PEAR::isError($res)) { $this->aActionResults['documents'][] = array($sName, $res->getMessage(), $notice); } else { $this->aActionResults['documents'][] = array($sName, _kt('Success'), $notice); } } foreach($this->oActiveEntityList->getFolderIds() as $iId) { $oFolder =& Folder::get($iId); if(!PEAR::isError($oFolder)) { $sName = $oFolder->getName(); } else { $sName = _kt('Error fetching folder name'); } $res = $this->perform_action($oFolder); //check for shortcut notice $notice = null; if($oFolder->isSymbolicLink()){ $notice = _kt("Shortcut"); } if(PEAR::isError($res)) { $this->aActionResults['folders'][] = array($sName, $res->getMessage(), $notice); } else { $this->aActionResults['folders'][] = array($sName, _kt('Success'), $notice); } } } // list persistance // fetch existing lists function get_lists() { $this->oEntityList = KTEntityList::retrieveList(KTUtil::arrayGet($_REQUEST, 'fListCode', null)); $this->oActiveEntityList = KTEntityList::retrieveList(KTUtil::arrayGet($_REQUEST, 'fActiveListCode', null)); if(PEAR::isError($this->oActiveEntityList)) { $this->oActiveEntityList = null; } } // persist function store_lists() { $this->persistParams(array('fListCode', 'fActiveListCode', 'fFolderId', 'fReturnData', 'fReturnAction')); } // forms // form to list the entites after checking each one function form_listing() { $sListCode = $this->oEntityList->getCode(); $sActiveListCode = $this->oActiveEntityList->getCode(); $oForm = new KTForm; $oForm->setOptions(array( 'identifier' => 'ktcore.actions.bulk.listing.form', 'submit_label' => _kt('Continue'), 'targeturl' => $this->getURL(), 'action' => 'collectinfo', 'fail_action' => 'main', 'cancel_url' => KTBrowseUtil::getUrlForFolder($this->oFolder), 'noframe' => true, 'extraargs' => array('fListCode' => $sListCode, 'fActiveListCode' => $sActiveListCode, 'fFolderId' => $this->oFolder->getId(), 'fReturnAction' => KTUtil::arrayGet($_REQUEST, 'fReturnAction'), 'fReturnData' => KTUtil::arrayGet($_REQUEST, 'fReturnData'), ), 'context' => $this, )); return $oForm; } // form to show on action completion, and list results function form_complete() { $sReturnAction = KTUtil::arrayGet($_REQUEST, 'fReturnAction'); $sReturnData = KTUtil::arrayGet($_REQUEST, 'fReturnData'); $sAction = 'main'; if($sReturnAction == 'browse') { if ($sReturnData == '') { $sReturnData = KTUtil::arrayGet($_REQUEST, 'fFolderId'); } $sTargetUrl = KTBrowseUtil::getUrlForFolder(Folder::get($sReturnData)); } elseif($sReturnAction == 'simpleSearch') { $sTargetUrl = KTBrowseUtil::getSimpleSearchBaseUrl(); $extraargs = array('fSearchableText'=>$sReturnData); } elseif($sReturnAction == 'booleanSearch') { $sTargetUrl = KTBrowseUtil::getBooleanSearchBaseUrl(); $sAction = 'performSearch'; $extraargs = array('boolean_search_id'=>$sReturnData); } elseif($sReturnAction == 'search2') { $sTargetUrl = KTBrowseUtil::getSearchResultURL(); $sAction = 'searchResults'; } $oForm = new KTForm; $oForm->setOptions(array( 'identifier' => 'ktcore.actions.bulk.complete.form', 'submit_label' => _kt('Return'), 'targeturl' => $sTargetUrl, 'context' => $this, 'action' => $sAction, 'extraargs' => $extraargs, 'noframe' => true, )); return $oForm; } // main entry point - checks the entity list and displays lists function do_main() { // get entities (using the checkboxes atm) $aFolders = KTUtil::arrayGet($_REQUEST, 'selection_f' , array()); $aDocuments = KTUtil::arrayGet($_REQUEST, 'selection_d' , array()); $this->oEntityList = new KTEntityList($aDocuments, $aFolders); // gives us $this->aFailed $iActiveCount = $this->check_entities(); $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate('ktcore/bulk_action_listing'); $this->store_lists(); return $oTemplate->render(array('context' => $this, 'form' => $this->form_listing(), 'failed' => $this->aFailed, 'active' => $this->oActiveEntityList, 'activecount' => $iActiveCount, 'failedform' => $this->form_complete(), 'folders' => $this->_getNames($this->oActiveEntityList->getFolderIds(), 'Folder'), 'documents' => $this->_getNames($this->oActiveEntityList->getDocumentIds(), 'Document'))); } // override to add a screen to get a reason, or whatever // remember to pass to perform action next, and call the super's method function do_collectinfo() { $this->store_lists(); return $this->do_performaction(); } // perform the action itself, and list results (completion action) function do_performaction() { $this->get_lists(); $this->aPersistParams = array(); $this->perform_action_on_list(); $oTemplating =& KTTemplating::getSingleton(); $oTemplate = $oTemplating->loadTemplate('ktcore/bulk_action_complete'); return $oTemplate->render(array('context' => $this, 'list' => $this->aActionResults, 'form' => $this->form_complete())); } // main overrides // override to do the actual action, on an individual entity function perform_action($oEntity) { return PEAR::raiseError(_kt('Action component not implemented')); } // check an individual entity - this should be overrided with additional // checks required for the specific action, but should always call its // parent implementation function check_entity($oEntity) { $oPermission =& KTPermission::getByName($this->_sPermission); if(PEAR::isError($oPermission)) { return true; } // basic document checks // TODO: check if this is appropriate // should probably store the 'equivalent' action (ie. document.delete) // and check that, rather than add a new list of actions to the workflow // section if(is_a($oEntity, 'Document')) { if(!KTWorkflowUtil::actionEnabledForDocument($oEntity, $this->sName)) { return PEAR::raiseError(_kt('Action is disabled by workflow')); } $status = $oEntity->getStatusID(); if($status==DELETED||$status==ARCHIVED) { return PEAR::raiseError(_kt('Document is archived or deleted')); } } // admin check if($this->bAllowInAdminMode) { if(KTBrowseUtil::inAdminMode($this->oUser, null)) { return true; } } if(!KTPermissionUtil::userHasPermissionOnItem($this->oUser, $oPermission, $oEntity)) { return PEAR::raiseError(_kt('You do not have the required permissions')); } return true; }}class KTBulkDocumentAction extends KTBulkAction { function check_entity($oEntity) { if(!is_a($oEntity, 'Document')) { return false; } return parent::check_entity($oEntity); }}class KTBulkFolderAction extends KTBulkAction { function check_entity($oEntity) { if(!is_a($oEntity, 'Folder')) { return false; } return parent::check_entity($oEntity); }}// util class for bulk actionsclass KTBulkActionUtil { function getBulkActionInfo($slot = 'bulkaction') { $oRegistry =& KTActionRegistry::getSingleton(); return $oRegistry->getActions($slot); } function getAllBulkActions($slot = 'bulkaction') { $aObjects = array(); foreach (KTBulkActionUtil::getBulkActionInfo($slot) as $aAction) { list($sClassName, $sPath, $sName, $sPlugin) = $aAction; $oRegistry =& KTPluginRegistry::getSingleton(); $oPlugin =& $oRegistry->getPlugin($sPlugin); if (!empty($sPath)) { require_once($sPath); } $aObjects[] = new $sClassName(null, null, $oPlugin); } return $aObjects; } function getBulkActionsByNames($aNames, $slot = 'bulkaction', $oUser = null) { $aObjects = array(); foreach (KTBulkActionUtil::getBulkActionInfo($slot) as $aAction) { list($sClassName, $sPath, $sName, $sPlugin) = $aAction; $oRegistry =& KTPluginRegistry::getSingleton(); $oPlugin =& $oRegistry->getPlugin($sPlugin); if (!in_array($sName, $aNames)) { continue; } if (!empty($sPath)) { require_once($sPath); } $aObjects[] = new $sClassName(null, $oUser, $oPlugin); } return $aObjects; }}?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?