⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 bulkaction.php.svn-base

📁 PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。
💻 SVN-BASE
📖 第 1 页 / 共 2 页
字号:
<?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 + -