/** * Prepares and render result of composite product configuration request * * The $configureResult variable holds either: * - 'ok' = true, and 'product_id', 'buy_request', 'current_store_id', 'current_customer_id' * - 'error' = true, and 'message' to show * * @param \Magento\Framework\Object $configureResult * @return void */ public function renderConfigureResult(\Magento\Framework\Object $configureResult) { try { if (!$configureResult->getOk()) { throw new \Magento\Framework\Model\Exception($configureResult->getMessage()); } $currentStoreId = (int) $configureResult->getCurrentStoreId(); if (!$currentStoreId) { $currentStoreId = $this->_storeManager->getStore()->getId(); } $product = $this->_productFactory->create()->setStoreId($currentStoreId)->load($configureResult->getProductId()); if (!$product->getId()) { throw new \Magento\Framework\Model\Exception(__('The product is not loaded.')); } $this->_coreRegistry->register('current_product', $product); $this->_coreRegistry->register('product', $product); // Register customer we're working with $customerId = (int) $configureResult->getCurrentCustomerId(); // TODO: Remove the customer model from the registry once all readers are refactored $customerModel = $this->_converter->loadCustomerModel($customerId); $this->_coreRegistry->register(RegistryConstants::CURRENT_CUSTOMER, $customerModel); $this->_coreRegistry->register(RegistryConstants::CURRENT_CUSTOMER_ID, $customerId); // Prepare buy request values $buyRequest = $configureResult->getBuyRequest(); if ($buyRequest) { $this->_catalogProduct->prepareProductOptions($product, $buyRequest); } $isOk = true; $productType = $product->getTypeId(); } catch (\Exception $e) { $isOk = false; $productType = null; $this->_coreRegistry->register('composite_configure_result_error_message', $e->getMessage()); } $this->_initConfigureResultLayout($isOk, $productType); $this->_view->renderLayout(); }