/** * Tests \Magento\Framework\Object->__construct() */ public function testConstruct() { $object = new \Magento\Framework\Object(); $this->assertEquals([], $object->getData()); $data = ['test' => 'test']; $object = new \Magento\Framework\Object($data); $this->assertEquals($data, $object->getData()); }
/** * Edit category page * * @return void */ public function execute() { $storeId = (int) $this->getRequest()->getParam('store'); $parentId = (int) $this->getRequest()->getParam('parent'); $categoryId = (int) $this->getRequest()->getParam('id'); if ($storeId && !$categoryId && !$parentId) { $store = $this->_objectManager->get('Magento\\Store\\Model\\StoreManagerInterface')->getStore($storeId); $this->getRequest()->setParam('id', (int) $store->getRootCategoryId()); } $category = $this->_initCategory(true); if (!$category) { return; } $this->_title->add($categoryId ? $category->getName() : __('Categories')); /** * Check if we have data in session (if during category save was exception) */ $data = $this->_getSession()->getCategoryData(true); if (isset($data['general'])) { $category->addData($data['general']); } /** * Build response for ajax request */ if ($this->getRequest()->getQuery('isAjax')) { // prepare breadcrumbs of selected category, if any $breadcrumbsPath = $category->getPath(); if (empty($breadcrumbsPath)) { // but if no category, and it is deleted - prepare breadcrumbs from path, saved in session $breadcrumbsPath = $this->_objectManager->get('Magento\\Backend\\Model\\Auth\\Session')->getDeletedPath(true); if (!empty($breadcrumbsPath)) { $breadcrumbsPath = explode('/', $breadcrumbsPath); // no need to get parent breadcrumbs if deleting category level 1 if (count($breadcrumbsPath) <= 1) { $breadcrumbsPath = ''; } else { array_pop($breadcrumbsPath); $breadcrumbsPath = implode('/', $breadcrumbsPath); } } } $this->_view->loadLayout(); $eventResponse = new \Magento\Framework\Object(array('content' => $this->_view->getLayout()->getBlock('category.edit')->getFormHtml() . $this->_view->getLayout()->getBlock('category.tree')->getBreadcrumbsJavascript($breadcrumbsPath, 'editingCategoryBreadcrumbs'), 'messages' => $this->_view->getLayout()->getMessagesBlock()->getGroupedHtml())); $this->_eventManager->dispatch('category_prepare_ajax_response', array('response' => $eventResponse, 'controller' => $this)); $this->getResponse()->setHeader('Content-type', 'application/json', true); $this->getResponse()->representJson($this->_objectManager->get('Magento\\Core\\Helper\\Data')->jsonEncode($eventResponse->getData())); return; } $this->_view->loadLayout(); $this->_setActiveMenu('Magento_Catalog::catalog_categories'); $this->_view->getLayout()->getBlock('head')->setCanLoadExtJs(true)->setContainerCssClass('catalog-categories'); $this->_addBreadcrumb(__('Manage Catalog Categories'), __('Manage Categories')); $block = $this->_view->getLayout()->getBlock('catalog.wysiwyg.js'); if ($block) { $block->setStoreId($storeId); } $this->_view->renderLayout(); }
/** * After save process * * @param \Magento\Framework\Model\AbstractModel $object * @return $this */ protected function _afterSave(\Magento\Framework\Model\AbstractModel $object) { parent::_afterSave($object); $condition = array('option_id = ?' => $object->getId(), 'store_id = ? OR store_id = 0' => $object->getStoreId()); $write = $this->_getWriteAdapter(); $write->delete($this->getTable('catalog_product_bundle_option_value'), $condition); $data = new \Magento\Framework\Object(); $data->setOptionId($object->getId())->setStoreId($object->getStoreId())->setTitle($object->getTitle()); $write->insert($this->getTable('catalog_product_bundle_option_value'), $data->getData()); /** * also saving default value if this store view scope */ if ($object->getStoreId()) { $data->setStoreId(0); $data->setTitle($object->getDefaultTitle()); $write->insert($this->getTable('catalog_product_bundle_option_value'), $data->getData()); } return $this; }
public function testBeforeSave() { $object = new \Magento\Framework\Object([self::ATTRIBUTE_NAME => ['is_in_stock' => 1, 'qty' => 5], 'stock_data' => ['is_in_stock' => 2, 'qty' => 2]]); $stockData = $object->getStockData(); $this->assertEquals(2, $stockData['is_in_stock']); $this->assertEquals(2, $stockData['qty']); $this->assertNotEmpty($object->getData(self::ATTRIBUTE_NAME)); $this->model->beforeSave($object); $stockData = $object->getStockData(); $this->assertEquals(1, $stockData['is_in_stock']); $this->assertEquals(5, $stockData['qty']); $this->assertNull($object->getData(self::ATTRIBUTE_NAME)); }
/** * Check if product can be bought * * @param \Magento\Catalog\Model\Product $product * @return $this * @throws \Magento\Framework\Exception\LocalizedException */ public function checkProductBuyState($product) { parent::checkProductBuyState($product); $option = $product->getCustomOption('info_buyRequest'); if ($option instanceof \Magento\Quote\Model\Quote\Item\Option) { $buyRequest = new \Magento\Framework\Object(unserialize($option->getValue())); if (!$buyRequest->hasLinks()) { if (!$product->getLinksPurchasedSeparately()) { $allLinksIds = $this->_linksFactory->create()->addProductToFilter($product->getId())->getAllIds(); $buyRequest->setLinks($allLinksIds); $product->addCustomOption('info_buyRequest', serialize($buyRequest->getData())); } else { throw new \Magento\Framework\Exception\LocalizedException(__('Please specify product link(s).')); } } } return $this; }
/** * Check for unique values existence * * @param \Magento\Framework\Model\AbstractModel $object * @return $this * @throws AlreadyExistsException * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ protected function _checkUnique(\Magento\Framework\Model\AbstractModel $object) { $existent = []; $fields = $this->getUniqueFields(); if (!empty($fields)) { if (!is_array($fields)) { $this->_uniqueFields = [['field' => $fields, 'title' => $fields]]; } $data = new \Magento\Framework\Object($this->_prepareDataForSave($object)); $select = $this->_getWriteAdapter()->select()->from($this->getMainTable()); foreach ($fields as $unique) { $select->reset(\Zend_Db_Select::WHERE); foreach ((array)$unique['field'] as $field) { $value = $data->getData($field); if ($value === null) { $select->where($field . ' IS NULL'); } else { $select->where($field . '=?', trim($value)); } } if ($object->getId() || $object->getId() === '0') { $select->where($this->getIdFieldName() . '!=?', $object->getId()); } $test = $this->_getWriteAdapter()->fetchRow($select); if ($test) { $existent[] = $unique['title']; } } } if (!empty($existent)) { if (count($existent) == 1) { $error = new \Magento\Framework\Phrase('%1 already exists.', [$existent[0]]); } else { $error = new \Magento\Framework\Phrase('%1 already exist.', [implode(', ', $existent)]); } throw new AlreadyExistsException($error); } return $this; }
/** * Post request to gateway and return response * * @param \Magento\Framework\Object $request * @return \Magento\Framework\Object * @throws \Exception */ protected function _postRequest(\Magento\Framework\Object $request) { $debugData = array('request' => $request->getData()); /** @var \Magento\Framework\HTTP\ZendClient $client */ $client = $this->_httpClientFactory->create(); $result = new \Magento\Framework\Object(); $_config = array('maxredirects' => 5, 'timeout' => 30, 'verifypeer' => $this->getConfigData('verify_peer')); $_isProxy = $this->getConfigData('use_proxy', false); if ($_isProxy) { $_config['proxy'] = $this->getConfigData('proxy_host') . ':' . $this->getConfigData('proxy_port'); //http://proxy.shr.secureserver.net:3128', $_config['httpproxytunnel'] = true; $_config['proxytype'] = CURLPROXY_HTTP; } $client->setUri($this->_getTransactionUrl())->setConfig($_config)->setMethod(\Zend_Http_Client::POST)->setParameterPost($request->getData())->setHeaders('X-VPS-VIT-CLIENT-CERTIFICATION-ID: 33baf5893fc2123d8b191d2d011b7fdc')->setHeaders('X-VPS-Request-ID: ' . $request->getRequestId())->setHeaders('X-VPS-CLIENT-TIMEOUT: ' . $this->_clientTimeout); try { /** * we are sending request to payflow pro without url encoding * so we set up _urlEncodeBody flag to false */ $response = $client->setUrlEncodeBody(false)->request(); } catch (\Exception $e) { $result->setResponseCode(-1)->setResponseReasonCode($e->getCode())->setResponseReasonText($e->getMessage()); $debugData['result'] = $result->getData(); $this->_debug($debugData); throw $e; } $response = strstr($response->getBody(), 'RESULT'); $valArray = explode('&', $response); foreach ($valArray as $val) { $valArray2 = explode('=', $val); $result->setData(strtolower($valArray2[0]), $valArray2[1]); } $result->setResultCode($result->getResult())->setRespmsg($result->getRespmsg()); $debugData['result'] = $result->getData(); $this->_debug($debugData); return $result; }
/** * Dispatch render after event * * @param null|string|array|\Magento\Framework\Object &$html * @return void */ protected function _dispatchRenderGroupedAfterEvent(&$html) { $transport = new \Magento\Framework\Object(array('output' => $html)); $params = array('element_name' => $this->getNameInLayout(), 'layout' => $this->getLayout(), 'transport' => $transport); $this->_eventManager->dispatch('view_message_block_render_grouped_html_after', $params); $html = $transport->getData('output'); }
/** * Return widget XML configuration as \Magento\Framework\Object and makes some data preparations * * @param string $type Widget type * @return \Magento\Framework\Object */ public function getConfigAsObject($type) { $widget = $this->getWidgetByClassType($type); $object = new \Magento\Framework\Object(); if ($widget === null) { return $object; } $widget = $this->_getAsCanonicalArray($widget); // Save all nodes to object data $object->setType($type); $object->setData($widget); // Correct widget parameters and convert its data to objects $params = $object->getData('parameters'); $newParams = array(); if (is_array($params)) { $sortOrder = 0; foreach ($params as $key => $data) { if (is_array($data)) { $data['key'] = $key; $data['sort_order'] = isset($data['sort_order']) ? (int) $data['sort_order'] : $sortOrder; // prepare values (for drop-dawns) specified directly in configuration $values = array(); if (isset($data['values']) && is_array($data['values'])) { foreach ($data['values'] as $value) { if (isset($value['label']) && isset($value['value'])) { $values[] = $value; } } } $data['values'] = $values; // prepare helper block object if (isset($data['helper_block'])) { $helper = new \Magento\Framework\Object(); if (isset($data['helper_block']['data']) && is_array($data['helper_block']['data'])) { $helper->addData($data['helper_block']['data']); } if (isset($data['helper_block']['type'])) { $helper->setType($data['helper_block']['type']); } $data['helper_block'] = $helper; } $newParams[$key] = new \Magento\Framework\Object($data); $sortOrder++; } } } uasort($newParams, array($this, '_sortParameters')); $object->setData('parameters', $newParams); return $object; }
/** * Report action init operations * * @param array|\Magento\Framework\Object $blocks * @return $this */ public function _initReportAction($blocks) { if (!is_array($blocks)) { $blocks = [$blocks]; } $requestData = $this->_objectManager->get('Magento\\Backend\\Helper\\Data')->prepareFilterString($this->getRequest()->getParam('filter')); $inputFilter = new \Zend_Filter_Input(['from' => $this->_dateFilter, 'to' => $this->_dateFilter], [], $requestData); $requestData = $inputFilter->getUnescaped(); $requestData['store_ids'] = $this->getRequest()->getParam('store_ids'); $params = new \Magento\Framework\Object(); foreach ($requestData as $key => $value) { if (!empty($value)) { $params->setData($key, $value); } } foreach ($blocks as $block) { if ($block) { $block->setPeriodType($params->getData('period_type')); $block->setFilterData($params); } } return $this; }
/** * Return Wysiwyg config as \Magento\Framework\Object * * Config options description: * * enabled: Enabled Visual Editor or not * hidden: Show Visual Editor on page load or not * use_container: Wrap Editor contents into div or not * no_display: Hide Editor container or not (related to use_container) * translator: Helper to translate phrases in lib * files_browser_*: Files Browser (media, images) settings * encode_directives: Encode template directives with JS or not * * @param array|\Magento\Framework\Object $data Object constructor params to override default config values * @return \Magento\Framework\Object */ public function getConfig($data = []) { $config = new \Magento\Framework\Object(); $config->setData(['enabled' => $this->isEnabled(), 'hidden' => $this->isHidden(), 'use_container' => false, 'add_variables' => true, 'add_widgets' => true, 'no_display' => false, 'encode_directives' => true, 'directives_url' => $this->_backendUrl->getUrl('cms/wysiwyg/directive'), 'popup_css' => $this->_assetRepo->getUrl('mage/adminhtml/wysiwyg/tiny_mce/themes/advanced/skins/default/dialog.css'), 'content_css' => $this->_assetRepo->getUrl('mage/adminhtml/wysiwyg/tiny_mce/themes/advanced/skins/default/content.css'), 'width' => '100%', 'plugins' => []]); $config->setData('directives_url_quoted', preg_quote($config->getData('directives_url'))); if ($this->_authorization->isAllowed('Magento_Cms::media_gallery')) { $config->addData(['add_images' => true, 'files_browser_window_url' => $this->_backendUrl->getUrl('cms/wysiwyg_images/index'), 'files_browser_window_width' => $this->_windowSize['width'], 'files_browser_window_height' => $this->_windowSize['height']]); } if (is_array($data)) { $config->addData($data); } if ($config->getData('add_variables')) { $settings = $this->_variableConfig->getWysiwygPluginSettings($config); $config->addData($settings); } if ($config->getData('add_widgets')) { $settings = $this->_widgetConfig->getPluginSettings($config); $config->addData($settings); } return $config; }
/** * Saves rewrite history * * @param array $rewriteData * @return $this */ public function saveRewriteHistory($rewriteData) { $rewriteData = new \Magento\Framework\Object($rewriteData); // check if rewrite exists with save request_path $rewrite = $this->getRewriteByRequestPath($rewriteData->getRequestPath(), $rewriteData->getStoreId()); if ($rewrite === false) { // create permanent redirect $this->_getWriteAdapter()->insert($this->getMainTable(), $rewriteData->getData()); } return $this; }
/** * Edit category page * * @return \Magento\Framework\Controller\ResultInterface * @SuppressWarnings(PHPMD.CyclomaticComplexity) * @SuppressWarnings(PHPMD.NPathComplexity) */ public function execute() { $storeId = (int) $this->getRequest()->getParam('store'); $parentId = (int) $this->getRequest()->getParam('parent'); $categoryId = (int) $this->getRequest()->getParam('id'); if ($storeId && !$categoryId && !$parentId) { $store = $this->_objectManager->get('Magento\\Store\\Model\\StoreManagerInterface')->getStore($storeId); $this->getRequest()->setParam('id', (int) $store->getRootCategoryId()); } $category = $this->_initCategory(true); if (!$category) { /** @var \Magento\Backend\Model\View\Result\Redirect $resultRedirect */ $resultRedirect = $this->resultRedirectFactory->create(); return $resultRedirect->setPath('catalog/*/', ['_current' => true, 'id' => null]); } /** * Check if we have data in session (if during category save was exception) */ $data = $this->_getSession()->getCategoryData(true); if (isset($data['general'])) { $category->addData($data['general']); } /** @var \Magento\Backend\Model\View\Result\Page $resultPage */ $resultPage = $this->resultPageFactory->create(); /** * Build response for ajax request */ if ($this->getRequest()->getQuery('isAjax')) { // prepare breadcrumbs of selected category, if any $breadcrumbsPath = $category->getPath(); if (empty($breadcrumbsPath)) { // but if no category, and it is deleted - prepare breadcrumbs from path, saved in session $breadcrumbsPath = $this->_objectManager->get('Magento\\Backend\\Model\\Auth\\Session')->getDeletedPath(true); if (!empty($breadcrumbsPath)) { $breadcrumbsPath = explode('/', $breadcrumbsPath); // no need to get parent breadcrumbs if deleting category level 1 if (count($breadcrumbsPath) <= 1) { $breadcrumbsPath = ''; } else { array_pop($breadcrumbsPath); $breadcrumbsPath = implode('/', $breadcrumbsPath); } } } $eventResponse = new \Magento\Framework\Object(['content' => $resultPage->getLayout()->getBlock('category.edit')->getFormHtml() . $resultPage->getLayout()->getBlock('category.tree')->getBreadcrumbsJavascript($breadcrumbsPath, 'editingCategoryBreadcrumbs'), 'messages' => $resultPage->getLayout()->getMessagesBlock()->getGroupedHtml(), 'toolbar' => $resultPage->getLayout()->getBlock('page.actions.toolbar')->toHtml()]); $this->_eventManager->dispatch('category_prepare_ajax_response', ['response' => $eventResponse, 'controller' => $this]); /** @var \Magento\Framework\Controller\Result\Json $resultJson */ $resultJson = $this->resultJsonFactory->create(); $resultJson->setHeader('Content-type', 'application/json', true); $resultJson->setData($eventResponse->getData()); return $resultJson; } $resultPage->setActiveMenu('Magento_Catalog::catalog_categories'); $resultPage->getConfig()->getTitle()->prepend(__('Categories')); $resultPage->getConfig()->getTitle()->prepend($categoryId ? $category->getName() : __('Categories')); $resultPage->addBreadcrumb(__('Manage Catalog Categories'), __('Manage Categories')); $block = $resultPage->getLayout()->getBlock('catalog.wysiwyg.js'); if ($block) { $block->setStoreId($storeId); } return $resultPage; }
/** * Aggregate * * @param \Magento\Framework\Model\AbstractModel $object * @return void */ public function aggregate($object) { $readAdapter = $this->_getReadAdapter(); $writeAdapter = $this->_getWriteAdapter(); if (!$object->getEntityPkValue() && $object->getId()) { $object->load($object->getReviewId()); } $ratingModel = $this->_ratingFactory->create(); $ratingSummaries = $ratingModel->getEntitySummary($object->getEntityPkValue(), false); foreach ($ratingSummaries as $ratingSummaryObject) { if ($ratingSummaryObject->getCount()) { $ratingSummary = round($ratingSummaryObject->getSum() / $ratingSummaryObject->getCount()); } else { $ratingSummary = $ratingSummaryObject->getSum(); } $reviewsCount = $this->getTotalReviews($object->getEntityPkValue(), true, $ratingSummaryObject->getStoreId()); $select = $readAdapter->select()->from($this->_aggregateTable)->where('entity_pk_value = :pk_value')->where('entity_type = :entity_type')->where('store_id = :store_id'); $bind = [':pk_value' => $object->getEntityPkValue(), ':entity_type' => $object->getEntityId(), ':store_id' => $ratingSummaryObject->getStoreId()]; $oldData = $readAdapter->fetchRow($select, $bind); $data = new \Magento\Framework\Object(); $data->setReviewsCount($reviewsCount)->setEntityPkValue($object->getEntityPkValue())->setEntityType($object->getEntityId())->setRatingSummary($ratingSummary > 0 ? $ratingSummary : 0)->setStoreId($ratingSummaryObject->getStoreId()); $writeAdapter->beginTransaction(); try { if ($oldData['primary_id'] > 0) { $condition = ["{$this->_aggregateTable}.primary_id = ?" => $oldData['primary_id']]; $writeAdapter->update($this->_aggregateTable, $data->getData(), $condition); } else { $writeAdapter->insert($this->_aggregateTable, $data->getData()); } $writeAdapter->commit(); } catch (\Exception $e) { $writeAdapter->rollBack(); } } }
/** * Check for unique values existence * * @param \Magento\Framework\Model\AbstractModel $object * @return $this * @throws ModelException */ protected function _checkUnique(\Magento\Framework\Model\AbstractModel $object) { $existent = array(); $fields = $this->getUniqueFields(); if (!empty($fields)) { if (!is_array($fields)) { $this->_uniqueFields = array(array('field' => $fields, 'title' => $fields)); } $data = new \Magento\Framework\Object($this->_prepareDataForSave($object)); $select = $this->_getWriteAdapter()->select()->from($this->getMainTable()); foreach ($fields as $unique) { $select->reset(\Zend_Db_Select::WHERE); if (is_array($unique['field'])) { foreach ($unique['field'] as $field) { $select->where($field . '=?', trim($data->getData($field))); } } else { $select->where($unique['field'] . '=?', trim($data->getData($unique['field']))); } if ($object->getId() || $object->getId() === '0') { $select->where($this->getIdFieldName() . '!=?', $object->getId()); } $test = $this->_getWriteAdapter()->fetchRow($select); if ($test) { $existent[] = $unique['title']; } } } if (!empty($existent)) { if (count($existent) == 1) { $error = __('%1 already exists.', $existent[0]); } else { $error = __('%1 already exist.', implode(', ', $existent)); } throw new ModelException($error, ModelException::ERROR_CODE_ENTITY_ALREADY_EXISTS); } return $this; }
/** * Load data * * @param bool $printQuery * @param bool $logQuery * @return $this */ public function load($printQuery = false, $logQuery = false) { if ($this->isLoaded()) { return $this; } $this->_beforeLoad(); $this->_renderFilters()->_renderOrders()->_renderLimit(); $this->printLogQuery($printQuery, $logQuery); $data = $this->getData(); $this->resetData(); $stores = $this->_storeCollectionFactory->create()->setWithoutDefaultFilter()->load()->toOptionHash(); $this->_items = array(); foreach ($data as $v) { $storeObject = new \Magento\Framework\Object($v); $storeId = $v['store_id']; $storeName = isset($stores[$storeId]) ? $stores[$storeId] : null; $storeObject->setStoreName($storeName)->setWebsiteId($this->_storeManager->getStore($storeId)->getWebsiteId())->setAvgNormalized($v['avgsale'] * $v['num_orders']); $this->_items[$storeId] = $storeObject; foreach (array_keys($this->_totals) as $key) { $this->_totals[$key] += $storeObject->getData($key); } } if ($this->_totals['num_orders']) { $this->_totals['avgsale'] = $this->_totals['base_lifetime'] / $this->_totals['num_orders']; } $this->_setIsLoaded(); $this->_afterLoad(); return $this; }
/** * Process $buyRequest and sets its options before saving configuration to some product item. * This method is used to attach additional parameters to processed buyRequest. * * $params holds parameters of what operation must be performed: * - 'current_config', \Magento\Framework\Object or array - current buyRequest that configures product in this item, * used to restore currently attached files * - 'files_prefix': string[a-z0-9_] - prefix that was added at frontend to names of file inputs, * so they won't intersect with other submitted options * * @param \Magento\Framework\Object|array $buyRequest * @param \Magento\Framework\Object|array $params * @return \Magento\Framework\Object */ public function addParamsToBuyRequest($buyRequest, $params) { if (is_array($buyRequest)) { $buyRequest = new \Magento\Framework\Object($buyRequest); } if (is_array($params)) { $params = new \Magento\Framework\Object($params); } // Ensure that currentConfig goes as \Magento\Framework\Object - for easier work with it later $currentConfig = $params->getCurrentConfig(); if ($currentConfig) { if (is_array($currentConfig)) { $params->setCurrentConfig(new \Magento\Framework\Object($currentConfig)); } elseif (!$currentConfig instanceof \Magento\Framework\Object) { $params->unsCurrentConfig(); } } /* * Notice that '_processing_params' must always be object to protect processing forged requests * where '_processing_params' comes in $buyRequest as array from user input */ $processingParams = $buyRequest->getData('_processing_params'); if (!$processingParams || !$processingParams instanceof \Magento\Framework\Object) { $processingParams = new \Magento\Framework\Object(); $buyRequest->setData('_processing_params', $processingParams); } $processingParams->addData($params->getData()); return $buyRequest; }