ktdiscussion.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 451 行 · 第 1/2 页
PHP
451 行
<?php
/**
* $Id: KTDiscussion.php 8387 2008-04-22 16:36:04Z kevin_fourie $
*
* 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 + -
显示快捷键?