diff --git a/common/lang/en.php b/common/lang/en.php
index 561616c76..80add8d75 100644
--- a/common/lang/en.php
+++ b/common/lang/en.php
@@ -22,6 +22,7 @@ $lang->cmd_upload = 'Upload';
$lang->cmd_load = 'Load';
$lang->cmd_input = 'Input';
$lang->cmd_search = 'Search';
+$lang->cmd_sort = 'Sort';
$lang->cmd_find = 'Find';
$lang->cmd_replace = 'Replace';
$lang->cmd_confirm = 'Confirm';
diff --git a/common/lang/ko.php b/common/lang/ko.php
index 3a5cce58b..44225b526 100644
--- a/common/lang/ko.php
+++ b/common/lang/ko.php
@@ -22,6 +22,7 @@ $lang->cmd_upload = '업로드';
$lang->cmd_load = '불러오기';
$lang->cmd_input = '입력';
$lang->cmd_search = '검색';
+$lang->cmd_sort = '정렬';
$lang->cmd_find = '찾기';
$lang->cmd_replace = '바꾸기';
$lang->cmd_confirm = '확인';
diff --git a/modules/board/board.view.php b/modules/board/board.view.php
index f59799337..2cb88d6f3 100644
--- a/modules/board/board.view.php
+++ b/modules/board/board.view.php
@@ -100,9 +100,13 @@ class BoardView extends Board
{
foreach($extra_keys as $val)
{
- $this->order_target[] = $val->eid;
+ if ($val->sort === 'Y')
+ {
+ $this->order_target[] = $val->eid;
+ }
}
}
+
/**
* load javascript, JS filters
*/
diff --git a/modules/document/document.admin.controller.php b/modules/document/document.admin.controller.php
index 6f8f5b7fb..a46595605 100644
--- a/modules/document/document.admin.controller.php
+++ b/modules/document/document.admin.controller.php
@@ -183,7 +183,8 @@ class DocumentAdminController extends Document
$options = array_map('trim', explode("\n", $options));
}
$desc = Context::get('desc') ? Context::get('desc') : '';
- $search = Context::get('search');
+ $search = Context::get('search') === 'Y' ? 'Y' : 'N';
+ $sort = Context::get('sort') === 'Y' ? 'Y' : 'N';
$eid = Context::get('eid');
$obj = new stdClass();
@@ -210,7 +211,7 @@ class DocumentAdminController extends Document
$oDocumentController = DocumentController::getInstance();
$output = $oDocumentController->insertDocumentExtraKey(
$module_srl, $var_idx, $name, $type, $is_required, $search,
- $default, $desc, $eid, $is_strict, $options
+ $default, $desc, $eid, $is_strict, $options, $sort
);
if(!$output->toBool()) return $output;
diff --git a/modules/document/document.class.php b/modules/document/document.class.php
index c1b7093c4..d7cc50134 100644
--- a/modules/document/document.class.php
+++ b/modules/document/document.class.php
@@ -113,6 +113,10 @@ class Document extends ModuleObject
if(!$oDB->isColumnExists('document_extra_keys', 'var_is_strict')) return true;
if(!$oDB->isColumnExists('document_extra_keys', 'var_options')) return true;
+ // 2025.10.23 Add sort to document_extra_keys table, and sort_value to document_extra_vars table
+ if(!$oDB->isColumnExists('document_extra_keys', 'var_sort')) return true;
+ if(!$oDB->isColumnExists('document_extra_vars', 'sort_value') || !$oDB->isIndexExists('document_extra_vars', 'idx_sort_value')) return true;
+
return false;
}
@@ -233,6 +237,37 @@ class Document extends ModuleObject
{
$oDB->addColumn('document_extra_keys', 'var_options', 'text', null, null, false, 'var_default');
}
+
+ // 2025.10.23 Add sort to document_extra_keys table, and sort_value to document_extra_vars table
+ if(!$oDB->isColumnExists('document_extra_keys', 'var_sort'))
+ {
+ $oDB->addColumn('document_extra_keys', 'var_sort', 'char', '1', 'N', true, 'var_search');
+ }
+ if(!$oDB->isColumnExists('document_extra_vars', 'sort_value') || !$oDB->isIndexExists('document_extra_vars', 'idx_sort_value'))
+ {
+ $oDB->addColumn('document_extra_vars', 'sort_value', 'bigint', null, null, false, 'value');
+ $oDB->begin();
+ $output = executeQueryArray('document.getDocumentNumericExtraKeys', ['var_type' => 'number']);
+ if (!$output->toBool())
+ {
+ $oDB->rollback();
+ return $output;
+ }
+ foreach ($output->data ?? [] as $item)
+ {
+ $output = executeQuery('document.updateDocumentExtraVarSortValue', [
+ 'module_srl' => $item->module_srl,
+ 'var_idx' => $item->var_idx,
+ ]);
+ if (!$output->toBool())
+ {
+ $oDB->rollback();
+ return $output;
+ }
+ }
+ $oDB->commit();
+ $oDB->addIndex('document_extra_vars', 'idx_sort_value', array('sort_value'));
+ }
}
/**
diff --git a/modules/document/document.controller.php b/modules/document/document.controller.php
index 5f390ec43..373915ef8 100644
--- a/modules/document/document.controller.php
+++ b/modules/document/document.controller.php
@@ -846,7 +846,7 @@ class DocumentController extends Document
{
foreach($extra_keys as $idx => $extra_item)
{
- $value = NULL;
+ $value = $sort_value = null;
if(isset($obj->{'extra_vars'.$idx}))
{
$tmp = $obj->{'extra_vars'.$idx};
@@ -899,7 +899,11 @@ class DocumentController extends Document
}
$extra_vars[$extra_item->name] = $value;
- $this->insertDocumentExtraVar($obj->module_srl, $obj->document_srl, $idx, $value, $extra_item->eid);
+ if ($extra_item->type === 'number')
+ {
+ $sort_value = (int)$value;
+ }
+ $this->insertDocumentExtraVar($obj->module_srl, $obj->document_srl, $idx, $value, $extra_item->eid, null, $sort_value);
}
}
@@ -1229,7 +1233,7 @@ class DocumentController extends Document
{
foreach($extra_keys as $idx => $extra_item)
{
- $value = NULL;
+ $value = $sort_value = null;
if(isset($obj->{'extra_vars'.$idx}))
{
$tmp = $obj->{'extra_vars'.$idx};
@@ -1326,7 +1330,11 @@ class DocumentController extends Document
}
}
$extra_vars[$extra_item->name] = $value;
- $this->insertDocumentExtraVar($obj->module_srl, $obj->document_srl, $idx, $value, $extra_item->eid);
+ if ($extra_item->type === 'number')
+ {
+ $sort_value = (int)$value;
+ }
+ $this->insertDocumentExtraVar($obj->module_srl, $obj->document_srl, $idx, $value, $extra_item->eid, null, $sort_value);
}
}
@@ -1774,9 +1782,10 @@ class DocumentController extends Document
* @param int $eid
* @param string $var_is_strict
* @param array $var_options
+ * @param string $var_sort
* @return object
*/
- function insertDocumentExtraKey($module_srl, $var_idx, $var_name, $var_type, $var_is_required = 'N', $var_search = 'N', $var_default = '', $var_desc = '', $eid = 0, $var_is_strict = 'N', $var_options = null)
+ function insertDocumentExtraKey($module_srl, $var_idx, $var_name, $var_type, $var_is_required = 'N', $var_search = 'N', $var_default = '', $var_desc = '', $eid = 0, $var_is_strict = 'N', $var_options = null, $var_sort = 'N')
{
if (!$module_srl || !$var_idx || !$var_name || !$var_type || !$eid)
{
@@ -1791,6 +1800,7 @@ class DocumentController extends Document
$obj->var_is_required = $var_is_required=='Y'?'Y':'N';
$obj->var_is_strict = $var_is_strict=='Y'?'Y':'N';
$obj->var_search = $var_search=='Y'?'Y':'N';
+ $obj->var_sort = $var_sort=='Y'?'Y':'N';
$obj->var_default = $var_default;
$obj->var_options = $var_options ? json_encode($var_options, \JSON_UNESCAPED_UNICODE | \JSON_UNESCAPED_SLASHES) : null;
$obj->var_desc = $var_desc;
@@ -1878,9 +1888,10 @@ class DocumentController extends Document
* @param mixed $value
* @param int $eid
* @param string $lang_code
- * @return Object|void
+ * @param ?int $sort_value
+ * @return BaseObject
*/
- public static function insertDocumentExtraVar($module_srl, $document_srl, $idx_or_eid, $value, $eid = null, $lang_code = null)
+ public static function insertDocumentExtraVar($module_srl, $document_srl, $idx_or_eid, $value, $eid = null, $lang_code = null, $sort_value = null)
{
if(!$module_srl || !$document_srl || !$idx_or_eid || !isset($value))
{
@@ -1913,6 +1924,7 @@ class DocumentController extends Document
$obj->document_srl = $document_srl;
$obj->var_idx = $idx_or_eid;
$obj->value = $value;
+ $obj->sort_value = $sort_value;
$obj->lang_code = $lang_code ?: Context::getLangType();
$obj->eid = $eid;
@@ -1927,9 +1939,10 @@ class DocumentController extends Document
* @param mixed $value
* @param int $eid
* @param string $lang_code
- * @return Object|void
+ * @param ?int $sort_value
+ * @return BaseObject
*/
- public static function updateDocumentExtraVar($module_srl, $document_srl, $idx_or_eid, $value, $eid = null, $lang_code = null)
+ public static function updateDocumentExtraVar($module_srl, $document_srl, $idx_or_eid, $value, $eid = null, $lang_code = null, $sort_value = null)
{
if(!$module_srl || !$document_srl || !$idx_or_eid || !isset($value))
{
@@ -1957,13 +1970,10 @@ class DocumentController extends Document
}
}
- $obj = new stdClass;
- $obj->module_srl = $module_srl;
- $obj->document_srl = $document_srl;
- $obj->var_idx = $idx_or_eid;
- $obj->value = $value;
- $obj->lang_code = $lang_code ?: Context::getLangType();
- $obj->eid = $eid;
+ if (!$lang_code)
+ {
+ $lang_code = Context::getLangType();
+ }
$oDB = DB::getInstance();
$oDB->begin();
@@ -1975,7 +1985,7 @@ class DocumentController extends Document
return $output;
}
- $output = self::insertDocumentExtraVar($module_srl, $document_srl, $idx_or_eid, $value, $eid, $lang_code);
+ $output = self::insertDocumentExtraVar($module_srl, $document_srl, $idx_or_eid, $value, $eid, $lang_code, $sort_value);
if (!$output->toBool())
{
$oDB->rollback();
@@ -1993,7 +2003,7 @@ class DocumentController extends Document
* @param int $var_idx
* @param string $lang_code
* @param int $eid
- * @return $output
+ * @return BaseObject
*/
public static function deleteDocumentExtraVars($module_srl, $document_srl = null, $var_idx = null, $lang_code = null, $eid = null)
{
@@ -2003,8 +2013,7 @@ class DocumentController extends Document
if(!is_null($var_idx)) $obj->var_idx = $var_idx;
if(!is_null($lang_code)) $obj->lang_code = $lang_code;
if(!is_null($eid)) $obj->eid = $eid;
- $output = executeQuery('document.deleteDocumentExtraVars', $obj);
- return $output;
+ return executeQuery('document.deleteDocumentExtraVars', $obj);
}
diff --git a/modules/document/document.model.php b/modules/document/document.model.php
index 2f4c9f712..ecbf4dde2 100644
--- a/modules/document/document.model.php
+++ b/modules/document/document.model.php
@@ -239,6 +239,7 @@ class DocumentModel extends Document
$sort_check = self::_setSortIndex($obj, $load_extra_vars);
$obj->sort_index = $sort_check->sort_index;
$obj->isExtraVars = $sort_check->isExtraVars;
+ $obj->isExtraVarsSortAsNumber = $sort_check->isExtraVarsSortAsNumber;
$obj->except_notice = $except_notice;
$obj->columnList = $columnList;
@@ -672,6 +673,7 @@ class DocumentModel extends Document
$sort_check = self::_setSortIndex($opt);
$opt->sort_index = $sort_check->sort_index;
$opt->isExtraVars = $sort_check->isExtraVars;
+ $opt->isExtraVarsSortAsNumber = $sort_check->isExtraVarsSortAsNumber;
self::_setSearchOption($opt, $args, $query_id, $use_division);
@@ -1363,20 +1365,20 @@ class DocumentModel extends Document
return $args;
}
- $eids = array();
- foreach($extra_keys as $idx => $key)
+ foreach($extra_keys as $extra_key)
{
- $eids[] = $key->eid;
+ if ($args->sort_index === $extra_key->eid)
+ {
+ $args->isExtraVars = true;
+ if ($extra_key->type === 'number')
+ {
+ $args->isExtraVarsSortAsNumber = true;
+ }
+ return $args;
+ }
}
- // check it exists in extra keys of the module
- if(!in_array($args->sort_index, $eids))
- {
- $args->sort_index = 'list_order';
- return $args;
- }
-
- $args->isExtraVars = true;
+ $args->sort_index = 'list_order';
return $args;
}
@@ -1556,7 +1558,14 @@ class DocumentModel extends Document
{
$args->sort_eid = $args->sort_index;
$args->sort_lang = Context::getLangType();
- $args->sort_index = 'extra_sort.value';
+ if ($searchOpt->isExtraVarsSortAsNumber ?? false)
+ {
+ $args->sort_index = 'extra_sort.sort_value';
+ }
+ else
+ {
+ $args->sort_index = 'extra_sort.value';
+ }
}
$query_id = 'document.getDocumentListWithExtraVars';
}
diff --git a/modules/document/queries/getDocumentExtraKeys.xml b/modules/document/queries/getDocumentExtraKeys.xml
index c708322ea..b7c0e0ccf 100644
--- a/modules/document/queries/getDocumentExtraKeys.xml
+++ b/modules/document/queries/getDocumentExtraKeys.xml
@@ -10,6 +10,7 @@
+
diff --git a/modules/document/queries/getDocumentNumericExtraKeys.xml b/modules/document/queries/getDocumentNumericExtraKeys.xml
new file mode 100644
index 000000000..31f70a636
--- /dev/null
+++ b/modules/document/queries/getDocumentNumericExtraKeys.xml
@@ -0,0 +1,13 @@
+
diff --git a/modules/document/queries/insertDocumentExtraKey.xml b/modules/document/queries/insertDocumentExtraKey.xml
index 6c0983add..986726eea 100644
--- a/modules/document/queries/insertDocumentExtraKey.xml
+++ b/modules/document/queries/insertDocumentExtraKey.xml
@@ -10,6 +10,7 @@
+
diff --git a/modules/document/queries/insertDocumentExtraVar.xml b/modules/document/queries/insertDocumentExtraVar.xml
index cef45f439..ce00dd1b4 100644
--- a/modules/document/queries/insertDocumentExtraVar.xml
+++ b/modules/document/queries/insertDocumentExtraVar.xml
@@ -7,6 +7,7 @@
+
diff --git a/modules/document/queries/updateDocumentExtraKey.xml b/modules/document/queries/updateDocumentExtraKey.xml
index ce470af09..0f39fad1b 100644
--- a/modules/document/queries/updateDocumentExtraKey.xml
+++ b/modules/document/queries/updateDocumentExtraKey.xml
@@ -8,6 +8,7 @@
+
diff --git a/modules/document/queries/updateDocumentExtraVar.xml b/modules/document/queries/updateDocumentExtraVar.xml
index 58050bbb2..4242b57d6 100644
--- a/modules/document/queries/updateDocumentExtraVar.xml
+++ b/modules/document/queries/updateDocumentExtraVar.xml
@@ -4,6 +4,7 @@
+
diff --git a/modules/document/queries/updateDocumentExtraVarSortValue.xml b/modules/document/queries/updateDocumentExtraVarSortValue.xml
new file mode 100644
index 000000000..f7b3e59ca
--- /dev/null
+++ b/modules/document/queries/updateDocumentExtraVarSortValue.xml
@@ -0,0 +1,12 @@
+
diff --git a/modules/document/schemas/document_extra_keys.xml b/modules/document/schemas/document_extra_keys.xml
index e54a5c544..802d0d398 100644
--- a/modules/document/schemas/document_extra_keys.xml
+++ b/modules/document/schemas/document_extra_keys.xml
@@ -6,6 +6,7 @@
+
diff --git a/modules/document/schemas/document_extra_vars.xml b/modules/document/schemas/document_extra_vars.xml
index 36e3df05f..bb24e1044 100644
--- a/modules/document/schemas/document_extra_vars.xml
+++ b/modules/document/schemas/document_extra_vars.xml
@@ -4,5 +4,6 @@
+
diff --git a/modules/document/tpl/extra_keys.html b/modules/document/tpl/extra_keys.html
index 8bdb07b6d..d9a9f9268 100644
--- a/modules/document/tpl/extra_keys.html
+++ b/modules/document/tpl/extra_keys.html
@@ -86,6 +86,13 @@
+
@@ -120,6 +127,7 @@
{$lang->default_value} |
{$lang->is_required} |
{$lang->cmd_search} |
+ {$lang->cmd_sort} |
|
@@ -138,6 +146,7 @@
{$val->default} |
YN |
YN |
+ YN |
diff --git a/modules/extravar/models/Value.php b/modules/extravar/models/Value.php
index d72a9b00e..5bf9d2dd3 100644
--- a/modules/extravar/models/Value.php
+++ b/modules/extravar/models/Value.php
@@ -36,6 +36,7 @@ class Value
public $is_disabled = 'N';
public $is_readonly = 'N';
public $search = 'N';
+ public $sort = 'N';
public $style = null;
/**
@@ -87,8 +88,9 @@ class Value
* @param string $parent_type
* @param string $is_strict
* @param string $options
+ * @param string $sort
*/
- function __construct(int $module_srl, int $idx, string $name, string $type = 'text', $default = null, $desc = '', $is_required = 'N', $search = 'N', $value = null, $eid = '', $parent_type = 'document', $is_strict = '', $options = null)
+ function __construct(int $module_srl, int $idx, string $name, string $type = 'text', $default = null, $desc = '', $is_required = 'N', $search = 'N', $value = null, $eid = '', $parent_type = 'document', $is_strict = '', $options = null, $sort = 'N')
{
if (!$idx)
{
@@ -108,6 +110,7 @@ class Value
$this->is_required = $is_required;
$this->is_strict = $is_strict;
$this->search = $search;
+ $this->sort = $sort;
}
/**
diff --git a/modules/extravar/models/ValueCollection.php b/modules/extravar/models/ValueCollection.php
index 0627fffcf..a3d0b3add 100644
--- a/modules/extravar/models/ValueCollection.php
+++ b/modules/extravar/models/ValueCollection.php
@@ -50,7 +50,7 @@ class ValueCollection
foreach ($keys as $val)
{
- $this->keys[$val->idx] = new Value($val->module_srl, $val->idx, $val->name, $val->type, $val->default, $val->desc, $val->is_required, $val->search, $val->value ?? null, $val->eid, $val->parent_type ?? 'document', $val->is_strict, $val->options);
+ $this->keys[$val->idx] = new Value($val->module_srl, $val->idx, $val->name, $val->type, $val->default, $val->desc, $val->is_required, $val->search, $val->value ?? null, $val->eid, $val->parent_type ?? 'document', $val->is_strict, $val->options, $val->sort ?? 'N');
}
}
|