diff --git a/module/file/ui/buildexporttpl.html.php b/module/file/ui/buildexporttpl.html.php
new file mode 100644
index 0000000000..9cb65dc5e8
--- /dev/null
+++ b/module/file/ui/buildexporttpl.html.php
@@ -0,0 +1,25 @@
+id}"), setClass('hidden'), set('data-public', $template->public), set('data-title', $template->title), $template->content);
+
+formGroup
+(
+ set::width('1/2'),
+ set::label($lang->file->tplTitleAB),
+ inputGroup
+ (
+ select(set::name('template'), set::items($templatePairs), set::value($templateID), set::required(true), on::change('setTemplate(e.target)')),
+ span
+ (
+ setClass('input-group-addon'),
+ checkbox(setID('showCustomFieldsBox'), set::checked(true), on::change('setExportTPL'), $lang->file->setExportTPL),
+ )
+ ),
+ $templateList ? $templateList : null,
+);
+
+render();
diff --git a/module/file/ui/export.html.php b/module/file/ui/export.html.php
index 18f6ba6fbd..2488710064 100644
--- a/module/file/ui/export.html.php
+++ b/module/file/ui/export.html.php
@@ -12,9 +12,15 @@ declare(strict_types=1);
namespace zin;
-$this->app->loadLang('file');
+$this->loadModel('file');
-$isCustomExport = (!empty($customExport) and !empty($allExportFields));
+/* Unset useless export type. */
+if(isset($_SERVER['HTTP_REFERER']) && str_contains($_SERVER['HTTP_REFERER'], 'calendar')) unset($lang->exportTypeList['selected']);
+
+/* Generate custom export fields. */
+$hideExportRange = isset($_SERVER['HTTP_REFERER']) && str_contains($_SERVER['HTTP_REFERER'], 'kanban');
+$customExportRowList = array();
+$isCustomExport = (!empty($customExport) and !empty($allExportFields));
if($isCustomExport)
{
$allExportFields = explode(',', $allExportFields);
@@ -32,54 +38,56 @@ if($isCustomExport)
if(!$hasDefaultField) $selectedFields[] = $field;
}
- jsVar('defaultExportFields', implode(',', $selectedFields));
-}
+ $defaultExportFields = implode(',', $selectedFields);
-/* Unset useless export type. */
-if(isset($_SERVER['HTTP_REFERER']) && str_contains($_SERVER['HTTP_REFERER'], 'calendar')) unset($lang->exportTypeList['selected']);
+ $templates = $this->file->getExportTemplate($app->moduleName);
+ $templateList = array();
+ $templatePairs[] = $this->lang->file->defaultTPL;
+ foreach($templates as $template)
+ {
+ $templatePairs[$template->id] = ($template->public ? "[{$this->lang->public}] " : '') . $template->title;
+ $templateList[] = span(setID("template{$template->id}"), setClass('hidden'), set('data-public', $template->public), set('data-title', $template->title), $template->content);
+ }
-$hideExportRange = isset($_SERVER['HTTP_REFERER']) && str_contains($_SERVER['HTTP_REFERER'], 'kanban');
-
-/* Generate custom export fields. */
-$customExportRowList = array();
-if($isCustomExport)
-{
/* Choose template. */
$customExportRowList[] = formRow
(
+ setID('tplBox'),
formGroup
(
set::width('1/2'),
set::label($lang->file->tplTitleAB),
- set::control('select'),
- set::name('template'),
- set::items(array())
+ inputGroup
+ (
+ select(set::name('template'), set::items($templatePairs), on::change('setTemplate(e.target)'), set::required(true)),
+ span
+ (
+ setClass('input-group-addon'),
+ checkbox(setID('showCustomFieldsBox'), set::checked(false), on::change('setExportTPL'), $lang->file->setExportTPL),
+ )
+ ),
+ $templateList ? $templateList : null,
),
- btn
- (
- setClass('ml-4'),
- $lang->file->setExportTPL
- )
);
/* Panel for customize template. */
$customExportRowList[] = formRow
(
+ setClass('customFieldsBox'),
formGroup
(
set::width('full'),
- set::label(''),
panel
(
set::title($lang->file->exportFields),
setClass('w-full'),
- setStyle('background-color', 'rgb(249 250 251)'),
- set('headingActions', array(array('type'=>'button', 'icon'=>'close', 'size'=>'sm'))),
select
(
set::name('exportFields[]'),
set::items($exportFieldPairs),
+ set::value($selectedFields),
set::multiple(true),
+ set::required(true),
),
inputGroup
(
@@ -89,11 +97,10 @@ if($isCustomExport)
hasPriv('file', 'setPublic') ? div
(
setClass('input-group-addon'),
- div(input(set::type('checkbox'), set::name('public'))),
- div(setClass('ml-2'), $lang->public)
+ checkbox(set::name('public'), set::value(1), $lang->public),
) : null,
- btn(setClass('primary'), $lang->save),
- btn($lang->delete)
+ btn(setClass('btn-link'), on::click('saveTemplate'), icon('save')),
+ btn(setClass('btn-link'), on::click('deleteTemplate'), icon('trash'))
)
)
)
@@ -175,7 +182,7 @@ form
set::title($lang->file->exportData);
-js
+h::js
(
<< 0 && publicBox.prop('checked')) ? 1 : 0;
+ if(!title || !content) return;
+
+ saveTemplateLink = $.createLink('file', 'ajaxSaveTemplate', 'module={$this->moduleName}');
+ $.post(saveTemplateLink, {title:title, content:content, public:isPublic}, function(data)
+ {
+ var defaultValue = $('#tplBox [name="template"]').val();
+ $('#tplBox').html(data);
+ });
+};
+
+window.deleteTemplate = function()
+{
+ var template = $('#tplBox [name="template"]');
+ var templateID = template.val();
+ if(templateID == 0) return;
+
+ deleteLink = $.createLink('file', 'ajaxDeleteTemplate', 'templateID=' + templateID);
+ $.get(deleteLink, function()
+ {
+ template.find('option[value="'+ templateID +'"]').remove();
+ setTemplate(template);
+ });
+};
+
+window.setTemplate = function(obj)
+{
+ var templateID = $(obj).val();
+ var template = $('#template' + templateID);
+ var exportFields = template.length > 0 ? template.html() : '{$defaultExportFields}';
+ exportFields = exportFields.split(',');
+ $('#exportFields').val(exportFields);
+
+ var customFieldsBox = $('.customFieldsBox');
+ customFieldsBox.find('input[name="public"]').prop('checked', template.data('public'));
+ customFieldsBox.find('#title').val(template.data('title'));
+};
+
+window.setExportTPL = function()
+{
+ $('.customFieldsBox').toggleClass('hidden', !$('#showCustomFieldsBox').prop('checked'));
+};
+setExportTPL();
+
+/* Auto select selected item for exportRange. */
+if($('.dtable .dtable-header .has-checkbox').length > 0)
+{
+ const dtable = zui.DTable.query($('.dtable .dtable-header .has-checkbox').closest('.dtable')[0]);
+ const checkedList = dtable.$.getChecks();
+ if(checkedList.length) $('#exportType').val('selected');
+}
+
JAVASCRIPT
);
diff --git a/module/file/view/buildexporttpl.html.php b/module/file/view/buildexporttpl.html.php
index b6e67db753..6cebd0be59 100644
--- a/module/file/view/buildexporttpl.html.php
+++ b/module/file/view/buildexporttpl.html.php
@@ -1,3 +1,3 @@
- $template) echo "$template->content";