ktdiscussion.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 451 行 · 第 1/2 页
PHP
451 行
}
}
// Thread and comment created correctly, commit to database
$this->commitTransaction();
$this->successRedirectToMain(_kt("New thread created"), sprintf('fDocumentId=%d', $this->oDocument->getId()));
exit(0);
}
function do_viewthread() {
$iThreadId = KTUtil::arrayGet($_REQUEST, 'fThreadId');
$oThread = DiscussionThread::get($iThreadId);
if (PEAR::isError($oThread) || empty($oThread)) {
return null;
}
$iCommentId = $oThread->getFirstCommentId();
$oComment = DiscussionComment::get($iCommentId);
// breadcrumbs...
$this->aBreadcrumbs[] = array(
'name' => _kt('discussion'),
'query' => sprintf('fDocumentId=%d', $this->oDocument->getId()),
);
$this->aBreadcrumbs[] = array(
'name' => $oComment->getSubject(),
);
$this->oPage->setBreadcrumbDetails(_kt("viewing comments"));
$oTemplate =& $this->oValidator->validateTemplate('ktstandard/action/discussion_thread');
// Fields for new thread creation
$replyFields = array();
$replyFields[] = new KTStringWidget(_kt("Subject"), _kt("The topic of discussion in this thread"), "subject", "", $this->oPage, true);
$replyFields[] = new KTTextWidget(_kt("Body"), _kt("Your contribution to the discussion in this thread"), "body", "", $this->oPage, true, null, null, array("cols" => 50, "rows" => 10));
// Fields for closing thread (if user has workflow permission)
$closeFields = array();
$oPermission =& KTPermission::getByName('ktcore.permissions.workflow');
if (!PEAR::isError($oPermission) && KTPermissionUtil::userHasPermissionOnItem($this->oUser, $oPermission, $this->oDocument) && $oThread->getState() != DISCUSSION_CLOSED) {
$aOptions = array('vocab' => $this->_buildStates($oThread));
$closeFields[] = new KTLookupWidget(_kt("State"), _kt("Select the state to move this discussion into"), "state", "", $this->oPage, true, null, null, $aOptions);
$closeFields[] = new KTTextWidget(_kt("Reason"), _kt("Describe the reason for the state change, or the conclusion reached through discussion"), "reason", "", $this->oPage, true, null, null, array("cols" => 50, "rows" => 5));
}
// increment views
$oThread->incrementNumberOfViews();
$oThread->update();
$aTemplateData = array(
'context' => &$this,
'replyfields' => $replyFields,
'closefields' => $closeFields,
'thread' => $oThread,
'commentrenderer' => new KTCommentListRenderer(),
);
return $oTemplate->render($aTemplateData);
}
function do_postreply() {
$aErrorOptions = array(
'redirect_to' => array('main', sprintf('fDocumentId=%d', $this->oDocument->getId())),
);
$iThreadId = KTUtil::arrayGet($_REQUEST, 'fThreadId');
$oThread = DiscussionThread::get($iThreadId);
$this->oValidator->notError($oThread, $aErrorOptions);
$aErrorOptions = array(
'redirect_to' => array('viewthread', sprintf('fDocumentId=%d&fThreadId=%d', $this->oDocument->getId(), $oThread->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 comment creation
$this->startTransaction();
// Create comment
$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);
// Update thread
$oThread->setLastCommentId($oComment->getId());
$oThread->incrementNumberOfReplies();
$res = $oThread->update();
// 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));
$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);
}
}
// Thread and comment created correctly, commit to database
$this->commitTransaction();
$this->successRedirectTo('viewThread', _kt("Reply posted"), sprintf('fDocumentId=%d&fThreadId=%d', $this->oDocument->getId(), $oThread->getId()));
exit(0);
}
function do_changestate() {
$aErrorOptions = array(
'redirect_to' => array('main', sprintf('fDocumentId=%d', $this->oDocument->getId())),
);
$iThreadId = KTUtil::arrayGet($_REQUEST, 'fThreadId');
$oThread = DiscussionThread::get($iThreadId);
$this->oValidator->notError($oThread, $aErrorOptions);
$aErrorOptions = array(
'redirect_to' => array('viewthread', sprintf('fDocumentId=%d&fThreadId=%d', $this->oDocument->getId(), $oThread->getId())),
);
$oPermission =& KTPermission::getByName('ktcore.permissions.workflow');
$sRedirectTo = implode('&', $aErrorOptions['redirect_to']);
if (PEAR::isError($oPermission)) {
$this->errorRedirectTo($sRedirectTo, _kt("Error getting permission"));
exit(0);
}
if (!KTPermissionUtil::userHasPermissionOnItem($this->oUser, $oPermission, $this->oDocument)) {
$this->errorRedirectTo($sRedirectTo, _kt("You do not have permission to close this thread"));
exit(0);
}
$iStateId = KTUtil::arrayGet($_REQUEST, 'state');
if(!in_array($iStateId, $this->aTransitions[$oThread->getState()])) {
$this->errorRedirectTo($sRedirectTo, _kt("Invalid transition"));
exit(0);
}
$aErrorOptions['message'] = _kt("No reason provided");
$sReason = $this->oValidator->validateString(KTUtil::arrayGet($_REQUEST, 'reason'), $aErrorOptions);
if($iStateId > $oThread->getState()) {
$sTransactionNamespace = 'ktcore.transactions.collaboration_step_approve';
} else {
$sTransactionNamespace = 'ktcore.transactions.collaboration_step_rollback';
}
// Start the transaction comment creation
$this->startTransaction();
$oThread->setState($iStateId);
if($iStateId == DISCUSSION_CLOSED) {
$oThread->setCloseMetadataVersion($this->oDocument->getMetadataVersion());
} else if($iStateId == DISCUSSION_CONCLUSION) {
$oThread->setCloseReason($sReason);
}
$oDocumentTransaction = new DocumentTransaction($this->oDocument, $sReason, $sTransactionNamespace);
$oDocumentTransaction->create();
$res = $oThread->update();
$aErrorOptions['message'] = _kt("There was an error updating the thread with the new comment");
$this->oValidator->notError($res, $aErrorOptions);
// Thread closed correctly, so commit
$this->commitTransaction();
$this->successRedirectTo('viewThread', _kt("Thread state changed"), sprintf('fDocumentId=%d&fThreadId=%d', $this->oDocument->getId(), $oThread->getId()));
exit(0);
}
function &_buildStates(&$oThread) {
$iCurState = $oThread->getState();
$aTransitions = $this->aTransitions[$iCurState];
$aVocab = array();
foreach($aTransitions as $iTransition) {
$aVocab[$iTransition] = $this->aStateNames[$iTransition];
}
return $aVocab;
}
function _getStateName($iStateId) {
return KTUtil::arrayGet($this->aStateNames, $iStateId, 'Unnamed state');
}
}
?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?