ktdocumentactions.php
来自「PHP 知识管理系统(基于树结构的知识管理系统), 英文原版的PHP源码。」· PHP 代码 · 共 1,703 行 · 第 1/5 页
PHP
1,703 行
function do_main() {
$oForm = $this->form_move();
return $oForm->renderPage(_kt('Move Document') . ': ' . $this->oDocument->getName());
}
function form_move() {
$oForm = new KTForm;
$oForm->setOptions(array(
'label' => _kt('Move Document'),
'submit_label' => _kt('Move'),
'identifier' => 'ktcore.actions.movedoc',
'action' => 'move',
'cancel_url' => KTBrowseUtil::getUrlForDocument($this->oDocument),
'fail_action' => 'main',
'context' => $this,
));
/*
* This is somewhat more complex than most forms, since the "filename"
* and title shouldn't appear unless there's a clash.
*
* This is still not the most elegant solution.
*/
$oForm->setWidgets(array(
array('ktcore.widgets.foldercollection', array(
'label' => _kt('Target Folder'),
'description' => _kt('Use the folder collection and path below select the folder into which you wish to move the document.'),
'required' => true,
'name' => 'browse',
'folder_id' => $this->oDocument->getFolderID(),
)),
array('ktcore.widgets.reason', array(
'label' => _kt('Reason'),
'description' => _kt('Please specify why you are moving this document. Bear in mind that you can use a maximum of <strong>250</strong> characters.'),
'name' => 'reason',
)),
));
$oForm->setValidators(array(
array('ktcore.validators.string', array(
'test' => 'reason',
'max_length' => 250,
'output' => 'reason',
)),
array('ktcore.validators.entity', array(
'class' => 'Folder',
'test' => 'browse',
'output' => 'browse',
)),
));
// here's the ugly bit.
$err = $oForm->getErrors();
if (!empty($err['name']) || !empty($err['filename'])) {
$oForm->addWidget(
array('ktcore.widgets.string', array(
'label' => _kt('Document Title'),
'value' => sanitizeForHTML($this->oDocument->getName()),
'important_description' => _kt('Please indicate a new title to use to resolve any title conflicts.'),
'name' => 'name',
'required' => true,
))
);
$oForm->addValidator(
array('ktcore.validators.string', array(
'output' => 'name',
'test' => 'name'
))
);
$oForm->addWidget(
array('ktcore.widgets.string', array(
'label' => _kt('Filename'),
'value' => sanitizeForHTML($this->oDocument->getFilename()),
'important_description' => _kt('Please indicate a new filename to use to resolve any conflicts.'),
'name' => 'filename',
'required' => true,
))
);
$oForm->addValidator(
array('ktcore.validators.string', array(
'output' => 'filename',
'test' => 'filename'
))
);
}
return $oForm;
}
function do_move() {
$oForm = $this->form_move();
$res = $oForm->validate();
$errors = $res['errors'];
$data = $res['results'];
$sReason = $data['reason'];
$extra_errors = array();
if (!is_null($data['browse'])) {
if ($data['browse']->getId() == $this->oDocument->getFolderID()) {
$extra_errors['browse'] = _kt('You cannot move the document within the same folder.');
} else {
$bNameClash = KTDocumentUtil::nameExists($data['browse'], $this->oDocument->getName());
if ($bNameClash && isset($data['name'])) {
$name = $data['name'];
$bNameClash = KTDocumentUtil::nameExists($data['browse'], $name);
} else {
$name = $this->oDocument->getName();
}
if ($bNameClash) {
$extra_errors['name'] = _kt('A document with this title already exists in your chosen folder. Please choose a different folder, or specify a new title for the copied document.');
}
$bFileClash = KTDocumentUtil::fileExists($data['browse'], $this->oDocument->getFilename());
if ($bFileClash && isset($data['filename'])) {
$filename = $data['filename'];
$bFileClash = KTDocumentUtil::fileExists($data['browse'], $filename);
} else {
$filename = $this->oDocument->getFilename();
}
if ($bFileClash) {
$extra_errors['filename'] = _kt('A document with this filename already exists in your chosen folder. Please choose a different folder, or specify a new filename for the copied document.');
}
if (!Permission::userHasFolderWritePermission($data['browse'])) {
$extra_errors['browse'] = _kt('You do not have permission to create new documents in that folder.');
}
}
}
if (!empty($errors) || !empty($extra_errors)) {
return $oForm->handleError(null, $extra_errors);
}
$this->startTransaction();
// now try update it.
$res = KTDocumentUtil::move($this->oDocument, $data['browse'], $this->oUser, $sReason);
if (PEAR::isError($oNewDoc)) {
$this->errorRedirectTo('main', _kt('Failed to move document: ') . $oNewDoc->getMessage());
exit(0);
}
$this->oDocument->setName($name); // if needed.
$this->oDocument->setFilename($filename); // if needed.
$res = $this->oDocument->update();
if (PEAR::isError($res)) {
return $this->errorRedirectTo('main', _kt('Failed to move document: ') . $res->getMessage());
}
$this->commitTransaction();
controllerRedirect('viewDocument', 'fDocumentId=' . $this->oDocument->getId());
exit(0);
}
}
// }}}
class KTDocumentCopyColumn extends TitleColumn {
function KTDocumentCopyColumn($sLabel, $sName, $oDocument) {
$this->oDocument = $oDocument;
parent::TitleColumn($sLabel, $sName);
}
function buildFolderLink($aDataRow) {
return KTUtil::addQueryString($_SERVER['PHP_SELF'], sprintf('fDocumentId=%d&fFolderId=%d', $this->oDocument->getId(), $aDataRow['folder']->getId()));
}
}
// {{{ KTDocumentMoveAction
class KTDocumentCopyAction extends KTDocumentAction {
var $sName = 'ktcore.actions.document.copy';
var $_sShowPermission = 'ktcore.permissions.read';
function getDisplayName() {
return _kt('Copy');
}
function getInfo() {
if ($this->oDocument->getIsCheckedOut()) {
return null;
}
return parent::getInfo();
}
function check() {
$res = parent::check();
if ($res !== true) {
return $res;
}
if ($this->oDocument->getIsCheckedOut()) {
$_SESSION['KTErrorMessage'][]= _kt('This document can\'t be copied because it is checked out');
controllerRedirect('viewDocument', 'fDocumentId=' . $this->oDocument->getId());
exit(0);
}
$iFolderId = KTUtil::arrayGet($_REQUEST, 'fFolderId', $this->oDocument->getFolderId());
$this->oFolder = $this->oValidator->validateFolder($iFolderId);
$this->oDocumentFolder = $this->oValidator->validateFolder($this->oDocument->getFolderId());
return true;
}
function form_copyselection() {
$oForm = new KTForm;
$oForm->setOptions(array(
'label' => _kt('Copy Document'),
'submit_label' => _kt('Copy'),
'identifier' => 'ktcore.actions.copydoc',
'action' => 'copy',
'cancel_url' => KTBrowseUtil::getUrlForDocument($this->oDocument),
'fail_action' => 'main',
'context' => $this,
));
/*
* This is somewhat more complex than most forms, since the "filename"
* and title shouldn't appear unless there's a clash.
*
* This is still not the most elegant solution.
*/
$oForm->setWidgets(array(
array('ktcore.widgets.foldercollection', array(
'label' => _kt('Target Folder'),
'description' => _kt('Use the folder collection and path below to browse to the folder you wish to copy the documents into.'),
'required' => true,
'name' => 'browse',
'folder_id' => $this->oDocument->getFolderID(),
)),
array('ktcore.widgets.reason', array(
'label' => _kt('Reason'),
'description' => _kt('Please specify why you are copying this document. Bear in mind that you can use a maximum of <strong>250</strong> characters.'),
'name' => 'reason',
)),
));
$oForm->setValidators(array(
array('ktcore.validators.string', array(
'test' => 'reason',
'max_length' => 250,
'output' => 'reason',
)),
array('ktcore.validators.entity', array(
'class' => 'Folder',
'test' => 'browse',
'output' => 'browse',
)),
));
// here's the ugly bit.
$err = $oForm->getErrors();
if (!empty($err['name']) || !empty($err['filename'])) {
$oForm->addWidget(
array('ktcore.widgets.string', array(
'label' => _kt('Document Title'),
'value' => sanitizeForHTML($this->oDocument->getName()),
'important_description' => _kt('Please indicate a new title to use to resolve any title conflicts.'),
'name' => 'name',
'required' => true,
))
);
$oForm->addValidator(
array('ktcore.validators.string', array(
'output' => 'name',
'test' => 'name'
))
);
$oForm->addWidget(
array('ktcore.widgets.string', array(
'label' => _kt('Filename'),
'value' => sanitizeForHTML($this->oDocument->getFilename()),
'important_description' => _kt('Please indicate a new filename to use to resolve any conflicts.'),
'name' => 'filename',
'required' => true,
))
);
$oForm->addValidator(
array('ktcore.validators.string', array(
'output' => 'filename',
'test' => 'filename'
))
);
}
return $oForm;
}
function do_main() {
$this->oPage->setBreadcrumbDetails(_kt('Copy'));
$oForm = $this->form_copyselection();
return $oForm->renderPage(_kt('Copy Document') . ': ' . $this->oDocument->getName());
}
function do_copy() {
$oForm = $this->form_copyselection();
$res = $oForm->validate();
$errors = $res['errors'];
$data = $res['results'];
$sReason = $data['reason'];
$extra_errors = array();
if (!is_null($data['browse'])) {
$bNameClash = KTDocumentUtil::nameExists($data['browse'], $this->oDocument->getName());
if ($bNameClash && isset($data['name'])) {
$name = $data['name'];
$bNameClash = KTDocumentUtil::nameExists($data['browse'], $name);
} else {
$name = $this->oDocument->getName();
}
if ($bNameClash) {
$extra_errors['name'] = _kt('A document with this title already exists in your chosen folder. Please choose a different folder, or specify a new title for the copied document.');
}
$bFileClash = KTDocumentUtil::fileExists($data['browse'], $this->oDocument->getFilename());
if ($bFileClash && isset($data['filename'])) {
$filename = $data['filename'];
$bFileClash = KTDocumentUtil::fileExists($data['browse'], $filename);
} else {
$filename = $this->oDocument->getFilename();
}
if ($bFileClash) {
$extra_errors['filename'] = _kt('A document with this filename already exists in your chosen folder. Please choose a different folder, or specify a new filename for the copied document.');
}
if (!Permission::userHasFolderWritePermission($data['browse'])) {
$extra_errors['browse'] = _kt('You do not have permission to create new documents in that folder.');
}
}
if (!empty($errors) || !empty($extra_errors)) {
return $oForm->handleError(null, $extra_errors);
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?