diff --git a/README.md b/README.md index 41aa3f65f..ba4d021f9 100644 --- a/README.md +++ b/README.md @@ -1,7 +1,7 @@ # miniShop 2 ![Code Quality](https://github.com/modx-pro/miniShop2/actions/workflows/phpcs.yml/badge.svg) -![Test](https://github.com/modx-pro/miniShop2/actions/workflows/eslint.yml/badge.svg) +![Linting](https://github.com/modx-pro/miniShop2/actions/workflows/lint.yml/badge.svg) [![Contributors](https://img.shields.io/github/contributors/modx-pro/miniShop2.svg?style=flat-square)](https://github.com/modx-pro/miniShop2/graphs/contributors) [![License: GPL v2](https://img.shields.io/badge/License-GPL%20v2-blue.svg?style=flat-square)](https://www.gnu.org/licenses/gpl-2.0) diff --git a/_build/index.php b/_build/index.php new file mode 100644 index 000000000..fb8d0a7be --- /dev/null +++ b/_build/index.php @@ -0,0 +1,57 @@ +MODX build environment GUI"; + echo "Available packages for build: (with versions from build.config.php if exists)

"; + //echo "Данные о версии берутся из файла конфигурации пакета (build.config.php)

"; + foreach ($scanned_directory as $packagename) { + if (is_dir($current_dir.'/'.$packagename)) { + $config = file_get_contents($current_dir.'/'.$packagename.'/'."build.config.php"); + /*parse version*/ + $version_preg = "#PKG_VERSION['\",=\s]*([0-9\.]+)#"; + $release_preg = "#PKG_RELEASE['\",=\s]*([a-z0-9\.]+)['\"]#"; + $version = ''; + $matches = []; + if (preg_match($version_preg, $config, $matches)) { + $version .= $matches[1]; + } + if (preg_match($release_preg, $config, $matches)) { + $version .= '-'.$matches[1]; + } + echo "{$packagename} [build package] (".$version.")

"; + } + } + + echo "
Made for MODX RSC by @dimasites and friends
"; + +}else{ +// Define paths + if (isset($_SERVER['MODX_BASE_PATH'])) { + define('MODX_BASE_PATH', $_SERVER['MODX_BASE_PATH']); + } elseif (file_exists(dirname(__FILE__, 2) . '/core')) { + define('MODX_BASE_PATH', dirname(__FILE__, 2) . '/'); + } else { + define('MODX_BASE_PATH', dirname(__FILE__, 3) . '/'); + } + + $file = MODX_CORE_PATH.'packages/'.$_REQUEST['getpackage'].'.transport.zip'; + + if (file_exists($file)) { + header('Content-Description: File Transfer'); + header('Content-Type: application/octet-stream'); + header('Content-Disposition: attachment; filename="' . basename($file) . '"'); + header('Expires: 0'); + header('Cache-Control: must-revalidate'); + header('Pragma: public'); + header('Content-Length: ' . filesize($file)); + readfile($file); + exit; + } +} diff --git a/_build/build.config.php b/_build/minishop2/build.config.php similarity index 98% rename from _build/build.config.php rename to _build/minishop2/build.config.php index 6d46f3934..4b6753cc4 100644 --- a/_build/build.config.php +++ b/_build/minishop2/build.config.php @@ -4,7 +4,7 @@ const PKG_NAME = 'miniShop2'; define('PKG_NAME_LOWER', strtolower(PKG_NAME)); -const PKG_VERSION = '4.1.4'; +const PKG_VERSION = '4.1.5'; const PKG_RELEASE = 'pl'; const PKG_AUTO_INSTALL = true; diff --git a/_build/build.model.php b/_build/minishop2/build.model.php similarity index 93% rename from _build/build.model.php rename to _build/minishop2/build.model.php index f05b217e4..d8ee98cf6 100644 --- a/_build/build.model.php +++ b/_build/minishop2/build.model.php @@ -5,10 +5,10 @@ } // Define sources -$root = dirname(__FILE__, 2) . '/'; +$root = dirname(__FILE__, 3) . '/'; $sources = [ 'root' => $root, - 'build' => $root . '_build/', + 'build' => $root . '_build/' . PKG_NAME_LOWER . '/', 'source_core' => $root . 'core/components/' . PKG_NAME_LOWER, 'model' => $root . 'core/components/' . PKG_NAME_LOWER . '/model/', 'schema' => $root . 'core/components/' . PKG_NAME_LOWER . '/model/schema/', diff --git a/_build/build.transport.php b/_build/minishop2/build.transport.php similarity index 96% rename from _build/build.transport.php rename to _build/minishop2/build.transport.php index 5bd9247b5..6d5bb08c9 100644 --- a/_build/build.transport.php +++ b/_build/minishop2/build.transport.php @@ -15,12 +15,13 @@ } // Define sources -$root = dirname(__FILE__, 2) . '/'; +$root = dirname(__FILE__, 3) . '/'; + $sources = [ 'root' => $root, - 'build' => $root . '_build/', - 'data' => $root . '_build/data/', - 'resolvers' => $root . '_build/resolvers/', + 'build' => $root . '_build/' . PKG_NAME_LOWER . '/', + 'data' => $root . '_build/' . PKG_NAME_LOWER . '/data/', + 'resolvers' => $root . '_build/' . PKG_NAME_LOWER . '/resolvers/', 'chunks' => $root . 'core/components/' . PKG_NAME_LOWER . '/elements/chunks/', 'snippets' => $root . 'core/components/' . PKG_NAME_LOWER . '/elements/snippets/', 'plugins' => $root . 'core/components/' . PKG_NAME_LOWER . '/elements/plugins/', @@ -303,8 +304,13 @@ } } $modx->log(modX::LOG_LEVEL_INFO, "\n
Execution time: {$totalTime}\n"); + +$download_url = '/_build/index.php?getpackage='.PKG_NAME_LOWER.'-'.PKG_VERSION.'-'.PKG_RELEASE; +$modx->log(modX::LOG_LEVEL_INFO,"\n
Download package
\n"); + echo ''; if (!empty($_GET['download'])) { echo ''; } + diff --git a/_build/data/transport.chunks.php b/_build/minishop2/data/transport.chunks.php similarity index 100% rename from _build/data/transport.chunks.php rename to _build/minishop2/data/transport.chunks.php diff --git a/_build/data/transport.events.php b/_build/minishop2/data/transport.events.php similarity index 100% rename from _build/data/transport.events.php rename to _build/minishop2/data/transport.events.php diff --git a/_build/data/transport.menu.php b/_build/minishop2/data/transport.menu.php similarity index 89% rename from _build/data/transport.menu.php rename to _build/minishop2/data/transport.menu.php index 0ac64c04d..9a6859a97 100644 --- a/_build/data/transport.menu.php +++ b/_build/minishop2/data/transport.menu.php @@ -30,6 +30,12 @@ 'action' => 'system/settings', 'params' => '&ns=minishop2', ], + 'ms2_help' => [ + 'description' => 'ms2_help_desc', + 'parent' => 'minishop2', + 'menuindex' => 3, + 'action' => 'mgr/help', + ], ]; foreach ($tmp as $k => $v) { diff --git a/_build/data/transport.plugins.php b/_build/minishop2/data/transport.plugins.php similarity index 100% rename from _build/data/transport.plugins.php rename to _build/minishop2/data/transport.plugins.php diff --git a/_build/data/transport.policies.php b/_build/minishop2/data/transport.policies.php similarity index 100% rename from _build/data/transport.policies.php rename to _build/minishop2/data/transport.policies.php diff --git a/_build/data/transport.policytemplates.php b/_build/minishop2/data/transport.policytemplates.php similarity index 100% rename from _build/data/transport.policytemplates.php rename to _build/minishop2/data/transport.policytemplates.php diff --git a/_build/data/transport.settings.php b/_build/minishop2/data/transport.settings.php similarity index 100% rename from _build/data/transport.settings.php rename to _build/minishop2/data/transport.settings.php diff --git a/_build/data/transport.snippets.php b/_build/minishop2/data/transport.snippets.php similarity index 100% rename from _build/data/transport.snippets.php rename to _build/minishop2/data/transport.snippets.php diff --git a/_build/includes/functions.php b/_build/minishop2/includes/functions.php similarity index 100% rename from _build/includes/functions.php rename to _build/minishop2/includes/functions.php diff --git a/_build/properties/properties.ms_cart.php b/_build/minishop2/properties/properties.ms_cart.php similarity index 100% rename from _build/properties/properties.ms_cart.php rename to _build/minishop2/properties/properties.ms_cart.php diff --git a/_build/properties/properties.ms_gallery.php b/_build/minishop2/properties/properties.ms_gallery.php similarity index 100% rename from _build/properties/properties.ms_gallery.php rename to _build/minishop2/properties/properties.ms_gallery.php diff --git a/_build/properties/properties.ms_get_order.php b/_build/minishop2/properties/properties.ms_get_order.php similarity index 100% rename from _build/properties/properties.ms_get_order.php rename to _build/minishop2/properties/properties.ms_get_order.php diff --git a/_build/properties/properties.ms_minicart.php b/_build/minishop2/properties/properties.ms_minicart.php similarity index 100% rename from _build/properties/properties.ms_minicart.php rename to _build/minishop2/properties/properties.ms_minicart.php diff --git a/_build/properties/properties.ms_options.php b/_build/minishop2/properties/properties.ms_options.php similarity index 100% rename from _build/properties/properties.ms_options.php rename to _build/minishop2/properties/properties.ms_options.php diff --git a/_build/properties/properties.ms_order.php b/_build/minishop2/properties/properties.ms_order.php similarity index 100% rename from _build/properties/properties.ms_order.php rename to _build/minishop2/properties/properties.ms_order.php diff --git a/_build/properties/properties.ms_product_options.php b/_build/minishop2/properties/properties.ms_product_options.php similarity index 100% rename from _build/properties/properties.ms_product_options.php rename to _build/minishop2/properties/properties.ms_product_options.php diff --git a/_build/properties/properties.ms_products.php b/_build/minishop2/properties/properties.ms_products.php similarity index 100% rename from _build/properties/properties.ms_products.php rename to _build/minishop2/properties/properties.ms_products.php diff --git a/_build/resolvers/resolve.chunks.php b/_build/minishop2/resolvers/resolve.chunks.php similarity index 100% rename from _build/resolvers/resolve.chunks.php rename to _build/minishop2/resolvers/resolve.chunks.php diff --git a/_build/resolvers/resolve.extension.php b/_build/minishop2/resolvers/resolve.extension.php similarity index 100% rename from _build/resolvers/resolve.extension.php rename to _build/minishop2/resolvers/resolve.extension.php diff --git a/_build/resolvers/resolve.policy.php b/_build/minishop2/resolvers/resolve.policy.php similarity index 100% rename from _build/resolvers/resolve.policy.php rename to _build/minishop2/resolvers/resolve.policy.php diff --git a/_build/resolvers/resolve.settings.php b/_build/minishop2/resolvers/resolve.settings.php similarity index 100% rename from _build/resolvers/resolve.settings.php rename to _build/minishop2/resolvers/resolve.settings.php diff --git a/_build/resolvers/resolve.setup.php b/_build/minishop2/resolvers/resolve.setup.php similarity index 100% rename from _build/resolvers/resolve.setup.php rename to _build/minishop2/resolvers/resolve.setup.php diff --git a/_build/resolvers/resolve.sources.php b/_build/minishop2/resolvers/resolve.sources.php similarity index 100% rename from _build/resolvers/resolve.sources.php rename to _build/minishop2/resolvers/resolve.sources.php diff --git a/_build/resolvers/resolve.statuses.php b/_build/minishop2/resolvers/resolve.statuses.php similarity index 100% rename from _build/resolvers/resolve.statuses.php rename to _build/minishop2/resolvers/resolve.statuses.php diff --git a/_build/resolvers/resolve.tables.php b/_build/minishop2/resolvers/resolve.tables.php similarity index 100% rename from _build/resolvers/resolve.tables.php rename to _build/minishop2/resolvers/resolve.tables.php diff --git a/_build/setup.options.php b/_build/minishop2/setup.options.php similarity index 100% rename from _build/setup.options.php rename to _build/minishop2/setup.options.php diff --git a/assets/components/minishop2/css/mgr/bootstrap.buttons.css b/assets/components/minishop2/css/mgr/bootstrap.buttons.css index 3332befb7..63d1e09e5 100644 --- a/assets/components/minishop2/css/mgr/bootstrap.buttons.css +++ b/assets/components/minishop2/css/mgr/bootstrap.buttons.css @@ -4,23 +4,27 @@ * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) */ .btn { + cursor: pointer; + -webkit-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none; + display: inline-block; + margin-bottom: 0; + padding: 6px 12px; + + font-size: 14px; font-weight: normal; + line-height: 1.4286; text-align: center; + white-space: nowrap; vertical-align: middle; - cursor: pointer; + background-image: none; border: 1px solid transparent; - white-space: nowrap; - padding: 6px 12px; - font-size: 14px; - line-height: 1.42857143; - border-radius: 4px; - -webkit-user-select: none; - -moz-user-select: none; - -ms-user-select: none; - user-select: none + border-radius: 4px } .btn:focus, .btn:active:focus, .btn.active:focus { @@ -35,16 +39,18 @@ } .btn:active, .btn.active { - outline: 0; background-image: none; - -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125); - box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125) + outline: 0; + -webkit-box-shadow: inset 0 3px 5px rgb(0 0 0 / 12.5%); + box-shadow: inset 0 3px 5px rgb(0 0 0 / 12.5%) } .btn.disabled, .btn[disabled], fieldset[disabled] .btn { - cursor: not-allowed; pointer-events: none; + cursor: not-allowed; + opacity: .65; + /* stylelint-disable-next-line function-no-unknown */ filter: alpha(opacity=65); -webkit-box-shadow: none; box-shadow: none @@ -207,9 +213,9 @@ } .btn-link { - color: #428bca; - font-weight: normal; cursor: pointer; + font-weight: normal; + color: #428bca; border-radius: 0 } @@ -258,8 +264,8 @@ .btn-block { display: block; width: 100%; - padding-left: 0; - padding-right: 0 + padding-right: 0; + padding-left: 0 } .btn-block + .btn-block { diff --git a/assets/components/minishop2/css/mgr/help.css b/assets/components/minishop2/css/mgr/help.css new file mode 100644 index 000000000..59b740939 --- /dev/null +++ b/assets/components/minishop2/css/mgr/help.css @@ -0,0 +1,109 @@ +#minishop2-help-text { + box-sizing: border-box; + width: 100%; + margin: 24px 0; + padding: 18px; + + background: #fff; + border: 1px solid #e4e4e4; + border-radius: 3px; + box-shadow: 0 1px 0 #e4e4e4; +} + + +#minishop2-help-text .icon { + margin-right: 5px; +} + +#minishop2-help-text img { + float: right; + max-height: 100px; + padding-left: 30px; +} + +#minishop2-help-text p { + margin-bottom: 20px; +} + +#minishop2-help-text p:last-child { + margin-bottom: 0; +} + +#minishop2-help-text textarea { + width: calc(100% - 10px); + height: 250px; +} + +#minishop2-help-links { + overflow: hidden; + width: 100%; + margin-bottom: 1em; +} + +#minishop2-help-links ul { + width: 100%; + margin: 0; +} + +#minishop2-help-links ul li { + position: relative; + + float: left; + display: table; + + box-sizing: border-box; + width: 16.5%; + min-height: 130px; + margin: 0; + padding: 0 1%; +} + +@media (width <= 1023px) { + #minishop2-help-links ul li { + width: 33%; + padding: 5px; + } +} + +#minishop2-help-links ul li a { + position: relative; + + display: table-cell; + + padding: 10px; + + font-weight: bold; + color: #53595f; + text-align: center; + text-decoration: none; + vertical-align: middle; + + background-color: #fff; + border: 1px solid #e4e4e4; + border-radius: 3px; + box-shadow: 0 1px 0 #e4e4e4; +} + +#minishop2-help-links ul li a span { + display: block; + line-height: 1.2; +} + +#minishop2-help-links ul li a .title { + font-size: 12px; +} + +#minishop2-help-links ul li a .text { + font-weight: normal; +} + +#minishop2-help-links ul li a .icon { + display: block; + width: auto; + margin: 0 auto; + padding: 0 0 10px; +} + +#minishop2-help-links ul li a:hover .icon { + color: #3697cd; +} diff --git a/assets/components/minishop2/css/mgr/main.css b/assets/components/minishop2/css/mgr/main.css index 21d17e548..fd24f19c8 100644 --- a/assets/components/minishop2/css/mgr/main.css +++ b/assets/components/minishop2/css/mgr/main.css @@ -1,30 +1,97 @@ /* Main styles */ -a.link, a.ms2-link { color: #005580; } -.x-color-palette { width: 80%; height: auto; cursor: pointer; } -.action-red { color: darkred !important; } -.x-btn-over .action-red { color: white !important; } -.action-green { color: darkgreen !important; } -.x-btn-over .action-green { color: white !important; } -.action-blue { color: cadetblue !important; } -.x-btn-over .action-blue { color: white !important; } -.action-yellow { color: goldenrod !important; } -.x-btn-over .action-yellow { color: white !important; } -.action-gray { color: dimgray !important; } -.x-btn-over .action-gray { color: white !important; } -.x-form-field-trigger-wrap.disabled input { color: #aaa; } +a.link, +a.ms2-link { + color: #005580; +} + +.x-color-palette { + cursor: pointer; + width: 80%; + height: auto; +} + +.action-red { + color: darkred !important; +} + +.x-btn-over .action-red { + color: white !important; +} + +.action-green { + color: darkgreen !important; +} + +.x-btn-over .action-green { + color: white !important; +} + +.action-blue { + color: cadetblue !important; +} + +.x-btn-over .action-blue { + color: white !important; +} + +.action-yellow { + color: goldenrod !important; +} + +.x-btn-over .action-yellow { + color: white !important; +} + +.action-gray { + color: dimgray !important; +} + +.x-btn-over .action-gray { + color: white !important; +} + +.x-form-field-trigger-wrap.disabled input { + color: #aaa; +} + /* Search field */ .x-field-search-clear, -.x-field-search-go { border-left: 1px solid #e4e4e4 !important; } +.x-field-search-go { + border-left: 1px solid #e4e4e4 !important; +} + .x-field-search-clear:hover, -.x-field-search-go:hover { border-left-color: transparent !important; } -.x-field-search-clear:before { content: '\f00d' !important; } -.x-field-search-go { right: 31px !important; border-radius: 0 !important; } -.x-field-search-go:before { content: '\f002' !important; } +.x-field-search-go:hover { + border-left-color: transparent !important; +} + +.x-field-search-clear::before { + content: "\f00d" !important; +} + +.x-field-search-go { + right: 31px !important; + border-radius: 0 !important; +} + +.x-field-search-go::before { + content: "\f002" !important; +} + /* Grids */ -.minishop2-grid .x-grid3 { border: 1px solid #e4e9ee; } +.minishop2-grid .x-grid3 { + border: 1px solid #e4e9ee; +} + .minishop2-grid .x-grid3-row-last, -.minishop2-grid .x-grid3-row-last.x-grid3-row-selected { border-bottom-color: transparent !important; } -.minishop2-grid .x-grid-group-hd div.x-grid-group-title { padding: 8px 4px 12px 5px; } +.minishop2-grid .x-grid3-row-last.x-grid3-row-selected { + border-bottom-color: transparent !important; +} + +.minishop2-grid .x-grid-group-hd div.x-grid-group-title { + padding: 8px 4px 12px 5px; +} + .minishop2-row-unpublished div, .minishop2-row-unpublished span, .minishop2-row-unpublished a, @@ -32,166 +99,432 @@ a.link, a.ms2-link { color: #005580; } font-style: italic; color: #aaa !important; } + .minishop2-row-deleted div, .minishop2-row-deleted span, .minishop2-row-deleted a { color: brown !important; text-decoration: line-through !important; } + .minishop2-row-unpublished img, .minishop2-row-deleted img, .minishop2-row-inactive img, .minishop2-row-unpublished .minishop2-row-actions, .minishop2-row-deleted .minishop2-row-actions, .minishop2-row-inactive .minishop2-row-actions { - opacity: .5; + opacity: 0.5; } + .minishop2-row-required div { font-weight: bold; } + .minishop2-row-badge { padding: 4px 10px; - border-radius: 3px; background-color: #cacaca; + border-radius: 3px; +} + +.tbar-checkbox { + text-align: left; } -.tbar-checkbox { text-align: left; } -.tbar-checkbox label { padding: 2px 0 0 22px !important; line-height: normal; } + +.tbar-checkbox label { + padding: 2px 0 0 22px !important; + line-height: normal; +} + /* Grid actions and menu */ ul.minishop2-row-actions { margin: 0; padding: 0; list-style: none; } -ul.minishop2-row-actions li { float: left; } + +ul.minishop2-row-actions li { + float: left; +} + ul.minishop2-row-actions .btn { - padding: 2px; - margin-right: 2px; min-width: 26px; + margin-right: 2px; + padding: 2px; +} + +ul.minishop2-row-actions .btn.actions-menu { + width: 40px; +} + +ul.minishop2-row-actions .btn.actions-menu::after { + content: " \f107"; +} + +a.x-menu-item .x-menu-item-text * { + cursor: pointer; +} + +a.x-menu-item .x-menu-item-text .icon { + top: auto; + line-height: 16px; +} + +.x-menu-list .icon { + min-width: 1em; + text-align: center; +} + +.ext-strict .x-menu-item-icon { + top: 5px; +} + +.x-menu-list-item:hover .icon { + color: inherit !important; +} + +.x-tab-strip li { + list-style: none; +} + +.x-grid3-col-actions { + padding: 5px 0 0 5px !important; +} + +.x-grid3-col-actions .action-red, +.x-menu .action-red { + color: darkred !important; +} + +.x-grid3-col-actions .action-green, +.x-menu .action-green { + color: darkgreen !important; +} + +.x-grid3-col-actions .action-blue, +.x-menu .action-blue { + color: cadetblue !important; +} + +.x-grid3-col-actions .action-yellow, +.x-menu .action-yellow { + color: goldenrod !important; +} + +.x-grid3-col-actions .action-gray, +.x-menu .action-gray { + color: dimgray !important; +} + +.x-grid3 .green { + color: darkgreen; } -ul.minishop2-row-actions .btn.actions-menu { width: 40px; } -ul.minishop2-row-actions .btn.actions-menu:after { content: " \f107"; } -a.x-menu-item .x-menu-item-text * { cursor: pointer; } -a.x-menu-item .x-menu-item-text .icon { line-height: 16px; top: auto; } -.x-menu-list .icon { min-width: 1em; text-align: center; } -.ext-strict .x-menu-item-icon { top: 5px; } -.x-menu-list-item:hover .icon { color: inherit !important; } -.x-tab-strip li { list-style: none; } -.x-grid3-col-actions { padding: 5px 0 0 5px !important; } -.x-grid3-col-actions .action-red, .x-menu .action-red { color: darkred !important; } -.x-grid3-col-actions .action-green, .x-menu .action-green { color: darkgreen !important; } -.x-grid3-col-actions .action-blue, .x-menu .action-blue { color: cadetblue !important; } -.x-grid3-col-actions .action-yellow, .x-menu .action-yellow { color: goldenrod !important; } -.x-grid3-col-actions .action-gray, .x-menu .action-gray { color: dimgray !important; } -.x-grid3 .green { color: darkgreen; } -.x-grid3 .red { color: darkred; } + +.x-grid3 .red { + color: darkred; +} + /* Btn */ -.x-btn.x-btn-small button.x-btn-small {font-size: 12px;padding: 0px!important; } -.minishop2-btn-action {padding: 3px 20px 3px 6px!important;} -.minishop2-btn-action i.icon {padding-right: 3px;width: 15px;} +.x-btn.x-btn-small button.x-btn-small { + padding: 0 !important; + font-size: 12px; +} + +.minishop2-btn-action { + padding: 3px 20px 3px 6px !important; +} + +.minishop2-btn-action i.icon { + width: 15px; + padding-right: 3px; +} + /* Windows */ -.minishop2-window .x-form-label-top .x-form-item label.x-form-item-label { padding-top: 15px !important; } +.minishop2-window .x-form-label-top .x-form-item label.x-form-item-label { + padding-top: 15px !important; +} + .minishop2-window .x-panel-mc, -.minishop2-window .x-tab-panel-bwrap > .x-tab-panel-body > .x-panel { margin-top: -14px; } -.minishop2-window .x-window-body.tabs { padding: 5px 10px 0 10px; } -.minishop2-window .desc { font-style: italic; padding-top: 5px; color: #555555; } +.minishop2-window .x-tab-panel-bwrap > .x-tab-panel-body > .x-panel { + margin-top: -14px; +} + +.minishop2-window .x-window-body.tabs { + padding: 5px 10px 0; +} + +.minishop2-window .desc { + padding-top: 5px; + font-style: italic; + color: #555; +} + /* Tree */ .minishop2-panel .x-tree-root-ct, -.minishop2-window .x-tree-root-ct { overflow: visible; } +.minishop2-window .x-tree-root-ct { + overflow: visible; +} + .minishop2-panel .x-tree-root-ct input, -.minishop2-window .x-tree-root-ct input { vertical-align: top; } +.minishop2-window .x-tree-root-ct input { + vertical-align: top; +} + /* Orders */ -#minishop2-form-orders { padding-top: 10px; padding-bottom: 0; } -#minishop2-form-orders .x-toolbar-left-row td:first-of-type .x-btn {margin-left: 1px;} -#minishop2-grid-orders { padding-top: 0px; } +#minishop2-form-orders { + padding-top: 10px; + padding-bottom: 0; +} + +#minishop2-form-orders .x-toolbar-left-row td:first-of-type .x-btn { + margin-left: 1px; +} + +#minishop2-grid-orders { + padding-top: 0; +} + #minishop2-orders-info { - background: #f9f9f9; height: 95px; padding: 10px; - border-radius: 5px; + text-align: center; + + background: #f9f9f9; + border-radius: 5px; } -#minishop2-orders-info table { width: 100%; } -#minishop2-orders-info td { width: 50%; } -#minishop2-orders-info .top td { font-size: 10px; } -#minishop2-orders-info .top td span { font-size: 30px; line-height: 30px; } -#minishop2-orders-info .bottom td { padding-top: 10px; font-size: 10px; } -#minishop2-orders-info .bottom td span { font-size: 30px; line-height: 30px; } + +#minishop2-orders-info table { + width: 100%; +} + +#minishop2-orders-info td { + width: 50%; +} + +#minishop2-orders-info .top td { + font-size: 10px; +} + +#minishop2-orders-info .top td span { + font-size: 30px; + line-height: 30px; +} + +#minishop2-orders-info .bottom td { + padding-top: 10px; + font-size: 10px; +} + +#minishop2-orders-info .bottom td span { + font-size: 30px; + line-height: 30px; +} + /* Order products search field */ -#minishop2-grid-order-products .x-toolbar-layout-ct table{ width: 100%; } -#minishop2-grid-order-products .x-form-field-wrap.x-form-field-trigger-wrap{ width: 99% !important; } +#minishop2-grid-order-products .x-toolbar-layout-ct table { + width: 100%; +} + +#minishop2-grid-order-products .x-form-field-wrap.x-form-field-trigger-wrap { + width: 99% !important; +} + /* Products */ .x-grid3-col-product-title, .x-grid3-col-product-image, .x-grid3-col-product-thumb, .x-grid3-col-vendor-logo, .x-grid3-col-image { + margin: 0; padding-top: 0; padding-bottom: 0; - margin: 0; } + .x-grid3-col-product-image img, .x-grid3-col-product-thumb img, .x-grid3-col-vendor-logo img, .x-grid3-col-image img { - max-height: 40px; display: block; + max-height: 40px; } -.x-grid3-col-product-title .id { font-size: 90%; padding-right: 5px; color: #555; } -.x-grid3-col-product-title .product-category { font-size: 80%; padding-top: 7px; color: #555; } -.x-grid3-col-product-title .product-category a { color: #555; text-decoration: none; } -.x-grid3-col-product-title .product-category a:hover { color: #005580; text-decoration: underline; } -.x-grid3-col-product-title .native-product { padding-top: 13px; } -.x-grid3-col-product-title .native-product .ms2-link { font-weight: bold; } -.x-grid3-col-product-title .nested-product { padding-top: 5px; } -.x-grid3-col-product-title .nested-product .ms2-link { } -#minishop2-product-tabs { margin-top: 0; padding: 5px 2px; overflow: hidden; } -#minishop2-product-tabs > .x-tab-panel-header { padding: 0 10px; } -#minishop2-product-tabs .x-tab-strip { background-color: transparent !important; } -#minishop2-product-tabs > .x-tab-panel-header > .x-tab-strip-wrap > .x-tab-strip > .x-tab-strip-active { - box-shadow: 0 -3px 0 #aaa, -1px 0 0 transparent; - border-left: 1px solid #f0f0f0; + +.x-grid3-col-product-title .id { + padding-right: 5px; + font-size: 90%; + color: #555; +} + +.x-grid3-col-product-title .product-category { + padding-top: 7px; + font-size: 80%; + color: #555; +} + +.x-grid3-col-product-title .product-category a { + color: #555; + text-decoration: none; +} + +.x-grid3-col-product-title .product-category a:hover { + color: #005580; + text-decoration: underline; +} + +.x-grid3-col-product-title .native-product { + padding-top: 13px; +} + +.x-grid3-col-product-title .native-product .ms2-link { + font-weight: bold; +} + +.x-grid3-col-product-title .nested-product { + padding-top: 5px; +} + +#minishop2-product-tabs { + overflow: hidden; + margin-top: 0; + padding: 5px 2px; +} + +#minishop2-product-tabs > .x-tab-panel-header { + padding: 0 10px; +} + +#minishop2-product-tabs .x-tab-strip { + background-color: transparent !important; +} + +#minishop2-product-tabs + > .x-tab-panel-header + > .x-tab-strip-wrap + > .x-tab-strip + > .x-tab-strip-active { border-right: 1px solid #f0f0f0; + border-left: 1px solid #f0f0f0; + -webkit-box-shadow: 0 -3px 0 #aaa, -1px 0 0 transparent; + box-shadow: 0 -3px 0 #aaa, -1px 0 0 transparent; +} + +#minishop2-product-tabs .x-tab-strip li.x-tab-strip-active::before { + top: 100%; +} + +#minishop2-product-tabs .x-tab-strip li { + color: #111; +} + +#minishop2-product-tabs .x-tab-strip .x-tab-strip-text { + font-size: 90%; + line-height: 2; +} + +#minishop2-product-tabs > .x-tab-panel-bwrap { + margin-top: -1px; + border: 1px solid #f0f0f0; } -#minishop2-product-tabs .x-tab-strip li.x-tab-strip-active:before { top: 100%; } -#minishop2-product-tabs .x-tab-strip li { color: #111; } -#minishop2-product-tabs .x-tab-strip .x-tab-strip-text { line-height: 2; font-size: 90%; } -#minishop2-product-tabs > .x-tab-panel-bwrap { border: 1px solid #f0f0f0; margin-top: -1px; } -#minishop2-categories-tree { overflow: hidden; } -#minishop2-product-image-wrap { text-align: center; } -#minishop2-product-image { max-width: 100%; height: auto; } + +#minishop2-categories-tree { + overflow: hidden; +} + +#minishop2-product-image-wrap { + text-align: center; +} + +#minishop2-product-image { + max-width: 100%; + height: auto; +} + /* Gallery */ -#minishop2-gallery-page.drag-over:after { +#minishop2-gallery-page.drag-over::after { content: ""; + + position: absolute; top: 0; right: 0; bottom: 0; left: 0; - position: absolute; + display: block; + opacity: 0.1; background: forestgreen; border: 5px solid darkgreen; } + /* Images list */ -.minishop2-gallery-images { float: left; } -#minishop2-gallery-images-view { min-height: 150px; } -.minishop2-gallery-thumb-wrap:hover { border: 1px solid #aaa; } -.minishop2-gallery-thumb { width: 120px; height: 90px; } -.minishop2-gallery-thumb img { max-width: 120px; max-height: 90px; display: block; margin: auto; } -.minishop2-gallery-window-thumb { border: 1px solid #e4e4e4; border-radius: 2px; background: #fdfdfd; } +.minishop2-gallery-images { + float: left; +} + +#minishop2-gallery-images-view { + min-height: 150px; +} + +.minishop2-gallery-thumb-wrap:hover { + border: 1px solid #aaa; +} + +.minishop2-gallery-thumb { + width: 120px; + height: 90px; +} + +.minishop2-gallery-thumb img { + display: block; + max-width: 120px; + max-height: 90px; + margin: auto; +} + +.minishop2-gallery-window-thumb { + background: #fdfdfd; + border: 1px solid #e4e4e4; + border-radius: 2px; +} + /* Gallery image window */ -.minishop2-gallery-cba .x-form-cb-label { margin-top: 6px; } -.minishop2-gallery-window-link { width: 100%; display: block; text-align: center; } -.minishop2-gallery-window-details { width: 100%; font-size: 12px; } -.minishop2-gallery-window-details th { text-align: right; padding-right: 5px; width: 50%; } +.minishop2-gallery-cba .x-form-cb-label { + margin-top: 6px; +} + +.minishop2-gallery-window-link { + display: block; + width: 100%; + text-align: center; +} + +.minishop2-gallery-window-details { + width: 100%; + font-size: 12px; +} + +.minishop2-gallery-window-details th { + width: 50%; + padding-right: 5px; + text-align: right; +} + /* Settings */ -.x-grid3-col-color { padding-top: 10px; padding-bottom: 10px; } -.status-color { width: 30px; height: 20px; border-radius: 3px; } +.x-grid3-col-color { + padding-top: 10px; + padding-bottom: 10px; +} + +.status-color { + width: 30px; + height: 20px; + border-radius: 3px; +} /* Product extra options */ .option-in-extra-column.option-xdatetime.x-no-time .ux-datetime-time { display: none; } + .option-in-extra-column.option-xdatetime.x-no-time .x-datetime-wrap { - margin-top: 0px; + margin-top: 0; } diff --git a/assets/components/minishop2/css/web/default.css b/assets/components/minishop2/css/web/default.css index f843c41d7..c019df028 100644 --- a/assets/components/minishop2/css/web/default.css +++ b/assets/components/minishop2/css/web/default.css @@ -1,13 +1,23 @@ /* Messages */ @import url("./lib/jquery.jgrowl.min.css"); + div.jGrowl > .ui-state-highlight { - background: inherit; color: inherit; + background: inherit; border: inherit; } -.ms2-message-success { background-color: green !important; } -.ms2-message-error { background-color: brown !important; } -.ms2-message-info { background-color: black !important; } + +.ms2-message-success { + background-color: green !important; +} + +.ms2-message-error { + background-color: brown !important; +} + +.ms2-message-info { + background-color: black !important; +} /* Cart */ #msCart th.count, @@ -17,63 +27,133 @@ div.jGrowl > .ui-state-highlight { .ms-count, .ms-weight, .ms-price, -.ms-remove { width: 15%; } -.js #msCart [type="submit"][value="cart/change"] { display: none; } +.ms-remove { + width: 15%; +} + +.js #msCart [type="submit"][value="cart/change"] { + display: none; +} + +#msMiniCart, +.msMiniCart { + font-size: 0.8em; +} + +#msMiniCart h5, +.msMiniCart h5 { + margin: 0; +} -#msMiniCart, .msMiniCart { font-size: .8em; } -#msMiniCart h5, .msMiniCart h5 { margin: 0; } -#msMiniCart .empty, .msMiniCart .empty { display: block; } -#msMiniCart .not_empty, .msMiniCart .not_empty { display: none; } -#msMiniCart.full .empty, .msMiniCart.full .empty { display: none; } -#msMiniCart.full .not_empty, .msMiniCart.full .not_empty { display: block; } +#msMiniCart .empty, +.msMiniCart .empty { + display: block; +} + +#msMiniCart .not_empty, +.msMiniCart .not_empty { + display: none; +} + +#msMiniCart.full .empty, +.msMiniCart.full .empty { + display: none; +} + +#msMiniCart.full .not_empty, +.msMiniCart.full .not_empty { + display: block; +} /* Product */ -#msProduct .old_price, #msCart .old_price, .ms2_product .old_price { - color: brown; +#msProduct .old_price, +#msCart .old_price, +.ms2_product .old_price { font-style: italic; + color: brown; text-decoration: line-through; } /* Order */ -#msOrder { margin-top: 50px; } -#msOrder .radio { min-height: 30px; margin-bottom: 10px; } -#msOrder .radio img { max-height: 30px; margin-top: -2px; padding: 0 10px; } -#msOrder .required-star { display: none; color: brown; } -#msOrder .required .required-star { display: inline; } -#msOrder .error { border: 1px solid brown !important; } +#msOrder { + margin-top: 50px; +} + +#msOrder .radio { + min-height: 30px; + margin-bottom: 10px; +} + +#msOrder .radio img { + max-height: 30px; + margin-top: -2px; + padding: 0 10px; +} + +#msOrder .required-star { + display: none; + color: brown; +} + +#msOrder .required .required-star { + display: inline; +} + +#msOrder .error { + border: 1px solid brown !important; +} /* Logs */ -.msProductsLog, .msGalleryLog, .msCartLog, .msOrderLog, .msGetOrderLog { - width: 100%; +.msProductsLog, +.msGalleryLog, +.msCartLog, +.msOrderLog, +.msGetOrderLog { overflow: auto; + width: 100%; word-wrap: normal; white-space: pre; } /* Input Number */ -.ms-hidden{ +.ms-hidden { position: absolute !important; - opacity: 0; - visibility: hidden; z-index: -10000 !important; + visibility: hidden; + opacity: 0; } -.ms-input-number-wrap{ + +.ms-input-number-wrap { + display: -webkit-box; + display: flexbox; display: flex; font-size: 16px; } -.ms-input-number-emulator{ + +.ms-input-number-emulator { width: 3em; text-align: center; - border: none; background-color: transparent; + border: none; } -.ms-input-number-emulator:focus, .ms-input-number-emulator:active{ + +.ms-input-number-emulator:focus, +.ms-input-number-emulator:active { + border: none; outline: none; + -webkit-box-shadow: none; box-shadow: none; - border: none; } -.ms-input-number-btn{ + +.ms-input-number-btn { + display: -webkit-box; + display: flexbox; display: flex; align-items: center; justify-content: center; + + -webkit-box-align: center; + -webkit-box-pack: center; + -ms-flex-align: center; + -ms-flex-pack: center; } diff --git a/assets/components/minishop2/js/mgr/settings/vendor/grid.js b/assets/components/minishop2/js/mgr/settings/vendor/grid.js index 0a87837e5..73f860db3 100644 --- a/assets/components/minishop2/js/mgr/settings/vendor/grid.js +++ b/assets/components/minishop2/js/mgr/settings/vendor/grid.js @@ -10,6 +10,9 @@ miniShop2.grid.Vendor = function (config) { }, stateful: true, stateId: config.id, + ddGroup: 'ms2-settings-vendor', + ddAction: 'mgr/settings/vendor/sort', + enableDragDrop: true, multi_select: true, }); miniShop2.grid.Vendor.superclass.constructor.call(this, config); @@ -18,7 +21,7 @@ Ext.extend(miniShop2.grid.Vendor, miniShop2.grid.Default, { getFields: function () { return [ 'id', 'name', 'resource', 'country', 'email', 'logo', 'pagetitle', - 'address', 'phone', 'fax', 'description', 'actions' + 'address', 'phone', 'fax', 'description', 'actions', 'rank' ]; }, @@ -40,6 +43,7 @@ Ext.extend(miniShop2.grid.Vendor, miniShop2.grid.Default, { {header: _('ms2_address'), dataIndex: 'address', width: 100, sortable: true, hidden: true}, {header: _('ms2_phone'), dataIndex: 'phone', width: 75, sortable: true}, {header: _('ms2_fax'), dataIndex: 'fax', width: 75, sortable: true, hidden: true}, + {header: _('ms2_rank'), dataIndex: 'rank', width: 35, sortable: true, hidden: true}, { header: _('ms2_actions'), dataIndex: 'actions', diff --git a/core/components/minishop2/controllers/mgr/help.class.php b/core/components/minishop2/controllers/mgr/help.class.php new file mode 100644 index 000000000..ee31ba417 --- /dev/null +++ b/core/components/minishop2/controllers/mgr/help.class.php @@ -0,0 +1,51 @@ +modx->lexicon('ms2_help') . ' | miniShop2'; + } + + /** + * @return array + */ + public function getLanguageTopics() + { + return ['minishop2:help']; + } + + /** + * + */ + public function loadCustomCssJs() + { + $this->addCss($this->miniShop2->config['cssUrl'] . 'mgr/help.css'); + } + + /** + * @param array $scriptProperties + * @return mixed + */ + public function process(array $scriptProperties = []) { + $placeholders = []; + $placeholders['logo'] = $this->miniShop2->config['defaultThumb']; + $placeholders['changelog'] = file_get_contents(dirname(__FILE__, 3) . '/docs/changelog.txt'); + + return $placeholders; + } + + /** + * @return string + */ + public function getTemplateFile() { + return dirname(__FILE__, 3) . '/templates/default/help.tpl'; + } +} diff --git a/core/components/minishop2/docs/changelog.txt b/core/components/minishop2/docs/changelog.txt index 79c87ab67..eb40f72c3 100644 --- a/core/components/minishop2/docs/changelog.txt +++ b/core/components/minishop2/docs/changelog.txt @@ -5,6 +5,12 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [4.1.5-pl] - 2022-04-09 + +### Fixed +- Fixed a bug with creating cart key with options +- fix CustomInputNumber error in cart + ## [4.1.4-pl] - 2022-03-31 ### Added diff --git a/core/components/minishop2/elements/chunks/chunk.ms_email.tpl b/core/components/minishop2/elements/chunks/chunk.ms_email.tpl index af9923a5f..3c959692a 100644 --- a/core/components/minishop2/elements/chunks/chunk.ms_email.tpl +++ b/core/components/minishop2/elements/chunks/chunk.ms_email.tpl @@ -122,6 +122,26 @@ + + + {block 'address'}{/block} + + + + + {block 'payment'}{/block} + + + + + {block 'delivery'}{/block} + + + + + {block 'link'}{/block} + + diff --git a/core/components/minishop2/elements/chunks/chunk.ms_email_new_manager.tpl b/core/components/minishop2/elements/chunks/chunk.ms_email_new_manager.tpl index a0aab1ca1..40aac7dbf 100644 --- a/core/components/minishop2/elements/chunks/chunk.ms_email_new_manager.tpl +++ b/core/components/minishop2/elements/chunks/chunk.ms_email_new_manager.tpl @@ -3,3 +3,93 @@ {block 'title'} {'ms2_email_subject_new_manager' | lexicon : $order} {/block} + +{block 'address'} + + + + + + + + + {if $address.comment} + + + + {/if} +
+

{'ms2_frontend_credentials' | lexicon}

+ + {foreach ['receiver','phone','email'] as $field} + {if $address[$field]} + + + + {/if} + {/foreach} +
{('ms2_frontend_' ~ $field) | lexicon}: {$address[$field]}
+
+

{'ms2_frontend_address' | lexicon}

+ + {foreach ['index','region','city', 'street', 'building', 'entrance','floor', 'room'] as $field} + {if $address[$field]} + + + + {/if} + {/foreach} +
{('ms2_frontend_' ~ $field) | lexicon}: {$address[$field]}
+
+

{'ms2_frontend_comment' | lexicon}

+ + + + +
{$address.comment}
+
+{/block} + +{block 'payment'} + + + + +
+

{'ms2_frontend_payment' | lexicon}

+ + + + +
{$payment.name}
+
+{/block} + +{block 'delivery'} + + + + +
+

{'ms2_frontend_delivery' | lexicon}

+ + + + +
{$delivery.name}
+
+{/block} + +{block 'link'} + + + + +
+ + + + +
{'ms2_email_link_to_order' | lexicon}
+
+{/block} diff --git a/core/components/minishop2/elements/snippets/snippet.ms_products.php b/core/components/minishop2/elements/snippets/snippet.ms_products.php index 377b246be..c80e36df1 100644 --- a/core/components/minishop2/elements/snippets/snippet.ms_products.php +++ b/core/components/minishop2/elements/snippets/snippet.ms_products.php @@ -189,6 +189,10 @@ $pdoFetch->setConfig(array_merge($default, $scriptProperties), false); $rows = $pdoFetch->run(); +if ($scriptProperties['return'] == 'json') { + $rows = json_decode($rows, true); +} + // Process rows $output = $additionalPlaceholders = []; if (!empty($rows) && is_array($rows)) { @@ -242,7 +246,7 @@ $opt_time_start = microtime(true); $options = $modx->call('msProductData', 'loadOptions', [$modx, $row['id']]); - $row = array_merge($additionalPlaceholders, $row, $options); + $rows[$k] = $row = array_merge($additionalPlaceholders, $row, $options); $opt_time += microtime(true) - $opt_time_start; $tpl = $pdoFetch->defineChunk($row); @@ -256,6 +260,10 @@ $log .= '
' . print_r($pdoFetch->getTime(), 1) . '
'; } +if ($scriptProperties['return'] == 'json') { + $rows = json_encode($rows); +} + // Return output if (is_string($rows)) { $modx->setPlaceholder('msProducts.log', $log); diff --git a/core/components/minishop2/handlers/msdeliveryhandler.class.php b/core/components/minishop2/handlers/msdeliveryhandler.class.php index 669e4e4dc..d4d6bb179 100644 --- a/core/components/minishop2/handlers/msdeliveryhandler.class.php +++ b/core/components/minishop2/handlers/msdeliveryhandler.class.php @@ -47,7 +47,7 @@ public function getCost(msOrderInterface $order, msDelivery $delivery, $cost = 0 $add_price = $delivery->get('price'); if (preg_match('/%$/', $add_price)) { $add_price = str_replace('%', '', $add_price); - $add_price = $cost / 100 * $add_price; + $add_price = $cart['total_cost'] / 100 * $add_price; } } diff --git a/core/components/minishop2/lexicon/be/setting.inc.php b/core/components/minishop2/lexicon/be/setting.inc.php index 7c6b90ac1..523e33c75 100644 --- a/core/components/minishop2/lexicon/be/setting.inc.php +++ b/core/components/minishop2/lexicon/be/setting.inc.php @@ -82,6 +82,8 @@ $_lang['setting_ms2_order_format_num_desc'] = 'Фармат нумарацыі замовы. Даступныя значэнні ў фармаце PHP strftime()'; $_lang['setting_ms2_order_format_num_separator'] = 'Раздзяляльнік для нумарацыі замовы'; $_lang['setting_ms2_order_format_num_separator_desc'] = 'Раздзяляльнік для нумарацыі замовы. Даступныя значэнні: "/", "," і "-"'; +$_lang['setting_ms2_order_format_phone'] = 'Формат валидации телефона'; +$_lang['setting_ms2_order_format_phone_desc'] = 'Формат валидации телефона. Используется в функции preg_replace. Пример /[^-+()0-9]/u'; $_lang['setting_ms2_order_grid_fields'] = 'Палі табліцы заказаў'; $_lang['setting_ms2_order_grid_fields_desc'] = 'Спіс палёў, якія будуць паказаны ў табліцы заказаў. Даступныя: "createdon,updatedon,num,cost,cart_cost,delivery_cost,weight,status,delivery,payment,customer,receiver".'; $_lang['setting_ms2_order_handler_class'] = 'Клас апрацоўшчык заказа'; @@ -94,6 +96,8 @@ $_lang['setting_ms2_order_product_fields_desc'] = 'Спіс палёў табліцы замоўленых тавараў. Даступныя: "count,price,weight,cost,options". Палі тавару паказваюцца з прэфіксам "product_", напрыклад "product_pagetitle,product_article". Дадаткова можна паказваць значэння з поля options з прэфіксам "option_", напрыклад: "option_color,option_size".'; $_lang['setting_ms2_order_product_options'] = 'Палі опцый прадукта ў замове'; $_lang['setting_ms2_order_product_options_desc'] = 'Пералік рэдагуемых опцый тавара ў акне замовы. Па змаўчанні: "color,size".'; +$_lang['setting_ms2_order_tv_list'] = 'Список TV через запятую, которые попадут в письмо'; +$_lang['setting_ms2_order_tv_list_desc'] = 'Введите список TV товара через запятую, для использования их в чанке писем'; $_lang['setting_ms2_order_user_groups'] = 'Групы рэгістрацыі пакупнікоў'; $_lang['setting_ms2_order_user_groups_desc'] = 'Спіс груп, праз коску, у якія вы хочаце дадаваць новых пакупнікоў пры афармленні заказу.'; $_lang['setting_ms2_plugins'] = 'Убудовы крамы'; diff --git a/core/components/minishop2/lexicon/de/setting.inc.php b/core/components/minishop2/lexicon/de/setting.inc.php index aa9cb9b61..79102cf95 100644 --- a/core/components/minishop2/lexicon/de/setting.inc.php +++ b/core/components/minishop2/lexicon/de/setting.inc.php @@ -82,6 +82,8 @@ $_lang['setting_ms2_order_format_num_desc'] = 'Формат нумерации заказа. Доступные значения в формате PHP strftime()'; $_lang['setting_ms2_order_format_num_separator'] = 'Разделитель для нумерации заказа'; $_lang['setting_ms2_order_format_num_separator_desc'] = 'Разделитель для нумерации заказа. Доступные значения: "/", "," и "-"'; +$_lang['setting_ms2_order_format_phone'] = 'Формат валидации телефона'; +$_lang['setting_ms2_order_format_phone_desc'] = 'Формат валидации телефона. Используется в функции preg_replace. Пример /[^-+()0-9]/u'; $_lang['setting_ms2_order_grid_fields'] = 'Поля таблицы заказов'; $_lang['setting_ms2_order_grid_fields_desc'] = 'Список полей, которые будут показаны в таблице заказов. Доступны: "id,num,customer,status,cost,weight,delivery,payment,createdon,updatedon,comment".'; $_lang['setting_ms2_order_handler_class'] = 'Order handler class'; @@ -94,6 +96,8 @@ $_lang['setting_ms2_order_product_fields_desc'] = 'Список полей таблицы заказанных товаров. Доступны: "product_pagetitle,vendor_name,product_article,weight,price,count,cost". Поля товара указываются с префиксом "product_", например "product_pagetitle,product_article". Дополнительно можно указывать значения из поля options с префиксом "option_", например: "option_color,option_size".'; $_lang['setting_ms2_order_product_options'] = 'Поля опций продукта в заказе'; $_lang['setting_ms2_order_product_options_desc'] = 'Перечень редактируемых опций товара в окне заказа. По умолчанию: "color,size".'; +$_lang['setting_ms2_order_tv_list'] = 'Список TV через запятую, которые попадут в письмо'; +$_lang['setting_ms2_order_tv_list_desc'] = 'Введите список TV товара через запятую, для использования их в чанке писем'; $_lang['setting_ms2_order_user_groups'] = 'Groups for registering customers'; $_lang['setting_ms2_order_user_groups_desc'] = 'Comma-separated list of user groups for adding new users when they orders.'; $_lang['setting_ms2_plugins'] = 'Плагины магазина'; diff --git a/core/components/minishop2/lexicon/el/setting.inc.php b/core/components/minishop2/lexicon/el/setting.inc.php index df8ef905c..0a82f2312 100644 --- a/core/components/minishop2/lexicon/el/setting.inc.php +++ b/core/components/minishop2/lexicon/el/setting.inc.php @@ -82,6 +82,8 @@ $_lang['setting_ms2_order_format_num_desc'] = 'Формат нумерации заказа. Доступные значения в формате PHP strftime()'; $_lang['setting_ms2_order_format_num_separator'] = 'Разделитель для нумерации заказа'; $_lang['setting_ms2_order_format_num_separator_desc'] = 'Разделитель для нумерации заказа. Доступные значения: "/", "," и "-"'; +$_lang['setting_ms2_order_format_phone'] = 'Формат валидации телефона'; +$_lang['setting_ms2_order_format_phone_desc'] = 'Формат валидации телефона. Используется в функции preg_replace. Пример /[^-+()0-9]/u'; $_lang['setting_ms2_order_grid_fields'] = 'Поля таблицы заказов'; $_lang['setting_ms2_order_grid_fields_desc'] = 'Список полей, которые будут показаны в таблице заказов. Доступны: "id,num,customer,status,cost,weight,delivery,payment,createdon,updatedon,comment".'; $_lang['setting_ms2_order_handler_class'] = 'Класс обработчик заказа'; @@ -94,6 +96,8 @@ $_lang['setting_ms2_order_product_fields_desc'] = 'Список полей таблицы заказанных товаров. Доступны: "product_pagetitle,vendor_name,product_article,weight,price,count,cost". Поля товара указываются с префиксом "product_", например "product_pagetitle,product_article". Дополнительно можно указывать значения из поля options с префиксом "option_", например: "option_color,option_size".'; $_lang['setting_ms2_order_product_options'] = 'Поля опций продукта в заказе'; $_lang['setting_ms2_order_product_options_desc'] = 'Перечень редактируемых опций товара в окне заказа. По умолчанию: "color,size".'; +$_lang['setting_ms2_order_tv_list'] = 'Список TV через запятую, которые попадут в письмо'; +$_lang['setting_ms2_order_tv_list_desc'] = 'Введите список TV товара через запятую, для использования их в чанке писем'; $_lang['setting_ms2_order_user_groups'] = 'Группы регистрации покупателей'; $_lang['setting_ms2_order_user_groups_desc'] = 'Список групп, через запятую, в которые вы хотите добавлять новых покупателей при оформлении заказа.'; $_lang['setting_ms2_plugins'] = 'Плагины магазина'; diff --git a/core/components/minishop2/lexicon/en/manager.inc.php b/core/components/minishop2/lexicon/en/manager.inc.php index e3320e89e..700b8e4fc 100644 --- a/core/components/minishop2/lexicon/en/manager.inc.php +++ b/core/components/minishop2/lexicon/en/manager.inc.php @@ -46,7 +46,7 @@ $_lang['ms2_ft_caption'] = 'Caption'; $_lang['ms2_ft_checkbox'] = 'Checkbox'; $_lang['ms2_ft_combo-boolean'] = 'Yes/No'; -$_lang['ms2_ft_combo-colors'] = 'Множественный список цветов'; +$_lang['ms2_ft_combo-colors'] = 'Multiple color combobox'; $_lang['ms2_ft_combo-multiple'] = 'Multiple combobox'; $_lang['ms2_ft_combo-options'] = 'Superboxselect'; $_lang['ms2_ft_combobox'] = 'Combobox'; diff --git a/core/components/minishop2/lexicon/en/product.inc.php b/core/components/minishop2/lexicon/en/product.inc.php index 85ceecf68..9c9fada9a 100644 --- a/core/components/minishop2/lexicon/en/product.inc.php +++ b/core/components/minishop2/lexicon/en/product.inc.php @@ -8,18 +8,18 @@ * @subpackage lexicon */ -$_lang['ms2_drag_move_current_many'] = 'Перенести товары в данную категорию'; -$_lang['ms2_drag_move_current_many_success'] = 'Товары успешно перенесены в данную категорию'; -$_lang['ms2_drag_move_current_one'] = 'Перенести товар в данную категорию'; -$_lang['ms2_drag_move_current_one_success'] = 'Товар успешно перенесён в данную категорию'; -$_lang['ms2_drag_move_many'] = 'Перенести товары в категорию «{0}»'; -$_lang['ms2_drag_move_many_success'] = 'Товары успешно перенесены в категорию «{0}»'; -$_lang['ms2_drag_move_one'] = 'Перенести товар в категорию «{0}»'; -$_lang['ms2_drag_move_one_success'] = 'Товар успешно перенесён в категорию «{0}»'; -$_lang['ms2_drag_self_many'] = 'Отмена'; -$_lang['ms2_drag_self_one'] = 'Отмена'; -$_lang['ms2_drag_sort_many'] = 'Переместить товары'; -$_lang['ms2_drag_sort_one'] = 'Переместить товар'; +$_lang['ms2_drag_move_current_many'] = 'Move products to current category'; +$_lang['ms2_drag_move_current_many_success'] = 'Products was successfully moved to current category'; +$_lang['ms2_drag_move_current_one'] = 'Move product to current category'; +$_lang['ms2_drag_move_current_one_success'] = 'Product was successfully moved to current category'; +$_lang['ms2_drag_move_many'] = 'Move products to category «{0}»'; +$_lang['ms2_drag_move_many_success'] = 'Products was successfully moved to category «{0}»'; +$_lang['ms2_drag_move_one'] = 'Move product to category «{0}»'; +$_lang['ms2_drag_move_one_success'] = 'Product was successfully moved to category «{0}»'; +$_lang['ms2_drag_self_many'] = 'Cancel'; +$_lang['ms2_drag_self_one'] = 'Cancel'; +$_lang['ms2_drag_sort_many'] = 'Sort products'; +$_lang['ms2_drag_sort_one'] = 'Sort product'; $_lang['ms2_gallery_button_upload'] = 'Select files'; $_lang['ms2_gallery_emptymsg'] = '

Files not found.

You can load them by dragging directly into this pane, or by selecting the button at the top.

'; $_lang['ms2_gallery_errors'] = 'Errors on upload'; diff --git a/core/components/minishop2/lexicon/en/setting.inc.php b/core/components/minishop2/lexicon/en/setting.inc.php index 31801af73..6dd19ec20 100644 --- a/core/components/minishop2/lexicon/en/setting.inc.php +++ b/core/components/minishop2/lexicon/en/setting.inc.php @@ -36,8 +36,8 @@ $_lang['setting_ms2_cart_js_class_path_desc'] = 'Relative to the assets/components/minishop2/js/web/modules folder'; $_lang['setting_ms2_cart_max_count'] = 'Maximum number of products in cart for one operation'; $_lang['setting_ms2_cart_max_count_desc'] = 'Default is 1000. If this value is exceeded, will be displayed a notification.'; -$_lang['setting_ms2_cart_product_key_fields'] = 'Список полей для ключа товара в корзине'; -$_lang['setting_ms2_cart_product_key_fields_desc'] = 'Список полей товара через запятую, на основании которых формируется ключ товара в корзине'; +$_lang['setting_ms2_cart_product_key_fields'] = 'List of fields for product key in cart'; +$_lang['setting_ms2_cart_product_key_fields_desc'] = 'List of product fields separated by commas, on basis of which key of product in cart is formed'; $_lang['setting_ms2_category_content_default'] = 'Default content of category'; $_lang['setting_ms2_category_content_default_desc'] = 'Here you can specify the default content of new category. By default it lists children products.'; $_lang['setting_ms2_category_grid_fields'] = 'Fields of the table with goods'; @@ -82,6 +82,8 @@ $_lang['setting_ms2_order_format_num_desc'] = 'Order numbering format. Available values in PHP strftime() format'; $_lang['setting_ms2_order_format_num_separator'] = 'Separator for order numbering'; $_lang['setting_ms2_order_format_num_separator_desc'] = 'Separator for order numbering. Available values: "/", "," and "-"'; +$_lang['setting_ms2_order_format_phone'] = 'Phone validation format'; +$_lang['setting_ms2_order_format_phone_desc'] = 'Phone validation format. Used in the "preg_replace" function, for example: /[^-+()0-9]/u'; $_lang['setting_ms2_order_grid_fields'] = 'Fields of the orders table'; $_lang['setting_ms2_order_grid_fields_desc'] = 'Comma separated list of fields in the table of orders. Available: "createdon,updatedon,num,cost,cart_cost,delivery_cost,weight,status,delivery,payment,customer,receiver".'; $_lang['setting_ms2_order_handler_class'] = 'Order handler class'; @@ -94,6 +96,8 @@ $_lang['setting_ms2_order_product_fields_desc'] = 'which will be shown list of ordered products. Available: "count,price,weight,cost,options". Product fields specified with the prefix "product_", for example "product_pagetitle,product_article". Additionaly, you can specify a values from the options field with the prefix "option_", for example: "option_color,option_size".'; $_lang['setting_ms2_order_product_options'] = 'Product option fields in an order'; $_lang['setting_ms2_order_product_options_desc'] = 'Comma separated list of product option fields in the order window. By default: "color,size".'; +$_lang['setting_ms2_order_tv_list'] = 'List of TV, separated by commas, that will be included in email template'; +$_lang['setting_ms2_order_tv_list_desc'] = 'Specify the TV of product, separated by commas, to use them in email template chunk'; $_lang['setting_ms2_order_user_groups'] = 'Groups for registering customers'; $_lang['setting_ms2_order_user_groups_desc'] = 'Comma-separated list of user groups for adding new users when they orders.'; $_lang['setting_ms2_plugins'] = 'Store plugins'; diff --git a/core/components/minishop2/lexicon/fr/setting.inc.php b/core/components/minishop2/lexicon/fr/setting.inc.php index c0a1933f6..c9b3d08e6 100644 --- a/core/components/minishop2/lexicon/fr/setting.inc.php +++ b/core/components/minishop2/lexicon/fr/setting.inc.php @@ -82,6 +82,8 @@ $_lang['setting_ms2_order_format_num_desc'] = 'Формат нумерации заказа. Доступные значения в формате PHP strftime()'; $_lang['setting_ms2_order_format_num_separator'] = 'Разделитель для нумерации заказа'; $_lang['setting_ms2_order_format_num_separator_desc'] = 'Разделитель для нумерации заказа. Доступные значения: "/", "," и "-"'; +$_lang['setting_ms2_order_format_phone'] = 'Формат валидации телефона'; +$_lang['setting_ms2_order_format_phone_desc'] = 'Формат валидации телефона. Используется в функции preg_replace. Пример /[^-+()0-9]/u'; $_lang['setting_ms2_order_grid_fields'] = 'Поля таблицы заказов'; $_lang['setting_ms2_order_grid_fields_desc'] = 'Список полей, которые будут показаны в таблице заказов. Доступны: "id,num,customer,status,cost,weight,delivery,payment,createdon,updatedon,comment".'; $_lang['setting_ms2_order_handler_class'] = 'Order handler class'; @@ -94,6 +96,8 @@ $_lang['setting_ms2_order_product_fields_desc'] = 'Список полей таблицы заказанных товаров. Доступны: "product_pagetitle,vendor_name,product_article,weight,price,count,cost". Поля товара указываются с префиксом "product_", например "product_pagetitle,product_article". Дополнительно можно указывать значения из поля options с префиксом "option_", например: "option_color,option_size".'; $_lang['setting_ms2_order_product_options'] = 'Поля опций продукта в заказе'; $_lang['setting_ms2_order_product_options_desc'] = 'Перечень редактируемых опций товара в окне заказа. По умолчанию: "color,size".'; +$_lang['setting_ms2_order_tv_list'] = 'Список TV через запятую, которые попадут в письмо'; +$_lang['setting_ms2_order_tv_list_desc'] = 'Введите список TV товара через запятую, для использования их в чанке писем'; $_lang['setting_ms2_order_user_groups'] = 'Groups for registering customers'; $_lang['setting_ms2_order_user_groups_desc'] = 'Comma-separated list of user groups for adding new users when they orders.'; $_lang['setting_ms2_plugins'] = 'Плагины магазина'; diff --git a/core/components/minishop2/lexicon/it/setting.inc.php b/core/components/minishop2/lexicon/it/setting.inc.php index 0b883e755..d2ea6444b 100644 --- a/core/components/minishop2/lexicon/it/setting.inc.php +++ b/core/components/minishop2/lexicon/it/setting.inc.php @@ -82,6 +82,8 @@ $_lang['setting_ms2_order_format_num_desc'] = 'Формат нумерации заказа. Доступные значения в формате PHP strftime()'; $_lang['setting_ms2_order_format_num_separator'] = 'Разделитель для нумерации заказа'; $_lang['setting_ms2_order_format_num_separator_desc'] = 'Разделитель для нумерации заказа. Доступные значения: "/", "," и "-"'; +$_lang['setting_ms2_order_format_phone'] = 'Формат валидации телефона'; +$_lang['setting_ms2_order_format_phone_desc'] = 'Формат валидации телефона. Используется в функции preg_replace. Пример /[^-+()0-9]/u'; $_lang['setting_ms2_order_grid_fields'] = 'Fields of the orders table'; $_lang['setting_ms2_order_grid_fields_desc'] = 'Comma separated list of fields in the table of orders. Available: "createdon,updatedon,num,cost,cart_cost,delivery_cost,weight,status,delivery,payment,customer,receiver".'; $_lang['setting_ms2_order_handler_class'] = 'Order handler class'; @@ -94,6 +96,8 @@ $_lang['setting_ms2_order_product_fields_desc'] = 'which will be shown list of ordered products. Available: "count,price,weight,cost,options". Product fields specified with the prefix "product_", for example "product_pagetitle,product_article". Additionaly, you can specify a values from the options field with the prefix "option_", for example: "option_color,option_size".'; $_lang['setting_ms2_order_product_options'] = 'Поля опций продукта в заказе'; $_lang['setting_ms2_order_product_options_desc'] = 'Перечень редактируемых опций товара в окне заказа. По умолчанию: "color,size".'; +$_lang['setting_ms2_order_tv_list'] = 'Список TV через запятую, которые попадут в письмо'; +$_lang['setting_ms2_order_tv_list_desc'] = 'Введите список TV товара через запятую, для использования их в чанке писем'; $_lang['setting_ms2_order_user_groups'] = 'Groups for registering customers'; $_lang['setting_ms2_order_user_groups_desc'] = 'Comma-separated list of user groups for adding new users when they orders.'; $_lang['setting_ms2_plugins'] = 'Store plugins'; diff --git a/core/components/minishop2/lexicon/lt/setting.inc.php b/core/components/minishop2/lexicon/lt/setting.inc.php index 1c89521b2..4e9e93ecc 100644 --- a/core/components/minishop2/lexicon/lt/setting.inc.php +++ b/core/components/minishop2/lexicon/lt/setting.inc.php @@ -82,6 +82,8 @@ $_lang['setting_ms2_order_format_num_desc'] = 'Формат нумерации заказа. Доступные значения в формате PHP strftime()'; $_lang['setting_ms2_order_format_num_separator'] = 'Разделитель для нумерации заказа'; $_lang['setting_ms2_order_format_num_separator_desc'] = 'Разделитель для нумерации заказа. Доступные значения: "/", "," и "-"'; +$_lang['setting_ms2_order_format_phone'] = 'Формат валидации телефона'; +$_lang['setting_ms2_order_format_phone_desc'] = 'Формат валидации телефона. Используется в функции preg_replace. Пример /[^-+()0-9]/u'; $_lang['setting_ms2_order_grid_fields'] = 'Поля таблицы заказов'; $_lang['setting_ms2_order_grid_fields_desc'] = 'Список полей, которые будут показаны в таблице заказов. Доступны: "id,num,customer,status,cost,weight,delivery,payment,createdon,updatedon,comment".'; $_lang['setting_ms2_order_handler_class'] = 'Класс обработчик заказа'; @@ -94,6 +96,8 @@ $_lang['setting_ms2_order_product_fields_desc'] = 'Список полей таблицы заказанных товаров. Доступны: "product_pagetitle,vendor_name,product_article,weight,price,count,cost". Поля товара указываются с префиксом "product_", например "product_pagetitle,product_article". Дополнительно можно указывать значения из поля options с префиксом "option_", например: "option_color,option_size".'; $_lang['setting_ms2_order_product_options'] = 'Поля опций продукта в заказе'; $_lang['setting_ms2_order_product_options_desc'] = 'Перечень редактируемых опций товара в окне заказа. По умолчанию: "color,size".'; +$_lang['setting_ms2_order_tv_list'] = 'Список TV через запятую, которые попадут в письмо'; +$_lang['setting_ms2_order_tv_list_desc'] = 'Введите список TV товара через запятую, для использования их в чанке писем'; $_lang['setting_ms2_order_user_groups'] = 'Группы регистрации покупателей'; $_lang['setting_ms2_order_user_groups_desc'] = 'Список групп, через запятую, в которые вы хотите добавлять новых покупателей при оформлении заказа.'; $_lang['setting_ms2_plugins'] = 'Плагины магазина'; diff --git a/core/components/minishop2/lexicon/nl/setting.inc.php b/core/components/minishop2/lexicon/nl/setting.inc.php index 5ddaaa0fc..4fb592607 100755 --- a/core/components/minishop2/lexicon/nl/setting.inc.php +++ b/core/components/minishop2/lexicon/nl/setting.inc.php @@ -82,6 +82,8 @@ $_lang['setting_ms2_order_format_num_desc'] = 'Формат нумерации заказа. Доступные значения в формате PHP strftime()'; $_lang['setting_ms2_order_format_num_separator'] = 'Разделитель для нумерации заказа'; $_lang['setting_ms2_order_format_num_separator_desc'] = 'Разделитель для нумерации заказа. Доступные значения: "/", "," и "-"'; +$_lang['setting_ms2_order_format_phone'] = 'Формат валидации телефона'; +$_lang['setting_ms2_order_format_phone_desc'] = 'Формат валидации телефона. Используется в функции preg_replace. Пример /[^-+()0-9]/u'; $_lang['setting_ms2_order_grid_fields'] = 'Fields of the orders table'; $_lang['setting_ms2_order_grid_fields_desc'] = 'Comma separated list of fields in the table of orders. Available: "createdon,updatedon,num,cost,cart_cost,delivery_cost,weight,status,delivery,payment,customer,receiver".'; $_lang['setting_ms2_order_handler_class'] = 'Order handler class'; @@ -94,6 +96,8 @@ $_lang['setting_ms2_order_product_fields_desc'] = 'which will be shown list of ordered products. Available: "count,price,weight,cost,options". Product fields specified with the prefix "product_", for example "product_pagetitle,product_article". Additionaly, you can specify a values from the options field with the prefix "option_", for example: "option_color,option_size".'; $_lang['setting_ms2_order_product_options'] = 'Поля опций продукта в заказе'; $_lang['setting_ms2_order_product_options_desc'] = 'Перечень редактируемых опций товара в окне заказа. По умолчанию: "color,size".'; +$_lang['setting_ms2_order_tv_list'] = 'Список TV через запятую, которые попадут в письмо'; +$_lang['setting_ms2_order_tv_list_desc'] = 'Введите список TV товара через запятую, для использования их в чанке писем'; $_lang['setting_ms2_order_user_groups'] = 'Groups for registering customers'; $_lang['setting_ms2_order_user_groups_desc'] = 'Comma-separated list of user groups for adding new users when they orders.'; $_lang['setting_ms2_plugins'] = 'Store plugins'; diff --git a/core/components/minishop2/lexicon/ro/manager.inc.php b/core/components/minishop2/lexicon/ro/manager.inc.php index f15701d96..6243e4b87 100644 --- a/core/components/minishop2/lexicon/ro/manager.inc.php +++ b/core/components/minishop2/lexicon/ro/manager.inc.php @@ -46,7 +46,7 @@ $_lang['ms2_ft_caption'] = 'Denumire'; $_lang['ms2_ft_checkbox'] = 'Checkbox'; $_lang['ms2_ft_combo-boolean'] = 'Da/Nu'; -$_lang['ms2_ft_combo-colors'] = 'Множественный список цветов'; +$_lang['ms2_ft_combo-colors'] = 'Listă de culori multiple'; $_lang['ms2_ft_combo-multiple'] = 'Listă multiplă'; $_lang['ms2_ft_combo-options'] = ' Listă de sugestii de auto-completare'; $_lang['ms2_ft_combobox'] = 'Listă derulantă'; diff --git a/core/components/minishop2/lexicon/ro/product.inc.php b/core/components/minishop2/lexicon/ro/product.inc.php index 99a07292a..c99257def 100644 --- a/core/components/minishop2/lexicon/ro/product.inc.php +++ b/core/components/minishop2/lexicon/ro/product.inc.php @@ -8,18 +8,18 @@ * @subpackage lexicon */ -$_lang['ms2_drag_move_current_many'] = 'Перенести товары в данную категорию'; -$_lang['ms2_drag_move_current_many_success'] = 'Товары успешно перенесены в данную категорию'; -$_lang['ms2_drag_move_current_one'] = 'Перенести товар в данную категорию'; -$_lang['ms2_drag_move_current_one_success'] = 'Товар успешно перенесён в данную категорию'; -$_lang['ms2_drag_move_many'] = 'Перенести товары в категорию «{0}»'; -$_lang['ms2_drag_move_many_success'] = 'Товары успешно перенесены в категорию «{0}»'; -$_lang['ms2_drag_move_one'] = 'Перенести товар в категорию «{0}»'; -$_lang['ms2_drag_move_one_success'] = 'Товар успешно перенесён в категорию «{0}»'; -$_lang['ms2_drag_self_many'] = 'Отмена'; -$_lang['ms2_drag_self_one'] = 'Отмена'; -$_lang['ms2_drag_sort_many'] = 'Переместить товары'; -$_lang['ms2_drag_sort_one'] = 'Переместить товар'; +$_lang['ms2_drag_move_current_many'] = 'Mutați produsele în această categorie'; +$_lang['ms2_drag_move_current_many_success'] = 'Produsele au fost transferate cu succes în această categorie'; +$_lang['ms2_drag_move_current_one'] = 'Mutați produsul în această categorie'; +$_lang['ms2_drag_move_current_one_success'] = 'Produsul a fost transferat cu succes în această categorie'; +$_lang['ms2_drag_move_many'] = 'Mutați produsele în categoria «{0}»'; +$_lang['ms2_drag_move_many_success'] = 'Produsele au fost mutate cu succes în categoria «{0}»'; +$_lang['ms2_drag_move_one'] = 'Mutați produsul în categoria «{0}»'; +$_lang['ms2_drag_move_one_success'] = 'Produsul a fost mutat cu succes în categoria «{0}»'; +$_lang['ms2_drag_self_many'] = 'Anulare'; +$_lang['ms2_drag_self_one'] = 'Anulare'; +$_lang['ms2_drag_sort_many'] = 'Mutați produsele'; +$_lang['ms2_drag_sort_one'] = 'Mutați produsul'; $_lang['ms2_gallery_button_upload'] = 'Selectați fișierele'; $_lang['ms2_gallery_emptymsg'] = '

Fișierile nu au fost găsite.

Puteți să le descărcați, tragând direct pe acest panou sau selectând butonul din partea de sus.

'; $_lang['ms2_gallery_errors'] = 'Eroare la încărcare'; diff --git a/core/components/minishop2/lexicon/ro/setting.inc.php b/core/components/minishop2/lexicon/ro/setting.inc.php index 3ae1ad9c7..7af692dc3 100644 --- a/core/components/minishop2/lexicon/ro/setting.inc.php +++ b/core/components/minishop2/lexicon/ro/setting.inc.php @@ -36,8 +36,8 @@ $_lang['setting_ms2_cart_js_class_path_desc'] = 'Calea este relativă la directorul assets/components/minishop2/js/web/modules'; $_lang['setting_ms2_cart_max_count'] = 'Numărul maxim de articole în coș'; $_lang['setting_ms2_cart_max_count_desc'] = 'Setarea implicită este 1000. În cazul în care această valoare este depășită, se va afișa o notificare. '; -$_lang['setting_ms2_cart_product_key_fields'] = 'Список полей для ключа товара в корзине'; -$_lang['setting_ms2_cart_product_key_fields_desc'] = 'Список полей товара через запятую, на основании которых формируется ключ товара в корзине'; +$_lang['setting_ms2_cart_product_key_fields'] = 'Lista de câmpuri pentru cheia produsului din coș'; +$_lang['setting_ms2_cart_product_key_fields_desc'] = 'Lista câmpurilor de produse separate prin virgule, pe baza cărora se formează cheia produsului din coș'; $_lang['setting_ms2_category_content_default'] = 'Conținutul categoriilor în mod implicit'; $_lang['setting_ms2_category_content_default_desc'] = 'Aici puteți specifica conținutul categoriei nou create. Implicit este instalată afișarea produselor subordonate.'; $_lang['setting_ms2_category_grid_fields'] = 'Câmpurile tabelului de produse'; @@ -82,6 +82,8 @@ $_lang['setting_ms2_order_format_num_desc'] = 'Formatul de numerotare a comenzii. Valori disponibile în format PHP strftime().'; $_lang['setting_ms2_order_format_num_separator'] = 'Separator pentru numerotarea comenzii'; $_lang['setting_ms2_order_format_num_separator_desc'] = 'Separator pentru numerotarea comenzii. Valori disponibile: "/", "," и "-"'; +$_lang['setting_ms2_order_format_phone'] = 'Format de validare a telefonului'; +$_lang['setting_ms2_order_format_phone_desc'] = 'Format de validare a telefonului. Folosit în funcția preg_replace. Exemplu /[^-+()0-9]/u'; $_lang['setting_ms2_order_grid_fields'] = 'Cîmpurile tabelului comenzilor'; $_lang['setting_ms2_order_grid_fields_desc'] = 'Lista cîmpurilor care vor fi afișate în tabelul comenzilor. Sunt disponibile: "createdon,updatedon,num,cost,cart_cost,delivery_cost,weight,status,delivery,payment,customer,receiver".'; $_lang['setting_ms2_order_handler_class'] = 'Clasa de prelucrare a comenzii'; @@ -94,6 +96,8 @@ $_lang['setting_ms2_order_product_fields_desc'] = 'Lista cîmpurilor tabelului produselor comandate. Sunt accesibile: "count,price,weight,cost,options". Cîmpurile produsului sunt afișate cu prefixul "product_", de exemplu "product_pagetitle,product_article". Suplimentar, puteți specifica valori din câmpul de opțiuni cu prefixul "option_", de exemplu: "option_color,option_size".'; $_lang['setting_ms2_order_product_options'] = 'Câmpurile de opțiuni de produs dintr-o comandă'; $_lang['setting_ms2_order_product_options_desc'] = 'Lista de opțiuni de produs editabile în fereastra de comandă. Culoare implicită, dimensiune'; +$_lang['setting_ms2_order_tv_list'] = 'Lista de TV separate prin virgule care vor fi incluse în scrisoare'; +$_lang['setting_ms2_order_tv_list_desc'] = 'Introduceți o listă de produse TV, separate prin virgule, pentru a le utiliza într-o chancuri de e-mailuri'; $_lang['setting_ms2_order_user_groups'] = 'Grupurile de înregistrare a cumpărătorilor'; $_lang['setting_ms2_order_user_groups_desc'] = 'Lista grupurilor, separate prin virgulă, în care doriți să adăugați cumpărători noi la prelucrarea comenzii.'; $_lang['setting_ms2_plugins'] = 'Plugin-urile magazinului'; diff --git a/core/components/minishop2/lexicon/ru/default.inc.php b/core/components/minishop2/lexicon/ru/default.inc.php index d93e2d4b5..dc2de2ca6 100644 --- a/core/components/minishop2/lexicon/ru/default.inc.php +++ b/core/components/minishop2/lexicon/ru/default.inc.php @@ -58,6 +58,7 @@ $_lang['ms2_deliveries'] = 'Варианты доставки'; $_lang['ms2_deliveries_intro'] = 'Возможные варианты доставки. Логика рассчёта стоимости доставки в зависимости от расстояния и веса реализуется классом, который вы укажете в настройках.
Если вы не укажете свой класс, рассчеты будут производиться алгоритмом по умолчанию.'; $_lang['ms2_delivery'] = 'Доставка'; +$_lang['ms2_email_link_to_order'] = 'Заказ в панели управления →'; $_lang['ms2_email_subject_cancelled_user'] = 'Ваш заказ #[[+num]] был отменён'; $_lang['ms2_email_subject_new_manager'] = 'У вас новый заказ #[[+num]]'; $_lang['ms2_email_subject_new_user'] = 'Вы сделали заказ #[[+num]] на сайте [[++site_name]]'; @@ -124,6 +125,8 @@ $_lang['ms2_frontend_tags'] = 'Теги'; $_lang['ms2_frontend_text_address'] = 'Адрес одной строкой'; $_lang['ms2_frontend_weight_unit'] = 'кг.'; +$_lang['ms2_help'] = 'Помощь и поддержка'; +$_lang['ms2_help_desc'] = 'Полезные ссылки и информация'; $_lang['ms2_link'] = 'Связь товаров'; $_lang['ms2_links'] = 'Связи товаров'; $_lang['ms2_links_intro'] = 'Список возможных связей товаров друг с другом. Тип связи характеризует, как именно она будет работать, его нельзя создавать, можно только выбрать из списка.'; diff --git a/core/components/minishop2/lexicon/ru/help.inc.php b/core/components/minishop2/lexicon/ru/help.inc.php new file mode 100644 index 000000000..e2bf258db --- /dev/null +++ b/core/components/minishop2/lexicon/ru/help.inc.php @@ -0,0 +1,43 @@ +Вы можете поддержать miniShop2: +
- Переводом на карту Тинькофф https://www.tinkoff.ru/sl/2V9U9RrcJZP; +
- Переводом на Qiwi-кошелек http://qiwi.com/p/77012827737; +
- Переводом на YooMoney https://yoomoney.ru/fundraise/RPkkYwNcL7A.230131; +
- Переводом на Казахстан Каспи, по номеру +7 701 282 77 37;'; +$_lang['ms2_lexicons_href'] = '?a=workspaces/lexicon&ns=minishop2'; +$_lang['ms2_lexicons_text'] = 'Управление словарями'; +$_lang['ms2_localization_href'] = 'https://crowdin.com/project/minishop2-ecommerce'; +$_lang['ms2_localization_text'] = 'Помогите с переводом'; +$_lang['ms2_localization_title'] = 'Локализация'; +$_lang['ms2_orders_href'] = '?a=mgr/orders&namespace=minishop2'; +$_lang['ms2_orders_text'] = 'Заказы'; +$_lang['ms2_settings_href'] = '?a=mgr/settings&namespace=minishop2'; +$_lang['ms2_settings_text'] = 'Настройки'; +$_lang['ms2_sys_settings_href'] = '?a=system/settings&ns=minishop2'; +$_lang['ms2_sys_settings_text'] = 'Системные настройки & События'; diff --git a/core/components/minishop2/lexicon/ru/product.inc.php b/core/components/minishop2/lexicon/ru/product.inc.php index 947e4c346..3ab3d67cf 100644 --- a/core/components/minishop2/lexicon/ru/product.inc.php +++ b/core/components/minishop2/lexicon/ru/product.inc.php @@ -18,8 +18,8 @@ $_lang['ms2_drag_move_one_success'] = 'Товар успешно перенесён в категорию «{0}»'; $_lang['ms2_drag_self_many'] = 'Отмена'; $_lang['ms2_drag_self_one'] = 'Отмена'; -$_lang['ms2_drag_sort_many'] = 'Переместить товары'; -$_lang['ms2_drag_sort_one'] = 'Переместить товар'; +$_lang['ms2_drag_sort_many'] = 'Переместить выбранные'; +$_lang['ms2_drag_sort_one'] = 'Переместить'; $_lang['ms2_gallery_button_upload'] = 'Выбрать файлы'; $_lang['ms2_gallery_emptymsg'] = '

Файлов не найдено.

Вы можете загрузить их, перетащив прямо на эту панель или выбрав кнопкой вверху.

'; $_lang['ms2_gallery_errors'] = 'Ошибки при загрузке'; diff --git a/core/components/minishop2/lexicon/uk/setting.inc.php b/core/components/minishop2/lexicon/uk/setting.inc.php index c2cee479e..8a5d5f731 100644 --- a/core/components/minishop2/lexicon/uk/setting.inc.php +++ b/core/components/minishop2/lexicon/uk/setting.inc.php @@ -82,6 +82,8 @@ $_lang['setting_ms2_order_format_num_desc'] = 'Формат нумерації замовлення. Доступні значення у форматі PHP strftime()'; $_lang['setting_ms2_order_format_num_separator'] = 'Розділювач для нумерації замовлення'; $_lang['setting_ms2_order_format_num_separator_desc'] = 'Роздільник для нумерації замовлення. Доступні значення: "/", "," та "-"'; +$_lang['setting_ms2_order_format_phone'] = 'Формат валидации телефона'; +$_lang['setting_ms2_order_format_phone_desc'] = 'Формат валидации телефона. Используется в функции preg_replace. Пример /[^-+()0-9]/u'; $_lang['setting_ms2_order_grid_fields'] = 'Поля таблиці замовлень'; $_lang['setting_ms2_order_grid_fields_desc'] = 'Список полів, що будуть показані в таблиці замовлень. Доступні: "createdon,updatedon,num,cost,cart_cost,delivery_cost,weight,status,delivery,payment,customer,receiver".'; $_lang['setting_ms2_order_handler_class'] = 'Клас обробник замовлення'; @@ -94,6 +96,8 @@ $_lang['setting_ms2_order_product_fields_desc'] = 'Список полів таблиці замовлених товарів. Доступні: "count,price,weight,cost,options". Поля товару вказуються з префіксом "product_", наприклад "product_pagetitle,product_article". Додатково можна вказувати значення з поля options з префіксом "option_", наприклад: "option_color,option_size".'; $_lang['setting_ms2_order_product_options'] = 'Поля опцій продукту на замовлення'; $_lang['setting_ms2_order_product_options_desc'] = 'Перелік редагованих опцій товару у вікні замовлення. Типово: "color,size".'; +$_lang['setting_ms2_order_tv_list'] = 'Список TV через запятую, которые попадут в письмо'; +$_lang['setting_ms2_order_tv_list_desc'] = 'Введите список TV товара через запятую, для использования их в чанке писем'; $_lang['setting_ms2_order_user_groups'] = 'Групи реєстрації покупців'; $_lang['setting_ms2_order_user_groups_desc'] = 'Список груп, через кому, до яких ви бажаєте додавати нових покупців при оформленні замовлення.'; $_lang['setting_ms2_plugins'] = 'Плагіни магазину'; diff --git a/core/components/minishop2/model/minishop2/minishop2.class.php b/core/components/minishop2/model/minishop2/minishop2.class.php index a50ec672a..718a91b86 100644 --- a/core/components/minishop2/model/minishop2/minishop2.class.php +++ b/core/components/minishop2/model/minishop2/minishop2.class.php @@ -2,7 +2,7 @@ class miniShop2 { - public $version = '4.1.4-pl'; + public $version = '4.1.5-pl'; /** @var modX $modx */ public $modx; /** @var pdoFetch $pdoTools */ diff --git a/core/components/minishop2/model/minishop2/mysql/mspayment.map.inc.php b/core/components/minishop2/model/minishop2/mysql/mspayment.map.inc.php index cdc494a83..be4d852fc 100644 --- a/core/components/minishop2/model/minishop2/mysql/mspayment.map.inc.php +++ b/core/components/minishop2/model/minishop2/mysql/mspayment.map.inc.php @@ -48,8 +48,8 @@ ], 'rank' => [ - 'dbtype' => 'tinyint', - 'precision' => '1', + 'dbtype' => 'int', + 'precision' => '10', 'attributes' => 'unsigned', 'phptype' => 'integer', 'null' => true, diff --git a/core/components/minishop2/model/minishop2/mysql/msvendor.map.inc.php b/core/components/minishop2/model/minishop2/mysql/msvendor.map.inc.php index aa31f5de8..bf7d36af2 100644 --- a/core/components/minishop2/model/minishop2/mysql/msvendor.map.inc.php +++ b/core/components/minishop2/model/minishop2/mysql/msvendor.map.inc.php @@ -17,9 +17,19 @@ 'email' => null, 'description' => null, 'properties' => null, + 'rank' => 0 ], 'fieldMeta' => [ + 'rank' => + [ + 'dbtype' => 'int', + 'precision' => '10', + 'attributes' => 'unsigned', + 'phptype' => 'integer', + 'null' => true, + 'default' => 0, + ], 'name' => [ 'dbtype' => 'varchar', diff --git a/core/components/minishop2/model/schema/minishop2.mysql.schema.xml b/core/components/minishop2/model/schema/minishop2.mysql.schema.xml index 6ff8f3c33..b2fc446a9 100644 --- a/core/components/minishop2/model/schema/minishop2.mysql.schema.xml +++ b/core/components/minishop2/model/schema/minishop2.mysql.schema.xml @@ -85,6 +85,7 @@ + @@ -204,7 +205,7 @@ - diff --git a/core/components/minishop2/processors/mgr/settings/payment/sort.class.php b/core/components/minishop2/processors/mgr/settings/payment/sort.class.php index 7ee4ac7b1..a0bfee359 100644 --- a/core/components/minishop2/processors/mgr/settings/payment/sort.class.php +++ b/core/components/minishop2/processors/mgr/settings/payment/sort.class.php @@ -53,8 +53,8 @@ public function sort(msPayment $source, msPayment $target) $c = $this->modx->newQuery($this->classKey); $c->command('UPDATE'); if ($source->get('rank') < $target->get('rank')) { - $c->query['set']['menuindex'] = [ - 'value' => '`menuindex` - 1', + $c->query['set']['rank'] = [ + 'value' => '`rank` - 1', 'type' => false, ]; $c->andCondition([ diff --git a/core/components/minishop2/processors/mgr/settings/vendor/create.class.php b/core/components/minishop2/processors/mgr/settings/vendor/create.class.php index f8fc703d5..7d99f5f71 100644 --- a/core/components/minishop2/processors/mgr/settings/vendor/create.class.php +++ b/core/components/minishop2/processors/mgr/settings/vendor/create.class.php @@ -20,6 +20,18 @@ public function initialize() return parent::initialize(); } + /** + * @return bool + */ + public function beforeSave() + { + $this->object->fromArray([ + 'rank' => $this->modx->getCount($this->classKey), + ]); + + return parent::beforeSave(); + } + /** * @return bool */ diff --git a/core/components/minishop2/processors/mgr/settings/vendor/sort.class.php b/core/components/minishop2/processors/mgr/settings/vendor/sort.class.php new file mode 100644 index 000000000..3a613885b --- /dev/null +++ b/core/components/minishop2/processors/mgr/settings/vendor/sort.class.php @@ -0,0 +1,118 @@ +modx->hasPermission($this->permission)) { + return $this->modx->lexicon('access_denied'); + } + + return parent::initialize(); + } + + /** + * @return array|string + */ + public function process() + { + if (!$this->modx->getCount($this->classKey, $this->getProperty('target'))) { + return $this->failure(); + } + + $sources = json_decode($this->getProperty('sources'), true); + if (!is_array($sources)) { + return $this->failure(); + } + + foreach ($sources as $id) { + /** @var msVendor $source */ + $source = $this->modx->getObject($this->classKey, compact('id')); + /** @var msVendor $target */ + $target = $this->modx->getObject($this->classKey, ['id' => $this->getProperty('target')]); + $this->sort($source, $target); + } + $this->updateIndex(); + + return $this->modx->error->success(); + } + + /** + * @param msVendor $source + * @param msVendor $target + * + * @return array|string + */ + public function sort(msVendor $source, msVendor $target) + { + $c = $this->modx->newQuery($this->classKey); + $c->command('UPDATE'); + if ($source->get('rank') < $target->get('rank')) { + $c->query['set']['rank'] = [ + 'value' => '`rank` - 1', + 'type' => false, + ]; + $c->andCondition([ + 'rank:<=' => $target->rank, + 'rank:>' => $source->rank, + ]); + $c->andCondition([ + 'rank:>' => 0, + ]); + } else { + $c->query['set']['rank'] = [ + 'value' => '`rank` + 1', + 'type' => false, + ]; + $c->andCondition([ + 'rank:>=' => $target->rank, + 'rank:<' => $source->rank, + ]); + } + $c->prepare(); + $c->stmt->execute(); + + $source->set('rank', $target->rank); + $source->save(); + } + + /** + * + */ + public function updateIndex() + { + // Check if need to update indexes + $c = $this->modx->newQuery($this->classKey); + $c->groupby('rank'); + $c->select('COUNT(rank) as idx'); + $c->sortby('idx', 'DESC'); + $c->limit(1); + if ($c->prepare() && $c->stmt->execute()) { + if ($c->stmt->fetchColumn() == 1) { + return; + } + } + + // Update indexes + $c = $this->modx->newQuery($this->classKey); + $c->select('id'); + $c->sortby('rank ASC, id', 'ASC'); + if ($c->prepare() && $c->stmt->execute()) { + $table = $this->modx->getTableName($this->classKey); + $update = $this->modx->prepare("UPDATE {$table} SET rank = ? WHERE id = ?"); + $i = 0; + while ($id = $c->stmt->fetch(PDO::FETCH_COLUMN)) { + $update->execute([$i, $id]); + $i++; + } + } + } +} + +return 'msVendorSortProcessor'; diff --git a/core/components/minishop2/templates/default/help.tpl b/core/components/minishop2/templates/default/help.tpl new file mode 100644 index 000000000..50128e86d --- /dev/null +++ b/core/components/minishop2/templates/default/help.tpl @@ -0,0 +1,161 @@ +