zentaopms/module/file/view/export.html.php
2023-05-16 10:47:08 +08:00

349 lines
13 KiB
PHP

<?php
/**
* The export view file of file module of ZenTaoPMS.
*
* @copyright Copyright 2009-2015 禅道软件(青岛)有限公司(ZenTao Software (Qingdao) Co., Ltd. www.cnezsoft.com)
* @license ZPL(http://zpl.pub/page/zplv12.html) or AGPL(https://www.gnu.org/licenses/agpl-3.0.en.html)
* @author Congzhi Chen <congzhi@cnezsoft.com>
* @package file
* @version $Id$
* @link http://www.zentao.net
*/
?>
<?php include $app->getModuleRoot() . 'common/view/header.lite.html.php';?>
<?php include $app->getModuleRoot() . 'common/view/chosen.html.php';?>
<?php $this->app->loadLang('file');?>
<style>
#customFields .panel {border: 1px solid #ddd; background: #fafafa; margin: 0;}
#customFields .panel-actions {padding: 0;}
#customFields .panel {position: relative;}
#customFields .panel:before, #customFields .panel:after {content: ' '; display: block; width: 0; height: 0; border-style: solid; border-width: 0 10px 10px 10px; border-color: transparent transparent #f1f1f1 transparent; position: absolute; left: 315px; top: -9px;}
#customFields .panel:before {border-color: transparent transparent #ddd transparent; top: -10px;}
#mainContent .c-name {width:120px;}
#mainContent .c-fileName {width:300px;}
</style>
<script>
function setDownloading()
{
if(navigator.userAgent.toLowerCase().indexOf("opera") > -1) return true; // Opera don't support, omit it.
var $fileName = $('#fileName');
if($fileName.val() === '') $fileName.val('<?php echo $lang->file->untitled;?>');
$.cookie('downloading', 0);
time = setInterval("closeWindow()", 300);
$('#mainContent').addClass('loading');
return true;
}
function closeWindow()
{
if($.cookie('downloading') == 1)
{
$('#mainContent').removeClass('loading');
parent.$.closeModal();
$.cookie('downloading', null);
clearInterval(time);
}
}
function switchEncode(fileType)
{
var $encode = $('#encode');
if(fileType != 'csv') $encode.val('utf-8').attr('disabled', 'disabled');
else $encode.removeAttr('disabled');
$encode.trigger('chosen:updated');
if(fileType == 'word')
{
$('#tplBox').closest('tr').addClass('hidden');
$('#customFields').addClass('hidden');
}
else
{
$('#tplBox').closest('tr').removeClass('hidden');
}
}
function saveTemplate()
{
var $inputGroup = $('#customFields div.input-group');
var $publicBox = $inputGroup.find('input[id^="public"]');
var title = $inputGroup.find('#title').val();
var content = $('#customFields #exportFields').val();
var isPublic = ($publicBox.size() > 0 && $publicBox.prop('checked')) ? $publicBox.val() : 0;
if(!title || !content) return;
saveTemplateLink = '<?php echo $this->createLink('file', 'ajaxSaveTemplate', 'module=' . $this->moduleName);?>';
$.post(saveTemplateLink, {title:title, content:content, public:isPublic}, function(data)
{
var defaultValue = $('#tplBox #template').val();
$('#tplBox').html(data);
if(data.indexOf('alert') >= 0) $('#tplBox #template').val(defaultValue);
$("#tplBox #template").chosen().on('chosen:showing_dropdown', function()
{
var $this = $(this);
var $chosen = $this.next('.chosen-container').removeClass('chosen-up');
var $drop = $chosen.find('.chosen-drop');
$chosen.toggleClass('chosen-up', $drop.height() + $drop.offset().top - $(document).scrollTop() > $(window).height());
});
$inputGroup.find('#title').val(title);
});
}
/* Set template. */
function setTemplate(templateID)
{
var $template= $('#tplBox #template' + templateID);
var exportFields = $template.size() > 0 ? $template.html() : defaultExportFields;
exportFields = exportFields.split(',');
$('#exportFields').val('');
var optionHtml = '';
for(i in exportFields)
{
$selectedOption = $('#exportFields').find('option[value="' + exportFields[i] + '"]');
optionHtml += $selectedOption.attr('selected', 'selected').prop('outerHTML');
$selectedOption.remove();
}
$('#exportFields option').each(function(){optionHtml += $(this).removeAttr('selected').prop('outerHTML')});
$('#exportFields').html(optionHtml).trigger("chosen:updated");
}
/* Delete template. */
function deleteTemplate()
{
var templateID = $('#tplBox #template').val();
if(templateID == 0) return;
hiddenwin.location.href = createLink('file', 'ajaxDeleteTemplate', 'templateID=' + templateID);
$('#tplBox #template').find('option[value="'+ templateID +'"]').remove();
$('#tplBox #template').trigger("chosen:updated");
$('#tplBox #template').change();
}
/**
* Toggle export template box.
*
* @access public
* @return void
*/
function setExportTPL()
{
$('#customFields').toggleClass('hidden');
}
/**
* Set whether part download.
*
* @param input target
* @access public
* @return void
*/
function setPart(target)
{
if($(target).prop("checked"))
{
$("#submit").attr("onclick", 'setPartDownloading();');
}
else
{
$("#submit").attr("onclick", 'setDownloading();');
}
}
var partQueue = new Array();
/**
* Set part down and begin the first part down.
*
* @access public
* @return void
*/
function setPartDownloading()
{
var partNum = 10000;
var total = $('.pager', window.parent.document).data('rec-total');
for(var i = 0; i < total; i = i + partNum)
{
partQueue.push(i + ',' + partNum);
}
$.cookie('downloading', 0);
$('#mainContent').addClass('loading');
$("#limit").val(partQueue.shift());
$("#submit").attr("onclick", 'startPartDownloading();');
time = setInterval(function()
{
startPartDownloading();
}, 1000);
}
/**
* Start follow-up part down.
*
* @access public
* @return void
*/
function startPartDownloading()
{
if($.cookie('downloading') == 1)
{
var limit = partQueue.shift();
if(limit)
{
$.cookie('downloading', 0);
$("#limit").val(limit);
$("#submit").attr("disabled", false).click();
}
else
{
$('#mainContent').removeClass('loading');
parent.$.closeModal();
$.cookie('downloading', null);
clearInterval(time);
}
}
}
$(document).ready(function()
{
$(document).on('change', '#template', function()
{
$('#title').val($(this).find('option:selected').text());
});
$('#fileType').change();
<?php if($this->cookie->checkedItem):?>
setTimeout(function()
{
$('#exportType').val('selected').trigger('chosen:updated');
}, 150);
<?php endif;?>
if($('#customFields #exportFields').length > 0)
{
$('#customFields #exportFields').change(function()
{
setTimeout(function()
{
var optionHtml = '';
var selected = ',';
$('#customFields #exportFields_chosen .chosen-choices li.search-choice').each(function(i)
{
index = $(this).find('.search-choice-close').data('option-array-index');
optionHtml += $('#exportFields option').eq(index).attr('selected', 'selected').prop("outerHTML");
$(this).find('.search-choice-close').attr('data-option-array-index', i);
selected += index + ',';
})
$('#exportFields option').each(function(i)
{
if(selected.indexOf(',' + i + ',') < 0) optionHtml += $(this).removeAttr('selected').prop("outerHTML");
})
$('#exportFields').html(optionHtml).trigger('chosen:updated');
}, 100);
})
}
});
</script>
<?php
$isCustomExport = (!empty($customExport) and !empty($allExportFields));
if($isCustomExport)
{
$allExportFields = explode(',', $allExportFields);
$hasDefaultField = isset($selectedFields);
$selectedFields = $hasDefaultField ? explode(',', $selectedFields) : array();
$exportFieldPairs = array();
$moduleName = $this->moduleName;
$moduleLang = $lang->$moduleName;
foreach($allExportFields as $key => $field)
{
$field = trim($field);
$exportFieldPairs[$field] = isset($moduleLang->$field) ? $moduleLang->$field : (isset($lang->$field) ? $lang->$field : $field);
if(!is_string($exportFieldPairs[$field])) $exportFieldPairs[$field] = $field;
if(!$hasDefaultField)$selectedFields[] = $field;
}
js::set('defaultExportFields', join(',', $selectedFields));
}
?>
<main id="main">
<div class="container">
<div id="mainContent" class='main-content load-indicator'>
<div class='main-header'>
<h2><?php echo $lang->export;?></h2>
</div>
<form class='main-form' method='post' target='hiddenwin'>
<table class="table table-form">
<tbody>
<tr>
<th class='c-name'><?php echo $lang->file->fileName;?></th>
<td class="c-fileName"><?php echo html::input('fileName', isset($fileName) ? $fileName : '', "class='form-control' autofocus placeholder='{$lang->file->untitled}'");?></td>
<td></td>
</tr>
<tr>
<th><?php echo $lang->file->extension;?></th>
<td><?php echo html::select('fileType', $lang->exportFileTypeList, '', 'onchange=switchEncode(this.value) class="form-control chosen" data-drop_direction="down"');?></td>
</tr>
<tr>
<th><?php echo $lang->file->encoding;?></th>
<td><?php echo html::select('encode', $config->charsets[$this->cookie->lang], 'utf-8', "class='form-control chosen'");?></td>
</tr>
<?php $hide = isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'kanban') !== false ? 'style="display:none"' : '';?>
<tr <?php echo $hide;?>>
<th><?php echo $lang->file->exportRange;?></th>
<td>
<?php if(isset($_SERVER['HTTP_REFERER']) && strpos($_SERVER['HTTP_REFERER'], 'calendar') !== false) unset($lang->exportTypeList['selected']);?>
<?php echo html::select('exportType', $lang->exportTypeList, 'all', "class='form-control chosen'");?>
</td>
<td class='checkbox part hidden'>
<?php echo html::checkbox('part', array( 1 => $lang->file->batchExport), '', "onclick='setPart(this);'");?>
<?php echo html::hidden('limit', '');?>
</td>
</tr>
<?php if($isCustomExport):?>
<tr>
<th><?php echo $lang->file->tplTitleAB;?></th>
<td id="tplBox"><?php echo $this->fetch('file', 'buildExportTPL', 'module=' . $this->moduleName);?></td>
<td>
<button type='button' onclick='setExportTPL()' class='btn'><?php echo $lang->file->setExportTPL?></button>
</td>
</tr>
<tr id='customFields' class="hidden">
<th></th>
<td colspan="2">
<div class='panel'>
<div class='panel-heading'>
<strong><?php echo $lang->file->exportFields?></strong>
<div class="panel-actions btn-toolbar">
<button type="button" class="btn btn-link" onclick="setExportTPL()"><i class="icon icon-close icon-sm muted"></i></button>
</div>
</div>
<div class='panel-body'>
<p><?php echo html::select('exportFields[]', $exportFieldPairs, $selectedFields, "class='form-control chosen' multiple")?></p>
<div>
<div class='input-group'>
<span class='input-group-addon'><?php echo $lang->file->tplTitle;?></span>
<?php echo html::input('title', $lang->file->defaultTPL, "class='form-control'")?>
<?php if(common::hasPriv('file', 'setPublic')):?>
<span class='input-group-addon'><?php echo html::checkbox('public', array(1 => $lang->public));?></span>
<?php endif?>
<span class='input-group-btn'><button id='saveTpl' type='button' onclick='saveTemplate()' class='btn btn-primary'><?php echo $lang->save?></button></span>
<span class='input-group-btn'><button type='button' onclick='deleteTemplate()' class='btn'><?php echo $lang->delete?></button></span>
</div>
</div>
</div>
</div>
</td>
</tr>
<?php endif?>
<tr>
<th></th>
<td class='text-center'>
<?php echo html::submitButton($lang->export, "onclick='setDownloading();'", 'btn btn-primary');?>
</td>
</tr>
</tbody>
</table>
</form>
</div>
</div>
</main>
<?php include $app->getModuleRoot() . 'common/view/footer.lite.html.php';?>