first commit

This commit is contained in:
2024-10-25 14:16:28 +02:00
commit 925276dbb2
33795 changed files with 4780077 additions and 0 deletions

View File

@@ -0,0 +1,83 @@
<div class="panel">
<div class="panel-heading">
{l s='Saved configuration for this file' mod='pshowimporter'}
<button class="btn btn-success configshow">
{l s='show' mod='pshowimporter'}/{l s='hide' mod='pshowimporter'}
</button>
</div>
<div class="panel-wrapper configcontent">
{foreach from=$primary_config key='key' item='config'}
{assign var='name' value=false}
{if ($key == 'delimiter')}
{assign var='name' value={l s='Data delimiter' mod='pshowimporter'}}
{elseif ($key == 'tags_separator')}
{assign var='name' value={l s='Tags separator' mod='pshowimporter'}}
{elseif ($key == 'unique_data')}
{assign var='name' value={l s='Unique data' mod='pshowimporter'}}
{elseif ($key == 'updateGenThumbnails')}
{assign var='name' value={l s='Generate thumbnails' mod='pshowimporter'}}
{assign var='config' value=(($config) ? {l s='Yes' mod='pshowimporter'} : {l s='No' mod='pshowimporter'})}
{elseif ($key == 'image_quality')}
{assign var='name' value={l s='Quality of the images' mod='pshowimporter'}}
{elseif ($key == 'images_in_file')}
{assign var='name' value=false}
{elseif ($key == 'tags_in_file')}
{assign var='name' value=false}
{elseif ($key == 'firstLine')}
{assign var='name' value={l s='Start import from object' mod='pshowimporter'}}
{elseif ($key == 'category_separator')}
{assign var='name' value={l s='Category path separator' mod='pshowimporter'}}
{elseif ($key == 'vat')}
{assign var='name' value={l s='Tax value' mod='pshowimporter'}}
{elseif ($key == 'margin_prices')}
{assign var='name' value={l s='Prices margin' mod='pshowimporter'}}
{elseif ($key == 'what_import')}
{assign var='name' value={l s='Import' mod='pshowimporter'}}
{elseif ($key == 'rowsCount')}
{assign var='name' value={l s='Objects count in the file' mod='pshowimporter'}}
{elseif ($key == 'images_separator')}
{assign var='name' value={l s='Images separator' mod='pshowimporter'}}
{elseif ($key == 'file_contains')}
{assign var='name' value={l s='File contains' mod='pshowimporter'}}
{elseif ($key == 'updateWithDownload')}
{assign var='name' value={l s='Update file from URL' mod='pshowimporter'}}
{assign var='config' value=(($config) ? {l s='Yes' mod='pshowimporter'} : {l s='No' mod='pshowimporter'})}
{elseif ($key == 'lang_id')}
{assign var='name' value={l s='Language id' mod='pshowimporter'}}
{if !$config}
{assign var='config' value={l s='all' mod='pshowimporter'}}
{/if}
{elseif ($key == 'categories_in_file')}
{else}
{assign var='name' value={$key}}
{/if}
{if $name}
<div class="col-md-4">
<label class="control-label col-md-6 text-right">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="">
{$name}:
</span>
</label>
<div class="col-md-6">
{$config}
</div>
</div>
{/if}
{/foreach}
<div class="clearfix"></div>
</div>
<div class="panel-footer configcontent">
<a href="{$link->getAdminLink('PShowImporterConfig', true)}&file={$smarty.get.file}" class="btn btn-default pull-right">
<i class="process-icon-cancel"></i> {l s='Change' mod='pshowimporter'}
</a>
</div>
</div>

View File

@@ -0,0 +1,115 @@
<form class="defaultForm form-horizontal" id="matchingFields" method="post" action="{$link->getAdminLink('PShowImporterConfig', true)}&file={$smarty.get.file}&step=2">
<div class="panel">
<div class="panel-heading">
{l s='Match columns from file to columns from PrestaShop database' mod='pshowimporter'}
</div>
<div class="panel-wrapper" style="overflow-x: scroll;">
<div class="table-responsive-row">
<table class="table">
<thead>
<tr>
{assign var='i' value=0}
{foreach from=reset($rows) item='cell'}
<th>
<select style="width: 150px;" name="type{$i}"
ng-init="psiCtrl.type{$i} = '{if isset($matched_fields[$i+1][0])}{$matched_fields[$i+1][0]}{else}none{/if}'"
ng-model="psiCtrl.type{$i}" class="form-control">
<option value="none">{l s='skip' mod='pshowimporter'}</option>
{foreach from=$db_tables key='tablename' item='columns'}
<option value="{$tablename}{$i}">
{if ($tablename == 'product')}
{l s='Product' mod='pshowimporter'}
{elseif ($tablename == 'feature')}
{l s='Feature' mod='pshowimporter'}
{elseif ($tablename == 'category')}
{l s='Category' mod='pshowimporter'}
{elseif ($tablename == 'attributegroup')}
{l s='Attribute' mod='pshowimporter'}
{elseif ($tablename == 'combination')}
{l s='Combination' mod='pshowimporter'}
{/if}
</option>
{/foreach}
</select>
</th>
{assign var='i' value=$i+1}
{/foreach}
</tr>
<tr>
{assign var='i' value=0}
{foreach from=reset($rows) item='cell'}
<th>
<select class="form-control" ng-disabled="true"
ng-show="psiCtrl.type{$i} == 'none'">
</select>
{foreach from=$db_tables item='columns' key='tablename'}
<select name="{$tablename}{$i}" class="form-control"
ng-show="psiCtrl.type{$i} == '{$tablename}{$i}'">
{foreach from=$columns item='desc' key='key'}
<option value='{$key}' {if isset($matched_fields[$i+1][1]) && $matched_fields[$i+1][1] == $key}selected{/if}>{$desc}</option>
{/foreach}
</select>
{/foreach}
</th>
{assign var='i' value=$i+1}
{/foreach}
</tr>
</thead>
<tbody>
{foreach from=$rows item='row'}
<tr>
{foreach from=$row item='cell'}
<td>
{(string)$cell|truncate:30}
</td>
{/foreach}
</tr>
{/foreach}
</tbody>
</table>
</div>
</div>
<div class="panel-footer">
<button type="submit" value="1" name="submit_matchfields"
class="btn btn-default pull-right" ng-show="{(int)$category_matching}">
<i class="process-icon-save"></i> {l s='Save' mod='pshowimporter'}
</button>
<button type="submit" value="1" name="submit_matchfields"
class="btn btn-default pull-right" ng-hide="{(int)$category_matching}">
<i class="process-icon-save"></i> {l s='Save and back to files list' mod='pshowimporter'}
</button>
<button type="submit" value="1" name="submitNimport_matchfields"
class="btn btn-default pull-right" ng-hide="{(int)$category_matching}">
<i class="process-icon-save"></i> {l s='Save and import' mod='pshowimporter'}
</button>
<a href="{$link->getAdminLink('PShowImporterMain', true)}" class="btn btn-default">
<i class="process-icon-cancel"></i> {l s='Cancel' mod='pshowimporter'}
</a>
</div>
</div>
</form>

View File

@@ -0,0 +1,239 @@
<div class="btn-group-action">
<div class="btn-group pull-right">
{if $file['extension']|strtoupper == 'CSV' && $f['configured']}
<a class="edit btn btn-default" href="{$link->getAdminLink('PShowImporterMain', true)}&page=converttoxml&filename={$f['time']}-{$f['filename']}">
<i class="icon-cloud-download"></i> {l s='Convert to XML' mod='pshowimporter'}
</a>
{elseif $file['extension']|strtoupper == 'CSV' && !$f['configured']}
<a class="edit btn btn-default disabled">
<i class="icon-close"></i> {l s='Upload again' mod='pshowimporter'}
</a>
{elseif ($isDuringImport && $file['filesize'])}
{* during import *}
{elseif ((!$f['configured'] || $f['reconfigRequired']) && $file['filesize'])}
<a href="{$link->getAdminLink('PShowImporterConfig', true)}&file={$f['time']}-{$f['filename']}" title="{l s='Configure' mod='pshowimporter'}" class="edit btn btn-default showLoader">
<i class="icon-pencil"></i> {l s='Configure' mod='pshowimporter'}
</a>
{elseif (!$f['matched']) && $file['filesize']}
<a href="{$link->getAdminLink('PShowImporterConfig', true)}&file={$f['time']}-{$f['filename']}&step=2" title="{l s='Match fields' mod='pshowimporter'}" class="edit btn btn-default showLoader">
<i class="icon-indent-left"></i> {l s='Match fields' mod='pshowimporter'}
</a>
{elseif (($f['configured'] && $f['matched']) && $file['filesize'] && !($import_queue|count))}
<a href="{$link->getAdminLink('PShowImporterMain', true)}&page=addtoqueue&filename={$f['time']}-{$f['filename']}&import=1" title="{l s='Import' mod='pshowimporter'}" class="edit btn btn-default showLoader"
{if $f['reqMoreMemory']}onclick="if (!confirm('{l s='This file require minimal `memory_limit`:' mod='pshowimporter'} {$f['reqMoreMemory']}, are you sure you want try to import?'))
return false;"{/if}>
<i class="icon-cloud-download"></i> {l s='Import' mod='pshowimporter'}
</a>
{elseif !$file['filesize']}
<a class="edit btn btn-default disabled">
<i class="icon-close"></i> {l s='File is empty' mod='pshowimporter'}
</a>
{/if}
<button class="btn btn-default dropdown-toggle" data-toggle="dropdown">
<i class="icon-caret-down"></i>&nbsp;
</button>
<ul class="dropdown-menu">
{if $file['extension']|strtoupper != 'CSV'}
{* CONFIGURE *}
{if $file['filesize']}
<li>
<a href="{$link->getAdminLink('PShowImporterConfig', true)}&file={$f['time']}-{$f['filename']}" title="{l s='Configure' mod='pshowimporter'}" class="edit showLoader">
<i class="icon-pencil"></i> {l s='Configure' mod='pshowimporter'}
</a>
</li>
{/if}
{* MATCH FIELDS *}
{if ($f['configured'] && $file['filesize'])}
<li>
<a href="{$link->getAdminLink('PShowImporterConfig', true)}&file={$f['time']}-{$f['filename']}&step=2" title="{l s='Match fields' mod='pshowimporter'}" class="edit showLoader">
<i class="icon-indent-left"></i> {l s='Match fields' mod='pshowimporter'}
</a>
</li>
{else}
<li class="disabled">
<a data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Configure file at first' mod='pshowimporter'}" data-html="true" data-placement="left">
<i class="icon-indent-left"></i> {l s='Match fields' mod='pshowimporter'}
</a>
</li>
{/if}
{* MATCH CATEGORIES *}
{if ($f['matched'] && $f['configured'] && $file['filesize'])}
<li>
<a href="{$link->getAdminLink('PShowImporterConfig', true)}&file={$f['time']}-{$f['filename']}&step=3" title="{l s='Match fields' mod='pshowimporter'}" class="edit showLoader">
<i class="icon-indent-left"></i> {l s='Final configuration' mod='pshowimporter'}
</a>
</li>
{else}
<li class="disabled">
<a data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Change file configuration to set up this' mod='pshowimporter'}" data-html="true" data-placement="left">
<i class="icon-indent-left"></i> {l s='Final configuration' mod='pshowimporter'}
</a>
</li>
{/if}
{* IMPORT *}
{if ($f['matched'] && $f['configured'] && !$isDuringImport && !$f['reconfigRequired'] && $file['filesize'] && !($import_queue|count))}
<li>
<a href="{$link->getAdminLink('PShowImporterMain', true)}&page=addtoqueue&filename={$f['time']}-{$f['filename']}&import=1" title="{l s='Import' mod='pshowimporter'}" class='showLoader'>
<i class="icon-cloud-download"></i> {l s='Import' mod='pshowimporter'}
</a>
</li>
{elseif ($import_queue|count)}
<li class="disabled">
<a data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Import your queue above or remove files from queue to import only this one file' mod='pshowimporter'}" data-html="true" data-placement="left">
<i class="icon-cloud-download"></i> {l s='Import' mod='pshowimporter'}
</a>
</li>
{else}
<li class="disabled">
<a data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Configure and match fileds at first' mod='pshowimporter'}" data-html="true" data-placement="left">
<i class="icon-cloud-download"></i> {l s='Import' mod='pshowimporter'}
</a>
</li>
{/if}
<li class="divider"></li>
{* QUEUE *}
<li>
<a href="{$link->getAdminLink('PShowImporterMain', true)}&page=addtoqueue&filename={$f['time']}-{$f['filename']}" class='showLoader'>
<i class="icon-copy"></i> {l s='Add to queue' mod='pshowimporter'}
</a>
</li>
<li class="divider"></li>
{* COPY CONFIG *}
<li>
<a href="#" id="{$f['time']}-{$f['filename']}" class="copy-config-btn">
<i class="icon-copy"></i> {l s='Copy configuration from...' mod='pshowimporter'}
</a>
</li>
<li class="divider"></li>
{* GET CRON URL *}
<li>
<a href="#" onclick="fancyMsgBox('<a href=\'https://pl.wikipedia.org/wiki/Cron\' target=\'_blank\'>{l s='What is CRON?' mod='pshowimporter'}</a><br><br>{l s='Import will be according to the saved configuration for this file.' mod='pshowimporter'}<br><br><b>http://{$smarty.server.HTTP_HOST}{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/direct_import.php?file1={$f['time']}-{$f['filename']}&securekey={$smarty.const._IMPORT_SECURE_KEY_}</b>');" title="{l s='Import' mod='pshowimporter'}" class="edit">
<i class="icon-cloud-download"></i> {l s='Get direct import URL' mod='pshowimporter'}
</a>
</li>
{* GET SSH *}
<li>
<a href="#" onclick="fancyMsgBox('<a href=\'{$link->getAdminLink('PShowImporterMain', true)}&page=ssh\' target=\'_blank\'>{l s='What is this?' mod='pshowimporter'}</a><br><br><b>cd {$MODULE_PATH}; ./direct.sh \'{$smarty.const._IMPORT_SECURE_KEY_}\' \'{$f['time']}-{$f['filename']}\'</b><br><br>To run files in queue - just add names like this:<br><b>{$MODULE_PATH}direct.sh \'{$smarty.const._IMPORT_SECURE_KEY_}\' \'filename1\' \'filename2\' \'filename3\' \'filename4\' \'filename5\'</b>');" title="{l s='Import' mod='pshowimporter'}" class="edit">
<i class="icon-cloud-download"></i> {l s='Get SSH command' mod='pshowimporter'}
</a>
</li>
{* UPDATE FILE *}
{if ($f['from_url'])}
<li>
<a href="{$link->getAdminLink('PShowImporterMain', true)}&file={$f['time']}-{$f['filename']}&page=redownload" title="{l s='Redownload this file' mod='pshowimporter'}" class="edit showLoader">
<i class="icon-cloud-download"></i> {l s='Update file from URL' mod='pshowimporter'}
</a>
</li>
{else}
<li class="disabled">
<a title="{l s='Redownload this file' mod='pshowimporter'}" class="edit">
<i class="icon-cloud-download"></i> {l s='Update file from URL' mod='pshowimporter'}
</a>
</li>
{/if}
{/if}
{if $file['extension']|strtoupper != 'CSV'}
{* CLONE *}
<li>
<a href="{$link->getAdminLink('PShowImporterMain', true)}&file={$f['time']}-{$f['filename']}&page=clone" title="{l s='Clone this file' mod='pshowimporter'}" class="edit showLoader">
<i class="icon-copy"></i> {l s='Clone this file' mod='pshowimporter'}
</a>
</li>
{/if}
{* DOWNLOAD *}
<li>
<a href="{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/upload/{$f['time']}-{$f['filename']}.{$f['extension']}" title="{l s='Download' mod='pshowimporter'}" class="download">
<i class="icon-save"></i> {l s='Download' mod='pshowimporter'} {l s='file' mod='pshowimporter'}
</a>
</li>
<li class="divider"></li>
{* LOG *}
<li>
<a target="_blank" href="{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/import-log/{$f['time']}-{$f['filename']}/?token={$f['log_dir']|md5}" title="{l s='Download' mod='pshowimporter'}" class="delete">
<i class="icon-search-plus"></i> {l s='See' mod='pshowimporter'} log
</a>
</li>
<li>
<a title="{l s='Clear' mod='pshowimporter'} log" class="ajaxClearLog" href="#" data-filename="{$f['time']}-{$f['filename']}">
<i class="icon-trash"></i> {l s='Clear' mod='pshowimporter'} log
</a>
</li>
<li class="divider"></li>
{* DOWNLOAD CONFIG *}
<li>
<a href="{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/import-config/{$f['time']}-{$f['filename']}/config.yml"
title="{l s='Download configuration file' mod='pshowimporter'}" class="download" target="_blank">
<i class="icon-save"></i> {l s='Download configuration file' mod='pshowimporter'}
</a>
</li>
{* UPLOAD CONFIG *}
<li>
<a href="{$link->getAdminLink('PShowImporterMain', true)}&page=uploadconfig&filename={$f['time']}-{$f['filename']}"
title="{l s='upload configuration file' mod='pshowimporter'}" class="uploadConfigFile">
<i class="icon-save"></i> {l s='Upload configuration file' mod='pshowimporter'}
</a>
</li>
<li class="divider"></li>
{if $file['extension']|strtoupper != 'CSV'}
{* REMOVE CONFIG *}
<li>
<a href="{$link->getAdminLink('PShowImporterMain', true)}&removeconfig={$f['time']}-{$f['filename']}"
onclick="return confirm('Are you sure you want to remove configuration for this file?');"
title="{l s='Remove configuration' mod='pshowimporter'}" class="delete showLoader">
<i class="icon-trash"></i> {l s='Remove configuration' mod='pshowimporter'}
</a>
</li>
{/if}
{* REMOVE FILE *}
<li>
<a href="{$link->getAdminLink('PShowImporterMain', true)}&removefile={$f['time']}-{$f['filename']}"
onclick="return confirm('Are you sure you want to remove this file and configuration?');"
title="{l s='Remove' mod='pshowimporter'}" class="delete showLoader">
<i class="icon-trash"></i> {l s='Remove' mod='pshowimporter'}
</a>
</li>
</ul>
</div>
</div>

View File

@@ -0,0 +1,293 @@
<script>
$(document).ready(function () {
$('.psi_addfile').parent().parent().hide();
function getfilesize()
{
var filename = $('#saveas').val();
$.get(
"{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/getfilesize.php?filename=" + filename,
function (r) {
$('.full-screen-loader .loader #uploadStatus').html(r);
setTimeout(function () {
getfilesize()
}, 100);
}
);
}
$(document).on('submit', '#filesendform', function (e) {
if ($('.csvdelim-form-group input').val() === '' && ($('input#file').val().split('.').pop() === 'csv' || $('select[name="fileext"]').val() === 'csv')) {
e.preventDefault();
alert("CSV column delimiter is required!");
return false;
}
$('.full-screen-loader .loader')
.append('<br><br><br><div id="uploadStatus" style="background: #000; color: #fff; padding:5px;"><strong>Downloading: 0B</strong></div>');
if ($('input#file').val() !== "")
{
$('.full-screen-loader .loader #uploadStatus').html('<strong>Uploading...</strong>');
return;
}
getfilesize();
});
$(document).on('change', 'select[name="fileext"]', function () {
if ($(this).val() === 'csv') {
$('.csvdelim-form-group').removeClass('hidden');
$('.csvdelim-form-group input').attr('required', 'required');
} else {
$('.csvdelim-form-group').addClass('hidden');
$('.csvdelim-form-group input').removeAttr('required');
}
});
$(document).on('change', 'input#file', function () {
console.log($(this).val().split('.').pop());
if ($(this).val().split('.').pop() === 'csv') {
$('.csvdelim-form-group').removeClass('hidden');
$('.csvdelim-form-group input').attr('required', 'required');
} else {
$('.csvdelim-form-group').addClass('hidden');
$('.csvdelim-form-group input').removeAttr('required');
}
});
});
</script>
<div class="panel">
<form class="defaultForm form-horizontal" id="filesendform" action="" method="post" enctype="multipart/form-data" novalidate="">
<div class="psi_addfile">
<div class="panel-heading">
<i class="icon-folder-close"></i>
{l s='Add new file' mod='pshowimporter'}
</div>
<div class="panel-wrapper">
<ul class="nav nav-tabs">
<li class="active"><a data-toggle="tab" href="#home">{l s='Upload file from local disk'}</a></li>
<li><a data-toggle="tab" href="#menu1">{l s='Download file from URL'}</a></li>
</ul>
<div class="panel tab-content">
<div id="home" class="tab-pane fade in active">
{if isset($upload_max_filesize_error)}
<div class="alert alert-warning">
{l s='Ask administrator to change the value of upload_max_filesize for a minimum of 100M to allow you to upload larger files.' mod='pshowimporter'}
<small>{l s='Actual'}: {ini_get("upload_max_filesize")}</small>
</div>
{/if}
{if isset($post_max_size_error)}
<div class="alert alert-warning">
{l s='Ask administrator to change the value of post_max_size for a minimum of 150M to allow you to upload larger files.' mod='pshowimporter'}
<small>{l s='Actual'}: {ini_get("post_max_size")}</small>
</div>
{/if}
{if isset($memory_limit_error)}
<div class="alert alert-warning">
{l s='Ask administrator to change the value of memory_limit for a minimum of 200M to allow you to upload larger files.' mod='pshowimporter'}
<small>{l s='Actual'}: {ini_get("memory_limit")}</small>
</div>
{/if}
<div class="form-group">
<label for="file" class="control-label col-lg-4">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="Plik zostanie przesłany z twojego dysku">
{l s='Upload file from local disk' mod='pshowimporter'}
</span>
</label>
<div class="col-md-8">
<input id="file" type="file" name="file" class="hidden">
<button onclick="javascript:$('#filesendform #file').click().removeClass('hidden');
$(this).remove();" class="ladda-button btn btn-default" data-style="expand-right" data-size="s" type="button" id="file-add-button">
<span class="ladda-label">
<i class="icon-folder-open"></i>
{l s='Upload file' mod='pshowimporter'}
</span>
</button>
</div>
</div>
</div>
<div id="menu1" class="tab-pane fade">
<div class="form-group">
<label for="url" class="control-label col-lg-4">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='The file will be downloaded from the specified address' mod='pshowimporter'}">
{l s='Add file from URL address' mod='pshowimporter'}
</span>
</label>
<div class="col-md-8">
<select name="fileext" class="pull-left" style="width: 10%;">
<option value="xml">XML</option>
<option value="csv">CSV</option>
</select>
<input id="url" style="width: 88%;" class="pull-right label-tooltip" placeholder="http://" type="text" name="url" autocomplete="off"
readonly="readonly" onfocus="this.removeAttribute('readonly');" data-toggle="tooltip" data-original-title="Click to edit">
</div>
</div>
<div class="form-group">
<label class="control-label col-lg-4">
{l s='Authorization required' mod='pshowimporter'}
</label>
<div class="col-lg-8">
<span class="switch prestashop-switch fixed-width-lg">
<input type="radio" name="auth_req" id="auth_req_on" value="1">
<label for="auth_req_on">{l s='Yes' mod='pshowimporter'}</label>
<input type="radio" name="auth_req" id="auth_req_off" value="0" checked="checked">
<label for="auth_req_off">{l s='No' mod='pshowimporter'}</label>
<a class="slide-button btn"></a>
</span>
</div>
</div>
<div class="form-group form-upload-auth">
<label class="control-label col-lg-4">
{l s='Login' mod='pshowimporter'}
</label>
<div class="col-lg-8">
<input type="text" name="login" class="label-tooltip" value="" autocomplete="off" readonly="readonly"
onfocus="this.removeAttribute('readonly');" data-toggle="tooltip" data-original-title="Click to edit">
</div>
</div>
<div class="form-group form-upload-auth">
<label class="control-label col-lg-4">
{l s='Password' mod='pshowimporter'}
</label>
<div class="col-lg-8">
<input type="password" name="password" class="label-tooltip" value="" autocomplete="off" readonly="readonly"
onfocus="this.removeAttribute('readonly');" data-toggle="tooltip" data-original-title="Click to edit">
</div>
</div>
</div>
</div>
<div class="clearfix"></div>
<hr>
<div class="form-group">
<label for="saveas" class="control-label col-lg-4">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="">
{l s='Save as' mod='pshowimporter'}:
</span>
</label>
<div class="col-md-8">
<input id="saveas" value="import__{$smarty.now|date_format:'H_i__d_m_Y'}" type="text" name="saveas">
</div>
</div>
<div class="form-group csvdelim-form-group hidden">
<label for="csvdelim" class="control-label col-lg-4">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="">
{l s='CSV column delimiter' mod='pshowimporter'} ({l s='one character!' mod='pshowimporter'}):
</span>
</label>
<div class="col-md-8">
<input id="csvdelim" value="" type="text" name="csvdelim"><br>
<small>{l s='For tabulation enter: tab' mod='pshowimporter'}</small>
</div>
</div>
<div class="form-group csvdelim-form-group hidden">
<label class="control-label col-lg-4" for="file_encoding">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="">
{l s='File encoding' mod='pshowimporter'}
</span>
</label>
<div class="col-lg-8">
<select class="form-control" id="file_encoding" name="file_encoding">
<option value="UTF-8">UTF-8 (default)</option>
<option value="ISO-8859-2">Latin 2 (ISO-8859-2)</option>
<option disabled>{l s='write to us if your file has other encoding' mod='pshowimporter'}</option>
</select>
</div>
</div>
<div class="form-group csvdelim-form-group hidden">
<label for="headers_in_the_file_on" class="control-label col-lg-4">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="">
{l s='First row contains column headers' mod='pshowimporter'}:
</span>
</label>
<div class="col-md-8">
<span class="switch prestashop-switch fixed-width-lg">
<input type="radio" name="headers_in_the_file" id="headers_in_the_file_on" value="1" checked="checked">
<label for="headers_in_the_file_on">Tak</label>
<input type="radio" name="headers_in_the_file" id="headers_in_the_file_off" value="0">
<label for="headers_in_the_file_off">Nie</label>
<a class="slide-button btn"></a>
</span>
</div>
</div>
</div>
<div class="panel-footer">
<button type="submit" value="1" id="cms_category_form_submit_btn" name="submit_sendfile" class="btn btn-default pull-right">
<i class="process-icon-upload"></i> {l s='Upload' mod='pshowimporter'}
</button>
<a href="" onclick="$('.psi_addfile').parent().parent().hide();" class="btn btn-default">
<i class="process-icon-cancel"></i> {l s='Cancel' mod='pshowimporter'}
</a>
</div>
</div>
</form>
</div>
</div>
<script>
{literal}
$(document).on('keyup', '#saveas', function () {
var newname = $(this).val().replace(/[^A-Z0-9]/ig, "_");
$(this).val(newname);
});
$(document).on('click', 'button[name="submit_sendfile"]', function () {
$('.full-screen-loader').fadeIn();
$('.bootstrap#footer').hide();
});
{/literal}
</script>
<div class="alert alert-warning">
<p><strong>{l s='Proceed with caution, the changes are irreversible. Remember to back up the store before the import.' mod='pshowimporter'}</strong></p>
<p>
{l s='If your import was not successful, you can clear the catalog using the standard module located in your store - ' mod='pshowimporter'}
<a href="{$link->getAdminLink('AdminModules', true)}&module_name=pscleaner&anchor=Pscleaner">PrestaShop Cleaner</a>
</p>
</div>
<div class="panel">

View File

@@ -0,0 +1,258 @@
<div class="panel-heading">
<i class="icon-folder-close"></i>
{l s='Files list' mod='pshowimporter'}
<span class="badge">{count($files)}</span>
<span class="panel-heading-action">
<a id="desc-cms_category-new" class="list-toolbar-btn" href="#">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Add new' mod='pshowimporter'}" style="color: #46B324;" data-html="true" data-placement="top">
<i class="process-icon-new"></i>
</span>
</a>
<a class="list-toolbar-btn" href="{$link->getAdminLink('PShowImporterMain', true)}">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Refresh' mod='pshowimporter'}" data-html="true" data-placement="left">
<i class="process-icon-refresh"></i>
</span>
</a>
</span>
</div>
<div class="panel-wrapper">
{include file='../parts/file_upload.tpl'}
{showTip id='files_on_start' type='info' message={l s='For starters we added for you a few sample files. You can see how it should look like the correct syntax of the file to import, preview their configuration and import the data to store. Import files by numbering in filenames.' mod='pshowimporter'}}
{if count($files) == 0}
<div class="alert alert-info" role="alert">{l s='You don\'t have any files uploded' mod='pshowimporter'} :(</div>
{else}
<div class="table-responsive-row">
<table class="table">
<thead>
<tr>
<th></th>
<th>{l s='Filename' mod='pshowimporter'}</th>
{*<th>{l s='File type' mod='pshowimporter'}</th>*}
<th>{l s='Source' mod='pshowimporter'}</th>
<th>
{l s='File size' mod='pshowimporter'}
<a href="{$link->getAdminLink('PShowImporterMain', true)}&sortby=filesize&sortorder=asc"><i class="icon-caret-down"></i></a>
<a href="{$link->getAdminLink('PShowImporterMain', true)}&sortby=filesize&sortorder=desc"><i class="icon-caret-up"></i></a>
</th>
<th>{l s='Access' mod='pshowimporter'}</th>
<th>{l s='Encoding' mod='pshowimporter'}</th>
<th>{l s='Count' mod='pshowimporter'}</th>
<th>
{l s='Add date' mod='pshowimporter'}
<a href="{$link->getAdminLink('PShowImporterMain', true)}&sortby=time&sortorder=asc"><i class="icon-caret-down"></i></a>
<a href="{$link->getAdminLink('PShowImporterMain', true)}&sortby=time&sortorder=desc"><i class="icon-caret-up"></i></a>
</th>
<th>
{l s='Last import date' mod='pshowimporter'}
</th>
<th></th>
</tr>
</thead>
<tbody>
{assign var="i" value=0}
{foreach from=$files item=file}
{assign var="i" value=$i+1}
<tr>
<td><div class="copy-config-box hidden" id="{$file['time']}-{$file['filename']}-txt">
<form method="post" action="{$link->getAdminLink('PShowImporterMain', true)}&page=copyconfig">
<input type="hidden" name="to" value="{$file['time']}-{$file['filename']}">
{l s='Copy configuration from' mod='pshowimporter'}:
<select name="from">
{foreach from=$files item=f}
{if $file['extension']|strtoupper != $f['extension']|strtoupper || ({$file['time']+'-'+$file['filename']}) == ({$f['time']+'-'+$f['filename']})}
{continue}
{/if}
<option value="{$f['time']}-{$f['filename']}">
{if isset($f['data'])}{$f['data']['displayFileName']}{else}{$f['filename']}{/if}
</option>
{/foreach}
</select>
<input type="submit" class="btn btn-default" value="{l s='Copy' mod='pshowimporter'}">
</form>
</div>{$i}</td>
<td>
<div class="input-group">
<div class="input-group-addon editdescription"><i class="icon-pencil"></i></div>
<input class="editableofocus form-control" type="text"
name="filename"
pattern="([a-zA-Z0-9\_\-]+)"
value="{if isset($file['data'])}{$file['data']['displayFileName']|escape:'htmlall':'UTF-8'}{else}{$file['filename']}{/if}"
placeholder="{l s='Click here change filename' mod='pshowimporter'}"
data-oldname="{$file['time']}-{$file['filename']}">
</div>
</td>
{*<td>
{if !$file['filesize']}
&nbsp;-
{else}
{$file['extension']|strtoupper}
{/if}
{if $file['correct_encoding'] !== true && $file['filesize']}
<img src="{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/system/view/img/alert.png"
data-original-title="{l s='This file has incorrect encoding (%s). Change file encoding to UTF-8' mod='pshowimporter' sprintf=$file['correct_encoding']}" width="16" class="label-tooltip ">
{/if}
{if $file['wrong_xml_format'] === true && $file['filesize']}
<img src="{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/system/view/img/alert.png"
data-original-title="{l s='This file has incorrect encoding or structure' mod='pshowimporter'}" width="16" class="label-tooltip ">
{/if}
</td>*}
<td>
{if $file['time'] < 10}
<button class="btn btn-default btn-sm col-xs-12 disabled">
{l s='sample file' mod='pshowimporter'}
</button>
{else}
<button class="btn btn-default btn-sm col-xs-12" data-fid="{$i}"
data-url="{$file['from_url']}"
onclick="javascript:changeFileSource({$i}, '{$file['filename']}')">
<i class="icon-pencil small"></i>
{if $file['from_url']}
{l s='URL address' mod='pshowimporter'}
{else}
{l s='Local disk' mod='pshowimporter'}
{/if}
</button>
{/if}
</td>
<td>
{if !$file['filesize']}
<img src="{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/system/view/img/alert.png"
data-original-title="{l s='This file is empty - nothing to import' mod='pshowimporter'}" width="16" class="label-tooltip ">
{elseif $file['reqMoreMemory']}
<img src="{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/system/view/img/alert.png"
data-original-title="{l s='This file require minimal `memory_limit`:' mod='pshowimporter'} {$file['reqMoreMemory']}" width="16" class="label-tooltip">
{/if}
{$file['filesize']} {$file['filesizetype']}
</td>
<td>
<span data-toggle="tooltip" class="label-tooltip"
data-original-title="{l s='writable' mod='pshowimporter'}: {$file['writable']}<br>{l s='readable' mod='pshowimporter'}: {$file['readable']}"
data-html="true" data-placement="left">
{$file['chmod']}
</span>
</td>
<td>
{$file['encoding']}
</td>
<td>
{if $file['rowsCount']|is_numeric}
<span data-toggle="tooltip" class="label label-default label-tooltip"
data-original-title="{l s='This file contains %d objects to import' sprintf=$file['rowsCount']|intval mod='pshowimporter'} <i class='icon-smile'></i>"
data-html="true" data-placement="left">
{$file['rowsCount']}
</span>
{else}
<span data-toggle="tooltip" class="label label-default label-tooltip"
data-original-title="{l s='Configure the file to see how many objects it contains' mod='pshowimporter'} <i class='icon-smile'></i>"
data-html="true" data-placement="left">
&nbsp;-&nbsp;
</span>
{/if}
</td>
<td>{if $file['time'] < 10}-{else}{$file['time']|date_format:"H:i d/m/Y"}{/if}</td>
{if ($file['lastimport'] === false)}
<td>{l s='never' mod='pshowimporter'}</td>
{else}
<td>{$file['lastimport']|date_format:"H:i d/m/Y"}</td>
{/if}
<td class="text-right">
{include file='./file_list_menu.tpl' f=$file}
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
{/if}
</div>
<style>
input.editableofocus:not(:focus) {
border-color: transparent !important;
background: transparent !important;
}
</style>
<script>
$(function () {
$(document).on('click', '#desc-cms_category-new', function (e) {
e.preventDefault();
$('.psi_addfile').parent().parent().show();
});
$(document).on('click', '.editdescription', function () {
$(this).parent().parent().find('input.editableofocus').eq(0).focus();
});
$(document).on('focus', 'input.editableofocus', function () {
$(this).parent().parent().find('.col-lg-2').eq(0).removeClass('hidden');
});
$(document).on('change', 'input.editableofocus', function () {
var oldname = $(this).attr('data-oldname');
var newname = $(this).val();{literal}
newname = newname.replace(/[^A-Z0-9]/ig, "_");
$(this).attr('data-oldname', newname);
$(this).val(newname);
var data = {};
data['oldname'] = oldname;
data['newname'] = newname;{/literal}
$.post('{$link->getAdminLink('PShowImporterMain')}&page=editfilename', data, function (ret) {
showSuccessMessage('{l s='Filename updated successfully' mod='pshowimporter'}');
});
});
});
function changeFileSource(id, fileName)
{
var url = $('button[data-fid="' + id + '"]').attr('data-url');
var newSrc = prompt("URL source for file: " + fileName, url);
if (newSrc === null) {
return false;
}
data = {
'filename': fileName,
'newSource': newSrc
};
console.log(data);
$.post('{$link->getAdminLink('PShowImporterMain')}&page=editsource', data, function (ret) {
console.log(ret);
$('button[data-fid="' + id + '"]').attr('data-url', newSrc);
if (newSrc !== '')
$('button[data-fid="' + id + '"]').html('<i class="icon-pencil small"></i> {l s='URL address' mod='pshowimporter'}');
else
$('button[data-fid="' + id + '"]').html('<i class="icon-pencil small"></i> {l s='Local disk' mod='pshowimporter'}');
showSuccessMessage('{l s='File source updated successfully' mod='pshowimporter'}');
});
}
</script>

View File

@@ -0,0 +1,129 @@
{if $import_queue|count > 0}
<div class="panel">
{assign files $queue_list}
<div class="panel-heading">
<i class="icon-folder-close"></i>
{l s='Import queue' mod='pshowimporter'}
<span class="badge">{count($files)}</span>
<span class="panel-heading-action">
<a class="list-toolbar-btn" href="">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Refresh' mod='pshowimporter'}" data-html="true" data-placement="left">
<i class="process-icon-refresh"></i>
</span>
</a>
</span>
</div>
<div class="table-responsive-row">
<table class="table">
<thead>
<tr>
<th>#</th>
<th>{l s='Filename' mod='pshowimporter'}</th>
<th>{l s='File type' mod='pshowimporter'}</th>
<th>{l s='Source' mod='pshowimporter'}</th>
<th>{l s='File size' mod='pshowimporter'}</th>
<th>{l s='Permissions' mod='pshowimporter'}</th>
<th>{l s='Add date' mod='pshowimporter'}</th>
<th>{l s='Last import date' mod='pshowimporter'}</th>
<th></th>
</tr>
</thead>
<tbody>
{assign var="i" value=0}
{foreach from=$files item=file}
{assign var="i" value=$i+1}
<tr>
<td>{$i}</td>
<td>
<div class="col-lg-11">
{if isset($file['data'])}
{$file['data']['displayFileName']}
{else}
{$file['filename']}
{/if}
</div>
</td>
<td>
{if !$file['filesize']}
&nbsp;-
{else}
{$file['extension']|strtoupper}
{/if}
{if $file['correct_encoding'] !== true && $file['filesize']}
<img src="{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/system/view/img/alert.png"
data-original-title="{l s='This file has incorrect encoding (%s). Change file encoding to UTF-8' mod='pshowimporter' sprintf=$file['correct_encoding']}" width="16" class="label-tooltip ">
{/if}
</td>
{if $file['from_url']}
<td><a href="{$file['from_url']}">{l s='URL address' mod='pshowimporter'}</a></td>
{else}
<td>{l s='Local disk' mod='pshowimporter'}</td>
{/if}
<td>
{if !$file['filesize']}
<img src="{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/system/view/img/alert.png"
data-original-title="{l s='This file is empty - nothing to import' mod='pshowimporter'}" width="16" class="label-tooltip ">
{elseif $file['reqMoreMemory']}
<img src="{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/system/view/img/alert.png"
data-original-title="{l s='This file require minimal `memory_limit`:' mod='pshowimporter'} {$file['reqMoreMemory']}" width="16" class="label-tooltip">
{/if}
{$file['filesize']} {$file['filesizetype']}
</td>
<td>
<span data-toggle="tooltip" class="label-tooltip"
data-original-title="{l s='writable' mod='pshowimporter'}: {$file['writable']}<br>{l s='readable' mod='pshowimporter'}: {$file['readable']}"
data-html="true" data-placement="left">
{$file['chmod']}
</span>
</td>
<td>{$file['time']|date_format:"H:i d/m/Y"}</td>
{if ($file['lastimport'] === false)}
<td>{l s='never' mod='pshowimporter'}</td>
{else}
<td>{$file['lastimport']|date_format:"H:i d/m/Y"}</td>
{/if}
<td class="text-right">
<div class="btn-group-action {if $import_button == 0}hidden{/if}">
<div class="btn-group pull-right">
<a href="{$link->getAdminLink('PShowImporterMain', true)}&page=delfromqueue&filename={$file['time']}-{$file['filename']}" class="edit btn btn-default showLoader">
<i class="icon-remove"></i> {l s='Remove from queue' mod='pshowimporter'}
</a>
</div>
</div>
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
<div class='panel-footer {if $import_button == 0}hidden{/if}'>
<a href="{$link->getAdminLink('PShowImporterImport', true)}" class='btn btn-default pull-right showLoader'>
<i class="process-icon-download"></i> {l s='Import' mod='pshowimporter'}
</a>
<a href="#" onclick="fancyMsgBox('<a href=\'https://pl.wikipedia.org/wiki/Cron\' target=\'_blank\'>{l s='What is CRON?' mod='pshowimporter'}</a><br><br>{l s='Import will be according to the saved configuration for this file.' mod='pshowimporter'}<br><br><b>http://{$smarty.server.HTTP_HOST}{$smarty.const.__PS_BASE_URI__}modules/pshowimporter/direct_import.php?securekey={$smarty.const._IMPORT_SECURE_KEY_}</b>');" title="{l s='Import' mod='pshowimporter'}" class='btn btn-default pull-right'>
<i class="process-icon-download"></i> {l s='Get direct import URL' mod='pshowimporter'}
</a>
<a href="#" onclick="fancyMsgBox('<a href=\'{$link->getAdminLink('PShowImporterMain', true)}&page=ssh\' target=\'_blank\'>{l s='What is this?' mod='pshowimporter'}</a><br><br><b>./direct.sh \'{$smarty.const._IMPORT_SECURE_KEY_}\'</b>');" title="{l s='Import' mod='pshowimporter'}"class='btn btn-default pull-right'>
<i class="process-icon-download"></i> {l s='Get SSH command' mod='pshowimporter'}
</a>
</div>
</div>
{/if}

View File

@@ -0,0 +1,59 @@
<div id="carrier_wizard">
<div class="steps nbr_steps_4 anchor">
<li class="{if ($step == 1)}selected{/if} col-xs-2">
<a rel="1" class="{if ($step == 1)}selected{elseif ($step > 1)}done{/if}"
href="{$link->getAdminLink('PShowImporterMain')}">
<span class="stepNumber">1</span>
<span class="stepDesc">
{l s='File select' mod='pshowimporter'}<br>
</span>
<span class="chevron"></span>
</a>
</li>
<li class="{if ($step == 2)}selected{/if} col-xs-2">
<a rel="2" class="{if ($step == 2)}selected{elseif ($step > 2)}done{else}disabled{/if}"
{if in_array($step, array(2,3,4))}href="{$link->getAdminLink('PShowImporterConfig')}&page=config&file={$file}"{/if}>
<span class="stepNumber">2</span>
<span class="stepDesc">
{l s='Basic configuration' mod='pshowimporter'}<br>
</span>
<span class="chevron"></span>
</a>
</li>
<li class="{if ($step == 3)}selected{/if} col-xs-2">
<a rel="3" class="{if ($step == 3)}selected{elseif ($step > 3)}done{else}disabled{/if}"
{if in_array($step, array(2,3,4)) && $has_config}href="{$link->getAdminLink('PShowImporterConfig')}&page=config&file={$file}&step=2"{/if}>
<span class="stepNumber">3</span>
<span class="stepDesc">
{l s='Matching data' mod='pshowimporter'}<br>
</span>
<span class="chevron"></span>
</a>
</li>
<li class="{if ($step == 4)}selected{/if} col-xs-2">
<a rel="4" class="{if ($step == 4)}selected{elseif ($step > 4)}done{else}disabled{/if}"
{if (in_array($step, array(2,3,4)) && $has_matching && $has_config)}href="{$link->getAdminLink('PShowImporterConfig')}&page=config&file={$file}&step=3"{/if}>
<span class="stepNumber">4</span>
<span class="stepDesc">
{l s='Final configuration' mod='pshowimporter'}
</span>
<span class="chevron"></span>
</a>
</li>
<li class="{if ($step == 5)}selected{/if} col-xs-4">
<a rel="5" class="{if ($step == 5)}selected{else}disabled{/if}">
<span class="stepNumber">5</span>
<span class="stepDesc">
{l s='Import' mod='pshowimporter'}<br>
</span>
<span class="chevron"></span>
</a>
</li>
</div>
</div>
<div class="clearfix"></div>

View File

@@ -0,0 +1,24 @@
{l s='Regular expressions allow you to edit the text of the specified criteria and change it to another one. This feature extends the capabilities of the "find/replace" tool.' mod='pshowimporter'}\
<br>\
<br>\
<u>{l s='For example in the file you have value: abcd-0123' mod='pshowimporter'}</u>\
<br>\
<strong>{l s='Example 1' mod='pshowimporter'}:</strong>\
<br>\
{l s='You can swap text and numbers - how to do this' mod='pshowimporter'}:\
<br>\
{l s='In the "find" field enter: ~([a-d]+)-([0-3]+)~' mod='pshowimporter'}\
<br>\
{l s='In the "replace" field enter: $2-$1' mod='pshowimporter'}\
<br>\
{l s='As result you get: 0123-abcd' mod='pshowimporter'}\
<br>\
<strong>{l s='Example 2' mod='pshowimporter'}:</strong>\
<br>\
{l s='You can get only numbers - how to do this' mod='pshowimporter'}:\
<br>\
{l s='In the "find" field enter: ~([a-d]+)-([0-3]+)~' mod='pshowimporter'}\
<br>\
{l s='In the "replace" field enter: $2' mod='pshowimporter'}\
<br>\
{l s='As result you get: 0123' mod='pshowimporter'}

View File

@@ -0,0 +1,41 @@
<div class="panel">
<div class="panel-heading">
{l s='Sample data from file' mod='pshowimporter'}
</div>
<div class="panel-wrapper">
<div class="table-responsive-row">
<table class="table">
<thead>
<tr>
<th></th>
<th>{l s='Line from file' mod='pshowimporter'}</th>
</tr>
</thead>
<tbody>
{assign var='i' value=1}
{foreach from=$rows item='row'}
<tr>
<td>
{$i}
</td>
<td>
{(string)$row|strip_tags}
</td>
</tr>
{assign var='i' value=$i+1}
{/foreach}
</tbody>
</table>
</div>
</div>
</div>