baseindexer.php.svn-base

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

SVN-BASE
168
字号
<?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): ______________________________________ * */class KTBaseIndexerTrigger {    /**     * Which MIME types that this indexer acts upon.     */    var $mimetypes = array(       // 'text/plain' => true,    );    /**     * commandconfig is where to find the command to use in the     * KnowledgeTree configuration.  For example, it may be     * "indexing/catdoc", which would correspond to the "indexing"     * section of config.ini, item "catdoc".     */    var $commandconfig = '';    // Something like "indexing/catdoc"    /**     * In the absence of the command in the configuration, what command     * to use directly.     */    var $command = '';          // Something like "catdoc"    /**     * Output of the command     */    var $aCommandOutput = array();    /**     * Any options to send to the command before the input file.     */    var $args = array();    var $support_url = 'http://wiki.knowledgetree.com/Document_Indexers';    /**     * Setting use_pipes to true will cause the output of the command to     * be sent to a temporary file created and chosen by the system.     *     * If it is false, the temporary file will be sent as the last     * parameter.     */    var $use_pipes = true;    /* return a diagnostic string _if_ there is something wrong.  NULL otherwise. */    function getDiagnostic() {        return null;    }    function setDocument($oDocument) {        $this->oDocument = $oDocument;    }    function transform() {        $iMimeTypeId = $this->oDocument->getMimeTypeId();        $sMimeType = KTMime::getMimeTypeName($iMimeTypeId);        if (!array_key_exists($sMimeType, $this->mimetypes)) {            return;        }        $oStorage = KTStorageManagerUtil::getSingleton();        $sFile = $oStorage->temporaryFile($this->oDocument);        $tempstub = 'transform';        if ($this->command != null) {            $tempstub = $this->command;        }        $oKTConfig =& KTConfig::getSingleton();        $sBasedir = $oKTConfig->get("urls/tmpDirectory");        $myfilename = tempnam($sBasedir, 'kt.' . $tempstub);        if (OS_WINDOWS) {            $intermediate = tempnam($sBasedir, 'kt.' . $tempstub);            if (!@copy($sFile, $intermediate)) {                return ;            }        } else {            $intermediate = $sFile;        }        $contents = $this->extract_contents($intermediate, $myfilename);        @unlink($myfilename);        if (OS_WINDOWS) { @unlink($intermediate); }        if (empty($contents)) {            return;        }        $aInsertValues = array(            'document_id' => $this->oDocument->getId(),            'document_text' => $contents,        );        $sTable = KTUtil::getTableName('document_text');        // clean up the document query "stuff".        // FIXME this suggests that we should move the _old_ document_searchable_text across to the old-document's id if its a checkin.        DBUtil::runQuery(array('DELETE FROM ' . $sTable . ' WHERE document_id = ?', array($this->oDocument->getId())));        DBUtil::autoInsert($sTable, $aInsertValues, array('noid' => true));    }    // handles certain, _very_ simple reader types.    function extract_contents($sFilename, $sTempFilename) {        $sCommand = KTUtil::findCommand($this->commandconfig, $this->command);        if (empty($sCommand)) {            return false;        }        $cmdline = array($sCommand);        $cmdline = kt_array_merge($cmdline, $this->args);        $cmdline[] = $sFilename;        $aOptions = array();        $aOptions['exec_wait'] = 'true';        if ($this->use_pipes) {            $aOptions["append"] = $sTempFilename;        } else {            $cmdline[] = $sTempFilename;        }        $aRet = KTUtil::pexec($cmdline, $aOptions);        $this->aCommandOutput = $aRet['out'];        $contents = file_get_contents($sTempFilename);        return $contents;    }}?>

⌨️ 快捷键说明

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