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 "";