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 + -
显示快捷键?