📄 bulkaction.php.svn-base
字号:
<?php/** * $Id$ * * KnowledgeTree Community Edition * Document Management Made Simple * Copyright (C) 2008 KnowledgeTree Inc. * Portions copyright The Jam Warehouse Software (Pty) Limited * * This program is free software; you can redistribute it and/or modify it under * the terms of the GNU General Public License version 3 as published by the * Free Software Foundation. * * This program is distributed in the hope that it will be useful, but WITHOUT * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS * FOR A PARTICULAR PURPOSE. See the GNU General Public License for more * details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. * * You can contact KnowledgeTree Inc., PO Box 7775 #87847, San Francisco, * California 94120-7775, or email info@knowledgetree.com. * * The interactive user interfaces in modified source and object code versions * of this program must display Appropriate Legal Notices, as required under * Section 5 of the GNU General Public License version 3. * * In accordance with Section 7(b) of the GNU General Public License version 3, * these Appropriate Legal Notices must retain the display of the "Powered by * KnowledgeTree" logo and retain the original copyright notice. If the display of the * logo is not reasonably feasible for technical reasons, the Appropriate Legal Notices * must display the words "Powered by KnowledgeTree" and retain the original * copyright notice. * Contributor( s): ______________________________________ * */require_once(KT_LIB_DIR . '/actions/actionregistry.inc.php');require_once(KT_LIB_DIR . '/workflow/workflowutil.inc.php');require_once(KT_LIB_DIR . '/dispatcher.inc.php');require_once(KT_LIB_DIR . '/browse/browseutil.inc.php');require_once(KT_LIB_DIR . '/actions/entitylist.php');require_once(KT_LIB_DIR . '/foldermanagement/folderutil.inc.php');require_once(KT_LIB_DIR . '/documentmanagement/documentutil.inc.php');require_once(KT_LIB_DIR . '/widgets/forms.inc.php');require_once(KT_LIB_DIR . "/util/sanitize.inc");class KTBulkAction extends KTStandardDispatcher { var $sName; var $sDescription; var $_sDisablePermission; var $bAllowInAdminMode = false; var $sHelpPage = 'ktcore/browse.html'; var $sSection = 'view_details'; var $_bMutator = false; var $_bMutationAllowedByAdmin = true; var $sIconClass; // not 'sShowPermission' - mass actions are always shown // this is used to check against individual entities var $_sPermission = 'ktcore.permissions.read'; function KTBulkAction($oUser = null, $oPlugin = null) { $this->oEntityList = null; $this->oActiveEntityList = null; $this->oUser =& $oUser; $this->oPlugin =& $oPlugin; $this->aBreadcrumbs = array( array('action' => 'browse', 'name' => _kt('Browse')), ); $this->persistParams('fEntityListCode'); parent::KTStandardDispatcher(); } function setEntityList(&$oEntityList) { $this->oEntityList =& $oEntityList; } function setUser(&$oUser) { $this->oUser =& $oUser; } function _show() { return true; } function getURL() { $oKTConfig =& KTConfig::getSingleton(); $sExt = '.php'; if (KTUtil::arrayGet($_SERVER, 'kt_no_extensions')) { $sExt = ''; } if ($oKTConfig->get('KnowledgeTree/pathInfoSupport')) { return sprintf('%s/action%s/%s', $GLOBALS['KTRootUrl'], $sExt, $this->sName); } else { return sprintf('%s/action%s?kt_path_info=%s', $GLOBALS['KTRootUrl'], $sExt, $this->sName); } } function getInfo() { if ($this->_show() === false) { return null; } $url = $this->getURL(); $aInfo = array( 'description' => $this->sDescription, 'name' => $this->getDisplayName(), 'ns' => $this->sName, 'url' => $url, 'icon_class' => $this->sIconClass, ); $aInfo = $this->customiseInfo($aInfo); return $aInfo; } function getName() { return sanitizeForSQLtoHTML($this->sName); } function getDisplayName() { return sanitizeForSQLtoHTML($this->sDisplayName); } function getDescription() { return sanitizeForSQLtoHTML($this->sDescription); } function customiseInfo($aInfo) { return $aInfo; } // helper function function _getNames($aIds, $sEntity) { if(count($aIds)) { $aNames = array(); $aFunc = array($sEntity, 'get'); foreach($aIds as $id) { $oE =& call_user_func($aFunc, $id); $name = array(); $name['name'] = $oE->getName(); //add shortcut notice if the entity is a shortcut if($oE->isSymbolicLink()){ $name['notice'] = _kt("Shortcut"); } $aNames[] = $name; } return $aNames; } else { return array(); } } /** * Checks if there are symlinks that are linking to items in the current list * Useful if you want to prompt the user with a confirmation because they're * automatically deleted when their targets are deleted or archived. * * @return boolean */ function symlinksLinkingToCurrentList(){ $symlinksPresent = false; foreach($this->oActiveEntityList->getDocumentIds() as $iDocument){ $oDocument = Document::get($iDocument); if(count($oDocument->getSymbolicLinks()) > 0){ $symlinksPresent = true; break; } } if($symlinksPresent == false){ foreach($this->oActiveEntityList->getFolderIds() as $iFolder){ $oStartFolder = Folder::get($iFolder); $aRemainingFolders = array($oStartFolder->getId()); while (!empty($aRemainingFolders)) { $iFolderId = array_pop($aRemainingFolders); $oFolder = Folder::get($iFolderId); if(count($oFolder->getSymbolicLinks()) > 0){ $symlinksPresent = true; break; } $aChildDocs = Document::getList(array('folder_id = ?',array($iFolderId))); foreach ($aChildDocs as $oDoc) { if(count($oDoc->getSymbolicLinks()) > 0){ $symlinksPresent = true; break; } } $aCFIds = Folder::getList(array('parent_id = ?', array($iFolderId)), array('ids' => true)); $aRemainingFolders = kt_array_merge($aRemainingFolders, $aCFIds); } } } return $symlinksPresent; }/** * checks a folderList for shortcuts and queries the repositories for all folders * that are somehow connected to these folders. */ 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)); $sFolderId = $oFolder->getId(); // Get all the folders within the current folder $sWhereClause = "parent_folder_ids = '{$sFolderId}' OR parent_folder_ids LIKE '{$sFolderId},%' OR parent_folder_ids LIKE '%,{$sFolderId},%' OR parent_folder_ids LIKE '%,{$sFolderId}'"; $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; } // doesn't actually do checks, as they have to be performed per-entity function check() { // not necessarily coming from a folder... $iFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId', 1); $this->oFolder = Folder::get($iFolderId); //$this->oFolder =& $this->oValidator->validateFolder($_REQUEST['fFolderId']); $aOptions = array( 'final' => false, 'documentaction' => 'viewDocument', 'folderaction' => 'browse', ); $this->aBreadcrumbs = array(array('name'=>_kt('Bulk Actions')), array('name'=>$this->getDisplayName())); return true; } // check the entire entity list. this needn't be overrided at any point function check_entities() { $aFailed = array('documents' => array(), 'folders' => array()); $aSucceeded = array('documents' => array(), 'folders' => array()); if(!$this->oEntityList) { return true; } foreach($this->oEntityList->getDocumentIds() as $iId) { $oDocument =& Document::get($iId); if(PEAR::isError($oDocument)) { $aFailed['documents'][] = array($iId, _kt('No such document')); } else { $res = $this->check_entity($oDocument); // all these checks allow a return from check_entity of: // 1. a PEAR error, indicating failure, with the message in the error // 2. false, for unknown error // 3. true, to pass if(PEAR::isError($res)) { $aFailed['documents'][] = array($oDocument->getName(), $res->getMessage()); } else if($res === false) { $aFailed['documents'][] = array($oDocument->getName(), _kt('Failed (unknown reason)')); } else { $aSucceeded['documents'][] = $oDocument->getId(); } } } foreach($this->oEntityList->getFolderIds() as $iId) { $oFolder =& Folder::get($iId); if(PEAR::isError($oFolder)) { $aFailed['folders'][] = array($iId, _kt('No such folder')); } else { $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());
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -