db = $db; $this->module = $module; } public function upgrade(): bool { CacheClearer::getInstance()->clear(); return $this->registerHooks() && $this->updateAvailablePaymentOptionsConfig() && $this->removeStaleAssets([ 'js/prestashopizi.js', ]); } private function registerHooks(): bool { $productCardHook = $this->getDefaultProductCardHook(); if (!Configuration::updateGlobalValue('INPOST_PAY_PRODUCT_CARD_DISPLAY_HOOK', $productCardHook)) { return false; } return $this->module->unregisterHook('actionCartSave') && $this->module->registerHook($this->getHooksToInstall()); } private function getDefaultProductCardHook(): string { if ( DisplayProductActions::getVersionRange()->contains(_PS_VERSION_) && !$this->module->isRegisteredInHook(DisplayProductAdditionalInfo::HOOK_NAME) ) { return DisplayProductActions::HOOK_NAME; } return DisplayProductAdditionalInfo::HOOK_NAME; } private function updateAvailablePaymentOptionsConfig(): bool { $map = [ 'INPOST_PAY_payment_inpost' => [PaymentType::CashOnDelivery()], 'INPOST_PAY_payment_aion' => [ PaymentType::Card(), PaymentType::CardToken(), PaymentType::GooglePay(), PaymentType::ApplePay(), PaymentType::BlikCode(), PaymentType::BlikToken(), PaymentType::PayByLink(), PaymentType::ShoppingLimit(), ], ]; $configs = $this->getAvailablePaymentOptionsConfigs($map); return $this->setJsonConfigValues('INPOST_PAY_AVAILABLE_PAYMENT_OPTIONS', $configs) && $this->deleteConfigurationByKeys(array_keys($map)); } private function getAvailablePaymentOptionsConfigs(array $map): array { if ([] === $data = $this->getConfigDataByKeys(array_keys($map))) { return []; } $paymentOptions = []; $dataByShopGroup = $this->groupConfigValuesByShop($data); foreach ($dataByShopGroup as $shopGroupId => $dataByShop) { foreach ($dataByShop as $shopId => $data) { if ([] === $data = array_filter($data)) { continue; } $types = []; foreach ($data as $key => $ignored) { $types[] = $map[$key]; } $paymentOptions[$shopGroupId][$shopId] = array_merge(...$types); } } return $paymentOptions; } private function getHooksToInstall(): array { $hooks = [ DisplayCustomerLoginFormAfter::HOOK_NAME, DisplayCustomerAccountFormTop::HOOK_NAME, DisplayCheckoutSummaryTop::HOOK_NAME, DisplayIziCartPreviewButton::HOOK_NAME, DisplayIziCheckoutButton::HOOK_NAME, ActionCartUpdateAfter::HOOK_NAME, ActionOrderStatusPostUpdate::HOOK_NAME, ]; if (DisplayAdminOrderLeft::getVersionRange()->contains(_PS_VERSION_)) { $hooks[] = DisplayAdminOrderLeft::HOOK_NAME; } return $hooks; } } /** * @param InPostIzi $module */ function upgrade_module_1_6_0(Module $module): bool { return (new InPostIziUpdater_1_6_0(Db::getInstance(), $module))->upgrade(); }