Finish export forms

modifié:         core/lib/Thelia/Config/Resources/config.xml
	modifié:         core/lib/Thelia/Config/Resources/form.xml
	modifié:         core/lib/Thelia/Controller/Admin/ExportController.php
	modifié:         core/lib/Thelia/Controller/Admin/ImportExportController.php
	modifié:         core/lib/Thelia/Core/Template/Loop/Formatter.php
	modifié:         core/lib/Thelia/Core/Template/Loop/ImportExportType.php
	modifié:         core/lib/Thelia/Form/ExportForm.php
	modifié:         core/lib/Thelia/ImportExport/Both/NewsletterImportExport.php
	modifié:         core/lib/Thelia/ImportExport/Export/MailingExport.php
	renommé:         core/lib/Thelia/ImportExport/ExportHandlerInterface.php -> core/lib/Thelia/ImportExport/ExportHandler.php
	modifié:         core/lib/Thelia/Model/Export.php
	modifié:         core/lib/Thelia/Model/Import.php
	nouveau fichier: core/lib/Thelia/Tests/ImportExport/Export/MailingExportTest.php
	nouveau fichier: templates/backOffice/default/ajax/export-modal.html
	modifié:         templates/backOffice/default/export-page.html
	modifié:         templates/backOffice/default/export.html
This commit is contained in:
Benjamin Perche
2014-07-11 16:06:15 +02:00
parent 33695a7886
commit b6937ab421
16 changed files with 453 additions and 127 deletions

View File

@@ -0,0 +1,93 @@
{form name="thelia.export"}
<form action="{$URL}" method="post" {form_enctype form=$form}>
<div class="modal fade" id="real-export-modal" tabindex="-1" role="dialog" aria-labelledby="export-modal-label" aria-hidden="true">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><span aria-hidden="true">&times;</span><span class="sr-only">Close</span></button>
<h4 class="modal-title" id="export-modal-label">Export: {$TITLE}</h4>
</div>
<div class="modal-body">
<div class="row">
<div class="col-md-12">
{ifloop rel="export-formatters"}
<div class="row">
<div class="col-md-6">
{custom_render_form_field form=$form field="formatter"}
<select>
{loop name="export-formatters" type="formatter" export=$ID}
<option value="{$NAME}" {if $value == $NAME}selected{/if}>
{$NAME} (.{$EXTENSION})
</option>
{/loop}
</select>
{/custom_render_form_field}
</div>
<div class="col-md-6">
{form_field form=$form field="do_compress"}
<label for="{$label_attr.for}">
{$label}
</label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small" id="export-compression-switch">
<input type="checkbox" name="{$name}" id="{$label_attr.for}"/>
</div>
{/form_field}
</div>
</div>
<div class="row export-compression-selection-row">
<div class="col-md-4">
{custom_render_form_field form=$form field="archive_builder"}
<select name="{$name}">
{loop name="export-archive-builder" type="archive-builder"}
<option value="{$NAME}" {if $value == $NAME}selected{/if}>
{$NAME} (.{$EXTENSION})
</option>
{/loop}
</select>
{/custom_render_form_field}
</div>
<div class="col-md-4">
{form_field form=$form field="images"}
<label for="{$label_attr.for}">
{$label}
</label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small">
<input type="checkbox" name="{$name}" id="{$label_attr.for}" />
</div>
{/form_field}
</div>
<div class="col-md-4">
{form_field form=$form field="documents"}
<label for="{$label_attr.for}">
{$label}
</label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small">
<input type="checkbox" name="{$name}" id="{$label_attr.for}" />
</div>
{/form_field}
</div>
</div>
{/ifloop}
{elseloop rel="export-formatters"}
<div class="row">
<div class="col-md-12">
<div class="alert alert-warning">
{intl l="You can't do exports, you don't have any formatter that handles this."}
</div>
</div>
</div>
{/elseloop}
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">{intl l="Close"}</button>
<button type="submit" class="btn btn-primary">{intl l="Export"}</button>
</div>
</div>
</div>
</div>
</form>
{/form}

View File

@@ -1,41 +1,41 @@
{extends file="admin-layout.tpl"}
{block name="no-return-functions"}
{$admin_current_location = 'tools'}
{$admin_current_location = 'modules'}
{/block}
{block name="page-title"}{intl l='Export: %title' title=$TITLE}{/block}
{block name="page-title"}{intl l='Export'}: {$TITLE}{/block}
{block name="check-resource"}admin.export{/block}
{block name="check-access"}view{/block}
{block name="main-content"}
{form name="thelia.admin.export"}
<form method="post" {form_enctype form=$form}>
<div class="configuration">
<div id="wrapper" class="container">
<div class="container" id="wrapper">
<nav>
<ul class="breadcrumb">
<li><a href="{url path='admin/home'}">{intl l='Home'}</a></li>
<li><a href="{url path='admin/tools'}">{intl l='Tools'}</a></li>
<li><a href="{url path='admin/export'}">{intl l="Exports"}</a></li>
<li>{intl l='Export: %title' title=$TITLE}</li>
</ul>
</nav>
<nav>
<ul class="breadcrumb">
<li><a href="{url path='admin/home'}">{intl l='Home'}</a></li>
<li><a href="{url path='admin/tools'}">{intl l='Tools'}</a></li>
<li><a href="{url path='admin/export'}">{intl l="Exports"}</a></li>
<li>{intl l="Export"}: {$TITLE}</li>
</ul>
</nav>
<div class="row">
<div class="col-md-12">
<div class="general-block-decorator">
<div class="title block-title">
{intl l="Export"}
</div>
<div class="block-content">
<div class="row">
<div class="col-md-6">
<div class="general-block-decorator">
<div class="title title-without-tabs">
{intl l='Export: '}{$TITLE}
</div>
{form name="thelia.export"}
<form action="{$URL}" method="post" {form_enctype form=$form}>
<div class="row">
<div class="col-md-12">
{ifloop rel="export-formatters"}
<div class="row">
<div class="col-md-12">
<div class="col-md-3">
<div class="row">
<div class="col-md-6">
{custom_render_form_field form=$form field="formatter"}
<select>
{loop name="export-formatters" type="formatter" export=$ID}
@@ -46,75 +46,72 @@
</select>
{/custom_render_form_field}
</div>
<div class="col-md-3">
<div class="row">
<div class="col-md-12">
<label>
{intl l="Do compress"}
</label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small export-compression-switch">
<input type="checkbox" />
</div>
<div class="col-md-6">
{form_field form=$form field="do_compress"}
<label for="{$label_attr.for}">
{$label}
</label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small" id="export-compression-switch">
<input type="checkbox" name="{$name}" id="{$label_attr.for}"/>
</div>
</div>
<div class="row export-compression-selection-row">
<div class="col-md-12">
{custom_render_form_field form=$form field="archive_builder"}
<select name="{$name}">
{loop name="export-archive-builder" type="archive-builder"}
<option value="{$NAME}" {if $value == $NAME}selected{/if}>
{$NAME} (.{$EXTENSION})
</option>
{/loop}
</select>
{/custom_render_form_field}
</div>
</div>
{/form_field}
</div>
<div class="col-md-3">
</div>
<div class="row export-compression-selection-row">
<div class="col-md-4">
{custom_render_form_field form=$form field="archive_builder"}
<select name="{$name}">
{loop name="export-archive-builder" type="archive-builder"}
<option value="{$NAME}" {if $value == $NAME}selected{/if}>
{$NAME} (.{$EXTENSION})
</option>
{/loop}
</select>
{/custom_render_form_field}
</div>
<div class="col-md-4">
{form_field form=$form field="images"}
<label for="{$label_attr.for}">
{$label}
</label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small ">
<input type="checkbox" name="{$name}" id="{$label_attr.for}"/>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small">
<input type="checkbox" name="{$name}" id="{$label_attr.for}" />
</div>
{/form_field}
</div>
<div class="col-md-3">
<div class="col-md-4">
{form_field form=$form field="documents"}
<label for="{$label_attr.for}">
{$label}
</label>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small ">
<input type="checkbox" name="{$name}" id="{$label_attr.for}"/>
<div data-off-label="&lt;i class='glyphicon glyphicon-remove-circle'&gt;&lt;/i&gt;" data-on-label="&lt;i class='glyphicon glyphicon-ok-circle'&gt;&lt;/i&gt;" data-on="success" class="make-switch switch-small">
<input type="checkbox" name="{$name}" id="{$label_attr.for}" />
</div>
{/form_field}
</div>
</div>
</div>
</div>
{/ifloop}
{elseloop rel="export-formatters"}
<div class="row">
<div class="col-md-12">
<div class="alert alert-warning">
{intl l="You can't do exports, you don't have any formatter that handles this."}
{/ifloop}
{elseloop rel="export-formatters"}
<div class="row">
<div class="col-md-12">
<div class="alert alert-warning">
{intl l="You can't do exports, you don't have any formatter that handles this."}
</div>
</div>
</div>
</div>
{/elseloop}
{/elseloop}
</div>
</div>
</div>
<button type="submit" class="btn btn-primary">{intl l="Export"}</button>
</form>
{/form}
</div>
</div>
</div>
</form>
{/form}
</div>
{/block}
{block name="javascript-initialization"}
@@ -124,19 +121,19 @@
{/block}
{block name="javascript-last-call"}
<!-- -->
<script>
$(document).ready(function() {
var compression_switch = $(".export-compression-switch");
var compression_switch = $("#export-compression-switch");
var compression_row = $(".export-compression-selection-row");
compression_switch.on("switch-change", function(e, data) {
var is_checked = data.value;
if (is_checked) {
compression_row.show();
compression_row.show("slow");
} else {
compression_row.hide();
compression_row.hide("slow");
}
});
@@ -145,6 +142,10 @@
} else {
compression_row.hide();
}
$(".make-switch", export_modal).bootstrapSwitch();
$("#real-export-modal").modal();
});
</script>
{module_include location='configuration-js'}

View File

@@ -17,6 +17,7 @@
{assign url_export "export_order="|cat:$export_order}
{/if}
<div id="export-modal"></div>
<div class="configuration">
@@ -33,17 +34,18 @@
{module_include location='tools_top'}
{loop name="export-category" type="export-category" order=$category_order}
{assign category_title $TITLE}
<div class="row">
<div class="col-md-12">
<div class="general-block-decorator">
<div class="table-responsive">
<div class="table-responsive" id="category_{$category_title}">
<table class="table table-striped table-condensed table-left-aligned">
<caption class="clearfix">
<a href="{url path="/admin/export/position/category/up/{$ID}{if $url_export}?{$url_export}{/if}"}">
<a href="{url path="/admin/export/position/category/up/{$ID}{if $url_export}?{$url_export}{/if}#category_{$category_title}"}">
<span class="glyphicon glyphicon-arrow-up"></span>
</a>
{$POSITION}
<a href="{url path="/admin/export/position/category/down/{$ID}{if $url_export}?{$url_export}{/if}"}">
<a href="{url path="/admin/export/position/category/down/{$ID}{if $url_export}?{$url_export}{/if}#category_{$category_title}"}">
<span class="glyphicon glyphicon-arrow-down"></span>
</a>
{$TITLE}
@@ -51,17 +53,32 @@
<thead>
<tr>
<th class="col-md-1">
<a href="{url path="/admin/export"}?{if $url_category}{$url_category}&{/if}export_order=id{if $export_order == "id"}_reverse{/if}">
{if $export_order == "id"}
<i class="glyphicon glyphicon-chevron-up"></i>
{elseif $export_order == "id_reverse"}
<i class="glyphicon glyphicon-chevron-down"></i>
{/if}
<a href="{url path="/admin/export"}?{if $url_category}{$url_category}&{/if}export_order=id{if $export_order == "id"}_reverse{/if}#category_{$category_title}">
{intl l="ID"}
</a>
</th>
<th class="col-md-8">
<a href="{url path="/admin/export"}?{if $url_category}{$url_category}&{/if}export_order=alpha{if $export_order == "alpha"}_reverse{/if}">
{if $export_order == "alpha"}
<i class="glyphicon glyphicon-chevron-up"></i>
{elseif $export_order == "alpha_reverse"}
<i class="glyphicon glyphicon-chevron-down"></i>
{/if}
<a href="{url path="/admin/export"}?{if $url_category}{$url_category}&{/if}export_order=alpha{if $export_order == "alpha"}_reverse{/if}#category_{$category_title}">
{intl l="Name"}
</a>
</th>
<th class="col-md-2">
<a href="{url path="/admin/export"}?{if $url_category}{$url_category}&{/if}export_order=manual{if $export_order == "manual"}_reverse{/if}">
{if $export_order == "manual"}
<i class="glyphicon glyphicon-chevron-up"></i>
{elseif $export_order == "manual_reverse"}
<i class="glyphicon glyphicon-chevron-down"></i>
{/if}
<a href="{url path="/admin/export"}?{if $url_category}{$url_category}&{/if}export_order=manual{if $export_order == "manual"}_reverse{/if}#category_{$category_title}">
{intl l="Position"}
</a>
</th>
@@ -77,20 +94,20 @@
{$ID}
</td>
<td>
<a href="{$URL}">{$TITLE}</a>
<a href="#category_{$category_title}" class="btn-show-export-modal" data-id="{$ID}" data-url="{$URL}">{$TITLE}</a>
</td>
<td>
<a href="{url path="/admin/export/position/up/{if $url_category}?{$url_category}{/if}{$ID}"}">
<a href="{url path="/admin/export/position/up/{if $url_category}?{$url_category}{/if}{$ID}#category_{$category_title}"}">
<span class="glyphicon glyphicon-arrow-up"></span>
</a>
{$POSITION}
<a href="{url path="/admin/export/position/down/{$ID}{if $url_category}?{$url_category}{/if}"}">
<a href="{url path="/admin/export/position/down/{$ID}{if $url_category}?{$url_category}{/if}#category_{$category_title}"}">
<span class="glyphicon glyphicon-arrow-down"></span>
</a>
</td>
<td>
<div class="btn-group">
<a class="btn btn-default btn-xs" href="{$URL}" title="{intl l="Do this export"}">
<a class="btn btn-default btn-xs btn-show-export-modal" data-id="{$ID}" data-url="{$URL}" title="{intl l="Do this export"}">
<span class="glyphicon glyphicon-open"></span>
</a>
</div>
@@ -115,4 +132,59 @@
{module_include location='configuration_bottom'}
</div>
</div>
{/block}
{block name="javascript-initialization"}
{javascripts file='assets/js/bootstrap-switch/bootstrap-switch.js'}
<script src="{$asset_url}"></script>
{/javascripts}
{/block}
{block name="javascript-last-call"}
<script>
$(document).ready(function() {
var export_modal = $("#export-modal");
$(".btn-show-export-modal").click(function() {
var export_id = $(this).data("id");
/**
* If we can't load the modal form, redirect to a page where the form is too.
*/
$.ajax(
$(this).data("url")
).success(function(data) {
export_modal.html(data);
var compression_switch = $("#export-compression-switch", export_modal);
var compression_row = $(".export-compression-selection-row", export_modal);
compression_switch.on("switch-change", function(e, data) {
var is_checked = data.value;
if (is_checked) {
compression_row.show("slow");
} else {
compression_row.hide("slow");
}
});
if ($("input[type=checkbox]", compression_switch).is(":checked")) {
compression_row.show();
} else {
compression_row.hide();
}
$(".make-switch", export_modal).bootstrapSwitch();
$("#real-export-modal").modal();
}).fail(function() {
window.location.replace("{url path='/admin/export/'}"+export_id);
});
});
});
</script>
{module_include location='configuration-js'}
{/block}