diff --git a/composer.json b/composer.json index cb2569150..28c75ff1a 100644 --- a/composer.json +++ b/composer.json @@ -15,7 +15,9 @@ "webmozart/assert": "^1.11", "symfony/http-client": "^4.4", "http-interop/http-factory-guzzle": "^1.1", - "php-http/message-factory": "^1.1" + "php-http/message-factory": "^1.1", + "prestashop/prestashop-accounts-installer": "^1.0.4", + "prestashop/module-lib-mbo-installer": "^2.0" }, "require-dev": { "roave/security-advisories": "dev-latest", @@ -41,11 +43,11 @@ }, "config": { "platform": { - "php": "7.2" + "php": "7.2.5" }, "prepend-autoloader": false, "allow-plugins": { - "php-http/discovery": true + "php-http/discovery": false } }, "type": "prestashop-module", diff --git a/controllers/admin/AdminMollieSettingsController.php b/controllers/admin/AdminMollieSettingsController.php index b9cf243af..c543ba194 100644 --- a/controllers/admin/AdminMollieSettingsController.php +++ b/controllers/admin/AdminMollieSettingsController.php @@ -16,8 +16,25 @@ exit; } +use Mollie\Adapter\ConfigurationAdapter; +use Mollie\Adapter\ToolsAdapter; +use Mollie\Builder\Content\BaseInfoBlock; +use Mollie\Builder\Content\UpdateMessageInfoBlock; +use Mollie\Config\Config; +use Mollie\Install\PrestaShopDependenciesInstall; +use Mollie\Logger\PrestaLoggerInterface; +use Mollie\Repository\ModuleRepository; +use Mollie\Service\Content\TemplateParserInterface; +use Mollie\Service\SettingsSaveService; +use PrestaShop\Module\PsEventbus\Service\PresenterService; +use PrestaShop\PrestaShop\Core\Addon\Module\ModuleManagerBuilder; +use PrestaShop\PsAccountsInstaller\Installer\Exception\ModuleNotInstalledException; +use PrestaShop\PsAccountsInstaller\Installer\Facade\PsAccounts; + class AdminMollieSettingsController extends ModuleAdminController { + private const FILE_NAME = 'AdminMollieSettingsController'; + /** @var Mollie */ public $module; @@ -27,48 +44,77 @@ public function __construct() $this->bootstrap = true; } - public function postProcess() + public function initContent(): void { - /** @var \Mollie\Repository\ModuleRepository $moduleRepository */ - $moduleRepository = $this->module->getService(\Mollie\Repository\ModuleRepository::class); - $moduleDatabaseVersion = $moduleRepository->getModuleDatabaseVersion($this->module->name); - $needsUpgrade = Tools::version_compare($this->module->version, $moduleDatabaseVersion, '>'); - if ($needsUpgrade) { - $this->context->controller->errors[] = $this->module->l('Please upgrade Mollie module'); + $this->checkPrestaShopDependenciesHealth(); + $this->setEnvironmentForAccounts(); + $this->setEnvironmentForCloudSync(); - return; - } + $this->content .= $this->context->smarty->fetch($this->module->getLocalPath() . '/views/templates/admin/_configure/configuration.tpl'); - $isShopContext = Shop::getContext() === Shop::CONTEXT_SHOP; + $this->content .= $this->displayModuleSettings(); - if (!$isShopContext) { - $this->context->controller->errors[] = $this->module->l('Select the shop that you want to configure'); + $this->addJs($this->module->getPathUri() . '/views/js/admin/_configure/configuration.js'); - return; - } + parent::initContent(); + } + + public function postProcess() + { + /** @var ConfigurationAdapter $configuration */ + $configuration = $this->module->getService(ConfigurationAdapter::class); - /** @var \Mollie\Service\Content\TemplateParserInterface $templateParser */ - $templateParser = $this->module->getService(\Mollie\Service\Content\TemplateParserInterface::class); + /** @var ToolsAdapter $tools */ + $tools = $this->module->getService(ToolsAdapter::class); - $isSubmitted = (bool) Tools::isSubmit("submit{$this->module->name}"); + $isSubmitted = $tools->isSubmit("submit{$this->module->name}"); /* @phpstan-ignore-next-line */ - if (false === Configuration::get(Mollie\Config\Config::MOLLIE_STATUS_AWAITING) && !$isSubmitted) { + if (!$isSubmitted && !$configuration->get(Config::MOLLIE_STATUS_AWAITING)) { $this->context->controller->errors[] = $this->module->l('Select an order status for \"Status for Awaiting payments\" in the \"Advanced settings\" tab'); } $errors = []; - if (Tools::isSubmit("submit{$this->module->name}")) { - /** @var \Mollie\Service\SettingsSaveService $saveSettingsService */ - $saveSettingsService = $this->module->getService(\Mollie\Service\SettingsSaveService::class); + if ($tools->isSubmit("submit{$this->module->name}")) { + /** @var SettingsSaveService $saveSettingsService */ + $saveSettingsService = $this->module->getService(SettingsSaveService::class); + $resultMessages = $saveSettingsService->saveSettings($errors); + if (!empty($errors)) { - $this->context->controller->errors = $resultMessages; + $this->context->controller->errors = array_merge( + $this->context->controller->errors, + $resultMessages + ); } else { - $this->context->controller->confirmations = $resultMessages; + $this->context->controller->confirmations = array_merge( + $this->context->controller->confirmations, + $resultMessages + ); } } + } + + private function displayModuleSettings(): string + { + /** @var ModuleRepository $moduleRepository */ + $moduleRepository = $this->module->getService(ModuleRepository::class); + + $moduleDatabaseVersion = $moduleRepository->getModuleDatabaseVersion($this->module->name); + $needsUpgrade = Tools::version_compare($this->module->version, $moduleDatabaseVersion, '>'); + + if ($needsUpgrade) { + $this->context->controller->errors[] = $this->module->l('Please upgrade Mollie module'); + + return ''; + } + + if (\Shop::getContext() !== \Shop::CONTEXT_SHOP) { + $this->context->controller->errors[] = $this->module->l('Select the shop that you want to configure'); + + return ''; + } Media::addJsDef([ 'description_message' => addslashes($this->module->l('Enter a description')), @@ -85,6 +131,9 @@ public function postProcess() 'not_valid_file_message' => addslashes($this->module->l('Invalid file: %s%')), ]); + /** @var TemplateParserInterface $templateParser */ + $templateParser = $this->module->getService(TemplateParserInterface::class); + $this->context->controller->addJS($this->module->getPathUri() . 'views/js/method_countries.js'); $this->context->controller->addJS($this->module->getPathUri() . 'views/js/validation.js'); $this->context->controller->addJS($this->module->getPathUri() . 'views/js/admin/settings.js'); @@ -101,8 +150,9 @@ public function postProcess() $this->module->getLocalPath() . 'views/templates/admin/logo.tpl' ); - /** @var \Mollie\Builder\Content\UpdateMessageInfoBlock $updateMessageInfoBlock */ - $updateMessageInfoBlock = $this->module->getService(\Mollie\Builder\Content\UpdateMessageInfoBlock::class); + /** @var UpdateMessageInfoBlock $updateMessageInfoBlock */ + $updateMessageInfoBlock = $this->module->getService(UpdateMessageInfoBlock::class); + $updateMessageInfoBlockData = $updateMessageInfoBlock->setAddons(false); $html .= $templateParser->parseTemplate( @@ -111,8 +161,9 @@ public function postProcess() $this->module->getLocalPath() . 'views/templates/admin/updateMessage.tpl' ); - /** @var \Mollie\Builder\Content\BaseInfoBlock $baseInfoBlock */ - $baseInfoBlock = $this->module->getService(\Mollie\Builder\Content\BaseInfoBlock::class); + /** @var BaseInfoBlock $baseInfoBlock */ + $baseInfoBlock = $this->module->getService(BaseInfoBlock::class); + $this->context->smarty->assign($baseInfoBlock->buildParams()); /** @var \Mollie\Builder\FormBuilder $settingsFormBuilder */ @@ -126,6 +177,131 @@ public function postProcess() $this->context->controller->errors[] = $this->module->l('The database tables are missing. Reset the module.'); } - $this->content .= $html; + return $html; + } + + private function setEnvironmentForAccounts(): void + { + /** @var PrestaLoggerInterface $logger */ + $logger = $this->module->getService(PrestaLoggerInterface::class); + + try { + /** @var PsAccounts $accountsFacade */ + $accountsFacade = $this->module->getService(PsAccounts::class); + + $psAccountsPresenter = $accountsFacade->getPsAccountsPresenter(); + $psAccountsService = $accountsFacade->getPsAccountsService(); + } catch (ModuleNotInstalledException $exception) { + $logger->error('PrestaShop Accounts is not installed', [ + 'Exception message' => $exception->getMessage(), + 'Exception code' => $exception->getCode(), + ]); + + $this->context->controller->errors[] = + $this->module->l('PrestaShop Accounts is not installed. Please contact support.', self::FILE_NAME); + + return; + } catch (\Throwable $exception) { + $logger->error('PrestaShop Accounts unknown error.', [ + 'Exception message' => $exception->getMessage(), + 'Exception code' => $exception->getCode(), + ]); + + $this->context->controller->errors[] = + $this->module->l('PrestaShop Accounts initialization failed. Please contact support.', self::FILE_NAME); + + return; + } + + try { + Media::addJsDef([ + 'contextPsAccounts' => $psAccountsPresenter->present(), + ]); + } catch (\Throwable $exception) { + $logger->error('PrestaShop Accounts presenter unknown error.', [ + 'Exception message' => $exception->getMessage(), + 'Exception code' => $exception->getCode(), + ]); + + $this->context->controller->errors[] = + $this->module->l('PrestaShop Accounts presenter error. Please contact support.', self::FILE_NAME); + + return; + } + + $this->context->smarty->assign([ + 'urlAccountsCdn' => $psAccountsService->getAccountsCdn(), + ]); + } + + private function setEnvironmentForCloudSync(): void + { + /** @var PrestaLoggerInterface $logger */ + $logger = $this->module->getService(PrestaLoggerInterface::class); + + $moduleManager = ModuleManagerBuilder::getInstance(); + + if (!$moduleManager) { + $this->context->controller->errors[] = + $this->module->l('Failed to get module manager builder instance.', self::FILE_NAME); + } + + $moduleManager = $moduleManager->build(); + + /** @var \Ps_eventbus $eventbusModule */ + $eventbusModule = \Module::getInstanceByName('ps_eventbus'); + + if (!version_compare($eventbusModule->version, '1.9.0', '>=')) { + try { + $moduleManager->install('ps_eventbus'); + } catch (\Throwable $exception) { + $logger->error('Failed to upgrade PrestaShop Event Bus.', [ + 'Exception message' => $exception->getMessage(), + 'Exception code' => $exception->getCode(), + ]); + + $this->context->controller->errors[] = + $this->module->l('Failed to upgrade PrestaShop Event Bus. Please contact support.', self::FILE_NAME); + + return; + } + } + + /** @var PresenterService $eventbusPresenterService */ + $eventbusPresenterService = $eventbusModule->getService(PresenterService::class); + + Media::addJsDef([ + 'contextPsEventbus' => $eventbusPresenterService->expose($this->module, ['orders']), + ]); + + $this->context->smarty->assign([ + 'cloudSyncPathCDC' => Config::PRESTASHOP_CLOUDSYNC_CDN, + ]); + } + + private function checkPrestaShopDependenciesHealth(): void + { + /** @var PrestaShopDependenciesInstall $prestaShopDependenciesInstaller */ + $prestaShopDependenciesInstaller = $this->module->getService(PrestaShopDependenciesInstall::class); + + /** @var PrestaLoggerInterface $logger */ + $logger = $this->module->getService(PrestaLoggerInterface::class); + + try { + /* + * TODO if eventbus is installed in current page load context, error still will be thrown "install eventbus". + * After refresh everything is working, but it could be annoying to some merchants. + * Not critical error, but improvement would be nice. + */ + $prestaShopDependenciesInstaller->install(); + } catch (\Throwable $exception) { + $logger->error('Failed to install PrestaShop dependencies', [ + 'Exception message' => $exception->getMessage(), + 'Exception code' => $exception->getCode(), + ]); + + $this->context->controller->errors[] = + $this->module->l('Failed to install PrestaShop dependencies. Please contact support.', self::FILE_NAME); + } } } diff --git a/mollie.php b/mollie.php index b6d1d4900..22357143d 100755 --- a/mollie.php +++ b/mollie.php @@ -20,6 +20,7 @@ use Mollie\Exception\ShipmentCannotBeSentException; use Mollie\Handler\ErrorHandler\ErrorHandler; use Mollie\Handler\Shipment\ShipmentSenderHandlerInterface; +use Mollie\Install\PrestaShopDependenciesInstall; use Mollie\Logger\PrestaLoggerInterface; use Mollie\Provider\ProfileIdProviderInterface; use Mollie\Repository\MolOrderPaymentFeeRepositoryInterface; @@ -168,6 +169,25 @@ public function install() return false; } + /** @var PrestaShopDependenciesInstall $prestaShopDependenciesInstaller */ + $prestaShopDependenciesInstaller = $this->getService(PrestaShopDependenciesInstall::class); + + /** @var PrestaLoggerInterface $logger */ + $logger = $this->getService(PrestaLoggerInterface::class); + + try { + $prestaShopDependenciesInstaller->install(); + } catch (\Throwable $exception) { + $logger->error('Failed to install PrestaShop dependencies', [ + 'Exception message' => $exception->getMessage(), + 'Exception code' => $exception->getCode(), + ]); + + $this->_errors[] = $this->l('Failed to install PrestaShop dependencies. Please contact support.'); + + return false; + } + // TODO inject base install and subscription services $coreInstaller = $this->getService(Mollie\Install\Installer::class); diff --git a/src/Config/Config.php b/src/Config/Config.php index 2ce23d4e1..f18650a50 100644 --- a/src/Config/Config.php +++ b/src/Config/Config.php @@ -18,6 +18,7 @@ use Mollie\Api\Types\PaymentStatus; use Mollie\Api\Types\RefundStatus; use Mollie\Utility\EnvironmentUtility; +use Mollie\Utility\PsVersionUtility; if (!defined('_PS_VERSION_')) { exit; @@ -318,6 +319,18 @@ class Config const MOLLIE_BUTTON_ORDER_TOTAL_REFRESH = 'MOLLIE_BUTTON_ORDER_TOTAL_REFRESH'; + public const PRESTASHOP_ACCOUNTS_INSTALLER_VERSION = '5.0.0'; + public const PRESTASHOP_CLOUDSYNC_CDN = 'https://assets.prestashop3.com/ext/cloudsync-merchant-sync-consent/latest/cloudsync-cdc.js'; + + public static function getPsAccountsVersion(): string + { + if (PsVersionUtility::isPsVersionGreaterOrEqualTo(_PS_VERSION_, '8.0.0')) { + return '6.0.0'; + } + + return '5.0.0'; + } + // TODO migrate functions below to separate service public static function getStatuses() { diff --git a/src/Exception/Code/ExceptionCode.php b/src/Exception/Code/ExceptionCode.php index 133a43ff1..492793654 100644 --- a/src/Exception/Code/ExceptionCode.php +++ b/src/Exception/Code/ExceptionCode.php @@ -25,6 +25,11 @@ class ExceptionCode public const INFRASTRUCTURE_LOCK_EXISTS = 1003; public const INFRASTRUCTURE_LOCK_ON_ACQUIRE_IS_MISSING = 1004; public const INFRASTRUCTURE_LOCK_ON_RELEASE_IS_MISSING = 1005; + public const INFRASTRUCTURE_FAILED_TO_INSTALL_MBO_INSTALLER = 1006; + public const INFRASTRUCTURE_FAILED_TO_INSTALL_DEPENDENCIES = 1007; + public const INFRASTRUCTURE_FAILED_TO_RETRIEVE_MODULE_MANAGER_BUILDER = 1008; + public const INFRASTRUCTURE_FAILED_TO_INSTALL_PRESTASHOP_ACCOUNTS = 1009; + public const INFRASTRUCTURE_FAILED_TO_INSTALL_PRESTASHOP_EVENT_BUS = 1010; public const FAILED_TO_FIND_CUSTOMER_ADDRESS = 2001; diff --git a/src/Exception/CouldNotInstallPrestaShopDependencies.php b/src/Exception/CouldNotInstallPrestaShopDependencies.php new file mode 100644 index 000000000..9e1c696f1 --- /dev/null +++ b/src/Exception/CouldNotInstallPrestaShopDependencies.php @@ -0,0 +1,49 @@ +getCommands(); diff --git a/src/Install/Installer.php b/src/Install/Installer.php index 49fabbf5d..43091bc88 100644 --- a/src/Install/Installer.php +++ b/src/Install/Installer.php @@ -81,7 +81,7 @@ public function __construct( $this->orderStateInstaller = $orderStateInstaller; } - public function install() + public function install(): bool { $this->segment->setMessage('Mollie installed'); $this->segment->track(); diff --git a/src/Install/InstallerInterface.php b/src/Install/InstallerInterface.php index 1d773e9ff..e2afd5fde 100644 --- a/src/Install/InstallerInterface.php +++ b/src/Install/InstallerInterface.php @@ -18,8 +18,5 @@ interface InstallerInterface { - /** - * @return bool - */ - public function install(); + public function install(): bool; } diff --git a/src/Install/PrestaShopDependenciesInstall.php b/src/Install/PrestaShopDependenciesInstall.php new file mode 100644 index 000000000..0cd266d76 --- /dev/null +++ b/src/Install/PrestaShopDependenciesInstall.php @@ -0,0 +1,93 @@ +module = $moduleFactory->getModule(); + } + + /** + * @throws CouldNotInstallPrestaShopDependencies + */ + public function install(): bool + { + $mboStatus = (new Presenter())->present(); + + if (!$mboStatus['isInstalled']) { + $mboInstaller = new Installer(_PS_VERSION_); + + if (!$mboInstaller->installModule()) { + throw CouldNotInstallPrestaShopDependencies::failedToInstallMboInstaller(); + } + } + + try { + $this->installDependencies(); + } catch (\Throwable $exception) { + throw CouldNotInstallPrestaShopDependencies::failedToInstallDependencies($exception); + } + + return true; + } + + /** + * Install PrestaShop Integration Framework Components + * + * @throws \Throwable + */ + private function installDependencies(): void + { + $moduleManager = ModuleManagerBuilder::getInstance(); + + if (!$moduleManager) { + throw CouldNotInstallPrestaShopDependencies::failedToRetrieveModuleManagerBuilder(); + } + + $moduleManager = $moduleManager->build(); + + /** @var PsAccountsInstaller $prestashopAccountsInstaller */ + $prestashopAccountsInstaller = $this->module->getService(PsAccountsInstaller::class); + + /* + * NOTE: install method upgrades the module if there is a newer version + */ + if ( + $moduleManager->isInstalled('ps_accounts') && + !$moduleManager->isEnabled('ps_accounts') + ) { + $moduleManager->enable('ps_accounts'); + } + + if (!$prestashopAccountsInstaller->install()) { + throw CouldNotInstallPrestaShopDependencies::failedToInstallPrestaShopAccounts(); + } + + /* + * NOTE: install method upgrades the module if there is a newer version + */ + if ( + $moduleManager->isInstalled('ps_eventbus') && + !$moduleManager->isEnabled('ps_eventbus') + ) { + $moduleManager->enable('ps_eventbus'); + } + + if (!$moduleManager->install('ps_eventbus')) { + throw CouldNotInstallPrestaShopDependencies::failedToInstallPrestaShopEventBus(); + } + } +} diff --git a/src/ServiceProvider/BaseServiceProvider.php b/src/ServiceProvider/BaseServiceProvider.php index c36483ae9..d351b2cda 100644 --- a/src/ServiceProvider/BaseServiceProvider.php +++ b/src/ServiceProvider/BaseServiceProvider.php @@ -17,6 +17,7 @@ use League\Container\Container; use Mollie; use Mollie\Builder\ApiTestFeedbackBuilder; +use Mollie\Config\Config; use Mollie\Factory\ModuleFactory; use Mollie\Handler\Api\OrderEndpointPaymentTypeHandler; use Mollie\Handler\Api\OrderEndpointPaymentTypeHandlerInterface; @@ -127,6 +128,8 @@ use Mollie\Verification\Shipment\CanSendShipment; use Mollie\Verification\Shipment\ShipmentVerificationInterface; use PrestaShop\PrestaShop\Core\Grid\Action\Row\AccessibilityChecker\AccessibilityCheckerInterface; +use PrestaShop\PsAccountsInstaller\Installer\Facade\PsAccounts; +use PrestaShop\PsAccountsInstaller\Installer\Installer as PsAccountsInstaller; if (!defined('_PS_VERSION_')) { exit; @@ -250,6 +253,12 @@ public function register(Container $container) $this->addService($container, ApiTestFeedbackBuilder::class, ApiTestFeedbackBuilder::class) ->withArgument($container->get(ModuleFactory::class)->getModuleVersion() ?? '') ->withArgument(ApiKeyService::class); + + $this->addService($container, PsAccountsInstaller::class, PsAccountsInstaller::class) + ->withArgument(Config::getPsAccountsVersion()); + + $this->addService($container, PsAccounts::class, PsAccounts::class) + ->withArgument(PsAccountsInstaller::class); } private function addService(Container $container, $className, $service) diff --git a/tests/phpstan/phpstan_base.neon b/tests/phpstan/phpstan_base.neon index bde2361d4..9b6453198 100644 --- a/tests/phpstan/phpstan_base.neon +++ b/tests/phpstan/phpstan_base.neon @@ -42,5 +42,8 @@ parameters: - '#Parameter \#1 \$value of method ControllerCore\:\:ajaxRender\(\) expects null, string\|false given.#' - '#Call to function is_subclass_of\(\) with.*will always evaluate to false.#' - '#Call to function is_array\(\) with.*will always evaluate to false.#' + - '#ps_eventbus#' + - '#Ps_eventbus#' + - '#PsEventbus#' level: 5 diff --git a/upgrade/Upgrade-6.0.5.php b/upgrade/Upgrade-6.0.5.php new file mode 100644 index 000000000..1858c4968 --- /dev/null +++ b/upgrade/Upgrade-6.0.5.php @@ -0,0 +1,79 @@ + + * @copyright Mollie B.V. + * @license https://github.com/mollie/PrestaShop/blob/master/LICENSE.md + * + * @see https://github.com/mollie/PrestaShop + */ + +use Mollie\Logger\PrestaLoggerInterface; +use PrestaShop\PrestaShop\Core\Addon\Module\ModuleManagerBuilder; +use PrestaShop\PsAccountsInstaller\Installer\Installer as PsAccountsInstaller; + +if (!defined('_PS_VERSION_')) { + exit; +} + +function upgrade_module_6_0_5(Mollie $module): bool +{ + return installPsAccounts605($module) + && installCloudSync605($module); +} + +function installPsAccounts605(Mollie $module): bool +{ + /** @var PrestaLoggerInterface $logger */ + $logger = $module->getService(PrestaLoggerInterface::class); + + try { + /** @var PsAccountsInstaller $prestashopAccountsInstaller */ + $prestashopAccountsInstaller = $module->getService(PsAccountsInstaller::class); + + if (!$prestashopAccountsInstaller->install()) { + $logger->error('Failed to install Prestashop Accounts module. Please contact support.'); + + return false; + } + } catch (\Throwable $exception) { + $logger->error('Failed to install Prestashop Accounts module. Please contact support.', [ + 'Exception message' => $exception->getMessage(), + 'Exception code' => $exception->getCode(), + ]); + + return false; + } + + return true; +} + +function installCloudSync605(Mollie $module): bool +{ + /** @var PrestaLoggerInterface $logger */ + $logger = $module->getService(PrestaLoggerInterface::class); + + $moduleManager = ModuleManagerBuilder::getInstance()->build(); + + try { + if ( + $moduleManager->isInstalled('ps_eventbus') && + !$moduleManager->isEnabled('ps_eventbus') + ) { + $moduleManager->enable('ps_eventbus'); + } + + $moduleManager->install('ps_eventbus'); + } catch (Exception $exception) { + $logger->error('Failed to install/upgrade Prestashop event bus module. Please contact support.', [ + 'Exception message' => $exception->getMessage(), + 'Exception code' => $exception->getCode(), + ]); + + return false; + } + + return true; +} diff --git a/views/css/admin/logo_input.css b/views/css/admin/logo_input.css index 96c64bf7c..a185c69f5 100644 --- a/views/css/admin/logo_input.css +++ b/views/css/admin/logo_input.css @@ -1,3 +1,16 @@ +.header-logo { + width: 263px; + align-content: center; + text-align: left; + padding: 20px 0; +} + +.header-logo img { + max-width:100%; + height:auto; + margin: 0 auto; +} + .mollie-input-file { width: 0.1px; height: 0.1px; diff --git a/views/js/admin/_configure/configuration.js b/views/js/admin/_configure/configuration.js new file mode 100644 index 000000000..04bf48f4b --- /dev/null +++ b/views/js/admin/_configure/configuration.js @@ -0,0 +1,13 @@ +$(document).ready(function () { + window?.psaccountsVue?.init(); + // CloudSync + const cdc = window.cloudSyncSharingConsent; + + cdc.init('#prestashop-cloudsync'); + cdc.on('OnboardingCompleted', (isCompleted) => { + console.log('OnboardingCompleted', isCompleted); + }); + cdc.isOnboardingCompleted((isCompleted) => { + console.log('Onboarding is already Completed', isCompleted); + }); +}); diff --git a/views/templates/admin/_configure/configuration.tpl b/views/templates/admin/_configure/configuration.tpl new file mode 100644 index 000000000..1aef4597b --- /dev/null +++ b/views/templates/admin/_configure/configuration.tpl @@ -0,0 +1,15 @@ +
+ +
+ +
+
+
+ +{if isset($cloudSyncPathCDC)} + +{/if} + +{if isset($urlAccountsCdn)} + +{/if}