Commit 49235ec5b34b71010db771b40d78823393e26397
1 parent
98bc743d
fix for KTS-1348: edit does not specify current type.
git-svn-id: https://kt-dms.svn.sourceforge.net/svnroot/kt-dms/trunk@5929 c91229c3-7414-0410-bfa2-8a42b809f60b
Showing
3 changed files
with
93 additions
and
9 deletions
lib/metadata/metadatautil.inc.php
| @@ -671,11 +671,14 @@ class KTMetadataUtil { | @@ -671,11 +671,14 @@ class KTMetadataUtil { | ||
| 671 | // }}} | 671 | // }}} |
| 672 | 672 | ||
| 673 | // {{{ fieldsetsForDocument | 673 | // {{{ fieldsetsForDocument |
| 674 | - function fieldsetsForDocument($oDocument) { | 674 | + function fieldsetsForDocument($oDocument, $iTypeOverride = null) { |
| 675 | global $default; | 675 | global $default; |
| 676 | $oDocument = KTUtil::getObject('Document', $oDocument); | 676 | $oDocument = KTUtil::getObject('Document', $oDocument); |
| 677 | $iMetadataVersionId = $oDocument->getMetadataVersionId(); | 677 | $iMetadataVersionId = $oDocument->getMetadataVersionId(); |
| 678 | $iDocumentTypeId = $oDocument->getDocumentTypeId(); | 678 | $iDocumentTypeId = $oDocument->getDocumentTypeId(); |
| 679 | + if (!is_null($iTypeOverride)) { | ||
| 680 | + $iDocumentTypeId = $iTypeOverride; | ||
| 681 | + } | ||
| 679 | 682 | ||
| 680 | $sQuery = "SELECT DISTINCT F.id AS fieldset_id " . | 683 | $sQuery = "SELECT DISTINCT F.id AS fieldset_id " . |
| 681 | "FROM $default->document_metadata_version_table AS DM INNER JOIN document_fields_link AS DFL ON DM.id = DFL.metadata_version_id " . | 684 | "FROM $default->document_metadata_version_table AS DM INNER JOIN document_fields_link AS DFL ON DM.id = DFL.metadata_version_id " . |
plugins/ktcore/document/edit.php
| @@ -58,6 +58,10 @@ class KTDocumentEditAction extends KTDocumentAction { | @@ -58,6 +58,10 @@ class KTDocumentEditAction extends KTDocumentAction { | ||
| 58 | return _kt('Edit Metadata'); | 58 | return _kt('Edit Metadata'); |
| 59 | } | 59 | } |
| 60 | 60 | ||
| 61 | + function predispatch() { | ||
| 62 | + $this->persistParams(array('new_type')); | ||
| 63 | + } | ||
| 64 | + | ||
| 61 | function form_edit() { | 65 | function form_edit() { |
| 62 | $oForm = new KTForm; | 66 | $oForm = new KTForm; |
| 63 | $oForm->setOptions(array( | 67 | $oForm->setOptions(array( |
| @@ -74,6 +78,12 @@ class KTDocumentEditAction extends KTDocumentAction { | @@ -74,6 +78,12 @@ class KTDocumentEditAction extends KTDocumentAction { | ||
| 74 | $oFReg =& KTFieldsetRegistry::getSingleton(); | 78 | $oFReg =& KTFieldsetRegistry::getSingleton(); |
| 75 | 79 | ||
| 76 | $doctypeid = $this->oDocument->getDocumentTypeID(); | 80 | $doctypeid = $this->oDocument->getDocumentTypeID(); |
| 81 | + if ($_REQUEST['new_type']) { | ||
| 82 | + $oTestType = DocumentType::get($_REQUEST['new_type']); | ||
| 83 | + if (!PEAR::isError($oTestType)) { | ||
| 84 | + $doctypeid = $oTestType->getId(); | ||
| 85 | + } | ||
| 86 | + } | ||
| 77 | 87 | ||
| 78 | $widgets = array( | 88 | $widgets = array( |
| 79 | array('ktcore.widgets.string', array( | 89 | array('ktcore.widgets.string', array( |
| @@ -90,7 +100,7 @@ class KTDocumentEditAction extends KTDocumentAction { | @@ -90,7 +100,7 @@ class KTDocumentEditAction extends KTDocumentAction { | ||
| 90 | 'output' => 'document_title', | 100 | 'output' => 'document_title', |
| 91 | )), | 101 | )), |
| 92 | ); | 102 | ); |
| 93 | - $fieldsets = (array) KTMetadataUtil::fieldsetsForDocument($this->oDocument); | 103 | + $fieldsets = (array) KTMetadataUtil::fieldsetsForDocument($this->oDocument, $doctypeid); |
| 94 | 104 | ||
| 95 | foreach ($fieldsets as $oFieldset) { | 105 | foreach ($fieldsets as $oFieldset) { |
| 96 | $widgets = kt_array_merge($widgets, $oFReg->widgetsForFieldset($oFieldset, 'fieldset_' . $oFieldset->getId(), $this->oDocument)); | 106 | $widgets = kt_array_merge($widgets, $oFReg->widgetsForFieldset($oFieldset, 'fieldset_' . $oFieldset->getId(), $this->oDocument)); |
| @@ -103,19 +113,22 @@ class KTDocumentEditAction extends KTDocumentAction { | @@ -103,19 +113,22 @@ class KTDocumentEditAction extends KTDocumentAction { | ||
| 103 | return $oForm; | 113 | return $oForm; |
| 104 | } | 114 | } |
| 105 | 115 | ||
| 106 | - function do_main() { | ||
| 107 | - $this->addErrorMessage("Doctype changing regressed."); | ||
| 108 | - | 116 | + function do_main() { |
| 109 | $this->oPage->setBreadcrumbDetails("Edit Metadata"); | 117 | $this->oPage->setBreadcrumbDetails("Edit Metadata"); |
| 110 | 118 | ||
| 111 | $oTemplate = $this->oValidator->validateTemplate('ktcore/document/edit'); | 119 | $oTemplate = $this->oValidator->validateTemplate('ktcore/document/edit'); |
| 112 | - | 120 | + |
| 121 | + $doctypeid = $this->oDocument->getDocumentTypeID(); | ||
| 122 | + $type = DocumentType::get($doctypeid); | ||
| 123 | + | ||
| 124 | + | ||
| 113 | $oForm = $this->form_edit(); | 125 | $oForm = $this->form_edit(); |
| 114 | 126 | ||
| 115 | $oTemplate->setData(array( | 127 | $oTemplate->setData(array( |
| 116 | 'context' => $this, | 128 | 'context' => $this, |
| 117 | 'form' => $oForm, | 129 | 'form' => $oForm, |
| 118 | 'document' => $this->oDocument, | 130 | 'document' => $this->oDocument, |
| 131 | + 'type_name' => $type->getName(), | ||
| 119 | )); | 132 | )); |
| 120 | return $oTemplate->render(); | 133 | return $oTemplate->render(); |
| 121 | } | 134 | } |
| @@ -140,8 +153,16 @@ class KTDocumentEditAction extends KTDocumentAction { | @@ -140,8 +153,16 @@ class KTDocumentEditAction extends KTDocumentAction { | ||
| 140 | // ); | 153 | // ); |
| 141 | // | 154 | // |
| 142 | // we do this the "easy" way. | 155 | // we do this the "easy" way. |
| 156 | + $doctypeid = $this->oDocument->getDocumentTypeId(); | ||
| 157 | + if ($_REQUEST['new_type']) { | ||
| 158 | + $oTestType = DocumentType::get($_REQUEST['new_type']); | ||
| 159 | + if (!PEAR::isError($oTestType)) { | ||
| 160 | + $doctypeid = $oTestType->getId(); | ||
| 161 | + } | ||
| 162 | + } | ||
| 163 | + | ||
| 143 | 164 | ||
| 144 | - $fieldsets = KTMetadataUtil::fieldsetsForDocument($this->oDocument); | 165 | + $fieldsets = KTMetadataUtil::fieldsetsForDocument($this->oDocument, $doctypeid); |
| 145 | 166 | ||
| 146 | $MDPack = array(); | 167 | $MDPack = array(); |
| 147 | foreach ($fieldsets as $oFieldset) { | 168 | foreach ($fieldsets as $oFieldset) { |
| @@ -162,6 +183,9 @@ class KTDocumentEditAction extends KTDocumentAction { | @@ -162,6 +183,9 @@ class KTDocumentEditAction extends KTDocumentAction { | ||
| 162 | } | 183 | } |
| 163 | 184 | ||
| 164 | $this->startTransaction(); | 185 | $this->startTransaction(); |
| 186 | + if ($this->oDocument->getDocumentTypeId() != $doctypeid) { | ||
| 187 | + $this->oDocument->setDocumentTypeId($doctypeid); | ||
| 188 | + } | ||
| 165 | $this->oDocument->setName($data['document_title']); | 189 | $this->oDocument->setName($data['document_title']); |
| 166 | $res = $this->oDocument->update(); | 190 | $res = $this->oDocument->update(); |
| 167 | if (PEAR::isError($res)) { | 191 | if (PEAR::isError($res)) { |
| @@ -190,9 +214,66 @@ class KTDocumentEditAction extends KTDocumentAction { | @@ -190,9 +214,66 @@ class KTDocumentEditAction extends KTDocumentAction { | ||
| 190 | 214 | ||
| 191 | redirect(KTBrowseUtil::getUrlForDocument($this->oDocument->getId())); | 215 | redirect(KTBrowseUtil::getUrlForDocument($this->oDocument->getId())); |
| 192 | exit(0); | 216 | exit(0); |
| 193 | - | ||
| 194 | } | 217 | } |
| 195 | 218 | ||
| 219 | + function form_changetype() { | ||
| 220 | + $oForm = new KTForm; | ||
| 221 | + $oForm->setOptions(array( | ||
| 222 | + 'label' => _kt("Change Document Type"), | ||
| 223 | + 'description' => _kt("Changing the document type will allow different metadata to be associated with it."), | ||
| 224 | + 'identifier' => 'ktcore.doc.edit.typechange', | ||
| 225 | + 'submit_label' => _kt("Update Document"), | ||
| 226 | + 'context' => $this, | ||
| 227 | + 'cancel_action' => 'main', | ||
| 228 | + 'action' => 'trytype', | ||
| 229 | + )); | ||
| 230 | + | ||
| 231 | + $type = DocumentType::get($this->oDocument->getDocumentTypeId()); | ||
| 232 | + $current_type_name = $type->getName(); | ||
| 233 | + $oFolder = Folder::get($this->oDocument->getFolderID()); | ||
| 234 | + | ||
| 235 | + $oForm->setWidgets(array( | ||
| 236 | + array('ktcore.widgets.entityselection',array( | ||
| 237 | + 'label' => _kt("New Document Type"), | ||
| 238 | + 'description' => _kt("Please select the new type for this document."), | ||
| 239 | + 'important_description' => sprintf(_kt("The document is currently of type \"%s\"."), $current_type_name), | ||
| 240 | + 'value' => $type->getId(), | ||
| 241 | + 'label_method' => 'getName', | ||
| 242 | + 'vocab' => DocumentType::getListForUserAndFolder($this->oUser, $oFolder), | ||
| 243 | + 'simple_select' => false, | ||
| 244 | + 'required' => true, | ||
| 245 | + 'name' => 'type' | ||
| 246 | + )), | ||
| 247 | + )); | ||
| 248 | + | ||
| 249 | + $oForm->setValidators(array( | ||
| 250 | + array('ktcore.validators.entity', array( | ||
| 251 | + 'test' => 'type', | ||
| 252 | + 'output' => 'type', | ||
| 253 | + 'class' => 'DocumentType', | ||
| 254 | + )), | ||
| 255 | + )); | ||
| 256 | + | ||
| 257 | + return $oForm; | ||
| 258 | + } | ||
| 259 | + | ||
| 260 | + function do_selecttype() { | ||
| 261 | + $oForm = $this->form_changetype(); | ||
| 262 | + return $oForm->renderPage(_kt("Change Document Type")); | ||
| 263 | + } | ||
| 264 | + | ||
| 265 | + function do_trytype() { | ||
| 266 | + $oForm = $this->form_changetype(); | ||
| 267 | + $res = $oForm->validate(); | ||
| 268 | + $data = $res['results']; | ||
| 269 | + $errors = $res['errors']; | ||
| 270 | + | ||
| 271 | + if (!empty($errors)) { | ||
| 272 | + $oForm->handleError(); | ||
| 273 | + } | ||
| 274 | + | ||
| 275 | + $this->successRedirectToMain(sprintf(_kt("You have selected a new document type: %s. Please note that this change has <strong>not</strong> yet been saved - please update the metadata below as necessary, and then save the document to make it a permanent change."), $data['type']->getName()), array('new_type' => $data['type']->getId())); | ||
| 276 | + } | ||
| 196 | } | 277 | } |
| 197 | // }}} | 278 | // }}} |
| 198 | 279 |
templates/ktcore/document/edit.smarty
| @@ -14,7 +14,7 @@ | @@ -14,7 +14,7 @@ | ||
| 14 | <h2>{i18n}Editing{/i18n}: {$document->getName()}</h2> | 14 | <h2>{i18n}Editing{/i18n}: {$document->getName()}</h2> |
| 15 | 15 | ||
| 16 | {capture assign=link}{addQS}action=selectType&fDocumentId={$document->getId()}{/addQS}{/capture} | 16 | {capture assign=link}{addQS}action=selectType&fDocumentId={$document->getId()}{/addQS}{/capture} |
| 17 | -<p class="descriptiveText">{i18n arg_link=$link}Change the <strong><a href="#link#">document type</a></strong>{/i18n}</p> | 17 | +<p class="descriptiveText">{i18n arg_link=$link arg_name=$type_name}Change the <strong><a href="#link#">document type</a></strong>. The current type is "#name#"{/i18n}</p> |
| 18 | 18 | ||
| 19 | <p class="descriptiveText">{i18n}The following document metadata is available for editing.{/i18n}</p> | 19 | <p class="descriptiveText">{i18n}The following document metadata is available for editing.{/i18n}</p> |
| 20 | 20 |