addDocument.php
5.85 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
<?php
require_once(KT_LIB_DIR . '/actions/folderaction.inc.php');
require_once(KT_LIB_DIR . "/widgets/fieldsetDisplay.inc.php");
require_once(KT_LIB_DIR . "/widgets/FieldsetDisplayRegistry.inc.php");
require_once(KT_LIB_DIR . "/foldermanagement/folderutil.inc.php");
require_once(KT_LIB_DIR . "/documentmanagement/observers.inc.php");
require_once(KT_LIB_DIR . "/documentmanagement/documentutil.inc.php");
class KTFolderAddDocumentAction extends KTFolderAction {
var $sName = 'ktcore.actions.folder.addDocument';
var $_sShowPermission = "ktcore.permissions.write";
var $oDocumentType = null;
function getDisplayName() {
return _('Add Document');
}
function check() {
$res = parent::check();
if (empty($res)) {
return $res;
}
$postExpected = KTUtil::arrayGet($_REQUEST, "postExpected");
$postReceived = KTUtil::arrayGet($_REQUEST, "postReceived");
if (!empty($postExpected)) {
$aErrorOptions = array(
'redirect_to' => array('main', sprintf('fFolderId=%d', $this->oFolder->getId())),
'message' => 'Upload larger than maximum POST size (max_post_size variable in .htaccess or php.ini)',
);
$this->oValidator->notEmpty($postReceived, $aErrorOptions);
}
return true;
}
function do_main() {
$this->oPage->setBreadcrumbDetails(_("add document"));
$this->oPage->setTitle(_('Add a document'));
$oTemplate =& $this->oValidator->validateTemplate('ktcore/document/add');
$add_fields = array();
$add_fields[] = new KTFileUploadWidget(_('File'), _('The contents of the document to be added to the document management system.'), 'file', "", $this->oPage, true);
$add_fields[] = new KTStringWidget(_('Title'), _('The document title is used as the main name of a document throughout KnowledgeTree.'), 'title', "", $this->oPage, true);
$aVocab = array('' => _('<Please select a document type>'));
foreach (DocumentType::getList() as $oDocumentType) {
if(!$oDocumentType->getDisabled()) {
$aVocab[$oDocumentType->getId()] = $oDocumentType->getName();
}
}
$fieldOptions = array("vocab" => $aVocab);
$add_fields[] = new KTLookupWidget(_('Document Type'), _('Document Types, defined by the administrator, are used to categorise documents. Please select a Document Type from the list below.'), 'fDocumentTypeId', null, $this->oPage, true, "add-document-type", $fieldErrors, $fieldOptions);
$fieldsets = array();
$fieldsetDisplayReg =& KTFieldsetDisplayRegistry::getSingleton();
$activesets = KTFieldset::getGenericFieldsets();
foreach ($activesets as $oFieldset) {
$displayClass = $fieldsetDisplayReg->getHandler($oFieldset->getNamespace());
array_push($fieldsets, new $displayClass($oFieldset));
}
$oTemplate->setData(array(
'context' => &$this,
'add_fields' => $add_fields,
'generic_fieldsets' => $fieldsets,
));
return $oTemplate->render();
}
function do_upload() {
$this->oPage->setBreadcrumbDetails(_("add document"));
$this->oPage->setTitle(_('Add a document'));
$mpo =& new JavascriptObserver($this);
// $mpo =& new KTSinglePageObserver(&$this);
$oUploadChannel =& KTUploadChannel::getSingleton();
$oUploadChannel->addObserver($mpo);
require_once(KT_LIB_DIR . '/storage/storagemanager.inc.php');
require_once(KT_LIB_DIR . '/filelike/fsfilelike.inc.php');
require_once(KT_LIB_DIR . '/documentmanagement/DocumentType.inc');
require_once(KT_LIB_DIR . '/metadata/fieldset.inc.php');
require_once(KT_LIB_DIR . '/documentmanagement/documentutil.inc.php');
$aErrorOptions = array(
'redirect_to' => array('main', sprintf('fFolderId=%d', $this->oFolder->getId())),
);
$aFile = $this->oValidator->validateFile($_FILES['file'], $aErrorOptions);
$sTitle = $this->oValidator->validateString($_REQUEST['title'], $aErrorOptions);
$iFolderId = $this->oFolder->getId();
if (Document::fileExists(basename($aFile['name']), $iFolderId)) {
$this->errorRedirectToMain(_('There is already a file with that filename in this folder.'), sprintf('fFolderId=%d', $this->oFolder->getId()));
exit(0);
}
if (Document::nameExists($sTitle, $iFolderId)) {
$this->errorRedirectToMain(_('There is already a file with that title in this folder.'), sprintf('fFolderId=%d', $this->oFolder->getId()));
exit(0);
}
$matches = array();
$aFields = array();
foreach ($_REQUEST as $k => $v) {
if (preg_match('/^metadata_(\d+)$/', $k, $matches)) {
$aFields[] = array(DocumentField::get($matches[1]), $v);
}
}
$aErrorOptions['message'] = _("Please select a valid document type");
$this->oDocumentType = $this->oValidator->validateDocumentType($_REQUEST['fDocumentTypeId'], $aErrorOptions);
$aOptions = array(
'contents' => new KTFSFileLike($aFile['tmp_name']),
'documenttype' => $this->oDocumentType,
'metadata' => $aFields,
'description' => $sTitle,
);
$mpo->start();
$this->startTransaction();
$oDocument =& KTDocumentUtil::add($this->oFolder, basename($aFile['name']), $this->oUser, $aOptions);
if (PEAR::isError($oDocument)) {
$message = $oDocument->getMessage();
$this->errorRedirectToMain($message, 'fFolderId=' . $this->oFolder->getId());
exit(0);
}
$mpo->redirectToDocument($oDocument->getId());
$this->commitTransaction();
exit(0);
}
}
?>