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 @@
+