Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 0 additions & 37 deletions assets/components/minishop3/js/mgr/utilities/utilities.js

This file was deleted.

192 changes: 0 additions & 192 deletions assets/components/minishop3/js/mgr/utilities/utilities.panel.js

This file was deleted.

107 changes: 51 additions & 56 deletions core/components/minishop3/controllers/mgr/utilities.class.php
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,6 @@

use MiniShop3\Model\msProduct;
use MiniShop3\Model\msProductFile;
use MODX\Revolution\Sources\modMediaSource;

if (!class_exists('msManagerController')) {
require_once dirname(__FILE__, 2) . '/manager.class.php';
Expand All @@ -26,77 +25,73 @@ public function getLanguageTopics()
return ['minishop3:default', 'minishop3:product', 'minishop3:manager', 'minishop3:vue'];
}

/**
*
*/
public function loadCustomCssJs()
{
$this->addCss($this->ms3->config['cssUrl'] . 'mgr/bootstrap.buttons.css');
$this->addCss($this->ms3->config['cssUrl'] . 'mgr/main.css');
// Gallery CSS now included in Vue component (utilities-gallery.min.css)

$this->addJavascript($this->ms3->config['jsUrl'] . 'mgr/minishop3.js');
$this->addJavascript($this->ms3->config['jsUrl'] . 'mgr/misc/default.grid.js');
$this->addJavascript($this->ms3->config['jsUrl'] . 'mgr/misc/default.window.js');
$this->addJavascript($this->ms3->config['jsUrl'] . 'mgr/misc/ms3.utils.js');
$this->addJavascript($this->ms3->config['jsUrl'] . 'mgr/misc/ms3.combo.js');

$this->addJavascript($this->ms3->config['jsUrl'] . 'mgr/utilities/utilities.js');
$this->addJavascript($this->ms3->config['jsUrl'] . 'mgr/utilities/utilities.panel.js');
// Import tab uses Vue (import.min.js); Ext import/panel.js removed (#522).

$config = $this->ms3->config;
$config['mssetting_list'] = $this->modx->hasPermission('mssetting_list');

$productSource = (int)$this->getOption('ms3_product_source_default', null, 1);
$source = null;
if ($productSource > 0) {
$source = $this->modx->getObject('sources.modMediaSource', $productSource);
}
$source = $productSource > 0
? $this->modx->getObject('sources.modMediaSource', $productSource)
: null;
if ($source) {
$config['utility_gallery_source_id'] = $productSource;
$config['utility_gallery_source_name'] = $source->get('name');

$properties = $source->get('properties');
$thumbnails = json_decode(
(string)($source->get('properties')['thumbnails']['value'] ?? ''),
true
);
$propertiesString = '';
foreach (json_decode($properties['thumbnails']['value'], true) as $key => $value) {
$propertiesString .= "<strong>$key: </strong>" . json_encode($value) . "<br>";
if (is_array($thumbnails)) {
foreach ($thumbnails as $key => $value) {
$propertiesString .= '<strong>' . htmlspecialchars((string)$key, ENT_QUOTES, 'UTF-8')
. ': </strong>' . htmlspecialchars(json_encode($value), ENT_QUOTES, 'UTF-8') . '<br>';
}
}
$config['utility_gallery_thumbnails'] = $propertiesString;
}

// get information about products and files
$config['utility_gallery_total_products'] = $this->modx->getCount(msProduct::class, ['class_key' => msProduct::class]);
$config['utility_gallery_total_products_files'] = $this->modx->getCount(msProductFile::class, ['parent_id' => 0]);

$config['utility_import_fields'] = $this->getOption('ms3_utility_import_fields', null, 'pagetitle,parent,price,article', true);
$config['utility_import_fields_delimiter'] = $this->getOption('ms3_utility_import_fields_delimiter', null, ';', true);

// CSS for Vue components
$this->addCss($this->ms3->config['assetsUrl'] . 'css/mgr/vue-dist/primeicons.min.css');
$this->addCss($this->ms3->config['assetsUrl'] . 'css/mgr/vue-dist/fields-management.min.css');
$this->addCss($this->ms3->config['assetsUrl'] . 'css/mgr/vue-dist/extra-fields.min.css');
$this->addCss($this->ms3->config['assetsUrl'] . 'css/mgr/vue-dist/grid-fields-config.min.css');
$this->addCss($this->ms3->config['assetsUrl'] . 'css/mgr/vue-dist/model-fields.min.css');
$this->addCss($this->ms3->config['assetsUrl'] . 'css/mgr/vue-dist/import.min.css');
$this->addCss($this->ms3->config['assetsUrl'] . 'css/mgr/vue-dist/utilities-gallery.min.css');
$config['utility_gallery_total_products'] = $this->modx->getCount(
msProduct::class,
['class_key' => msProduct::class]
);
$config['utility_gallery_total_products_files'] = $this->modx->getCount(
msProductFile::class,
['parent_id' => 0]
);

// Config must precede Vue modules (#524).
$this->addHtml(
'<script>var ms3 = { config: ' . json_encode($config) . ' };</script>'
);

$cssBase = $this->ms3->config['assetsUrl'] . 'css/mgr/vue-dist/';
foreach (['primeicons', 'utilities'] as $asset) {
$this->addCss($cssBase . $asset . '.min.css');
}
$this->addVueModule($this->ms3->config['jsUrl'] . 'mgr/vue-dist/utilities.min.js');

// Config MUST be set BEFORE Vue modules load (they read from ms3.config)
$this->addHtml('<script>Object.assign(ms3.config, ' . json_encode($config) . ');</script>');
$this->modx->invokeEvent('msOnManagerCustomCssJs', [
'controller' => $this,
'page' => 'utilities',
]);
}

// Vue modules with VueTools dependency check
$assetsUrl = $this->ms3->config['assetsUrl'];
$this->addVueModule($assetsUrl . 'js/mgr/vue-dist/fields-management.min.js');
$this->addVueModule($assetsUrl . 'js/mgr/vue-dist/extra-fields.min.js');
$this->addVueModule($assetsUrl . 'js/mgr/vue-dist/grid-fields-config.min.js');
$this->addVueModule($assetsUrl . 'js/mgr/vue-dist/model-fields.min.js');
$this->addVueModule($assetsUrl . 'js/mgr/vue-dist/import.min.js');
$this->addVueModule($assetsUrl . 'js/mgr/vue-dist/utilities-gallery.min.js');
/**
* @param array $scriptProperties
* @return mixed
*/
public function process(array $scriptProperties = [])
{
return [];
}

$this->addHtml('
<script>
Ext.onReady(function() {
MODx.add({xtype: "ms3-page-utilities"});
});
</script>');
/**
* @return string
*/
public function getTemplateFile()
{
return dirname(__FILE__, 3) . '/templates/default/utilities.tpl';
}
}
3 changes: 3 additions & 0 deletions core/components/minishop3/templates/default/utilities.tpl
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
<div class="x-panel-body">
<div id="ms3-vue-utilities" class="vueApp" style="min-height: 400px;"></div>
</div>
9 changes: 7 additions & 2 deletions core/components/minishop3/tests/OrphanExtAssetsTest.php
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,13 @@
$fail('utilities controller must not load utilities/import/panel.js (#522)');
}

if (preg_match('/addVueModule\([^;]*import\.min\.js/', $utilitiesController) !== 1) {
$fail('utilities controller must still register import.min.js Vue entry');
// Import lives inside utilities.min.js after Phase 1c (#524 / #537), not a separate entry.
if (preg_match('/addVueModule\([^;]*utilities\.min\.js/', $utilitiesController) !== 1) {
$fail('utilities controller must register utilities.min.js Vue entry (#524)');
}

if (preg_match('/addVueModule\([^;]*import\.min\.js/', $utilitiesController) === 1) {
$fail('utilities controller must not register separate import.min.js after utilities consolidation (#524)');
}

$scanRoots = [
Expand Down
Loading