Commit 49235ec5b34b71010db771b40d78823393e26397

Authored by Brad Shuttleworth
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
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