Skip to content

Commit

Permalink
Revert "PIPRES-342: Cloudsync connect"
Browse files Browse the repository at this point in the history
  • Loading branch information
JevgenijVisockij authored Feb 20, 2024
1 parent 40d4104 commit 49896c8
Show file tree
Hide file tree
Showing 16 changed files with 37 additions and 524 deletions.
8 changes: 3 additions & 5 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -15,9 +15,7 @@
"webmozart/assert": "^1.11",
"symfony/http-client": "^4.4",
"http-interop/http-factory-guzzle": "^1.1",
"php-http/message-factory": "^1.1",
"prestashop/prestashop-accounts-installer": "^1.0.4",
"prestashop/module-lib-mbo-installer": "^2.0"
"php-http/message-factory": "^1.1"
},
"require-dev": {
"roave/security-advisories": "dev-latest",
Expand All @@ -43,11 +41,11 @@
},
"config": {
"platform": {
"php": "7.2.5"
"php": "7.2"
},
"prepend-autoloader": false,
"allow-plugins": {
"php-http/discovery": false
"php-http/discovery": true
}
},
"type": "prestashop-module",
Expand Down
232 changes: 28 additions & 204 deletions controllers/admin/AdminMollieSettingsController.php
Original file line number Diff line number Diff line change
Expand Up @@ -16,25 +16,8 @@
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;

Expand All @@ -44,77 +27,48 @@ public function __construct()
$this->bootstrap = true;
}

public function initContent(): void
public function postProcess()
{
$this->checkPrestaShopDependenciesHealth();
$this->setEnvironmentForAccounts();
$this->setEnvironmentForCloudSync();

$this->content .= $this->context->smarty->fetch($this->module->getLocalPath() . '/views/templates/admin/_configure/configuration.tpl');
/** @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->content .= $this->displayModuleSettings();
return;
}

$this->addJs($this->module->getPathUri() . '/views/js/admin/_configure/configuration.js');
$isShopContext = Shop::getContext() === Shop::CONTEXT_SHOP;

parent::initContent();
}
if (!$isShopContext) {
$this->context->controller->errors[] = $this->module->l('Select the shop that you want to configure');

public function postProcess()
{
/** @var ConfigurationAdapter $configuration */
$configuration = $this->module->getService(ConfigurationAdapter::class);
return;
}

/** @var ToolsAdapter $tools */
$tools = $this->module->getService(ToolsAdapter::class);
/** @var \Mollie\Service\Content\TemplateParserInterface $templateParser */
$templateParser = $this->module->getService(\Mollie\Service\Content\TemplateParserInterface::class);

$isSubmitted = $tools->isSubmit("submit{$this->module->name}");
$isSubmitted = (bool) Tools::isSubmit("submit{$this->module->name}");

/* @phpstan-ignore-next-line */
if (!$isSubmitted && !$configuration->get(Config::MOLLIE_STATUS_AWAITING)) {
if (false === Configuration::get(Mollie\Config\Config::MOLLIE_STATUS_AWAITING) && !$isSubmitted) {
$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 SettingsSaveService $saveSettingsService */
$saveSettingsService = $this->module->getService(SettingsSaveService::class);

if (Tools::isSubmit("submit{$this->module->name}")) {
/** @var \Mollie\Service\SettingsSaveService $saveSettingsService */
$saveSettingsService = $this->module->getService(\Mollie\Service\SettingsSaveService::class);
$resultMessages = $saveSettingsService->saveSettings($errors);

if (!empty($errors)) {
$this->context->controller->errors = array_merge(
$this->context->controller->errors,
$resultMessages
);
$this->context->controller->errors = $resultMessages;
} else {
$this->context->controller->confirmations = array_merge(
$this->context->controller->confirmations,
$resultMessages
);
$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')),
Expand All @@ -131,9 +85,6 @@ private function displayModuleSettings(): string
'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');
Expand All @@ -150,9 +101,8 @@ private function displayModuleSettings(): string
$this->module->getLocalPath() . 'views/templates/admin/logo.tpl'
);

/** @var UpdateMessageInfoBlock $updateMessageInfoBlock */
$updateMessageInfoBlock = $this->module->getService(UpdateMessageInfoBlock::class);

/** @var \Mollie\Builder\Content\UpdateMessageInfoBlock $updateMessageInfoBlock */
$updateMessageInfoBlock = $this->module->getService(\Mollie\Builder\Content\UpdateMessageInfoBlock::class);
$updateMessageInfoBlockData = $updateMessageInfoBlock->setAddons(false);

$html .= $templateParser->parseTemplate(
Expand All @@ -161,9 +111,8 @@ private function displayModuleSettings(): string
$this->module->getLocalPath() . 'views/templates/admin/updateMessage.tpl'
);

/** @var BaseInfoBlock $baseInfoBlock */
$baseInfoBlock = $this->module->getService(BaseInfoBlock::class);

/** @var \Mollie\Builder\Content\BaseInfoBlock $baseInfoBlock */
$baseInfoBlock = $this->module->getService(\Mollie\Builder\Content\BaseInfoBlock::class);
$this->context->smarty->assign($baseInfoBlock->buildParams());

/** @var \Mollie\Builder\FormBuilder $settingsFormBuilder */
Expand All @@ -177,131 +126,6 @@ private function displayModuleSettings(): string
$this->context->controller->errors[] = $this->module->l('The database tables are missing. Reset the module.');
}

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);
}
$this->content .= $html;
}
}
20 changes: 0 additions & 20 deletions mollie.php
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,6 @@
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;
Expand Down Expand Up @@ -169,25 +168,6 @@ 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);

Expand Down
13 changes: 0 additions & 13 deletions src/Config/Config.php
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,6 @@
use Mollie\Api\Types\PaymentStatus;
use Mollie\Api\Types\RefundStatus;
use Mollie\Utility\EnvironmentUtility;
use Mollie\Utility\PsVersionUtility;

if (!defined('_PS_VERSION_')) {
exit;
Expand Down Expand Up @@ -319,18 +318,6 @@ 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()
{
Expand Down
5 changes: 0 additions & 5 deletions src/Exception/Code/ExceptionCode.php
Original file line number Diff line number Diff line change
Expand Up @@ -25,11 +25,6 @@ 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;

Expand Down
Loading

0 comments on commit 49896c8

Please sign in to comment.