/** * Prepare product to save * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $product * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $product) { if ($downloadable = $this->request->getPost('downloadable')) { $product->setDownloadableData($downloadable); } return $product; }
/** * Setting Bundle Items Data to product for further processing * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $product * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $product) { $compositeReadonly = $product->getCompositeReadonly(); $result['bundle_selections'] = $result['bundle_options'] = []; if (isset($this->request->getPost('bundle_options')['bundle_options'])) { foreach ($this->request->getPost('bundle_options')['bundle_options'] as $key => $option) { if (empty($option['bundle_selections'])) { continue; } $result['bundle_selections'][$key] = $option['bundle_selections']; unset($option['bundle_selections']); $result['bundle_options'][$key] = $option; } if ($result['bundle_selections'] && !$compositeReadonly) { $product->setBundleSelectionsData($result['bundle_selections']); } if ($result['bundle_options'] && !$compositeReadonly) { $product->setBundleOptionsData($result['bundle_options']); } $this->processBundleOptionsData($product); $this->processDynamicOptionsData($product); } $affectProductSelections = (bool) $this->request->getPost('affect_bundle_product_selections'); $product->setCanSaveBundleSelections($affectProductSelections && !$compositeReadonly); return $product; }
/** * Initialize product before saving * * @param \Magento\Catalog\Model\Product $product * @return \Magento\Catalog\Model\Product */ public function initialize(\Magento\Catalog\Model\Product $product) { $productData = $this->request->getPost('product'); if ($productData) { $stockData = isset($productData['stock_data']) ? $productData['stock_data'] : array(); $productData['stock_data'] = $this->stockFilter->filter($stockData); } foreach (array('category_ids', 'website_ids') as $field) { if (!isset($productData[$field])) { $productData[$field] = array(); } } $wasLockedMedia = false; if ($product->isLockedAttribute('media')) { $product->unlockAttribute('media'); $wasLockedMedia = true; } $product->addData($productData); if ($wasLockedMedia) { $product->lockAttribute('media'); } if ($this->storeManager->hasSingleStore()) { $product->setWebsiteIds(array($this->storeManager->getStore(true)->getWebsite()->getId())); } /** * Create Permanent Redirect for old URL key */ if ($product->getId() && isset($productData['url_key_create_redirect'])) { $product->setData('save_rewrites_history', (bool) $productData['url_key_create_redirect']); } /** * Check "Use Default Value" checkboxes values */ $useDefaults = $this->request->getPost('use_default'); if ($useDefaults) { foreach ($useDefaults as $attributeCode) { $product->setData($attributeCode, false); } } $links = $this->request->getPost('links'); $links = is_array($links) ? $links : array(); $linkTypes = array('related', 'upsell', 'crosssell'); foreach ($linkTypes as $type) { if (isset($links[$type])) { $links[$type] = $this->jsHelper->decodeGridSerializedInput($links[$type]); } } $product = $this->productLinks->initializeLinks($product, $links); /** * Initialize product options */ if (isset($productData['options']) && !$product->getOptionsReadonly()) { // mark custom options that should to fall back to default value $options = $this->mergeProductOptions($productData['options'], $this->request->getPost('options_use_default')); $product->setProductOptions($options); } $product->setCanSaveCustomOptions((bool) $this->request->getPost('affect_product_custom_options') && !$product->getOptionsReadonly()); return $product; }
/** * Change product type to downloadable if needed * * @param \Magento\Catalog\Model\Product\TypeTransitionManager $subject * @param Closure $proceed * @param \Magento\Catalog\Model\Product $product * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundProcessProduct(\Magento\Catalog\Model\Product\TypeTransitionManager $subject, Closure $proceed, \Magento\Catalog\Model\Product $product) { $isTypeCompatible = in_array($product->getTypeId(), array(\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE, \Magento\Catalog\Model\Product\Type::TYPE_VIRTUAL, \Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE)); $hasDownloadableData = $this->request->getPost('downloadable'); if ($isTypeCompatible && $hasDownloadableData && $product->hasIsVirtual()) { $product->setTypeId(\Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE); return; } $proceed($product); }
/** * Process massaction key * * @param \Magento\Backend\App\AbstractAction $subject * @param callable $proceed * @param \Magento\Framework\App\RequestInterface $request * * @return mixed * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundDispatch(\Magento\Backend\App\AbstractAction $subject, \Closure $proceed, \Magento\Framework\App\RequestInterface $request) { $key = $request->getPost('massaction_prepare_key'); if ($key) { $postData = $request->getPost($key); $value = is_array($postData) ? $postData : explode(',', $postData); $request->setPostValue($key, $value ? $value : null); } return $proceed($request); }
/** * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $result * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $result) { $productData = $this->request->getPost('product'); /** * Create Permanent Redirect for old URL key */ if ($result->getId() && isset($productData['url_key_create_redirect'])) { $result->setData('save_rewrites_history', (bool) $productData['url_key_create_redirect']); } return $result; }
public function execute(\Magento\Framework\Event\Observer $observer) { $productId = $this->request->getParam('id'); $links = $this->request->getPost('links'); $links = is_array($links) ? $links : []; if (isset($links['question'])) { $links['question'] = $this->jsHelper->decodeGridSerializedInput($links['question']); $idsCollection = $this->getIdsCollection(); $idsCollection->addFieldToFilter('product_id', $productId); $questionIds = array(); foreach ($idsCollection as $question) { $questionIds[] = $question->getQuestionId(); } //update question position foreach ($questionIds as $questionId) { if (isset($links['question'][$questionId])) { $idsCollection = $this->getIdsCollection(); $idsCollection->addFieldToFilter('question_id', $questionId); $idsCollection->addFieldToFilter('product_id', $productId); $item = $idsCollection->getFirstItem(); if ($item->getPosition() != $links['question'][$questionId]['position'] && !empty($links['question'][$questionId]['position'])) { $item->setPosition($links['question'][$questionId]['position']); $item->save(); } } } // save new checked questions and position $insert = array_diff(array_keys($links['question']), $questionIds); if (!empty($insert)) { foreach ($insert as $i) { $questionIdModel = $this->questionId->create(); $questionIdModel->setProductId((int) $productId); $questionIdModel->setQuestionId($i); $questionIdModel->setPosition($links['question'][$i]['position']); $questionIdModel->save(); } } //delete unchecked Questions $delete = array_diff($questionIds, array_keys($links['question'])); if (!empty($delete)) { $idsCollection = $this->getIdsCollection(); $idsCollection->addFieldToFilter('product_id', $productId); $idsCollection->addFieldToFilter('question_id', ['in' => $delete]); foreach ($idsCollection as $item) { $item->delete(); } } } }
/** * Setting Bundle Items Data to product for father processing * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $product * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $product) { $compositeReadonly = $product->getCompositeReadonly(); $selections = $this->request->getPost('bundle_selections'); if ($selections && !$compositeReadonly) { $product->setBundleSelectionsData($selections); } $items = $this->request->getPost('bundle_options'); if ($items && !$compositeReadonly) { $product->setBundleOptionsData($items); } $this->processBundleOptionsData($product); $this->processDynamicOptionsData($product); $affectProductSelections = (bool) $this->request->getPost('affect_bundle_product_selections'); $product->setCanSaveBundleSelections($affectProductSelections && !$compositeReadonly); return $product; }
/** * Relate simple products to configurable * * @param ProductInterface $product * @param ProductExtensionInterface $extensionAttributes * @return void * @throws \Magento\Framework\Exception\LocalizedException */ private function setLinkedProducts(ProductInterface $product, ProductExtensionInterface $extensionAttributes) { $associatedProductIds = $this->request->getPost('associated_product_ids', []); $variationsMatrix = $this->request->getParam('variations-matrix', []); if (!empty($variationsMatrix)) { $generatedProductIds = $this->variationHandler->generateSimpleProducts($product, $variationsMatrix); $associatedProductIds = array_merge($associatedProductIds, $generatedProductIds); } $extensionAttributes->setConfigurableProductLinks(array_filter($associatedProductIds)); }
/** * Initialize data for configurable product * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $product * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $product) { $attributes = $this->request->getParam('attributes'); if ($product->getTypeId() == ConfigurableProduct::TYPE_CODE && !empty($attributes)) { $setId = $this->request->getPost('new-variations-attribute-set-id'); $product->setAttributeSetId($setId); $this->productType->setUsedProductAttributeIds($attributes, $product); $product->setNewVariationsAttributeSetId($setId); $associatedProductIds = $this->request->getPost('associated_product_ids', []); $variationsMatrix = $this->request->getParam('variations-matrix', []); if (!empty($variationsMatrix)) { $generatedProductIds = $this->variationHandler->generateSimpleProducts($product, $variationsMatrix); $associatedProductIds = array_merge($associatedProductIds, $generatedProductIds); } $product->setAssociatedProductIds(array_filter($associatedProductIds)); $product->setCanSaveConfigurableAttributes((bool) $this->request->getPost('affect_configurable_product_attributes')); } return $product; }
/** * Setting Bundle Items Data to product for father processing * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $product * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @SuppressWarnings(PHPMD.CyclomaticComplexity) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $product) { if (($items = $this->request->getPost('bundle_options')) && !$product->getCompositeReadonly()) { $product->setBundleOptionsData($items); } if (($selections = $this->request->getPost('bundle_selections')) && !$product->getCompositeReadonly()) { $product->setBundleSelectionsData($selections); } if ($product->getPriceType() == '0' && !$product->getOptionsReadonly()) { $product->setCanSaveCustomOptions(true); if ($customOptions = $product->getProductOptions()) { foreach (array_keys($customOptions) as $key) { $customOptions[$key]['is_delete'] = 1; } $product->setProductOptions($customOptions); } } $product->setCanSaveBundleSelections((bool) $this->request->getPost('affect_bundle_product_selections') && !$product->getCompositeReadonly()); return $product; }
/** * Change product type to downloadable if needed * * @param \Magento\Catalog\Model\Product\TypeTransitionManager $subject * @param Closure $proceed * @param \Magento\Catalog\Model\Product $product * @return void * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function aroundProcessProduct(\Magento\Catalog\Model\Product\TypeTransitionManager $subject, Closure $proceed, \Magento\Catalog\Model\Product $product) { $isTypeCompatible = in_array($product->getTypeId(), [\Magento\Catalog\Model\Product\Type::TYPE_SIMPLE, \Magento\Catalog\Model\Product\Type::TYPE_VIRTUAL, \Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE]); $downloadableData = $this->request->getPost('downloadable'); $hasDownloadableData = false; if (isset($downloadableData)) { foreach ($downloadableData as $data) { foreach ($data as $rowData) { if (empty($rowData['is_delete'])) { $hasDownloadableData = true; break; } } } } if ($isTypeCompatible && $hasDownloadableData && $product->hasIsVirtual()) { $product->setTypeId(\Magento\Downloadable\Model\Product\Type::TYPE_DOWNLOADABLE); return; } $proceed($product); }
/** * Initialize data for configurable product * * @param Helper $subject * @param ProductInterface $product * @return ProductInterface * @throws \InvalidArgumentException * * @SuppressWarnings(PHPMD.UnusedFormalParameter) */ public function afterInitialize(Helper $subject, ProductInterface $product) { $attributes = $this->request->getParam('attributes'); $productData = $this->request->getPost('product', []); if ($product->getTypeId() !== ConfigurableProduct::TYPE_CODE || empty($attributes)) { return $product; } $setId = $this->request->getPost('new-variations-attribute-set-id'); if ($setId) { $product->setAttributeSetId($setId); } $extensionAttributes = $product->getExtensionAttributes(); $product->setNewVariationsAttributeSetId($setId); $configurableOptions = []; if (!empty($productData['configurable_attributes_data'])) { $configurableOptions = $this->optionsFactory->create((array) $productData['configurable_attributes_data']); } $extensionAttributes->setConfigurableProductOptions($configurableOptions); $this->setLinkedProducts($product, $extensionAttributes); $product->setCanSaveConfigurableAttributes((bool) $this->request->getPost('affect_configurable_product_attributes')); $product->setExtensionAttributes($extensionAttributes); return $product; }
/** * Prepare product to save * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $product * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $product) { if ($downloadable = $this->request->getPost('downloadable')) { $product->setDownloadableData($downloadable); $extension = $product->getExtensionAttributes(); if (isset($downloadable['link']) && is_array($downloadable['link'])) { $links = []; foreach ($downloadable['link'] as $linkData) { if (!$linkData || isset($linkData['is_delete']) && $linkData['is_delete']) { continue; } else { $links[] = $this->getLinkBuilder()->setData($linkData)->build($this->getLinkFactory()->create()); } } $extension->setDownloadableProductLinks($links); } if (isset($downloadable['sample']) && is_array($downloadable['sample'])) { $samples = []; foreach ($downloadable['sample'] as $sampleData) { if (!$sampleData || isset($sampleData['is_delete']) && (bool) $sampleData['is_delete']) { continue; } else { $samples[] = $this->getSampleBuilder()->setData($sampleData)->build($this->getSampleFactory()->create()); } } $extension->setDownloadableProductSamples($samples); } $product->setExtensionAttributes($extension); if ($product->getLinksPurchasedSeparately()) { $product->setTypeHasRequiredOptions(true)->setRequiredOptions(true); } else { $product->setTypeHasRequiredOptions(false)->setRequiredOptions(false); } } return $product; }
/** * Check if module is enabled * If allow only for customer - redirect to login page * * @param RequestInterface $request * @return \Magento\Framework\App\ResponseInterface * @throws \Magento\Framework\App\Action\NotFoundException */ public function dispatch(RequestInterface $request) { /* @var $helper \Magento\Sendfriend\Helper\Data */ $helper = $this->_objectManager->get('Magento\\Sendfriend\\Helper\\Data'); /* @var $session \Magento\Customer\Model\Session */ $session = $this->_objectManager->get('Magento\\Customer\\Model\\Session'); if (!$helper->isEnabled()) { throw new NotFoundException(); } if (!$helper->isAllowForGuest() && !$session->authenticate($this)) { $this->_actionFlag->set('', self::FLAG_NO_DISPATCH, true); if ($this->getRequest()->getActionName() == 'sendemail') { $session->setBeforeAuthUrl($this->_objectManager->create('Magento\\Framework\\UrlInterface')->getUrl('*/*/send', array('_current' => true))); $this->_objectManager->get('Magento\\Catalog\\Model\\Session')->setSendfriendFormData($request->getPost()); } } return parent::dispatch($request); }
/** * Initialize product before saving * * @param \Magento\Catalog\Model\Product $product * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function initialize(\Magento\Catalog\Model\Product $product) { $productData = $this->request->getPost('product'); unset($productData['custom_attributes']); unset($productData['extension_attributes']); if ($productData) { $stockData = isset($productData['stock_data']) ? $productData['stock_data'] : []; $productData['stock_data'] = $this->stockFilter->filter($stockData); } foreach (['category_ids', 'website_ids'] as $field) { if (!isset($productData[$field])) { $productData[$field] = []; } } $wasLockedMedia = false; if ($product->isLockedAttribute('media')) { $product->unlockAttribute('media'); $wasLockedMedia = true; } $dateFieldFilters = []; $attributes = $product->getAttributes(); foreach ($attributes as $attrKey => $attribute) { if ($attribute->getBackend()->getType() == 'datetime') { if (array_key_exists($attrKey, $productData) && $productData[$attrKey] != '') { $dateFieldFilters[$attrKey] = $this->dateFilter; } } } $inputFilter = new \Zend_Filter_Input($dateFieldFilters, [], $productData); $productData = $inputFilter->getUnescaped(); $product->addData($productData); if ($wasLockedMedia) { $product->lockAttribute('media'); } if ($this->storeManager->hasSingleStore()) { $product->setWebsiteIds([$this->storeManager->getStore(true)->getWebsite()->getId()]); } /** * Check "Use Default Value" checkboxes values */ $useDefaults = $this->request->getPost('use_default'); if ($useDefaults) { foreach ($useDefaults as $attributeCode) { $product->setData($attributeCode, false); } } $links = $this->request->getPost('links'); $links = is_array($links) ? $links : []; $linkTypes = ['related', 'upsell', 'crosssell']; foreach ($linkTypes as $type) { if (isset($links[$type])) { $links[$type] = $this->jsHelper->decodeGridSerializedInput($links[$type]); } } $product = $this->productLinks->initializeLinks($product, $links); $productLinks = $product->getProductLinks(); $linkTypes = ['related' => $product->getRelatedReadonly(), 'upsell' => $product->getUpsellReadonly(), 'crosssell' => $product->getCrosssellReadonly()]; foreach ($linkTypes as $linkType => $readonly) { if (isset($links[$linkType]) && !$readonly) { foreach ($links[$linkType] as $linkId => $linkData) { $linkProduct = $this->productRepository->getById($linkId); $link = $this->productLinkFactory->create(); $link->setSku($product->getSku())->setLinkedProductSku($linkProduct->getSku())->setLinkType($linkType)->setPosition(isset($linkData['position']) ? (int) $linkData['position'] : 0); $productLinks[] = $link; } } } $product->setProductLinks($productLinks); /** * Initialize product options */ if (isset($productData['options']) && !$product->getOptionsReadonly()) { // mark custom options that should to fall back to default value $options = $this->mergeProductOptions($productData['options'], $this->request->getPost('options_use_default')); $customOptions = []; foreach ($options as $customOptionData) { if (!(bool) $customOptionData['is_delete']) { $customOption = $this->customOptionFactory->create(['data' => $customOptionData]); $customOption->setProductSku($product->getSku()); $customOption->setOptionId(null); $customOptions[] = $customOption; } } $product->setOptions($customOptions); } $product->setCanSaveCustomOptions((bool) $this->request->getPost('affect_product_custom_options') && !$product->getOptionsReadonly()); return $product; }
/** * Get Captcha String * * @param \Magento\Framework\App\RequestInterface $request * @param string $formId * @return string */ protected function _getCaptchaString(\Magento\Framework\App\RequestInterface $request, $formId) { $captchaParams = $request->getPost(\Magento\Captcha\Helper\Data::INPUT_NAME_FIELD_VALUE); return isset($captchaParams[$formId]) ? $captchaParams[$formId] : ''; }
/** * Try to load valid order by $_POST or $_COOKIE * * @param App\RequestInterface $request * @param App\ResponseInterface $response * @return bool */ public function loadValidOrder(App\RequestInterface $request, App\ResponseInterface $response) { if ($this->_customerSession->isLoggedIn()) { $response->setRedirect($this->_urlBuilder->getUrl('sales/order/history')); return false; } $post = $request->getPost(); $errors = false; /** @var $order \Magento\Sales\Model\Order */ $order = $this->_orderFactory->create(); if (empty($post) && !$this->_coreCookie->get(self::COOKIE_NAME)) { $response->setRedirect($this->_urlBuilder->getUrl('sales/guest/form')); return false; } elseif (!empty($post) && isset($post['oar_order_id']) && isset($post['oar_type'])) { $type = $post['oar_type']; $incrementId = $post['oar_order_id']; $lastName = $post['oar_billing_lastname']; $email = $post['oar_email']; $zip = $post['oar_zip']; if (empty($incrementId) || empty($lastName) || empty($type) || !in_array($type, array('email', 'zip')) || $type == 'email' && empty($email) || $type == 'zip' && empty($zip)) { $errors = true; } if (!$errors) { $order->loadByIncrementId($incrementId); } $errors = true; if ($order->getId()) { $billingAddress = $order->getBillingAddress(); if (strtolower($lastName) == strtolower($billingAddress->getLastname()) && ($type == 'email' && strtolower($email) == strtolower($billingAddress->getEmail()) || $type == 'zip' && strtolower($zip) == strtolower($billingAddress->getPostcode()))) { $errors = false; } } if (!$errors) { $toCookie = base64_encode($order->getProtectCode() . ':' . $incrementId); $this->_coreCookie->set(self::COOKIE_NAME, $toCookie, self::COOKIE_LIFETIME, self::COOKIE_PATH); } } elseif ($this->_coreCookie->get(self::COOKIE_NAME)) { $fromCookie = $this->_coreCookie->get(self::COOKIE_NAME); $cookieData = explode(':', base64_decode($fromCookie)); $protectCode = isset($cookieData[0]) ? $cookieData[0] : null; $incrementId = isset($cookieData[1]) ? $cookieData[1] : null; $errors = true; if (!empty($protectCode) && !empty($incrementId)) { $order->loadByIncrementId($incrementId); if ($order->getProtectCode() == $protectCode) { $this->_coreCookie->renew(self::COOKIE_NAME, self::COOKIE_LIFETIME, self::COOKIE_PATH); $errors = false; } } } if (!$errors && $order->getId()) { $this->_coreRegistry->register('current_order', $order); return true; } $this->messageManager->addError(__('You entered incorrect data. Please try again.')); $response->setRedirect($this->_urlBuilder->getUrl('sales/guest/form')); return false; }
/** * Performs login, if user submitted login form * * @param \Magento\Framework\App\RequestInterface $request * @return bool */ protected function _performLogin(\Magento\Framework\App\RequestInterface $request) { $outputValue = true; $postLogin = $request->getPost('login'); $username = isset($postLogin['username']) ? $postLogin['username'] : ''; $password = isset($postLogin['password']) ? $postLogin['password'] : ''; $request->setPostValue('login', null); try { $this->_auth->login($username, $password); } catch (AuthenticationException $e) { if (!$request->getParam('messageSent')) { $this->messageManager->addError($e->getMessage()); $request->setParam('messageSent', true); $outputValue = false; } } return $outputValue; }
/** * Initialize product before saving * * @param \Magento\Catalog\Model\Product $product * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) * @SuppressWarnings(PHPMD.ExcessiveMethodLength) */ public function initialize(\Magento\Catalog\Model\Product $product) { $productData = (array) $this->request->getPost('product', []); unset($productData['custom_attributes']); unset($productData['extension_attributes']); if ($productData) { $stockData = isset($productData['stock_data']) ? $productData['stock_data'] : []; $productData['stock_data'] = $this->stockFilter->filter($stockData); } $productData = $this->normalize($productData); if (!empty($productData['is_downloadable'])) { $productData['product_has_weight'] = 0; } foreach (['category_ids', 'website_ids'] as $field) { if (!isset($productData[$field])) { $productData[$field] = []; } } foreach ($productData['website_ids'] as $websiteId => $checkboxValue) { if (!$checkboxValue) { unset($productData['website_ids'][$websiteId]); } } $wasLockedMedia = false; if ($product->isLockedAttribute('media')) { $product->unlockAttribute('media'); $wasLockedMedia = true; } $dateFieldFilters = []; $attributes = $product->getAttributes(); foreach ($attributes as $attrKey => $attribute) { if ($attribute->getBackend()->getType() == 'datetime') { if (array_key_exists($attrKey, $productData) && $productData[$attrKey] != '') { $dateFieldFilters[$attrKey] = $this->dateFilter; } } } $inputFilter = new \Zend_Filter_Input($dateFieldFilters, [], $productData); $productData = $inputFilter->getUnescaped(); $product->addData($productData); if ($wasLockedMedia) { $product->lockAttribute('media'); } if ($this->storeManager->hasSingleStore()) { $product->setWebsiteIds([$this->storeManager->getStore(true)->getWebsite()->getId()]); } /** * Check "Use Default Value" checkboxes values */ $useDefaults = (array) $this->request->getPost('use_default', []); foreach ($useDefaults as $attributeCode => $useDefaultState) { if ($useDefaultState) { $product->setData($attributeCode, null); } } $product = $this->setProductLinks($product); /** * Initialize product options */ if (isset($productData['options']) && !$product->getOptionsReadonly()) { // mark custom options that should to fall back to default value $options = $this->mergeProductOptions($productData['options'], $this->request->getPost('options_use_default')); $customOptions = []; foreach ($options as $customOptionData) { if (empty($customOptionData['is_delete'])) { $customOption = $this->customOptionFactory->create(['data' => $customOptionData]); $customOption->setProductSku($product->getSku()); $customOption->setOptionId(null); $customOptions[] = $customOption; } } $product->setOptions($customOptions); } $product->setCanSaveCustomOptions(!empty($productData['affect_product_custom_options']) && !$product->getOptionsReadonly()); return $product; }
/** * Initialize product before saving * * @param \Magento\Catalog\Model\Product $product * @return \Magento\Catalog\Model\Product */ public function initialize(\Magento\Catalog\Model\Product $product) { $productData = $this->request->getPost('product', []); return $this->initializeFromData($product, $productData); }
/** * Check that request uses https protocol if it should. * Function redirects user to correct URL if needed. * * @param \Magento\Framework\App\RequestInterface $request * @param string $path * @return void */ protected function _checkShouldBeSecure(\Magento\Framework\App\RequestInterface $request, $path = '') { if ($request->getPost()) { return; } if ($this->_shouldBeSecure($path) && !$request->isSecure()) { $url = $this->_getCurrentSecureUrl($request); if ($this->_shouldRedirectToSecure()) { $url = $this->_url->getRedirectUrl($url); } $this->_responseFactory->create()->setRedirect($url)->sendResponse(); exit; } }
/** * Prepare product to save * * @param \Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject * @param \Magento\Catalog\Model\Product $product * * @return \Magento\Catalog\Model\Product * @SuppressWarnings(PHPMD.UnusedFormalParameter) * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function afterInitialize(\Magento\Catalog\Controller\Adminhtml\Product\Initialization\Helper $subject, \Magento\Catalog\Model\Product $product) { if ($downloadable = $this->request->getPost('downloadable')) { $product->setDownloadableData($downloadable); $extension = $product->getExtensionAttributes(); if (isset($downloadable['link']) && is_array($downloadable['link'])) { $links = []; foreach ($downloadable['link'] as $linkData) { if (!$linkData || isset($linkData['is_delete']) && (bool) $linkData['is_delete']) { continue; } else { unset($linkData['link_id']); // TODO: need to implement setLinkFileContent() $link = $this->linkFactory->create(['data' => $linkData]); if (isset($linkData['type'])) { $link->setLinkType($linkData['type']); } if (isset($linkData['file'])) { $link->setLinkFile($linkData['file']); } if (isset($linkData['file_content'])) { $link->setLinkFileContent($linkData['file_content']); } $link->setId(null); if (isset($linkData['sample']['type'])) { $link->setSampleType($linkData['sample']['type']); } if (isset($linkData['sample']['file'])) { $link->setSampleFile($linkData['sample']['file']); } if (isset($linkData['sample']['url'])) { $link->setSampleUrl($linkData['sample']['url']); } if (isset($linkData['sample']['file_content'])) { $link->setSampleFileContent($linkData['file_content']); } $link->setStoreId($product->getStoreId()); $link->setWebsiteId($product->getStore()->getWebsiteId()); $link->setProductWebsiteIds($product->getWebsiteIds()); if (!$link->getSortOrder()) { $link->setSortOrder(1); } if (null === $link->getPrice()) { $link->setPrice(0); } if ($link->getIsUnlimited()) { $link->setNumberOfDownloads(0); } $links[] = $link; } } $extension->setDownloadableProductLinks($links); } if (isset($downloadable['sample']) && is_array($downloadable['sample'])) { $samples = []; foreach ($downloadable['sample'] as $sampleData) { if (!$sampleData || isset($sampleData['is_delete']) && (bool) $sampleData['is_delete']) { continue; } else { unset($sampleData['sample_id']); $sample = $this->sampleFactory->create(['data' => $sampleData]); $sample->setId(null); $sample->setStoreId($product->getStoreId()); if (isset($sampleData['type'])) { $sample->setSampleType($sampleData['type']); } if (isset($sampleData['sample_url'])) { $sample->setSampleUrl($sampleData['sample_url']); } if (!$sample->getSortOrder()) { $sample->setSortOrder(1); } $samples[] = $sample; } } $extension->setDownloadableProductSamples($samples); } $product->setExtensionAttributes($extension); if ($product->getLinksPurchasedSeparately()) { $product->setTypeHasRequiredOptions(true)->setRequiredOptions(true); } else { $product->setTypeHasRequiredOptions(false)->setRequiredOptions(false); } } return $product; }