ktdiscussion.php.svn-base

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

SVN-BASE
451
字号
<?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 . '/widgets/fieldWidgets.php');require_once(KT_LIB_DIR . '/discussions/DiscussionThread.inc');require_once(KT_LIB_DIR . '/discussions/DiscussionComment.inc');require_once(KT_LIB_DIR . "/util/sanitize.inc");define('DISCUSSION_OPEN', 0);define('DISCUSSION_CONCLUSION', 1);define('DISCUSSION_CLOSED', 2);class KTDiscussionPlugin extends KTPlugin {    var $sNamespace = "ktstandard.discussion.plugin";    var $autoRegister = true;    function KTDiscussionPlugin($sFilename = null) {        $res = parent::KTPlugin($sFilename);        $this->sFriendlyName = _kt('Document Discussions Plugin');        return $res;    }    function setup() {        $this->registerAction('documentaction', 'KTDocumentDiscussionAction', 'ktcore.actions.document.discussion');    }}$oRegistry =& KTPluginRegistry::getSingleton();$oRegistry->registerPlugin('KTDiscussionPlugin', 'ktstandard.discussion.plugin', __FILE__);class KTDiscussionThreadListRenderer {    function render($context, $oThread) {        $this->oThread = $oThread;        $oTemplate = $context->oValidator->validateTemplate('ktstandard/action/discussion_thread_list_item');        $oFirstComment = DiscussionComment::get($oThread->getFirstCommentId());        if (PEAR::isError($oFirstComment)) {            return null;        }        $oLastComment = DiscussionComment::get($oThread->getLastCommentId());        if (PEAR::isError($oLastComment)) {            return null;        }        $oCreator = User::get($oThread->getCreatorId());        $oTemplate->setData(array(            'thread' => $this->oThread,            'first_comment' => $oFirstComment,            'last_comment' => $oLastComment,            'creator' => $oCreator,            'context' => $context,        ));        return $oTemplate->render();    }}class KTCommentListRenderer {    var $bCycle = false;    function render($context, $oComment, $oThread) {        $this->oComment = $oComment;        $this->bCycle = !$this->bCycle;        $oTemplate = $context->oValidator->validateTemplate('ktstandard/action/discussion_comment_list_item');        $oCreator = User::get($oComment->getUserId());        $oTemplate->setData(array(            'comment' => $oComment,            'state'   => $oThread->getState(),            'creator' => $oCreator,            'context' => $context,            'cycle'   => $this->bCycle,        ));        return $oTemplate->render();    }}class KTDocumentDiscussionAction extends KTDocumentAction {    var $sName = 'ktcore.actions.document.discussion';    var $aTransitions = array(DISCUSSION_OPEN => array(DISCUSSION_CONCLUSION),			      DISCUSSION_CONCLUSION => array(DISCUSSION_OPEN, DISCUSSION_CLOSED),			      DISCUSSION_CLOSED => array());    function KTDocumentDiscussionAction($oDocument = null, $oUser = null, $oPlugin = null) {        $this->aStateNames = array(DISCUSSION_OPEN => _kt('Under discussion'),			     DISCUSSION_CONCLUSION => _kt('Conclusion'),			     DISCUSSION_CLOSED => _kt('Closed'));        parent::KTDocumentAction($oDocument, $oUser, $oPlugin);    }    function getDisplayName() {        return _kt('Discussion');    }    function do_main() {        $this->oPage->setBreadcrumbDetails(_kt("discussion"));        $oTemplate =& $this->oValidator->validateTemplate('ktstandard/action/discussion');        // Fields for new thread creation        $fields = array();        $fields[] = new KTStringWidget(_kt("Subject"), _kt("The topic of discussion in this thread"), "subject", "", $this->oPage, true);        $fields[] = new KTTextWidget(_kt("Body"), _kt("Your contribution to the discussion in this thread"), "body", "", $this->oPage, true, null, null, array("cols" => 50, "rows" => 10));    	$bIncludeClosed = KTUtil::arrayGet($_REQUEST, 'fIncludeClosed', false);    	$sQuery = sprintf('document_id = %d', $this->oDocument->getId());    	if(!$bIncludeClosed) {    	    $sQuery .= sprintf(' AND state != %d', DISCUSSION_CLOSED);    	}        $threads = DiscussionThread::getList($sQuery);        $sQuery2 = sprintf('document_id = %d AND state = %d', $this->oDocument->getId(), DISCUSSION_CLOSED);        $closed = DiscussionThread::getList($sQuery2);        $aTemplateData = array(            'context' => &$this,            'fields' => $fields,            'threads' => $threads,            'closed_threads' => count($closed),            'threadrenderer' => new KTDiscussionThreadListRenderer(),        );        return $oTemplate->render($aTemplateData);    }    function do_newthread() {        $aErrorOptions = array(            'redirect_to' => array('main', sprintf('fDocumentId=%d', $this->oDocument->getId())),        );        $aErrorOptions['message'] = _kt("No subject provided");        $sSubject = KTUtil::arrayGet($_REQUEST, 'subject');        $sSubject = $this->oValidator->validateString($sSubject, $aErrorOptions);        $aErrorOptions['message'] = _kt("No body provided");        $sBody = KTUtil::arrayGet($_REQUEST, 'body');        $sBody = $this->oValidator->validateString($sBody, $aErrorOptions);        // Start the transaction around thread and comment creation        $this->startTransaction();        $oThread = DiscussionThread::createFromArray(array(            'documentid' => $this->oDocument->getId(),            'creatorid' => $this->oUser->getId(),        ));        $aErrorOptions['message'] = _kt("There was an error creating a new thread");        $this->oValidator->notError($oThread, $aErrorOptions);        $oComment = DiscussionComment::createFromArray(array(            'threadid' => $oThread->getId(),            'userid' => $this->oUser->getId(),            'subject' => $sSubject,            'body' => KTUtil::formatPlainText($sBody),        ));        $aErrorOptions['message'] = _kt("There was an error adding the comment to the thread");        $this->oValidator->notError($oComment, $aErrorOptions);        $oThread->setFirstCommentId($oComment->getId());        $oThread->setLastCommentId($oComment->getId());        // NEW SEARCH        /*        // add to searchable_text.        $sTable = KTUtil::getTableName('comment_searchable_text');        $aSearch = array(            'comment_id' => $oComment->getId(),            'document_id' => $this->oDocument->getId(),            'body' => sprintf("%s %s", KTUtil::formatPlainText($sBody), $sSubject),        );        DBUtil::autoInsert($sTable,            $aSearch,            array('noid' => true));*/        $res = $oThread->update();        $aErrorOptions['message'] = _kt("There was an error updating the thread with the new comment");        $this->oValidator->notError($res, $aErrorOptions);        $oKTTriggerRegistry = KTTriggerRegistry::getSingleton();        $aTriggers = $oKTTriggerRegistry->getTriggers('discussion', 'postValidate');        foreach ($aTriggers as $aTrigger) {            $sTrigger = $aTrigger[0];            $oTrigger = new $sTrigger;            $aInfo = array(                "document" => $this->oDocument,                "comment" => $oComment,            );            $oTrigger->setInfo($aInfo);            $ret = $oTrigger->postValidate();            if (PEAR::isError($ret)) {                $this->oValidator->notError($res, $aErrorOptions);

⌨️ 快捷键说明

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