adddocument.php.tmp

来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· TMP 代码 · 共 364 行

TMP
364
字号
<?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/folderaction.inc.php');require_once(KT_LIB_DIR . "/widgets/fieldsetDisplay.inc.php");require_once(KT_LIB_DIR . "/widgets/FieldsetDisplayRegistry.inc.php");require_once(KT_LIB_DIR . "/foldermanagement/folderutil.inc.php");require_once(KT_LIB_DIR . "/documentmanagement/observers.inc.php");require_once(KT_LIB_DIR . "/documentmanagement/documentutil.inc.php");require_once(KT_LIB_DIR . "/metadata/fieldsetregistry.inc.php");require_once(KT_LIB_DIR . "/util/sanitize.inc");class KTFolderAddDocumentAction extends KTFolderAction {    var $sName = 'ktcore.actions.folder.addDocument';    var $_sShowPermission = "ktcore.permissions.write";    var $oDocumentType = null;    function getDisplayName() {        return _kt('Add Document');    }    function check() {        $res = parent::check();        if (empty($res)) {            return $res;        }        $postExpected = KTUtil::arrayGet($_REQUEST, "postExpected");        $postReceived = KTUtil::arrayGet($_REQUEST, "postReceived");        if (!empty($postExpected)) {            $aErrorOptions = array(                'redirect_to' => array('main', sprintf('fFolderId=%d', $this->oFolder->getId())),                'message' => _kt('Upload larger than maximum POST size (post_max_size variable in .htaccess or php.ini)'),            );            $this->oValidator->notEmpty($postReceived, $aErrorOptions);        }        return true;    }    function form_initialdata() {        $oForm = new KTForm;        $oForm->setOptions(array(            'label' => _kt("Add a document"),            'action' => 'processInitialData',            'actionparams' => 'postExpected=1&fFolderId='.$this->oFolder->getId(),        //    'cancel_action' => KTBrowseUtil::getUrlForFolder($this->oFolder),            'fail_action' => 'main',            'context' => &$this,            'extraargs' => $this->meldPersistQuery("","",true),            'submit_label' => _kt("Add"),            'file_upload' => true,        ));        $aTypes;        foreach (DocumentType::getListForUserAndFolder($this->oUser, $this->oFolder) as $oDocumentType) {            if(!$oDocumentType->getDisabled()) {                $aTypes[] = $oDocumentType;            }        }        // Onchange gets the name of the file and inserts it as the document title.        $sFileOnchange = "javascript:            var doc = document.getElementById('document_name');            if(doc.value == ''){                var arrPath=this.value.split('/');                if(arrPath.length == 1){                    var arrPath=this.value.split('\\\');                }                var name=arrPath[arrPath.length-1];                var name=name.split('.');                var len = name.length;                if(len > 1){                    if(name[len-1].length <= 4){                        name.pop();                    }                }                var title=name.join('.');                doc.value=title;            }";        $oForm->setWidgets(array(            array('ktcore.widgets.file',array(                'label' => _kt('File'),                'description' => _kt('The contents of the document to be added to the document management system.'),                'name' => 'file',                'required' => true,                'onchange' => $sFileOnchange,            )),            array('ktcore.widgets.string',array(                'label' => _kt('Document Title'),                'description' => sprintf(_kt('The document title is used as the main name of a document throughout %s.'), APP_NAME),                'name' => 'document_name',                'required' => true,                'id' => 'document_name',            )),            array('ktcore.widgets.entityselection',array(                'label' => _kt('Document Type'),                'description' => _kt('Document Types, defined by the administrator, are used to categorise documents. Please select a Document Type from the list below.'),                'name' => 'document_type',                'required' => true,                'vocab' => $aTypes,                'initial_string' => _kt('- Please select a document type -'),                'id_method' => 'getId',                'label_method' => 'getName',                'simple_select' => false,            )),        ));        $oForm->setValidators(array(            array('ktcore.validators.file', array(                'test' => 'file',                'output' => 'file',            )),            array('ktcore.validators.fileillegalchar', array(                'test' => 'file',                'output' => 'file',            )),            array('ktcore.validators.string', array(                'test' => 'document_name',                'output' => 'document_name',            )),            array('ktcore.validators.illegal_char', array(                'test' => 'document_name',                'output' => 'document_name',            )),            array('ktcore.validators.entity', array(                'test' => 'document_type',                'output' => 'document_type',                'class' => 'DocumentType',                'ids' => true,            )),        ));        return $oForm;    }    function getFieldsetsForType($iTypeId) {        $typeid = KTUtil::getId($iTypeId);        $aGenericFieldsetIds = KTFieldset::getGenericFieldsets(array('ids' => false));        $aSpecificFieldsetIds = KTFieldset::getForDocumentType($typeid, array('ids' => false));        $fieldsets = kt_array_merge($aGenericFieldsetIds, $aSpecificFieldsetIds);        return $fieldsets;    }    function do_main() {        $this->oPage->setBreadcrumbDetails(_kt("Add a document"));        $oForm = $this->form_initialdata();        return $oForm->renderPage(_kt('Add a document to: ') . $this->oFolder->getName());    }    function do_processInitialData() {        $oForm = $this->form_initialdata();        $res = $oForm->validate();        if (!empty($res['errors'])) {            if(!isset($res['errors']['file'])){                $aError['file'] = array(_kt('Please reselect the file to upload.'));            }            return $oForm->handleError('', $aError);        }        $data = $res['results'];        $key = KTUtil::randomString(32);        // joy joy, we need to store the file first, or PHP will (helpfully)        // clean it up for us        $oKTConfig =& KTConfig::getSingleton();        $sBasedir = $oKTConfig->get("urls/tmpDirectory");        $sFilename = tempnam($sBasedir, 'kt_storecontents');        //$oContents = new KTFSFileLike($data['file']['tmp_name']);        //$oOutputFile = new KTFSFileLike($sFilename);        //$res = KTFileLikeUtil::copy_contents($oContents, $oOutputFile);        //if (PEAR::isError($res)) {        //    $oForm->handleError(sprintf(_kt("Failed to store file: %s"), $res->getMessage()));        //}        $oStorage =& KTStorageManagerUtil::getSingleton();        $oStorage->uploadTmpFile($data['file']['tmp_name'], $sFilename);        $data['file']['tmp_name'] = $sFilename;        $_SESSION['_add_data'] = array($key => $data);        // if we don't need metadata        $fieldsets = $this->getFieldsetsForType($data['document_type']);        if (empty($fieldsets)) {            return $this->successRedirectTo('finalise', _kt("File uploaded successfully. Processing."), sprintf("fFileKey=%s", $key));        }        // if we need metadata        $this->successRedirectTo('metadata', _kt("File uploaded successfully.  Please fill in the metadata below."), sprintf("fFileKey=%s", $key));    }    function form_metadata($sess_key) {        $oForm = new KTForm;        $oForm->setOptions(array(            'identifier' => 'ktcore.document.add',            'label' => _kt('Specify Metadata'),            'submit_label' => _kt('Save Document'),            'action' => 'finalise',            'fail_action' => 'metadata',         //   'cancel_url' => KTBrowseUtil::getUrlForDocument($this->oDocument),            'context' => &$this,            'extraargs' => $this->meldPersistQuery("","",true),        ));        $oFReg =& KTFieldsetRegistry::getSingleton();        $doctypeid = $_SESSION['_add_data'][$sess_key]['document_type'];        $widgets = array();        $validators = array();        $fieldsets = $this->getFieldsetsForType($doctypeid);        foreach ($fieldsets as $oFieldset) {            $widgets = kt_array_merge($widgets, $oFReg->widgetsForFieldset($oFieldset, 'fieldset_' . $oFieldset->getId(), $this->oDocument));            $validators = kt_array_merge($validators, $oFReg->validatorsForFieldset($oFieldset, 'fieldset_' . $oFieldset->getId(), $this->oDocument));        }        $oForm->setWidgets($widgets);        $oForm->setValidators($validators);        return $oForm;    }    function do_metadata() {        $this->persistParams(array('fFileKey'));        $oForm = $this->form_metadata($_REQUEST['fFileKey']);        return $oForm->render();    }    function do_finalise() {        $this->persistParams(array('fFileKey'));        $sess_key = $_REQUEST['fFileKey'];        $oForm = $this->form_metadata($sess_key);        $res = $oForm->validate();        if (!empty($res['errors'])) {            return $oForm->handleError();        }        $data = $res['results'];        $extra_d = $_SESSION['_add_data'][$sess_key];        $doctypeid = $extra_d['document_type'];        $aGenericFieldsetIds = KTFieldset::getGenericFieldsets(array('ids' => false));        $aSpecificFieldsetIds = KTFieldset::getForDocumentType($doctypeid, array('ids' => false));        $fieldsets = kt_array_merge($aGenericFieldsetIds, $aSpecificFieldsetIds);        $MDPack = array();        foreach ($fieldsets as $oFieldset) {            $fields = $oFieldset->getFields();            $values = (array) KTUtil::arrayGet($data, 'fieldset_' . $oFieldset->getId());            foreach ($fields as $oField) {                $val = KTUtil::arrayGet($values, 'metadata_' . $oField->getId());				if ($oFieldset->getIsConditional())                {                	if ($val == _kt('No selection.'))                	{                		$val = null;                	}                }                // ALT.METADATA.LAYER.DIE.DIE.DIE                if (!is_null($val)) {                    $MDPack[] = array(                        $oField,                        $val                    );                }            }        }        // older code        $mpo =& new JavascriptObserver($this);        $oUploadChannel =& KTUploadChannel::getSingleton();        $oUploadChannel->addObserver($mpo);        require_once(KT_LIB_DIR . '/storage/storagemanager.inc.php');        //require_once(KT_LIB_DIR . '/filelike/fsfilelike.inc.php');        require_once(KT_LIB_DIR . '/documentmanagement/DocumentType.inc');        require_once(KT_LIB_DIR . '/metadata/fieldset.inc.php');        require_once(KT_LIB_DIR . '/documentmanagement/documentutil.inc.php');        $aErrorOptions = array(            'redirect_to' => array('main', sprintf('fFolderId=%d', $this->oFolder->getId())),    	    'max_str_len' => 200,        );        $aFile = $this->oValidator->validateFile($extra_d['file'], $aErrorOptions);        $sTitle = $extra_d['document_name'];        $iFolderId = $this->oFolder->getId();        $aOptions = array(            // 'contents' => new KTFSFileLike($aFile['tmp_name']),            'temp_file' => $aFile['tmp_name'],            'documenttype' => DocumentType::get($extra_d['document_type']),            'metadata' => $MDPack,            'description' => $sTitle,            'cleanup_initial_file' => true,        );        $mpo->start();        //$this->startTransaction();        $oDocument =& KTDocumentUtil::add($this->oFolder, $aFile['name'], $this->oUser, $aOptions);        if (PEAR::isError($oDocument)) {            $message = $oDocument->getMessage();            $this->errorRedirectTo('main',sprintf(_kt("Unexpected failure to add document - %s"), $message), 'fFolderId=' . $this->oFolder->getId());            exit(0);        }        $this->addInfoMessage(_kt("Document added"));        //$this->commitTransaction();        $mpo->redirectToDocument($oDocument->getId());        exit(0);    }}?>

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?