Commit 2f4a9bd3742071224edf60806cd2fb757f5c8a85

Authored by bshuttle
1 parent ad015526

- files should be validated when required

- if there's no metadata, don't bother asking for it.


git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@5828 c91229c3-7414-0410-bfa2-8a42b809f60b
plugins/ktcore/KTCorePlugin.php
@@ -141,6 +141,7 @@ class KTCorePlugin extends KTPlugin { @@ -141,6 +141,7 @@ class KTCorePlugin extends KTPlugin {
141 $this->registerValidator('KTMembershipValidator', 'ktcore.validators.membership', 'KTValidators.php'); 141 $this->registerValidator('KTMembershipValidator', 'ktcore.validators.membership', 'KTValidators.php');
142 $this->registerValidator('KTFieldsetValidator', 'ktcore.validators.fieldset', 'KTValidators.php'); 142 $this->registerValidator('KTFieldsetValidator', 'ktcore.validators.fieldset', 'KTValidators.php');
143 $this->registerValidator('KTFileValidator', 'ktcore.validators.file', 'KTValidators.php'); 143 $this->registerValidator('KTFileValidator', 'ktcore.validators.file', 'KTValidators.php');
  144 + $this->registerValidator('KTRequiredFileValidator', 'ktcore.validators.requiredfile', 'KTValidators.php');
144 145
145 // criterion 146 // criterion
146 $this->registerCriterion('NameCriterion', 'ktcore.criteria.name', KT_LIB_DIR . '/browse/Criteria.inc'); 147 $this->registerCriterion('NameCriterion', 'ktcore.criteria.name', KT_LIB_DIR . '/browse/Criteria.inc');
plugins/ktcore/KTValidators.php
@@ -147,6 +147,26 @@ class KTRequiredValidator extends KTValidator { @@ -147,6 +147,26 @@ class KTRequiredValidator extends KTValidator {
147 } 147 }
148 } 148 }
149 149
  150 +// the required validator checks either single or multiple items
  151 +// in the data array.
  152 +class KTRequiredFileValidator extends KTValidator {
  153 + var $sNamespace = 'ktcore.validators.requiredfile';
  154 +
  155 + function validate($data) {
  156 + $errors = array();
  157 +
  158 + $val = KTUtil::arrayGet($_FILES, $this->sInputVariable);
  159 + if (empty($val) || empty($val['name'])) {
  160 + $errors[$this->sBasename] = _kt("You must select a file to upload.");
  161 + }
  162 +
  163 + return array(
  164 + 'errors' => $errors,
  165 + 'results' => array(),
  166 + );
  167 + }
  168 +}
  169 +
150 class KTEmailValidator extends KTValidator { 170 class KTEmailValidator extends KTValidator {
151 var $sNamespace = 'ktcore.validators.emailaddress'; 171 var $sNamespace = 'ktcore.validators.emailaddress';
152 172
plugins/ktcore/KTWidgets.php
@@ -22,6 +22,18 @@ class KTCoreFileWidget extends KTWidget { @@ -22,6 +22,18 @@ class KTCoreFileWidget extends KTWidget {
22 $tname = sprintf("_kt_attempt_unique_%s", $this->sName); 22 $tname = sprintf("_kt_attempt_unique_%s", $this->sName);
23 return array($this->sBasename => $_FILES[$tname]); 23 return array($this->sBasename => $_FILES[$tname]);
24 } 24 }
  25 +
  26 + function getValidators() {
  27 + if (!$this->bAutoValidate) {
  28 + return null;
  29 + }
  30 +
  31 + $oVF =& KTValidatorFactory::getSingleton();
  32 + return $oVF->get('ktcore.validators.requiredfile', array(
  33 + 'test' => sprintf("_kt_attempt_unique_%s", $this->sName),
  34 + 'basename' => $this->sBasename,
  35 + ));
  36 + }
25 } 37 }
26 38
27 39
plugins/ktcore/folder/addDocument.php
@@ -105,6 +105,7 @@ class KTFolderAddDocumentAction extends KTFolderAction { @@ -105,6 +105,7 @@ class KTFolderAddDocumentAction extends KTFolderAction {
105 'initial_string' => _kt('- Please select a document type -'), 105 'initial_string' => _kt('- Please select a document type -'),
106 'id_method' => 'getId', 106 'id_method' => 'getId',
107 'label_method' => 'getName', 107 'label_method' => 'getName',
  108 + 'simple_select' => false,
108 )), 109 )),
109 )); 110 ));
110 111
@@ -127,6 +128,15 @@ class KTFolderAddDocumentAction extends KTFolderAction { @@ -127,6 +128,15 @@ class KTFolderAddDocumentAction extends KTFolderAction {
127 128
128 return $oForm; 129 return $oForm;
129 } 130 }
  131 +
  132 + function getFieldsetsForType($iTypeId) {
  133 + $typeid = KTUtil::getId($iTypeId);
  134 + $aGenericFieldsetIds = KTFieldset::getGenericFieldsets(array('ids' => false));
  135 + $aSpecificFieldsetIds = KTFieldset::getForDocumentType($typeid, array('ids' => false));
  136 +
  137 + $fieldsets = kt_array_merge($aGenericFieldsetIds, $aSpecificFieldsetIds);
  138 + return $fieldsets;
  139 + }
130 140
131 function do_main() { 141 function do_main() {
132 $this->oPage->setBreadcrumbDetails(_kt("Add a document")); 142 $this->oPage->setBreadcrumbDetails(_kt("Add a document"));
@@ -147,6 +157,13 @@ class KTFolderAddDocumentAction extends KTFolderAction { @@ -147,6 +157,13 @@ class KTFolderAddDocumentAction extends KTFolderAction {
147 $data = $res['results']; 157 $data = $res['results'];
148 $key = KTUtil::randomString(32); 158 $key = KTUtil::randomString(32);
149 $_SESSION['_add_data'] = array($key => $data); 159 $_SESSION['_add_data'] = array($key => $data);
  160 +
  161 + // if we don't need metadata
  162 + $fieldsets = $this->getFieldsetsForType($data['document_type']);
  163 + if (empty($fieldsets)) {
  164 + return $this->successRedirectTo('finalise', _kt("File uploaded successfully. Processing."), sprintf("fFileKey=%s", $key));
  165 + }
  166 +
150 // if we need metadata 167 // if we need metadata
151 168
152 $this->successRedirectTo('metadata', _kt("File uploaded successfully. Please fill in the metadata below."), sprintf("fFileKey=%s", $key)); 169 $this->successRedirectTo('metadata', _kt("File uploaded successfully. Please fill in the metadata below."), sprintf("fFileKey=%s", $key));
@@ -171,10 +188,7 @@ class KTFolderAddDocumentAction extends KTFolderAction { @@ -171,10 +188,7 @@ class KTFolderAddDocumentAction extends KTFolderAction {
171 188
172 $widgets = array(); 189 $widgets = array();
173 $validators = array(); 190 $validators = array();
174 - $aGenericFieldsetIds = KTFieldset::getGenericFieldsets(array('ids' => false));  
175 - $aSpecificFieldsetIds = KTFieldset::getForDocumentType($doctypeid, array('ids' => false));  
176 -  
177 - $fieldsets = kt_array_merge($aGenericFieldsetIds, $aSpecificFieldsetIds); 191 + $fieldsets = $this->getFieldsetsForType($doctypeid);
178 192
179 foreach ($fieldsets as $oFieldset) { 193 foreach ($fieldsets as $oFieldset) {
180 $widgets = kt_array_merge($widgets, $oFReg->widgetsForFieldset($oFieldset, 'fieldset_' . $oFieldset->getId(), $this->oDocument)); 194 $widgets = kt_array_merge($widgets, $oFReg->widgetsForFieldset($oFieldset, 'fieldset_' . $oFieldset->getId(), $this->oDocument));