From 70ac43c24d1a63d985140f314fcfa1f2abff7044 Mon Sep 17 00:00:00 2001 From: flyskyko Date: Fri, 2 Mar 2012 13:29:06 +0000 Subject: [PATCH] issue 1533, fixed a bug related move document extra var git-svn-id: http://xe-core.googlecode.com/svn/branches/1.5.0@10297 201d5d3c-b55e-5fd7-737f-ddc643e51545 --- modules/document/document.controller.php | 37 +++++++++++++-- modules/document/document.model.php | 45 +++++++++++++++++++ .../updateDocumentExtraKeyIdxOrder.xml | 12 +++++ .../updateDocumentExtraVarIdxOrder.xml | 12 +++++ 4 files changed, 103 insertions(+), 3 deletions(-) create mode 100644 modules/document/queries/updateDocumentExtraKeyIdxOrder.xml create mode 100644 modules/document/queries/updateDocumentExtraVarIdxOrder.xml diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php index 9f86b1e1a..ccabc8f56 100644 --- a/modules/document/document.controller.php +++ b/modules/document/document.controller.php @@ -707,10 +707,41 @@ class documentController extends document { if(!$module_srl) return new Object(-1,'msg_invalid_request'); $obj->module_srl = $module_srl; if(!is_null($var_idx)) $obj->var_idx = $var_idx; - $output = executeQuery('document.deleteDocumentExtraKeys', $obj); - if(!$output->toBool()) return $output; - return executeQuery('document.deleteDocumentExtraVars', $obj); + $oDB = DB::getInstance(); + $oDB->begin(); + + $output = $oDB->executeQuery('document.deleteDocumentExtraKeys', $obj); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; + } + + $output = $oDB->executeQuery('document.updateDocumentExtraKeyIdxOrder', $obj); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; + } + + $output = executeQuery('document.deleteDocumentExtraVars', $obj); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; + } + + $output = $oDB->executeQuery('document.updateDocumentExtraVarIdxOrder', $obj); + if(!$output->toBool()) + { + $oDB->rollback(); + return $output; + } + + $oDB->commit(); + + return new Object(); } /** diff --git a/modules/document/document.model.php b/modules/document/document.model.php index 1a7128fab..3dc3840a9 100644 --- a/modules/document/document.model.php +++ b/modules/document/document.model.php @@ -417,6 +417,51 @@ $obj->sort_index = 'var_idx'; $obj->order = 'asc'; $output = executeQueryArray('document.getDocumentExtraKeys', $obj); + + // correcting index order + $isFixed = FALSE; + if(is_array($output->data)) + { + $prevIdx = 0; + foreach($output->data as $no => $value) + { + // case first + if($prevIdx == 0 && $value->idx != 1) + { + $args = new stdClass(); + $args->module_srl = $module_srl; + $args->var_idx = $value->idx; + $args->new_idx = 1; + executeQuery('document.updateDocumentExtraKeyIdx', $args); + executeQuery('document.updateDocumentExtraVarIdx', $args); + $prevIdx = 1; + $isFixed = TRUE; + continue; + } + + // case others + if($prevIdx > 0 && $prevIdx + 1 != $value->idx) + { + $args = new stdClass(); + $args->module_srl = $module_srl; + $args->var_idx = $value->idx; + $args->new_idx = $prevIdx + 1; + executeQuery('document.updateDocumentExtraKeyIdx', $args); + executeQuery('document.updateDocumentExtraVarIdx', $args); + $prevIdx += 1; + $isFixed = TRUE; + continue; + } + + $prevIdx = $value->idx; + } + } + + if($isFixed) + { + $output = executeQueryArray('document.getDocumentExtraKeys', $obj); + } + $oExtraVar->setExtraVarKeys($output->data); $keys = $oExtraVar->getExtraVars(); if(!$keys) $keys = array(); diff --git a/modules/document/queries/updateDocumentExtraKeyIdxOrder.xml b/modules/document/queries/updateDocumentExtraKeyIdxOrder.xml new file mode 100644 index 000000000..101e55eaa --- /dev/null +++ b/modules/document/queries/updateDocumentExtraKeyIdxOrder.xml @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/modules/document/queries/updateDocumentExtraVarIdxOrder.xml b/modules/document/queries/updateDocumentExtraVarIdxOrder.xml new file mode 100644 index 000000000..83887df85 --- /dev/null +++ b/modules/document/queries/updateDocumentExtraVarIdxOrder.xml @@ -0,0 +1,12 @@ + + +
+ + + + + + + + +